- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <memory.h>
- #define MAX_SIZE 100
- struct student
- {
- char name[15];
- char num[15];
- char addr[15];
- }stu[MAX_SIZE];
- FILE *fp;
- int count;
- int loadfile(); //载入通讯录文件
- void savefile(); //保存所有联系人
- void input(); //添加联系人
- void find(); //查找联系人
- void updata(); //更新联系人
- void deleteall(); //删除所有联系人
- void deletename(); //按姓名删除单个联系人
- void main()
- {
- int i;
- char a;
- char name[15];
- loadfile();
- do{
- system("CLS");
- printf("\\n\\n");
- printf("\\n\\t\\t┏━━━━━━━━━ 主菜单 ━━━━━━━━━┓");
- printf("\\n\\t\\t┃ ┃");
- printf("\\n\\t\\t┃**************** 1-新建联系人 ****************┃");
- printf("\\n\\t\\t┃ ┃");
- printf("\\n\\t\\t┃**************** 2-查找联系人 ****************┃");
- printf("\\n\\t\\t┃ ┃");
- printf("\\n\\t\\t┃**************** 3-更新联系人 ****************┃");
- printf("\\n\\t\\t┃ ┃");
- printf("\\n\\t\\t┃**************** 4-删除所有联系人 ************┃");
- printf("\\n\\t\\t┃ ┃");
- printf("\\n\\t\\t┃**************** 5-删除单个联系人 ************┃");
- printf("\\n\\t\\t┃ ┃");
- printf("\\n\\t\\t┃**************** 6- 退 出 ****************┃");
- printf("\\n\\t\\t┃ ┃");
- printf("\\n\\t\\t┗━━━━━━━━━━━━━━━━━━━━━━━┛");
- printf("\\n\\t\\t 请选择:");
- a=getch();
- switch(a)
- {
- case '1':
- system("CLS");
- input();
- break;
- case '2':
- system("CLS");
- find();
- break;
- case '3':
- system("CLS");
- updata();
- break;
- case '4':
- system("CLS");
- deleteall();
- break;
- case '5':
- system("CLS");
- deletename();
- break;
- case '6':
- printf("6\\n\\t\\t ");
- exit(1);
- break;
- default:
- printf("\\n\\n\\t\\t 错误,请重新输入\\n\\t\\t ");
- getch();
- break;
- }
- }while(a!='6');
- }
- int loadfile()
- {
- if((fp=fopen("address_list.txt","rb"))==NULL) //判断是否已有通讯录
- {
- printf("\\n\\n\\t\\t\\t通讯录未建立\\n");
- if((fp=fopen("address_list.txt","wb"))==NULL)
- printf("\\n\\n\\t\\t\\t通讯录建立失败\\n\\n");
- else
- {
- printf("\\n\\t\\t\\t正在建立新通讯录,请稍等・・・");
- getch();
- printf("\\n\\n\\t\\t\\t通讯录建立成功\\n\\n");
- printf("\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- count=0;
- return count;
- }
- }
- fseek(fp,0,2); //获取通讯录成员数目
- if(ftell(fp)>0)
- {
- rewind(fp);
- for(count=0; !feof(fp)&&fread(&stu[count],sizeof(struct student),1,fp); count++);
- return count;
- }
- else
- {
- count=0;
- return count;
- }
- }
- void savefile()
- {
- int i;
- fp=fopen("address_list.txt","wb");
- for(i=0;i<count;i++)
- {
- fwrite(&stu[i],sizeof(struct student),1,fp);
- }
- fclose(fp);
- }
- void input()
- {
- printf("\\n\\t\\t\\t输入联系人信息\\n");
- printf("\\n\\t\\t\\t**********************\\n");
- printf("\\n\\t\\t\\t姓 名:") ;
- scanf("%s",stu[count].name);
- printf("\\n\\t\\t\\t电话号码:");
- scanf("%s",stu[count].num);
- printf("\\n\\t\\t\\t家庭住址:");
- scanf("%s",stu[count].addr);
- printf("\\n\\t\\t\\t**********************\\n");
- count++;
- savefile();
- printf("\\n\\t\\t\\t是否继续添加联系人?(y/n)");
- if(getch()=='y')
- {
- system("cls");
- input();
- }
- return;
- }
- void find()
- {
- int j;
- char name[15];
- fp=fopen("address_list.txt","rb");
- if(count==0)
- {
- printf("\\n\\n\\n\\t\\t\\t通讯录中没有任何记录,请先添加联系人");
- printf("\\n\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- return;
- }
- printf("\\n\\t\\t\\t输入查找的姓名:"); //按姓名查找
- scanf("%s",name);
- for(j=0;!feof(fp);j++)
- {
- fread(&stu[j],sizeof(struct student),1,fp);
- if(strcmp(name,stu[j].name)==0)
- {
- printf("\\n\\t\\t\\t**********************\\n");
- printf("\\n\\t\\t\\t 姓名:%s\\n",stu[j].name);
- printf("\\n\\t\\t\\t 电话号码:%s\\n",stu[j].num);
- printf("\\n\\t\\t\\t 地址:%s\\n",stu[j].addr);
- printf("\\n\\t\\t\\t**********************\\n");
- fclose(fp);
- printf("\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- return;
- }
- }
- printf("\\n\\t\\t\\t未找到联系人,请重新查找\\n");
- printf("\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- fclose(fp);
- }
- void updata()
- {
- int i;
- char a,name[15];
- fp=fopen("address_list.txt","rb");
- if(count==0)
- {
- printf("\\n\\n\\n\\t\\t\\t通讯录中没有任何记录,请先添加联系人");
- printf("\\n\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- return;
- }
- printf("\\n\\t\\t\\t输入要更新的联系人姓名:");
- scanf("%s",name);
- for(i=0;!feof(fp);i++)
- {
- fread(&stu[i],sizeof(struct student),1,fp);
- if(strcmp(name,stu[i].name)==0)
- {
- printf("\\n\\t\\t\\t你要更新的联系人“%s”的信息如下:",name);
- printf("\\n\\t\\t\\t****************************\\n");
- printf("\\n\\t\\t\\t 姓名:%s\\n",stu[i].name);
- printf("\\n\\t\\t\\t 电话号码:%s\\n",stu[i].num);
- printf("\\n\\t\\t\\t 地址:%s\\n",stu[i].addr);
- printf("\\n\\t\\t\\t****************************\\n");
- printf("\\n\\t\\t\\t是否继续(y/n)");
- if(getch()!='y')
- return;
- system("CLS");
- printf("\\n\\t\\t\\t选择你要更新的选项");
- printf("\\n\\t\\t\\t\\t1- 姓 名 ");
- printf("\\n\\t\\t\\t\\t2-电话号码");
- printf("\\n\\t\\t\\t\\t3- 地 址 ");
- printf("\\n\\t\\t\\t\\t4- 返 回 ");
- printf("\\n\\t\\t\\t请选择:");
- a=getch();
- switch(a)
- {
- case '1':
- printf("1\\n\\t\\t\\t姓 名:");
- scanf("%s",stu[i].name);
- break;
- case '2':
- printf("2\\n\\t\\t\\t电话号码:");
- scanf("%s",stu[i].num);
- break;
- case '3':
- printf("3\\n\\t\\t\\t地址:");
- scanf("%s",stu[i].addr);
- break;
- case '4':
- return;
- break;
- default:
- return;
- break;
- }
- system("cls");
- printf("\\n\\t\\t\\t 您的修改结果为:");
- printf("\\n\\t\\t\\t****************************\\n");
- printf("\\n\\t\\t\\t 姓名:%s\\n",stu[i].name);
- printf("\\n\\t\\t\\t 电话号码:%s\\n",stu[i].num);
- printf("\\n\\t\\t\\t 地址:%s\\n",stu[i].addr);
- printf("\\n\\t\\t\\t****************************\\n");
- printf("\\n\\t\\t\\t 确认修改?(y/n)");
- if(getch()!='y')
- return;
- savefile();
- fclose(fp);
- printf("\\n\\n\\t\\t\\t联系人更新完毕,按任意键返回・・・・・・");
- getch();
- return;
- }
- }
- printf("\\n\\t\\t\\t未找到联系人,请重新查找\\n");
- printf("\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- fclose(fp);
- }
- void deleteall()
- {
- fp=fopen("address_list.txt","rb");
- if(count==0)
- {
- printf("\\n\\n\\n\\t\\t\\t通讯录中没有任何记录,不用再删除");
- printf("\\n\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- return;
- }
- printf("\\n\\n\\t\\t\\t联系人删除后不能恢复\\n\\n\\t\\t\\t是否继续删除所有联系人(y/n): ");
- if(getch()!='y')
- return;
- fp=fopen("address_list.txt","wb");
- count=0;
- savefile();
- printf("\\n\\n\\t\\t\\t已删除通讯录中所有联系人");
- printf("\\n\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- fclose(fp);
- }
- void deletename()
- {
- int i,j;
- char name[15];
- fp=fopen("address_list.txt","rb");
- if(count==0)
- {
- printf("\\n\\n\\n\\t\\t\\t通讯录中没有任何记录,不用再删除");
- printf("\\n\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- return;
- }
- printf("\\n\\t\\t\\t输入要删除的联系人姓名:");
- scanf("%s",name);
- for(i=0;!feof(fp);i++)
- {
- fread(&stu[i],sizeof(struct student),1,fp);
- if(strcmp(name,stu[i].name)==0)
- {
- printf("\\n\\t\\t\\t你要删除的联系人“%s”的信息如下:",name);
- printf("\\n\\t\\t\\t****************************\\n");
- printf("\\n\\t\\t\\t 姓名:%s\\n",stu[i].name);
- printf("\\n\\t\\t\\t 电话号码:%s\\n",stu[i].num);
- printf("\\n\\t\\t\\t 地址:%s\\n",stu[i].addr);
- printf("\\n\\t\\t\\t****************************\\n");
- printf("\\n\\t\\t\\t是否删除(y/n): ");
- if(getch()!='y')
- return;
- for(j=i;j<count-1;j++)
- {
- stu[j]=stu[j+1];
- }
- count--;
- savefile();
- printf("\\n\\n\\t\\t\\t该联系人已经成功删除\\n\\n\\t\\t\\t按任意键继续・・・・・");
- getch();
- return;
- }
- }
- printf("\\n\\t\\t\\t未找到该联系人,请返回重新输入\\n");
- printf("\\n\\t\\t\\t按任意键继续・・・・・・");
- getch();
- }
- //该片段来自于http://www.codesnippet.cn/detail/211120137376.html
来源: http://www.codesnippet.cn/detail/211120137376.html