c程序课程设计报告通讯录管理系统.docx
- 文档编号:11579149
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:18
- 大小:198.24KB
c程序课程设计报告通讯录管理系统.docx
《c程序课程设计报告通讯录管理系统.docx》由会员分享,可在线阅读,更多相关《c程序课程设计报告通讯录管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
c程序课程设计报告通讯录管理系统
程序设计基础
课程设计报告书
设计题目通讯录程序设计姓名刘学成
专业班级信管10-01
学号**********指导教师温廷新
成绩____________________
工商管理学院信息管理系
2011年4月
一、引言
为了系统的运用C程序设计方面的知识,考察自身知识结构上的不足,巩固程序设计基础,我做了一个通讯录管理系统。
我觉得它的综合性比较强,不仅能运用到初级设计的顺序,选择,循环等的结构,同时还可以体现c语言的特色,比如说指针、结构体、共用体、文件。
通讯录中涉及到的电话号码是整形数据,而姓名则是字符型的,同时邮箱又是整形和字符型数据的混合使用。
有利于加强对数据类型的掌握。
通讯录要求的基本功能是:
1.数据的录入;2.数据的继续添加;3.数据的修改;4.数据的删除;5.数据的整体浏览;6.数据的查询
(1).其中录入、添加、删除可用数组和文件共同完成,最终将数据储存在磁盘上,而不是内存中。
(2).数据的浏览浏览可用循环和fread函数。
(3).数据的查询用字符串函数中的strcmp
其中大部分功能都是由调用函数实现的,这使得整个系统高度的模块化,有利于系统的维护和后续功能的扩展,同时尽量考虑使用过程中存在的问题并添加相应的提示,使得整个系统非常的智能化;另一方面,运用常见的格式控制和特殊的格式控制使得操作界面简洁明了。
理论上操作界面可以直接切换,但是本程序设计中由于模块化的设计致使操作界面只能够靠循环来实现了,与理论设想相差一步。
二、系统功能和原始数据
(1)原始数据
(2)系统功能
1).新建联系人
2).添加联系人
3).修改信息
4).删除一项或者多项
5).整体浏览
6).利用姓名或者电话号码查找联系人
三、程序总体设计
(1).数据结构
1).整形(包括int和unsigned)
2).字符型
(2).模块划分和层次结构
(3).函数原型清单
1)主函数main()
2)菜单函数menu()
3)数据输入函数enter()
4)数据添加函数add()
5)数据修改函数modify()
6)记录浏览函数browse()
7)数据删除函数deleter()
8)数据查找函数search()
9)库函数scanf()、printf()、getchar()、puts()、exit()
11)处理文件的函数fopen()、fclose()、fread()、sizeof()
12)处理字符串的函数strcmp()
(4)程序总体框架
(5)程序组织
四、功能模块函数设计和调试
1).输入模块
作用:
信息的录入
2)添加模块
作用:
完成系统数据的后续添加
3)数据修改模块
作用:
可对存入记录的姓名、籍贯、联系电话1、联系电话2、邮箱进行修改并保存
4).数据查找模块
作用:
通过姓名或者联系电话1、联系电话2查找其他信息
5)数据删除模块
作用:
通过对文件的操作删除通讯录中的数据
6)数据浏览模块
五、程序清单
#defineN50
#include
#include
structpeople
{charname[20];charaddress[50];charnum1[15];charnum2[15];charmail[20];}peop[N];
voidprintf_face()/*显示选项*/
{printf("\n\t姓名\t\t籍贯\t\t\t电话号码1\t\t电话号码2\t\t邮箱\n");}
voidprintf_one(inti)
{printf("\t%-16s%-24s%-16s\t%-16s\t%s\n",peop[i].name,peop[i].address,peop[i].num1,peop[i].num2,peop[i].mail);}
voidprintf_n(intn)
{intj;
for(j=0;j {if((j! =0)&&(j%10==0)){printf("\n\nPressanykeytocontinue...: ");getchar();puts("\n\n");} printf_one(j); }getchar(); } intload() {FILE*fp; inti; if((fp=fopen("file","rb"))==NULL)/*文件的打开*/ {printf("\nCannotopenfile\n"); exit(0); } for(i=0;! feof(fp);i++) fread(&peop[i],sizeof(structpeople),1,fp);/*数据块的读写*/ fclose(fp); return(i-1);/*返回一个值,间接显示存在的记录*/ } intmodify_data(inti,intn)/*数据修改函数*/ {intc,w1;voidinput(inti);voidmenu(); do {puts("\n修改选项=>\n\n1).姓名2).籍贯3).电话号码14).电话号码25).邮箱6).所有数据7).取消并返回"); printf("请选择? : []\b\b"); scanf("%d",&c); if(c>7||c<1){puts("\n选择错误,请再次选择! ");getchar();} }while(c>7||c<1); do {switch(c) {case1: printf("姓名: ");scanf("%s",peop[i].name);break; case2: printf("籍贯");scanf("%s",peop[i].address);break; case3: printf("电话号码1: ");scanf("%s",peop[i].num1);break; case4: printf("电话号码2: ");scanf("%s",peop[i].num2);break; case5: printf("邮箱: ");scanf("%s",peop[i].mail);break; case6: input(i);break; case7: menu(); } puts("\nNow: \n"); printf_face();printf_one(i); printf("\n确定? \n\n\t1).是2).不,重新修改3).返回不保存[]\b\b"); scanf("%d",&w1); }while(w1==2); return(w1); } voidinput(inti) {printf_face();printf("\t"); scanf("%s\t%s\t%s\t%s\t%s",peop[i].name,peop[i].address,peop[i].num1,peop[i].num2,peop[i].mail);} voidsave(intn)/*文件保存函数*/ {FILE*fp;inti; if((fp=fopen("file","wb"))==NULL) {printf("\n无法打开\n"); exit(0); } for(i=0;i if(peop[i].name[0]! ='\0') if(fwrite(&peop[i],sizeof(structpeople),1,fp)! =1) printf("文件写入错误! \n"); fclose(fp); } voidprintf_back() { intw;voidbrowse();voidmenu(); printf("\n\n\t^_^.*操作成功*.^_^\n\n"); printf("接下来你想干什么? \n\n\t1).浏览所有\t2).返回: []\b\b"); scanf("%d",&w); if(w==1)browse(); elsemenu(); } voidmain() { voidmenu(); menu(); } voidmenu() { intn,w1; voidenter();voidadd();voidmodify();voidbrowse();voiddeleter();voidsearch(); do {puts("\n\n*******************************欢迎进入通讯录管理系统***************************"); puts("\t\t************************菜单**********************"); puts("\t\t*******************1.新建联系人*******************"); puts("\t\t*******************2.添加联系人*******************"); puts("\t\t*******************3.修改*******************"); puts("\t\t*******************4.删除*******************"); puts("\t\t*******************5.浏览*******************"); puts("\t\t*******************6.查找*******************"); puts("\t\t*******************7.退出*******************"); printf("请选择服务种类(1-7): []\b\b");/*向前退两格,光标落到括号中*/ scanf("%d",&n); if(n<1||n>7) {w1=1;getchar();} elsew1=0; }while(w1==1); switch(n) { case1: enter();break; case2: add();break; case3: modify();break; case4: deleter();break; case5: browse();break; case6: search();break; case7: exit(0); } } voidenter()/*数据输入函数*/ {inti,n; printf("想存入多少个记录(0-%d)? : ",N); scanf("%d",&n); printf("请输入数据: \n"); for(i=0;i {printf("\n输入第%d个记录.\n",i+1); input(i); } if(i! =0)save(n); printf_back(); } voidadd()/*数据添加函数*/ {inti,n,k,t; n=load(); printf("想添加多少个联系人(0-%d)? : ",N-n);/*添加的个数与已存在的个数有关*/ scanf("%d",&t);k=n+t; for(i=n;i {printf("\n输入第%d个记录.\n",i-n+1);input(i);}/*输出第i个记录*/ save(k);printf_back();/*存储所有的记录*/ } voidmodify()/*数据修改函数,与modify_data一起使用*/ {structpeoples;inti,n,k,w0=1,w1,w2=0; n=load(); do {k=-1;printf_face();printf_n(n); do {printf("\n\n请输入你想修改的记录的姓名! \n姓名: "); scanf("%s",s.name); for(i=0;i if(strcmp(s.name,peop[i].name)==0){k=i;s=peop[i];} if(k==-1)printf("\n\n没有记录请重新输入! "); }while(k==-1); printf_face();printf_one(k); w1=modify_data(k,n); if(w1==1){printf("\n\t^_^.操作成功.^_^.\n\n是否继续? \n\n\t1).是2).保存返回\t[]\b\b"); scanf("%d",&w0);w2=1;} else {w0=0;if(w2==0)peop[k]=s;} if((w0! =1)&&(w2==1))save(n); }while(w0==1);menu(); } voidbrowse()/*文件浏览函数*/ {intn; n=load(); printf_face();printf_n(n); printf("\t共有%d记录.\n",n); printf("\nPressanykeytoback..."); getchar(); menu(); } voidsearch()/*数据查找函数*/ {intw0,k,i,n,w1,w2;structpeoples;intc;n=load(); do {printf("请选择查找类别: 1).姓名2).电话号码[]\b\b"); scanf("%d",&w1);if(w1<1||w1>2){printf("输入错误! 请重新输入! \n");w2=1;} }while(w2==1); if(w1==1) {do {k=-1; do {printf("\n\n请输入你想查找项的姓名! \n姓名: "); scanf("%s",s.name); for(i=0;i if(strcmp(s.name,peop[i].name)==0){k=i;s=peop[i];} if(k==-1)printf("\n\n没有记录请重新输入! "); }while(k==-1); printf_face();printf_one(k); printf("\n接下来想干什么? \n\t1).继续2).返回菜单[]\b\b"); scanf("%d",&w0); }while(w0==1); menu(); } else {printf("\n\n你想用哪个电话号码查找? \n\t1).电话号码12).电话号码2[]\b\b"); scanf("%d",&c); switch(c) { case1: { printf("请输入电话号码1\n电话号码1: "); scanf("%s",s.num1); for(i=0;i if(strcmp(s.num1,peop[i].num1)==0){k=i;s=peop[i];} elseprintf("\n\n没有记录请重新输入! "); };break; case2: { printf("请输入电话号码2\n电话号码2: "); scanf("%s",s.num2); for(i=0;i if(strcmp(s.num2,peop[i].num1)==0){k=i;s=peop[i];} elseprintf("\n\n没有记录请重新输入! "); };break; } printf_face();printf_one(k); printf("\n接下来你想干什么? \n\t1).继续2).返回菜单[]\b\b"); scanf("%d",&w0); }while(w0==1); menu(); } voiddeleter()/*数据删除函数*/ {structpeoples;inti,n,k,w0,w1; n=load(); do {k=-1;printf_face();printf_n(n); do {printf("\n\n请输入你想删除项的姓名! \n姓名: "); scanf("%s",s.name); for(i=0;i if(strcmp(s.name,peop[i].name)==0){k=i;s=peop[i];} if(k==-1)printf("\n\n没有记录请重新输入! "); }while(k==-1); printf_face();printf_one(k); printf("\n确定? \n\t1).是2).返回[]\b\b"); scanf("%d",&w0); if(w0==1){peop[k].name[0]='\0';save(n);}elsebreak; printf("\n\t^_^.操作成功.^_^.\n"); printf("接下来你想干什么? \n\t1).继续2).返回[]\b\b"); scanf("%d",&w1); }while(w1==1); menu(); } 六、课程设计总结 通过课程设计我更深入的学习了C程序设计,整个知识体系比以前更加完整。 同时又深入的学习了文件,指针,函数等内容,为以后的学习奠定了一定的基础。 在整个设计过程中我深刻的体会到了模块化的程序设计方法的优点。 在一定程度上体验了程序设计的过程。 在整个设计过程中不断出现的问题及解决中,我体会到C语言具有很强的灵活性,运用熟练了可以设计出很好的程序,如果掌握不好的话就会出现很多设计漏洞。 七、参考资料 [1]谭浩强.C程序设计(第三版).北京: 清华大学出版社,2005 [2]刘腾红孙细明.信息系统分析与设计.科学出版社,2003 [3]住群雄.系统分析与设计.电子工业出版社,2003 [4]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c程序课程设计报告 通讯录管理系统 程序 课程设计 报告 通讯录 管理 系统