c语言实现通讯录管理系统(c课程设计)

工具Visual C++6.0

说明:

       本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计。功能包括增、删、查、改等,非常适合初学者练手。通讯录包括的个人信息有姓名、学号、性别、籍贯、政治面貌、手机号、QQ号、宿舍等。主要用到了指针、结构体、遍历链表、文件读取等知识点。

运行效果

代码

  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<stdlib.h>
  4 #include<windows.h>
  5 typedef struct student     //定义结构体
  6 {
  7     char name[20];    //姓名
  8     char num[15];      //学号
  9     char sex[10];     //性别
 10     char from[20];    //籍贯
 11     char political[10];    //政治面貌
 12     char phone[15];      //手机号
 13     char QQ[15];         //QQ号
 14     char dorm[10];     //宿舍
 15     struct student *next;  //结构体指针
 16 }stu;
 17 stu *head;
 18 
 19 void print()    //主菜单
 20 {
 21     system("cls");
 22     printf("\n\n\n");
 23     printf("      ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n");
 24     printf("      ***********************************************************\n");
 25     printf("      \t\t\t班级通讯录管理系统\n");
 26     printf("\n");
 27     printf("      \t\t1. 输入数据");
 28     printf("\t\t2. 显示数据\n");
 29     printf("      \t\t3. 插入数据");
 30     printf("\t\t4. 删除数据\n");
 31     printf("      \t\t5. 查看数据");
 32     printf("\t\t6. 修改数据\n");
 33     printf("      \t\t7. 保存数据");
 34     printf("\t\t8. 返回主菜单\n");
 35     printf("      ***********************************************************\n");
 36     printf("      ~~~~~退~~~~~~~~~~出~~~~~~~~~~请~~~~~~~~~~按~~~~~~~~~~9~~~~~\n");
 37     printf("      -----------------------------------------------------------\n\n");
 38 }
 39 
 40 
 41 void input(stu *p1)    //输入相关数据
 42 {
 43     printf("姓名:");
 44     scanf("%s",&p1->name);
 45     printf("学号:");
 46     scanf("%s",&p1->num);
 47     printf("性别:");
 48     scanf("%s",&p1->sex);
 49     printf("籍贯:");
 50     scanf("%s",&p1->from);
 51     printf("政治面貌:");
 52     scanf("%s",&p1->political);
 53     printf("手机号:");
 54     scanf("%s",&p1->phone);
 55     printf("QQ号:");
 56     scanf("%s",&p1->QQ);
 57     printf("宿舍:");
 58     scanf("%s",&p1->dorm);
 59 }
 60 
 61 
 62 stu * inputdata()     //数据输入的函数
 63 {
 64     stu *p1,*p2;
 65     int i=1;
 66     p1=(stu *)malloc(sizeof(stu));
 67     if(p1!=NULL)
 68     {
 69         head=p1;
 70         printf("\n\t\t\t☆☆☆输入数据☆☆☆\n");
 71         printf("------------------------------------------------------------------\n");
 72         printf("在姓名处输入“ok”代表输入数据结束\n");
 73         while(i)
 74         {
 75             printf("姓名:");
 76             scanf("%s",&p1->name);
 77             if(strcmp(p1->name,"ok")==0)
 78             {
 79                 printf("\n输入完毕!\n");
 80                 printf("========================================================================\n");
 81                 i=0;
 82                 p2->next=NULL;
 83                 free(p1);
 84                 p1=p2;
 85             }
 86             else
 87             {
 88                 printf("学号:");
 89                 scanf("%s",&p1->num);
 90                 printf("性别:");
 91                 scanf("%s",&p1->sex);
 92                 printf("籍贯:");
 93                  scanf("%s",&p1->from);
 94                 printf("政治面貌:");
 95                 scanf("%s",&p1->political);
 96                 printf("手机号:");
 97                 scanf("%s",&p1->phone);
 98                 printf("QQ号:");
 99                 scanf("%s",&p1->QQ);
100                 printf("宿舍:");
101                 scanf("%s",&p1->dorm);
102                 printf("=====================================\n");
103                 p2=p1;
104                 p1=(stu *)malloc(sizeof(stu));
105                 if(p1!=NULL)
106                 {
107                     p2->next=p1;
108                 }
109             }
110         }
111         return(p1->next);
112     }
113 }
114 
115 
116 stu * lookdata(stu *p1)     //查看数据的函数
117 {
118     printf("\n\t\t\t☆☆☆显示数据☆☆☆\n");
119     printf("----------------------------------------------------------------------\n");
120     while(p1!=NULL)
121     {
122         printf("姓名:%s\n",p1->name);
123         printf("学号:%s\t",p1->num);
124         printf("性别:%s\t",p1->sex);
125         printf("籍贯:%s\t",p1->from);
126         printf("政治面貌:%s\t",p1->political);
127         printf("手机号:%s\t",p1->phone);
128         printf("QQ号:%s\t",p1->QQ);
129         printf("宿舍:%s\n",p1->dorm);
130         printf("======================================================================\n");
131         p1=p1->next;
132     }
133     return p1;
134 }
135 
136 
137 void insert()      //插入数据
138 {
139     int i;
140     char named[20];
141     stu *p1,*p2,*p3;
142     p1=head;
143     p3=(stu *)malloc(sizeof(stu));
144     p3->next=NULL;
145     printf("\n\t\t\t☆☆☆插入数据☆☆☆\n");
146     printf("----------------------------------------------------------------------\n");
147     printf("请输入插入者的资料:\n");
148     input(p3);
149     printf("\n插入选项\n");
150     printf("1.首位置插入\t2.尾位置插入\t3.前插\n");
151     printf("请输入你的选择:");
152     scanf("%d",&i);
153     switch(i)
154     {
155     case 1:p3->next=p1;
156         head=p3;
157         break;
158     case 2:while(p1->next!=NULL)
159            {
160                p2=p1;
161                p1=p1->next;
162            }
163         p1->next=p3;
164         break;
165     case 3:printf("请输入姓名(前插):");
166         scanf("%s",named);
167         while(strcmp(named,p1->name)!=0)
168         {
169             p2=p1;
170             p1=p1->next;
171         }
172         p2->next=p3;
173         p3->next=p1;
174         break;
175     }
176     printf("插入成功!\n");
177     printf("======================================================================\n");
178     return;
179 }
180 
181 void deleted()          //删除数据
182 {
183     stu *p1,*p2;
184     char Name[20];  //想要删除的人的姓名
185     printf("\n\t\t\t☆☆☆删除数据☆☆☆\n");
186     printf("----------------------------------------------------------------------\n");
187     printf("请输入要删除的姓名:");
188     scanf("%s",Name);
189     p1=head;
190     if(head==NULL)
191     {
192     printf("内存空空神马都没有!\n");
193     printf("======================================================================\n");
194     return;
195     }
196     if(strcmp(Name,p1->name)==0)
197     {
198     head=p1->next;
199     printf("删除成功!\n");
200     printf("======================================================================\n");
201     return;
202     }
203     while(p1!=NULL&&(strcmp(Name,p1->name)!=0))
204     {
205     p2=p1;
206     p1=p1->next;
207     }
208     if(p1==NULL)
209     {
210     printf("此人不存在!\n");
211     printf("======================================================================\n");
212     return;
213     }
214     if(p1->next!=NULL)
215     {
216     p1=p1->next;
217     p2->next=p1;
218     printf("删除成功!\n");
219     printf("======================================================================\n");
220     return;
221     }
222     else
223     {
224     p2->next=NULL;
225     printf("删除成功!\n");
226     printf("======================================================================\n");
227     return;
228     }
229 }
230 
231 
232 find(stu *p2)        //通过姓名查找查看数据的函数
233 {
234     char name[20];
235     int b=0;
236     printf("\n\t\t\t☆☆☆查看数据☆☆☆\n");
237     printf("----------------------------------------------------------------------\n");
238     printf("请输入您想查找人的姓名:");
239     scanf("%s",name);
240     while(p2!=NULL)
241     {
242         if(strcmp(name,p2->name)==0)
243         {
244             printf("你要找到的数据\n");
245             printf("姓名:%s\n",p2->name);
246             printf("学号:%s\t",p2->num);
247             printf("性别:%s\t",p2->sex);
248             printf("籍贯:%s\t",p2->from);
249             printf("政治面貌:%s\t",p2->political);
250             printf("手机号:%s\t",p2->phone);
251             printf("QQ号:%s\t",p2->QQ);
252             printf("宿舍:%s\n",p2->dorm);
253             printf("======================================================================\n");
254             b=1;
255         }
256         p2=p2->next;
257     }
258     if(b==0)
259     {
260         printf("\n您要查找的人不存在!\n");
261     }
262 }
263 
264 
265 update(stu *p2)   //通过姓名查找修改数据
266 {
267     char name[20];
268     int b=0,i;
269     printf("\n\t\t\t☆☆☆修改数据☆☆☆\n");
270     printf("----------------------------------------------------------------------\n");
271     printf("请输入将要修改人的姓名:");
272     scanf("%s",name);
273     while(p2!=NULL)
274     {
275         if(strcmp(name,p2->name)==0)
276         {
277             printf("该同学的基本信息\n");
278             printf("姓名:%s\n",p2->name);
279             printf("学号:%s\t",p2->num);
280              printf("性别:%s\t",p2->sex);
281             printf("籍贯:%s\t",p2->from);
282             printf("政治面貌:%s\t",p2->political);
283             printf("手机号:%s\t",p2->phone);
284             printf("QQ号:%s\t",p2->QQ);
285             printf("宿舍:%s\n",p2->dorm);
286             printf("\n请选择要修改的信息\n");
287             printf("\t1.姓名\t2.学号\t3.性别\t4.籍贯\n\t5.政治面貌\t6.手机号\t7.QQ\t8.宿舍\n");
288             printf("\n您的选择是(1~8):");
289             scanf("%d",&i);
290             printf("请输入修改之后的内容\n");
291             switch(i)
292             {
293             case 1:printf("姓名:");
294                 scanf("%s",&p2->name);
295                 break;
296             case 2:printf("学号:");
297                 scanf("%s",&p2->num);
298                 break;
299             case 3:printf("性别:");
300                 scanf("%s",&p2->sex);
301                 break;
302             case 4:printf("籍贯:");
303                 scanf("%s",&p2->from);
304                 break;
305             case 5:printf("政治面貌:");
306                 scanf("%s",&p2->political);
307                 break;
308             case 6:printf("手机号:");
309                 scanf("%s",&p2->phone);
310                 break;
311             case 7:printf("QQ:");
312                 scanf("%s",&p2->QQ);
313                 break;
314             case 8:printf("宿舍:");
315                 scanf("%d",&p2->dorm);
316                 break;
317             }
318             printf("\n修改成功!\n");
319             printf("=========================================================================\n");
320             b=1;
321         }
322         p2=p2->next;
323     }
324     if(b==0)
325     {
326         printf("没有找到该人的资料!\n");
327     }
328 }
329 
330 
331 save(stu *p2)   //保存数据
332 {
333     FILE *fp;
334     char file[15];
335     printf("\n\t\t\t☆☆☆保存数据☆☆☆\n");
336     printf("----------------------------------------------------------------------\n");
337     printf("输入文件名:");
338     scanf("%s",file);
339     if((fp=fopen(file,"w"))==NULL)
340     {
341         printf("cannot open this file\n");
342         exit(0);
343     }
344     fprintf(fp,"姓名\t学号\t性别\t籍贯\t政治面貌\t手机号\tQQ号\t宿舍\n");
345     while(p2!=NULL)
346     {
347         fprintf(fp,"%s\t",p2->name);
348         fprintf(fp,"%s\t",p2->num);
349         fprintf(fp,"%s\t",p2->sex);
350         fprintf(fp,"%s\t",p2->from);
351         fprintf(fp,"%s\t",p2->political);
352         fprintf(fp,"%s\t",p2->phone);
353         fprintf(fp,"%s\t",p2->QQ);
354         fprintf(fp,"%s\n",p2->dorm);
355         p2=p2->next;
356     }
357     printf("\n保存成功!\n");
358     printf("======================================================================\n");
359     fclose(fp);
360 }
361 
362 
363 void screen()  
364 {
365     int i;
366     char s[251]={"欢迎使用由ZM制作班级通讯录管理系统,\n\n\t\t\t本系统用于通讯录管理----排序,打印\n\n\n\t\tWelcome to use produced by ZM class address book\n\n\t\t management system,sorting,printing"};
367     
368     printf("\n================================================================================\n");
369     printf("\n\n\n\t\t\t");
370     for(i=0;s[i]!=NULL;i++)
371     {
372         Sleep(30);
373         printf("%c",s[i]);
374     }
375     printf("\n\n\n\n\n\n\n\n\t\t ~ Hi~ o(* ̄▽ ̄*)ブ~ ~ ~祝您旅途愉快~ ~\n");
376     printf("================================================================================\n");
377 
378 }
379 
380 
381 void main()
382 {
383     int i;
384     system("color 4e");
385     screen();
386     Sleep(3000);
387     print();
388     while(1)
389     {
390         printf("请输入你的选择(1~9):");
391         loop:scanf("%d",&i);
392         if(i<1||i>9)
393         {
394             printf("输入有误,请在1~9中进行选择:");
395             goto loop;
396         }
397         switch(i)
398         {
399         case 1:
400             inputdata();
401             break;
402         case 2:
403             lookdata(head);
404             break;
405         case 3:
406             insert();
407             break;
408         case 4:
409              deleted();
410             break;
411         case 5:
412             find(head);
413             break;
414         case 6:
415             update(head);
416             break;
417         case 7:
418             save(head);
419             break;
420         case 8:
421             print();
422             break;
423         case 9:
424             exit(1);
425             break;
426         }
427     }
428 }

 

posted @ 2018-09-04 19:39  萌面行者  阅读(34528)  评论(4编辑  收藏  举报