标签:题目 think 存储 很多 文件 运行 amp info update
题目:
通讯录(通过链表实现)
设计并实现一个简易的通讯录软件,管理个人通讯记录。一条通讯记录可包括:姓名、工作单位、手机、住宅电话、E-Mail、家庭住址等(可自行增删,但不可过少)。该系统应实现以下基本功能:
(1)增加新的通讯记录。
(2)删除已有的通讯记录。
(3)修改已有的通讯记录。
(4)浏览全部或指定(如指定姓名、工作单位等)的通讯记录。
(5)合理组织排列各项功能,界面可使用键盘操作。
(6)以文件的形式存储数据。
说明:
大一时的c语言课设,用链表实现一个通讯录管理系统,为了美观好看,花了很多时间调整齐度,记录一下大一时的作业。其主要功能是对通讯录可输入,显示,插入,删除,最难是可保存,这个学文件的时候不怎么会。内容我自己弄了7个,名字,性别,工作单位,手机,住宅电话,E-Mail,家庭住址(其他太多其实都是一样的,就懒得加了)。主要运用到对指针中的链表的功能和使用要比较扎实,分部列写就可以了。
实现图片:
附上代码:
1 #include 2 #include string.h>
3 #include 4 typedef struct student
5 {
6 char name[20];//名字
7 char wm[20];//性别
8 char work[100];//工作单位
9 char stel[20];//手机
10 char htel[20];//住宅号码
11 char mail[20];//E-Mail
12 char home[100];//家庭住址
13 struct student *next;
14 }stu;
15 stu *head;//头指针
16 void screen()//主菜单
17 {
18 printf("\n=======================================================\n");
19 printf(" 欢迎来到通讯录管理系统\n\n");
20 printf(" 1.输入数据 2.显示数据\n");
21 printf(" 3.插入数据 4.删除数据\n");
22 printf(" 5.查看数据 6.修改数据\n");
23 printf(" 7.保存数据 8.返回主菜单\n");
24 printf("\n~~~~~~输~~~~~~入~~~~~~9~~~~~~退~~~~~~出~~~~~~程~~~~~~序\n");
25 }
26 void input()//输入数据
27 {
28 int ans;//判断是否继续输入
29 stu *p1,*p2;
30 p1=(stu *)malloc(sizeof(stu));//申请内存来用
31 if(p1!=NULL)
32 {
33 printf("========输入数据========\n");
34 head=p1;
35 while(1)
36 {
37 printf("名字:");
38 scanf("%s",&p1->name);
39 printf("性别:");
40 scanf("%s",&p1->wm);
41 printf("工作单位:");
42 scanf("%s",&p1->work);
43 printf("手机:");
44 scanf("%s",&p1->stel);
45 printf("住宅号码:");
46 scanf("%s",&p1->htel);
47 printf("E-Mail:");
48 scanf("%s",&p1->mail);
49 printf("家庭地址:");
50 scanf("%s",&p1->home);
51 printf("===================================\n");
52 p2=p1;
53 p1=(stu *)malloc(sizeof(stu));//申请下一个要用的空间
54 if(p1!=NULL)
55 p2->next=p1;
56 printf("请选择是否继续输入:1.继续 2.退出\n请选择:");//用户选择
57 scanf("%d",&ans);
58 if(ans==1)//继续
59 continue;
60 else//退出
61 {
62 printf("========输入完毕========\n");
63 p2->next=NULL;
64 free(p1);//将申请的的无用内存释放
65 break;
66 }
67 }
68 }
69 }
70 void look(stu *p1)//显示数据
71 {
72 printf("========显示数据========\n");
73 while(p1!=NULL)
74 {
75 printf("名字:%s\n",p1->name);
76 printf("性别:%s\t",p1->wm);
77 printf("工作单位:%s\t",p1->work);
78 printf("手机:%s\t",p1->stel);
79 printf("住宅号码:%s\t",p1->htel);
80 printf("E-Mail:%s\t",p1->mail);
81 printf("家庭住址:%s\n",p1->home);
82 printf("=====================================\n");
83 p1=p1->next;
84 }
85 printf("========显示完毕========\n");
86 }
87 void insert()//插入数据
88 {
89 int ans;//选择插入位置
90 char name[20];//插入者的名字
91 printf("========插入数据========\n");
92 stu *p1,*p2,*p3;
93 p1=head;
94 p3=(stu *)malloc(sizeof(stu));//申请内存
95 p3->next=NULL;
96 printf("请输入插入者的数据:\n");
97 printf("名字:");
98 scanf("%s",&p3->name);
99 printf("性别:");
100 scanf("%s",&p3->wm);
101 printf("工作单位:");
102 scanf("%s",&p3->work);
103 printf("手机:");
104 scanf("%s",&p3->stel);
105 printf("住宅号码:");
106 scanf("%s",&p3->htel);
107 printf("E-Mail:");
108 scanf("%s",&p3->mail);
109 printf("家庭地址:");
110 scanf("%s",&p3->home);
111 printf("请选择插入位置:1.首位置插入 2.尾部插入 3.插到某人前面\n请选择:");
112 scanf("%d",&ans);
113 switch(ans)
114 {
115 case 1://放到头指针
116 p3->next=p1;
117 head=p3;
118 break;
119 case 2://放到尾部
120 while(p1->next!=NULL)
121 p1=p1->next;
122 p1->next=p3;
123 break;
124 case 3://放到某人前面
125 printf("请输入插到谁前面名字:");
126 scanf("%s",name);
127 while(strcmp(name,p1->name)!=0)
128 {
129 p2=p1;
130 p1=p1->next;
131 }
132 p2->next=p3;
133 p3->next=p1;
134 break;
135 }
136 printf("========插入成功========\n");
137 }
138 void deleted()//删除数据
139 {
140 stu *p1,*p2;
141 char name[20];//删除者名字
142 printf("========删除数据========\n");
143 printf("请输入要删除者的名字:");
144 scanf("%s",name);
145 p1=head;
146 if(head==NULL)//通讯录已经没数据了
147 {
148 printf("通讯录里什么也没有了。\n");
149 printf("========删除失败========\n");
150 return;
151 }
152 if(!strcmp(name,p1->name))//头指针就是要删除的,为什么要单独拿出来,就是为了可以在删除后改变头指针
153 {
154 head=p1->next;
155 printf("========删除成功========\n");
156 return;
157 }
158 while(p1!=NULL&&strcmp(name,p1->name))
159 {
160 p2=p1;
161 p1=p1->next;
162 }
163 if(p1==NULL)//查找完了,没找到
164 {
165 printf("查无此人!!!!\n");
166 printf("========删除失败========\n");
167 return;
168 }
169 if(p1->next!=NULL)//找到了,不是最后一个
170 {
171 p1=p1->next;
172 p2->next=p1;
173 printf("========删除成功========\n");
174 }
175 else//是最后一个
176 {
177 p2->next=NULL;
178 printf("========删除成功========\n");
179 }
180 }
181 void find(stu *p1)//查找数据
182 {
183 char name[20];//查找的名字
184 printf("========查看数据========\n");
185 printf("请输入要查看人的名字:");
186 scanf("%s",name);
187 while(p1!=NULL)
188 {
189 if(!strcmp(name,p1->name))//找到了输出
190 {
191 printf("你要查找人的数据:\n");
192 printf("名字:%s\n",p1->name);
193 printf("性别:%s\t",p1->wm);
194 printf("工作单位:%s\t",p1->work);
195 printf("手机:%s\t",p1->stel);
196 printf("住宅号码:%s\t",p1->htel);
197 printf("E-Mail:%s\t",p1->mail);
198 printf("家庭住址:%s\n",p1->home);
199 break;
200 }
201 p1=p1->next;
202 }
203 if(p1==NULL)//找完了,没找到
204 printf("您要查找的人不存在\n");
205 printf("========结束查找========\n");
206 }
207 void update(stu *p1)//修改数据
208 {
209 int n;//选择的修改内容
210 char name[20];//要修改人的名字
211 printf("========修改数据========\n");
212 printf("请输入要修改人的姓名:");
213 scanf("%s",name);
214 while(p1!=NULL)
215 {
216 if(!strcmp(name,p1->name))//找到了
217 {
218 printf("要修改人的数据为:\n");
219 printf("名字:%s\n",p1->name);
220 printf("性别:%s\t",p1->wm);
221 printf("工作单位:%s\t",p1->work);
222 printf("手机:%s\t",p1->stel);
223 printf("住宅号码:%s\t",p1->htel);
224 printf("E-Mail:%s\t",p1->mail);
225 printf("家庭住址:%s\n",p1->home);
226 printf("请选择要修改的信息:");
227 printf("\t1.名字\t2.性别\t3.工作单位\t4.手机\t5.住宅号码\t6.E-Mail\t7.家庭住址\n\n您的选择是(1~7):");
228 scanf("%d",&n);
229 switch(n)
230 {
231 case 1:
232 printf("名字:");
233 scanf("%s",&p1->name);
234 break;
235 case 2:
236 printf("性别:");
237 scanf("%s",&p1->wm);
238 break;
239 case 3:
240 printf("工作单位:");
241 scanf("%s",&p1->work);
242 break;
243 case 4:
244 printf("手机:");
245 scanf("%s",&p1->stel);
246 break;
247 case 5:
248 printf("住宅号码:");
249 scanf("%s",&p1->htel);
250 break;
251 case 6:
252 printf("E-Mail:");
253 scanf("%s",&p1->mail);
254 break;
255 case 7:
256 printf("家庭住址:");
257 scanf("%s",&p1->home);
258 break;
259 }
260 printf("========修改成功========\n");
261 break;
262 }
263 p1=p1->next;
264 }
265 if(p1==NULL)//找完了,没有找到
266 {
267 printf("没有找到该人信息\n");
268 printf("========修改失败========\n");
269 }
270 }
271 void save(stu *p1)//保存数据
272 {
273 printf("========保存数据========\n");
274 FILE *fp;
275 char file[15];
276 printf("请输入文件名:");
277 scanf("%s",file);
278 if((fp=fopen(file,"w"))==NULL)//打开文件,若没有此文件可以新建立
279 {
280 printf("cannot open this file\n");//无法建立新文件
281 exit(0);//正常运行程序并退出程序
282 }
283 fprintf(fp,"名字\t性别\t工作单位\t手机\t住宅号码\tE-Mail\t家庭住址\n");
284 while(p1!=NULL)
285 {
286 fprintf(fp,"%s\t",p1->name);
287 fprintf(fp,"%s\t",p1->wm);
288 fprintf(fp,"%s\t",p1->work);
289 fprintf(fp,"%s\t",p1->stel);
290 fprintf(fp,"%s\t",p1->htel);
291 fprintf(fp,"%s\t",p1->mail);
292 fprintf(fp,"%s\n",p1->home);
293 p1=p1->next;
294 }
295 printf("========保存成功========\n");
296 fclose(fp);//关闭文件,这个要记得
297 }
298 int main(void)
299 {
300 int n;
301 screen();
302 while(1)
303 {
304 printf("请输入你的选择(1~9):");
305 scanf("%d",&n);
306 if(n1||n>9)
307 {
308 printf("输入有误!");
309 continue;
310 }
311 switch(n)
312 {
313 case 1:
314 input();
315 break;
316 case 2:
317 look(head);
318 break;
319 case 3:
320 insert();
321 break;
322 case 4:
323 deleted();
324 break;
325 case 5:
326 find(head);
327 break;
328 case 6:
329 update(head);
330 break;
331 case 7:
332 save(head);
333 break;
334 case 8:
335 screen();
336 break;
337 case 9:
338 printf("===============欢迎你再次使用通讯录系统===============\n");
339 exit(1);//退出系统
340 break;
341 }
342 }
343 }
———————————————————————————————————————————————————————————————————————
付出
凌晨四点的太阳:
Kobe:Do you know what Los Angeles looks like at four in the morning?
“I don‘t know. What do you think of Los Angeles at four every morning.”
Kobe:Full of stars, few lights, few pedestrians.
c语言实现通讯录管理系统(用链表实现)
标签:题目 think 存储 很多 文件 运行 amp info update
原文地址:https://www.cnblogs.com/zhaohongjie/p/12751232.html