通讯录

来源:互联网 发布:故宫淘宝是什么 编辑:程序博客网 时间:2024/04/25 22:39
#include <stdio.h>#include <string.h>/*实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1.添加联系人信息              2.删除指定联系人信息3.查找指定联系人信息          4.修改指定联系人信息5.显示所有联系人信息          6.清空所有联系人*/ struct friend{char name[10];char sex[3]; int age;char telephone[13];char address[50];};int Count=0;void add_friend(struct friend friends[]);void search_friend(struct friend friends[],char*name);void modify_friend(struct friend friends[],char*name);void delete_friend(struct friend friends[],char*name,int n);int main( ){int choice,n;char name[10];struct friend friends[100];do{printf("手机通讯录功能选项: 1:新建 2:查询 3:修改 4:删除 0:退出\n");printf("请选择功能:");scanf("%d",&choice);switch(choice){case 1:add_friend(friends);break;case 2:printf("请输入要查找的联系人姓名:");scanf("%s",name);search_friend(friends,name);break;case 3:printf("请输入您要修改的联系人的姓名:");  scanf("%s",name);printf("\n");modify_friend(friends,name);break;case 4:printf("1:单个删除 2:全部删除\n\n");printf("请选择您需要的操作:\n");scanf("%d",&n);if(n==1){printf("输入名字\n");scanf("%s",name);  delete_friend(friends,name,n);break;}if(n==2){delete_friend(friends,name,n);break;}case 0:break;}}while(choice!=0);printf("谢谢使用通讯录功能!\n");return 0;}void add_friend(struct friend friends[ ]){struct friend f;if(Count==100){printf("通讯录已满!\n");return;}printf("请输入新的联系人的姓名:");scanf("%s",f.name);printf("请输入新的联系人的性别(m or f):");scanf("%s",f.sex);printf("请输入新联系人的年龄:");scanf("%d",&f.age);printf("请输入新联系人的联系电话:");scanf("%s",f.telephone);printf("请输入新的联系人的地址:");scanf("%s",f.address);friends[Count] = f;Count++;}/*查询联系人*/void search_friend(struct friend friends[],char* name){int i,flag=0;if(Count==0){printf("通讯录是空的!\n");return;}/*在书本源代码的基础上,我修改了一下,让程序可以查询多个相同名字的联系人*/for(i=0;i<Count;i++)if(strcmp(name,friends[i].name)==0){printf("姓名:%s\t",friends[i].name);printf("性别:%s\t",friends[i].sex);printf("年龄:%d\t",friends[i].age);printf("电话:%s\n",friends[i].telephone);printf("地址:%s\t\n",friends[i].address);flag++;}if(flag==0)  printf("无此联系人!\n");}/*修改联系人*/void modify_friend(struct friend friends[],char*name){int k,y=0;int t,j=1,g=0;struct friend x;if(Count==0){printf("通讯录是空的!\n");return;}/*首先,判断要修改的联系人中有没有相同的名字*/for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0)  y++;}/*如果,y等于1,说明只有一个需要修改的联系人*/if(y==1){  for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){printf("请重新输入姓名\n");scanf("%s",x.name);printf("请重新输入性别\n");scanf("%s",x.sex);printf("请重新输入年龄\n");scanf("%d",&x.age);printf("请重新输入电话号码\n");scanf("%s",x.telephone);printf("请重新输入地址\n");scanf("%s",x.address);friends[k]=x;}}}/*如果,y大于1,说明你选择修改的人中,有多个相同名字的联系人*/if(y>1){/*用序号来显示所有需要修改的联系人*/printf("此通讯录有%d个名字相同的联系人.\n",y);for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){printf("%d:姓名:%-10s",j,friends[k].name);printf("%d:性别:%5s",j,friends[k].sex);printf("年龄:%-5d",friends[k].age);printf("电话:%13s\n",friends[k].telephone);printf("地址:%s\n",friends[k].address);j++;}}/*选择需要修改的联系人的序号*/printf("请选择所要修改的联系人序号:\n");scanf("%d",&t);for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){g++;if(g==t){/*如果g等于t,说明在序号中找到了需要修改的人*/printf("请重新输入姓名\n");scanf("%s",x.name);printf("请重新输入性别\n");scanf("%s",x.sex);printf("请重新输入年龄\n");scanf("%d",&x.age);printf("请重新输入电话号码\n");scanf("%s",x.telephone);printf("请重新输入地址\n");scanf("%s",x.address);friends[k]=x;}}}}if(y==0)printf("无此联系人\n");}void delete_friend(struct friend friends[],char*name,int n){int l,h=0,y=0,i,k;int j=1;int a[50],t,g=0;if(Count==0){printf("通讯录是空的!\n");return;}/*如果,n等于1,说明用户选择单个删除*/if(n==1){/*首先,判断在修改的人当中有没有相同名字的*/for(i=0;i<Count;i++){if(strcmp(name,friends[i].name)==0)y++;}/*如果,y等于1,说明你需要修改的人当中只有一个*/if(y==1){for(l=0;l<Count;l++){if(strcmp(name,friends[l].name)==0){do{friends[l]=friends[l+1];l++;}while(l<Count);h++;Count--;printf("删除成功!\n");}}}/*如果,y>1 说明你要修改的人当中有多个相同的名字*/if(y>1){/*用序号来显示所有需要修改的联系人*/printf("有%d个相同的联系人:\n",y);for(l=0;l<Count;l++){if(strcmp(name,friends[l].name)==0){a[l]=l;printf("%d:姓名:%-10s",j,friends[l].name);printf("%d:性别:%5s",j,friends[k].sex);printf("年龄:%-5d",friends[l].age);printf("电话:%13s\n",friends[l].telephone);printf("地址:%8s\n",friends[k].address);j++;h++;}}/*选择需要修改的联系人序号*/printf("请选择所要删除的联系人序号:\n");scanf("%d",&t);for(k=0;k<Count;k++){if(strcmp(name,friends[k].name)==0){g++;if(g==t){/*如果 g等于选择的序号t,就开始删除*/do{friends[k]=friends[k+1];k++;}while(k<Count);}if(g==t)/*这里又使用一个g等于t,表面上看是多余的.其实当在选择的序号超出现有的序号时,起到限制作用*/{printf("删除成功!\n");Count--;}}}if(h==0)printf("没有此联系人\n");if(n==2)     /*如果n等于2,说明用户选择了全部删除*/{Count=0;/*把Count赋0,也就是清空所有联系人*/printf("已全部删除!\n");}    }}}

0 0
原创粉丝点击