1、C语言实验报告C语言集中上机实习报告 指导教师 : 纪良浩 姓 名: 梁皓 学 号: 2012211516 班 级: 0401204 时 间: 2013年5月27日 实验题目 通讯录1、实验目的 为综合应用C语言程序设计理论知识、进一步提高自己综合解决问题、协调工作的能力和良好的软件开发习惯,所以设计一个个人通讯录管理系统,拥有对数据的各种操作功能,实现对通讯录的管理,从而巩固C语言程序设计。二、实验内容 1. 通讯录需求分析 2. 通讯录总体设计 3. 通讯录算法设计 4. 通讯录代码编写 5. 程序测试 6. 实验心得体会三、实践过程1.通讯录应实现以下功能:添加:添加通讯录记录显示:显示
2、通讯录记录删除:删除通讯录记录查询:查询通讯录记录修改:修改通讯录记录 保存:将信息保存到文件 2.功能实现分析 首先该程序需要一个主菜单设计如下 添加:可以添加通讯录记录,依次输入姓名、电话号码、通讯地址、邮政编码后,会提示是否继续添加。显示:可以以表格形式输出所有通讯录里的记录删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容查询:可以选择用姓名、电话、地址三种方式查询修改:输入欲修改的那个人的名字后,再依次输入姓名、电话号码、通讯地址、邮政编码即可完成修改保存:输入文件名(带后缀名)后,即可将通讯录信息保存到文件分别将其设计后大概为: 添加: 显示: Y Y N N删除: 查
3、询(以姓名为例): 当然在代码的实现方面我也遇到了很多困难,毕竟这也是有一定难度的,也别是对于我这种很低端的人来说。 首先遇到的困难是程序该如何设计,第一步真的很难迈出。做一件事情首先要有完整计划才能事半功倍,当然写一个程序,一个良好的程序设计是必须的。在这里我去查找了很多资料和C语言教科书。成功的解决了这个问题。 后来再如何判断是否存在此人这一位问题中遇到了瓶颈,后来经过查资料,同学讨论解决了该问题。 做菜单也遇到了一点困难,最后通过XX知道了解到可以用f(;)做菜单在内置break等语句实现菜单功能。修改: 当然在编写代码中业余到了很难4.程序测试1.主菜单显示2.添加功能选择Y继续程序选
4、择N结束添加。3.显示记录4.查询记录(以姓名查询为例)5.删除记录6.修改记录7.保存记录8.退出程序五、实验心得 在这次的C语言上机实验中,我收获颇丰。不仅巩固了以前学习的C语言的知识同时锻炼了自己的动手操作能力和综合解决问题、协调工作的能力和养成了良好的软件开发习惯。6、源代码#include #include /*standard library标准库头文件*/#include typedef struct char name10;/*姓名*/ char num15; /*号码*/ char postcode20; /*邮政编码*/ char adds30; /*地址*/ Person
5、; Person per80; /*定义结构体*/int menu_select() /*菜单函数*/ char c; do system(cls); printf(tt 通讯录 n); /*t 横向跳到下一制表位置*/ printf(n); printf(tt 1. 添加记录 n); printf(tt 2. 显示记录 n); printf(tt 3. 删除记录 n); printf(tt 4. 查询记录 n); printf(tt 5. 修改记录 n); printf(tt 6. 保存记录 n); printf(tt 0. 退出程序 n); printf(n); printf(请您选择 (
6、0-6) :); c=getchar(); while(c6); /* 判断C的大小,如果不是0-6.则循环上一过程*/ return(c-0); int Input(Person per,int n) /*输入功能函数*/ int i=0; char sign,x10; while(sign!=n&sign!=N) printf(t姓名:); scanf(t%s,pern+i.name); printf(t电话号码:); scanf(t%s,pern+i.num); printf(t通讯住址:); scanf(t%s,pern+i.adds); printf(t邮政编码:); scanf(t
7、%s,pern+i.postcode); gets(x); printf(nt是否继续添加?(Y/N); scanf(t%c,&sign); i+; return(n+i); void Display(Person per,int n) /*显示函数*/ int i; printf(-n); /*格式*/ printf(姓名 电话号码 通讯地址 邮政编码n); printf(-n); for(i=1;i1&i%10=0) printf(t-n); printf(t); system(pause); /*等待接收信号,重新运行*/ printf(t-n); printf(-n); system(
8、pause); int Delete_a_record(Person per,int n) /*删除函数*/ char s20; int i=0,j; printf(t请输入想删除记录中的名字:); scanf(%s,s); while(strcmp(peri.name,s)!=0&in) i+; /*查找是否有此人*/if(i=n) printf(t通讯录中没有此人!n); return(n); for(j=i;jn-1;j+) /*利用strcpy函数的功能 删除记录*/ strcpy(perj.name,perj+1.name); strcpy(perj.adds,perj+1.adds
9、); strcpy(perj.postcode,perj+1.postcode); printf(ttt已经成功删除!n); return(n-1); void Query_a_record(Person per,int n) /*查找函数*/ int m; printf(tn请选择查询方式:n); printf(n); printf(t 1-姓名 n); printf(t 2-电话 n); printf(t 3-地址 n); printf(t 4-返回 n); printf(n); printf(请选择(1-4):); scanf(%d,&m); while(m!=1&m!=2&m!=3&m
10、!=4) printf(输入错误,请重新选择:); scanf(%d,&m); if(m=1) /*利用姓名查询*/ char s20; int i=0; printf(t请输入想查询的姓名:); scanf(t%s,s); while(strcmp(peri.name,s)!=0&in) i+; /*查找是否有此人*/ if(i=n) printf(t通讯录中没有此人!n); return ; printf(t电话号码: %sn,peri.num); printf(t通讯地址: %sn,peri.adds); printf(t邮政编码: %sn,peri.postcode); if(m=2)
11、 /*利用电话查询*/ char s20; int i=0; printf(t请输入想查询的电话:); scanf(t%s,s); while(strcmp(peri.num,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return; printf(t此人姓名: %sn,peri.name); printf(t通讯地址: %sn,peri.adds); printf(t邮政编码: %sn,peri.postcode); if(m=3) /*利用地址查询*/ char s20; int i=0; printf(t请输入想查询的地址:); scanf(t%
12、s,s); while(strcmp(peri.adds,s)!=0&in) i+; if(i=n) printf(t通讯录中没有此人!n); return; printf(t此人姓名: %sn,peri.name); printf(t电话号码: %sn,peri.num); printf(t邮政编码: %sn,peri.postcode); void Change(Person per,int n) /*修改记录功能函数*/ char s20; int i=0; printf(t请输入想修改的记录中的名字:); scanf(%s,s); while(strcmp(peri.name,s)!=
13、0&in) i+; if(i=n) scanf(t%s,s); while(strcmp(peri.num,s)!=0&in) i+; /*查找是否有此人*/ if(i=n) printf(t通讯录中没有此人!n); return; printf(t此人姓名: %sn,peri.name); printf(t通讯地址: %sn,peri.adds); printf(t邮政编码: %sn,peri.postcode); if(n=3) char s20; int i=0; printf(t请输入想查询的地址:); scanf(t%s,s); while(strcmp(peri.adds,s)!=
14、0&in) i+; /*查找是否有此人*/ if(i=n) printf(t通讯录中没有此人!n); return; printf(t此人姓名: %sn,peri.name); printf(t电话号码: %sn,peri.num); printf(t邮政编码: %sn,peri.postcode); printf(t请输入想修改的记录中的名字:); scanf(%s,s); while(strcmp(peri.name,s)!=0&in) i+; /*查找是否有此人*/ if(i=n) printf(t通讯录中没有此人!n); return; printf(t姓名:); scanf(t%s,
15、peri.name); printf(t电话号码:); scanf(t%s,peri.num); printf(t通讯住址:); scanf(t%s,peri.adds); printf(t邮政编码:); scanf(t%s,peri.postcode); printf(t修改成功!); void WritetoText(Person per,int n) /*保存功能*/ int i=0; FILE *fp; /*定义文件指针*/ char filename20; /*定义文件名*/ printf(t保存到文件n); printf(t请输入所保存的文件名(需要加上后缀名):); /*输入文件
16、名*/ scanf(t%s,filename); if(fp=fopen(filename,w)=NULL) printf(t无法打开文件n); system(pause); return; fprintf(fp,*通讯录*n); fprintf(fp,姓名 电话号码 通讯地址 邮政编码n); fprintf(fp,-n); while(in) fprintf(fp,%-8st%-13st%-15st%-15sn,peri.name,peri.num,peri.adds,peri.postcode); i+; fprintf(fp,-n); fprintf(fp,*共有%d条记*n,n); f
17、close(fp); /*关闭文件*/ printf(保存成功!n); void main() /*主函数*/ int n=0; for(;) switch(menu_select() case 1: printf(nt添加记录到通讯录n); /*添加记录*/ n=Input(per,n); break; case 2: printf(nttt 通讯录记录表n); /*显示记录*/ Display(per,n); break; case 3: printf(nt从通讯录中删除记录n); n=Delete_a_record(per,n); /*删除记录*/ printf(t); system(p
18、ause); break; case 4: printf(nt在通讯录中查找记录n); Query_a_record(per,n); /*查找记录*/ printf(t); system(pause); break; case 5: printf(nt修改通讯录中的记录n); Change(per,n); /*修改数据*/ printf(t); system(pause); break; case 6: printf(nt保存功能n); WritetoText(per,n); /*保存数据*/ printf(t); system(pause); break; case 0: printf(ntt谢谢使用,再见!n); /*结束程序*/ printf(ntt); system(pause); exit(0); /*无条件的退出程序*/ 7、参考文献谭浩强,C程序设计(第二版),北京:清华大学出版社。陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1