|
发表于 2019-9-7 18:33:30
|
显示全部楼层
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct NUMBER
- {
- char name[20];
- char number[20];
- struct NUMBER *next;
- };
- /* 1. 增加联系人 */
- void add_name(struct NUMBER **x)
- {
- struct NUMBER *team,*p;
- team=(struct NUMBER *) malloc(sizeof(struct NUMBER));
- if(team==NULL)
- {
- printf("申请内存失败\n");
- return;
- }
- else
- {
- if(*x==NULL)
- {
- *x=team;
- team->next=NULL;
- }
- else
- {
- p=*x;
- while(p->next!=NULL) p=p->next;
- p->next=team;
- team->next=NULL;
- }
- }
- printf("请输入名字:");
- scanf("%s",team->name);
- getchar();
- printf("请输入号码:");
- scanf("%s",team->number);
- getchar();
- printf("添加成功.\n");
- }
- /* 2. 查找联系人 */
- void resoule(struct NUMBER **x)
- {
- char a[20];
- struct NUMBER *b;
- printf("请输入想查找姓名:");
- scanf("%s",a);
- getchar();
- b=*x;
- while(1)
- {
- if(b==NULL)
- {
- printf("无该用户信息\n");
- break;
- }
- if(!strcmp(a,b->name))
- {
- printf("查找结果:\n");
- printf("姓名:%s\n",b->name);
- printf("号码:%s\n",b->number);
- break;
- }
- b=b->next;
- }
- }
- /* 3. 修改联系人 */
- void change(struct NUMBER **x)
- {
- char a[20];
- struct NUMBER *b;
- printf("请输入想更改用户:");
- scanf("%s",a);
- getchar();
- b=*x;
- while(1)
- {
- if(b==NULL)
- {
- printf("无该用户信息\n");
- break;
- }
- if(!strcmp(a,b->name))
- {
- printf("请输入新的号码:");
- scanf("%s",b->number);
- getchar();
- printf("修改成功.\n");
- break;
- }
- b=b->next;
- }
- }
- /* 4. 删除联系人 */
- void clear(struct NUMBER **x)
- {
- char a[20],f=0,g=0;
- struct NUMBER *b,*h,*p;
- printf("请输入想删除的用户:");
- scanf("%s",a);
- getchar();
- b=h=p=*x;
- while(1)
- {
- f++;
- if(b==NULL)
- {
- printf("无该用户信息\n");
- break;
- }
- if(!strcmp(a,b->name))
- {
- g++;
- break;
- }
- b=b->next;
- }
- if(g==1)
- {
- if(f==1)
- {
- h=p;
- p=p->next;
- free(h);
- *x=p;
- }
- else
- {
- for(int i=2;i<f;i++)
- {
- p=p->next;
- }
- h=p->next;
- p->next=h->next;
- free(h);
- }
- printf("删除成功.\n");
- }
- }
- /* 5. 显示所有联系人信息 */
- void showinfo(struct NUMBER **x)
- {
- struct NUMBER *p;
- p=*x;
- if(p==NULL)
- {
- printf("联系人列表为空!\n");
- return;
- }
- printf("所有联系人信息:\n");
- do
- {
- printf("姓名:%s\n",p->name);
- printf("号码:%s\n",p->number);
- }while((p=p->next)!=NULL);
- }
- /* 判断输入选项 */
- void (*PANDAUAN(char*x))(struct NUMBER **x)
- {
- switch(*x)
- {
- case '1':return add_name;
- case '2':return resoule;
- case '3':return change;
- case '4':return clear;
- case '5':return showinfo;
- }
- }
- int main()
- {
- struct NUMBER *p=NULL;
- char a;
- printf(" ## 命令集 ##\n");
- printf(" 输入1代表增加联系人\n");
- printf(" 输入2代表查找联系人\n");
- printf(" 输入3代表更改联系人\n");
- printf(" 输入4代表删除联系人\n");
- printf(" 输入5显示所有联系人信息\n");
- printf(" ####################\n\n");
- while(1)
- {
- printf("请输入指令:\n");
- scanf("%c",&a);
- getchar();
- (*PANDAUAN(&a))(&p);
- }
- return 0;
- }
复制代码 |
|