1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 typedef struct list{
5 struct list *next;
6 char name[30];//用户名称
7 char addr[50];//地址
8 char num[8];//号码
9 }user;
10
11 void insert(user *h);
12 void edit(user *h);
13 void del(user *h);
14 void S_byName(user *h);
15 void S_byNum(user *h);
16 void display(user *h);
17
18 int main()
19 {
20 int flag;
21 user *head=(user *)malloc(sizeof(user));
22 head->next=NULL;
23 while(1)
24 {
25 printf("电话号码目录系统\n");
26 printf(" 1、添加新电话用户信息\n");
27 printf(" 2、修改电话用户信息\n");
28 printf(" 3、删除已有电话用户信息\n");
29 printf(" 4、根据用户名查询电话信息\n");
30 printf(" 5、根据电话号码查询用户信息\n");
31 printf(" 6、显示全部用户信息\n");
32 printf(" 7、退出\n");
33 printf("请选择:");
34 scanf("%d",&flag);
35 if(flag==1)
36 insert(head);
37 else if(flag==2)
38 edit(head);
39 else if(flag==3)
40 del(head);
41 else if(flag==4)
42 S_byName(head);
43 else if(flag==5)
44 S_byNum(head);
45 else if(flag==6)
46 display(head);
47 else if(flag==7)
48 return 0;
49 else
50 printf("输入有误,请重新选择!\n");
51 }
52 }
53 void insert(user *h)
54 {
55 user *p=(user *)malloc(sizeof(user));
56 p->next=h->next;
57 h->next=p;
58 printf("请输入新增用户名称(最多30个字):");
59 scanf("%s",p->name);
60 printf("请输入新增用户的家庭住址(最多50字):");
61 scanf("%s",p->addr);
62 printf("请输入新增用户的电话号码(8位数):");
63 scanf("%s",p->num);
64 printf("新用户记录成功添加:%s %s %s\n\n",p->name,p->addr,p->num);
65 }
66 void edit(user *h)
67 {
68 char name[30];
69 int flag=0;
70 user *lh=h->next;
71 printf("输入要修改用户的名称:");
72 scanf("%s",name);
73 while(lh)
74 {
75 if(strcmp(name,lh->name)==0)
76 {
77 flag=1;
78 printf("请输入新的名称(30字以内):");
79 scanf("%s",lh->name);
80 printf("请输入新的地址(50字以内):");
81 scanf("%s",lh->addr);
82 printf("请输入新的号码(8位):");
83 scanf("%s",lh->num);
84 printf("用户记录修改成功:%s %s %s\n\n",lh->name,lh->addr,lh->num);
85 break;
86 }
87 lh=lh->next;
88 }
89 if(!flag)
90 printf("不存在这样的用户\n\n");
91 }
92 void S_byName(user *h)
93 {
94 char name[30];
95 int flag=0;
96 user *lh=h->next;
97 printf("输入要查找的用户名称:");
98 scanf("%s",name);
99 while(lh)
100 {
101 if(strcmp(name,lh->name)==0)
102 {
103 flag=1;
104 printf("用户信息为:%s %s %s\n\n",lh->name,lh->addr,lh->num);
105 break;
106 }
107 lh=lh->next;
108 }
109 if(!flag)
110 printf("用户名不存在\n\n");
111 }
112 void S_byNum(user *h)
113 {
114 char num[30];
115 int flag=0;
116 user *lh=h->next;
117 printf("输入要查找的电话号码:");
118 scanf("%s",num);
119 while(lh)
120 {
121 if(strcmp(num,lh->num)==0)
122 {
123 flag=1;
124 printf("用户信息为:%s %s %s\n\n",lh->name,lh->addr,lh->num);
125 break;
126 }
127 lh=lh->next;
128 }
129 if(!flag)
130 printf("找不到匹配的号码\n\n");
131 }
132 void display(user *h)
133 {
134 user *lh=h->next;
135 int i=1;
136 while(lh)
137 {
138 printf("第%d条用户信息:%s %s %s\n",i,lh->name,lh->addr,lh->num);
139 lh=lh->next;
140 i++;
141 }
142 printf("\n");
143 }
144 void del(user *h)
145 {
146 char name[30];
147 int flag=0;
148 user *lh=h;
149 printf("输入要删除的用户名称:");
150 scanf("%s",name);
151 while(lh->next)
152 {
153 if(strcmp(name,lh->next->name)==0)
154 {
155 flag=1;
156 printf("删除用户成功:%s %s %s\n\n",lh->next->name,lh->next->addr,lh->next->num);
157 lh->next=lh->next->next;
158 break;
159 }
160 lh=lh->next;
161 }
162 if(!flag)
163 printf("用户名不存在\n\n");
164 }