C语言通讯录管理系统完整代码

本文实例为大家分享了C语言实现通讯录管理系统的具体代码,供大家参考,具体内容如下

设计内容:

设计一个通讯录管理系统,以实现以下功能:信息添加、查询、修改、删除、排序等功能。

设计要求:

1) 每条信息至包含 :姓名、电话、工作单位等信息
2) 作为一个完整的系统,应具有友好的界面和较强的容错能力

预览:

代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h>  #define LEN sizeof(struct list) #define DATA a[i].num,a[i].name,a[i].job,a[i].address #define FORMAT "\t\t  ||    %-12d %-12s %-19s %-20s ||\n" void in(); void menu(); void search(); void del(); void show(); void modify(); void insert(); void order(); void total(); struct list {     int num;        //号码     char name[15];    //姓名     char job[30];    //工作单位     char address[30];    //地址             }; struct list a[50]; void main() {     system("color 5e\n");     menu();     int n;     scanf("%d", &n);     while (n)     {         switch (n)         {         case 1:in();         break;         case 2:search();     break;         case 3:del();        break;         case 4:modify();    break;         case 5:insert();    break;         case 6:order();        break;         case 7:total();        break;         case 8:show();        break;         default:break;         }         getch();         menu();//执行完后显示菜单          scanf("%d", &n);     } } void menu()     {     system("cls");     printf("\n\n\n");     printf("\t\t\t\t\t**************************************\n");     printf("\t\t\t\t\t************通讯录管理系统************\n");     printf("\t\t\t\t\t======================================\n");     printf("\t\t\t\t\t*          1.录入联系人信息          *\n");     printf("\t\t\t\t\t*          2.查找联系人信息          *\n");     printf("\t\t\t\t\t*          3.删除联系人信息          *\n");     printf("\t\t\t\t\t*          4.修改联系人信息          *\n");     printf("\t\t\t\t\t*          5.插入联系人信息          *\n");     printf("\t\t\t\t\t*          6.排序                    *\n");     printf("\t\t\t\t\t*          7.统计联系人总数          *\n");     printf("\t\t\t\t\t*          8.显示所有联系人          *\n");     printf("\t\t\t\t\t*          0.退出系统                *\n");     printf("\t\t\t\t\t======================================\n");     printf("\t\t\t\t\t**************************************\n");     printf("\t\t\t\t\t          请选择(0-8):"); } void in() {     int i, m = 0;     char ch[2];     FILE* fp;     if ((fp = fopen("data.txt", "a+")) == NULL)     {         printf("\t\t  文件不存在! \n");         return;     }     while (!feof(fp))     {         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     }     fclose(fp);     if (m == 0)     {         printf("\t\t  文件中没有记录!\n");     }     else     {         show();     }     if ((fp = fopen("data.txt", "a+")) == NULL)     {         printf("\t\t  文件不存在!\n");         return;     }     printf("\t\t  是否输入联系人信息(y/n):");     scanf("%s", ch);     while (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)     {         printf("\t\t  电话:");         scanf("%d", &a[m].num);         for (i = 0; i < m; i++)         {             if (a[i].num == a[m].num)             {                 printf("\t\t  此用户已经存在了,按任意键继续!");                 getch();                 fclose(fp);                 return;             }         }         printf("\t\t  姓名:");         scanf("%s", &a[m].name);         printf("\t\t  工作单位:");         scanf("%s", &a[m].job);         printf("\t\t  地址:");         scanf("%s", &a[m].address);         if (fwrite(&a[m], LEN, 1, fp) != 1)         {             printf("\t\t  不能保存");             getch();         }         else         {             printf("\t\t  %s 已被保存!\n", a[m].name);             m++;         }         printf("\t\t  继续?(y/n):");         scanf("%s", ch);     }     fclose(fp);     printf("\t\t  结束录入!\n"); } void del() {     show();     FILE* fp;     int nmb, i, j, m = 0;     int t = 1;        //判断是否正常结束      char ch[2];     if ((fp = fopen("data.txt", "r+")) == NULL)     {         printf("\t\t  \n文件不存在\n");         return;     }     while (!feof(fp))     {         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     }     fclose(fp);     if (m == 0)     {         printf("\t\t  \n文件没有记录!\n");         return;     }     printf("\t\t  输入要删除的联系人的电话号码:");     scanf("%d", &nmb);     for (i = 0; i < m; i++)         if (nmb == a[i].num)         {             printf("\t\t  找到这条记录是否删除(y/n):");             scanf("%s", &ch);             if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)             {                 for (j = i + 1; j < m; j++)                     a[j - 1] = a[j];                 m--;                 if ((fp = fopen("data.txt", "w+")) == NULL)                 {                     printf("\t\t  文件不存在\n");                     return;                 }                 for (j = 0; j < m; j++)                 {                     if (fwrite(&a[j], LEN, 1, fp) != 1)                     {                         printf("\t\t  无法写入文件!删除失败!");                         getch();                     }                 }                 fclose(fp);                 printf("\t\t  删除成功");             }             else             {                 fclose(fp);                 printf("\t\t  找到了记录选择不删除");             }             t = 0;    //标志找到该联系人              break;         }     if (t)         printf("\t\t  没有找到该联系人!\n"); } void modify() {     show();     FILE* fp;     int i = 0, j = 0, m = 0, nmb;     if ((fp = fopen("data.txt", "r+")) == NULL)     {         printf("\t\t  文件不存在\n");         return;     }     while (!feof(fp))         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     if (m == 0)     {         printf("\t\t  文件中没有记录");         fclose(fp);         return;     }     printf("\t\t  请输入要修改的联系人的电话号码:");     scanf("%d", &nmb);     for (i = 0; i < m; i++)         if (nmb == a[i].num)    //检索是否有要相应的联系人         {             printf("\t\t  找到该名联系人,将修改他的信息!\n");             printf("\t\t  电话:");             scanf("%d", &a[i].num);             printf("\t\t  姓名:");             scanf("%s", &a[i].name);             printf("\t\t  工作单位:");             scanf("%s", &a[i].job);             printf("\t\t  住址:");             scanf("%s", &a[i].address);             printf("\t\t  修改成功!");             if ((fp = fopen("data.txt", "w+")) == NULL)             {                 printf("\t\t  不能打开");                 return;             }             for (j = 0; j < m; j++)        //写入新的信息                 if (fwrite(&a[j], LEN, 1, fp) != 1)                 {                     printf("\t\t  不能打开");                     getch();                 }             fclose(fp);             break;         }     if (i == m)         printf("\t\t  没有找到该名联系人"); } void search() {     show();     FILE* fp;     int nmb, i, m = 0;     if ((fp = fopen("data.txt", "r+")) == NULL)     {         fclose(fp);         printf("\n\t\t  文件不存在!\n");         return;     }     while (!feof(fp))     {         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     }     if (m == 0)     {         fclose(fp);         printf("\n\t\t  文件没有记录!\n");         return;     }     printf("\n\t\t  请输入联系人的电话号码!:");     scanf("%d", &nmb);     for (i = 0; i < m; i++)         if (nmb == a[i].num)         {             printf("\t\t        电话         姓名         工作单位            住址                   \n");             printf(FORMAT, DATA);             break;         }     if (i == m)         printf("\t\t  没有找到记录!\n");     fclose(fp); } void show() {     FILE* fp;     int i, m = 0;     if ((fp = fopen("data.txt", "r+")) == NULL)     {         printf("\n\t\t  文件不存在\n");         return;     }     while (!feof(fp))     {         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     }     fclose(fp);     printf("\t\t  ---------------------------------------------------------------------------\n");     printf("\t\t  ||    电话         姓名         工作单位            住址                 ||\n");     for (i = 0; i < m; i++)     {         printf(FORMAT, DATA);     }     printf("\t\t  ---------------------------------------------------------------------------\n"); } void insert() {     show();     FILE* fp;     int i, j, k, m = 0, nmb;     if ((fp = fopen("data.txt", "r+")) == NULL)     {         printf("\t\t  文件不存在! \n");         return;     }     while (!feof(fp))         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     if (m == 0)     {         printf("\t\t  文件中没有记录!\n");         fclose(fp);         return;     }     printf("\t\t  请输入要插入哪个号码的位置之后:");     scanf("%d", &nmb);     for (i = 0; i < m; i++)         if (nmb == a[i].num)             break;     if (m == i)     {         printf("\t\t  没有找到改电话号码");         fclose(fp);         return;     }     for (j = m - 1; j > i; j--)         a[j + 1] = a[j];     printf("\t\t  请输入要插入的通讯录信息:\n");     printf("\t\t  电话:");     scanf("%d", &nmb);     for (k = 0; k < m; k++)         if (a[k].num == nmb)         {             printf("\t\t  电话已经存在,请按任意键继续!");             getch();             fclose(fp);             return;         }     a[i + 1].num = nmb;     printf("\t\t  姓名:");     scanf("%s", &a[i + 1].name);     printf("\t\t  工作:");     scanf("%s", &a[i + 1].job);     printf("\t\t  地址:");     scanf("%s", &a[i + 1].address);     printf("\t\t  插入成功,请输入任意键返回主界面!");     if ((fp = fopen("data.txt", "w+")) == NULL)     {         printf("\t\t  不能打开!");         return;     }     for (k = 0; k <= m; k++)         if (fwrite(&a[k], LEN, 1, fp) != 1)         {             printf("\t\t  不能保存!");             getch();         }     fclose(fp); } void order() {     FILE* fp;     struct list b;     int i = 0, j = 0, m = 0;     printf("\n");     if ((fp = fopen("data.txt", "r+")) == NULL)     {         printf("\t\t  文件不存在\n");         return;     }     while (!feof(fp))         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     fclose(fp);     if (m == 0)     {         printf("\t\t  文件中没有记录\n");         return;     }     for (i = 0; i < m - 1; i++)         for (j = i + 1; j < m; j++)             if (a[i].num < a[j].num)             {                 b = a[i]; a[i] = a[j]; a[j] = b;             }     if ((fp = fopen("data.txt", "w+")) == NULL)     {         printf("\t\t  文件不存在!\n");         return;     }     for (i = 0; i < m; i++)         if (fwrite(&a[i], LEN, 1, fp) != 1)         {             printf("\t\t  不能保存文件!\n");             getch();         }     fclose(fp);     show();     printf("\t\t  保存成功\n"); } void total() {     FILE* fp;     int m = 0;     if ((fp = fopen("data.txt", "r+")) == NULL)     {         printf("\t\t  文件不存在!\n");         return;     }     while (!feof(fp))         if (fread(&a[m], LEN, 1, fp) == 1)             m++;     if (m == 0)     {         printf("\n\t\t  没有联系人!\n");         fclose(fp);         return;     }     fclose(fp);     show();     printf("\t\t  您一共拥有 %d 位联系人", m); }

推荐阅读