《西北工业大学c语言大作业.doc》由会员分享,可在线阅读,更多相关《西北工业大学c语言大作业.doc(32页珍藏版)》请在三一办公上搜索。
1、学 院班 级学 号姓 名目录1 摘要31.1 设计题目31.2 设计内容31.3 开发工具31.4 应用平台32 详细设计32.1 程序结构32.2 主要功能32.3 函数实现32.4 开发日志43 程序调试及运行43.1 程序运行结果43.2 程序使用说明43.3 程序开发总结44 附件(源程序)4/*在后面的文档编写中,请你不要修改各个标题的内容,从而确保报告内容和风格一致。完成全部内容后,你只需要在上面的目录上右键“更新域”,选择“只更新页码”就可以更新正确的目录页码。注意:目录的左边距为6.5厘米。*/1 摘要1.1 设计题目个人电话薄的管理1.2 设计内容通讯录管理系统是典型的管理系
2、统(MIS),其开发主要包括数据库的建立和维护前端应用程序的开发两个方面。对于前者要求建立起数据库一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。经过分析,我们使用MICROSOFT公司的VISUAL,BASIC开发工具,利用其提供的各种面向对象的开发工具,尤其是数据窗口这一能方便而简洁操纵数据库的智能化对象,首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。1.3 开发工具Visual C+ 6.0 Win32 word办公软件1.4 应用平台Windows 2000/XP/Vista 32位2
3、详细设计2.1 程序结构1,总体设计图个人通讯录管理系统信息导入模块信息添加模块信息查询模块信息删除模块信息输出模块信息主序模块2,详细设计设计主界面主界面是一个应用系统的主要操作界面,也是系统的交互式平台,通过printf函数来画一个主界面,实现代码如下:void main() printf(“n-Community Note Management System-n”); printf(“nn”); printf(“ Input-0n”); printf(“ Lode-1n”);printf(“ Display-2n”)printf(“ Find-3n”);printf(“ Modify-4
4、n”)printf(“ Delete-5n”)printf(“ Save-6n”);printf(“ Quit-7n); /*通讯录提示信息;*/printf(“nn”);printf(“Please input number(07);”);用printf函数画出的操作主界面,其返回结果如图:Add( )增加模块建立链表的具体操作就是逐一输入各结点数据,并建立其前后相链的关系。void add()int i;FILE *fp;if(fp=fopen(通讯录.txt,a)=NULL)printf(无法打开文件,按任意键退出!n);char a;scanf(%c,&a);exit(0);int n
5、um;printf(您想要增加几个联系人:n);scanf(%d,&num);struct lianxiren t50;printf(请输入联系人信息n);printf(名字地址年龄电话电子邮箱n);printf(-n);for(i=0;inum;i+)scanf(%s%s%s%s%s,ti.name ,ti.address ,ti.age ,ti.tele ,ti.e_mail );printf(_n);for(i=0;inext,后把next指向p-next。在释放p指针。要完成的是链表的删除操作,只需修改链表中要删除结点的前一个结点的链指针。使之指向被删除结点的后面一个结点即可。 voi
6、d dele(struct lianxiren a,int n)struct lianxiren temp5;char mingzi20;int i,j=0,s=0;printf(输入你要删除人得名字:);scanf(%s,mingzi);printf(n);for(i=0;in;i+)if(strcmp(mingzi,ai.name)!=0)strcpy(tempj.name,ai.name);strcpy(tempj.address,ai.address);strcpy(tempj.age,ai.age);strcpy(tempj.tele,ai.tele);strcpy(tempj.e_
7、mail,ai.e_mail);j+;else s+;printf(你要删除得人得信息是:n);printf(-n);printf(名字地址 年龄 电话邮箱n);printf(-n);printf(%-8s%-10s%-8s%-15s%-20sn,ai.name,ai.address,ai.age,ai.tele,ai.e_mail);FILE *fp;if(fp=fopen(通讯录.txt,w)=NULL)printf(无法打开文件,按任意键退出!n);char a;scanf(%c,&a);exit(0);for(i=0;ij;i+)fprintf(fp,n);fprintf(fp,%s%
8、s%s%s%s,tempi.name,tempi.address,tempi.age,tempi.tele,tempi.e_mail);if(s!=0) printf(*删除成功!*n);else printf(您所要删除的联系人不存在,请核查拼写及大小写n);fclose(fp);print( )输入模块将最终想要保留的数据信息保存于文件中。void print(struct lianxiren t,int n)if(n=0)printf(*文件为空!*n);return;int i;printf(*通讯录*n);printf(名字地址 年龄 电话邮箱n);printf(_n);for(i=
9、0;iname,p-address,p-age,p-tele,p-e_mail);p+;n+;switch(caidan()case 1:add();break;case 2:print(tongxunlu,n);break;case 3:dele(tongxunlu,n);break;case 4:chazhao(tongxunlu,n);break;case 5:exit(0);char caidan()char choose5;printf(n*n);printf( n); printf( 通 讯 录n);printf( _n);printf(1,增 加 联 系 人 信 息 n);pri
10、ntf(2,输 出 所 有 联 系 人 n);printf(3,删 除 联 系 人 n);printf(4,查 找 联 系 人 n);printf(5,退 出 通 讯 了 n); printf(n);printf(*nn);doprintf(请输入您的选择(1-5):);scanf(%s,choose);while(strcmp(choose,1)&strcmp(choose,2)&strcmp(choose,3)&strcmp(choose,4)&strcmp(choose,5);return choose0;2 主要功能能实现通讯录管理系统中增加新记录, 删除记录, 显示通讯录的所有信息,
11、 按名字查询信息, 保存通讯录,退出系统等功能。输入模块实现功能:按顺序将有姓名(name )、地址(address)、年龄(age)、电话(tel)、电子邮箱(E-mail)依次输入,并建立链表将其连接。当输入数据完毕时Enter,输入结束。删除模块实现功能:在已经存储的文件中删除指定的通信录信息,并释放内存空间。删除所有相关通信录信息。查找模块实现功能:在已经存储的文件中查找指定的通信录信息。可以按照查找姓名或方法进行。输出模块实现功能:在输入特定的文件名之后,输出该文件中所包含的全部通信录信息。添加模块实现功能:添加相应信息保存操作,链表中的信息以文件形式被长期。保存。主序模块实现功能:
12、完成系统的界面处理,包括开始界面和主菜单界面。2.3 函数实现主要函数原型char caidan();/菜单void add();/增加联系人函数void print(struct lianxiren a,int);/输入所有联系人void dele(struct lianxiren a,int);/删除联系人void chazhao(struct lianxiren a,int);/查找联系人void chazhao_name(struct lianxiren a,int n);/用名字查找void chazhao_age(struct lianxiren a,int n);/用年龄查找调用
13、到的函数通过switch(表达式)case 常量表达式1:语句1case 常量表达式2:语句2case 常量表达式n:语句n调用六个函数。void add();void print(struct lianxiren a,int);void dele(struct lianxiren a,int);void chazhao(struct lianxiren a,int);void chazhao_name(struct lianxiren a,int n);void chazhao_age(struct lianxiren a,int n);信息录入函数:Dnode *enter() /*信息录
14、入函数*/Dnode *p,*rear; /*定义结点指针*/Char flag=Y;Head=(dnode *)malloc(sizeof(dnode); /*分配头结点内存空间*/Rear=head; /*保存head指针到rear指针中*/Head-next=head;Head-prior=head; /*建立双链表空头结点*/While(flag=Y flag=y) P=(dnode *)malloc(sizeof(dnode); /*分配结点空间*/ Printf(“Please input Name,Street,City,Postcode,Countryn”);/*输入结点各数据
15、域的值*/ Scanf(“%s%s%s%s%s,&p-data.name,&p-data.street,&p-data.city,&p-data.eip,&p-data.state);Rear-next=p;p-prior=rear;rear=p;p-next=head;printf(“-n”);printf(“Continue?(Y/N)n”);scanf(“%s,&flag); /*是否继续输入*/Printf(“n”);Return head; /*返回链表头指针*/信息输出函数Void display(dnode *head) /*信息输出函数 Dnode *p; /*定义结点指针*/
16、 P=head-next; Printf(“List all data:n);Printf(“-n”); /*画出输出样式*/Printf(“ Name Street City Postcode Countryn);Printf(“-n”);While(p!=head) Printf(“ %s %s %s %s %s”,p-data.name,p-data,street,p-data.city,p-data.eip,p-data.state);Printf(“n”);Printf(“-nn”);P=p-next; /*循环变量指向下一个结点*/为验证两个函数的正确性,在这两个函数前增加数据类型
17、的定义,在其后增加main函数,调用这两个函数,代码: #include /*包含头文件*/#include typedef struct tx1char name15;char street30;char city20;char eip20;char state20;dtxl; /*建立通讯录信息结构体*/typedef struct dlnodedtxl data;struct dlnode *prior;struct dlnode *next;dnode; /*定义信息录入函数*/dnode *head;dnode *enter() /*定义信息录入函数*/.void display(d
18、node *dead) /*定义信息输出函数*/.void main()dnode *head() /*定义结点指针并分配空间*/head=(dnode *)malloc(sizeof(dnode);head=enter(); /*调用信息录入函数*/display(head); /*调用信息输出函数输出链表*/信息查询函数Dnode *search(dnode *head) /*信息查询函数*/ Dnode *p; /*定义结点指针*/ Char name9; P=head-next;Scanf(“%s”,name); /*输入查询关键字*/While(p!=head&p&strcmp(p-
19、data.name,name)!=0)p=p-next;Return p; /*返回指针p*/2.4 开发日志程序开发从构思到完成共历时十天左右,基本过程如下:6.146.17 开始基本构思,考虑大体的程序算法,并分段编写、调试部分程序,设计优化界面。6.17-6.18编写主要程序,并且不断调试6.186.20完善演示功能,加入更多的描述性语句和控制语句。完善函数的引用和对函数的注释。6.206.22加入信息添加模块和删除模块,增加程序的可读性与可操作性。623优化演示效果,简化程序,修补程序功能6.24完善源代码,将部分程序从主函数剥离,写进子函数,将程序工程变为多文件工程,增加头文件,使程
20、序更易维护。6.24总体调试检查程序。6.25完成开发报告。3 程序调试及运行3.1 程序运行结果3.2 程序使用说明本程序使用较为简单,只需要按照程序提示做符合要求的操作,就可以完成各种程序具备的功能,若不小心做了错误的操作,在程序允许的范围内可以重新操作,因此要仔细阅读程序说明部分和运行中的相关提示,按要求操作。3.3 程序开发总结通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的
21、,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经
22、过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。 通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方
23、面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。 在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前4 附件(源程序)#include#include#includestruct lianxiren/联系人信息;char name20;char address50;char age5;char tele20;char e_mail30;char caidan
24、();/菜单void add();/增加联系人函数void print(struct lianxiren a,int);/输入所有联系人void dele(struct lianxiren a,int);void chazhao(struct lianxiren a,int);void chazhao_name(struct lianxiren a,int n);void chazhao_age(struct lianxiren a,int n);void main()FILE *fp;if(fp=fopen(通讯录.txt,a)=NULL)printf(无法打开文件,按任意键退出!n);ch
25、ar a;scanf(%c,&a);exit(0);fclose(fp);for(;)int n=0;char ch;struct lianxiren tongxunlu100;struct lianxiren *p;p=tongxunlu;FILE *fp;if(fp=fopen(通讯录.txt,r)=NULL)printf(无法打开文件,按任意键退出!n);char a;scanf(%c,&a);exit(0);elsewhile(ch=fgetc(fp)!=EOF)fscanf(fp,%s%s%s%s%s,p-name,p-address,p-age,p-tele,p-e_mail);p
26、+;n+;switch(caidan()case 1:add();break;case 2:print(tongxunlu,n);break;case 3:dele(tongxunlu,n);break;case 4:chazhao(tongxunlu,n);break;case 5:exit(0);char caidan()char choose5;printf(n*n);printf( n); printf( 通 讯 录n);printf( _n);printf(1,增 加 联 系 人 信 息 n);printf(2,输 出 所 有 联 系 人 n);printf(3,删 除 联 系 人
27、n);printf(4,查 找 联 系 人 n);printf(5,退 出 通 讯 了 n); printf(n);printf(*nn);doprintf(请输入您的选择(1-5):);scanf(%s,choose);while(strcmp(choose,1)&strcmp(choose,2)&strcmp(choose,3)&strcmp(choose,4)&strcmp(choose,5);return choose0;void add()int i;FILE *fp;if(fp=fopen(通讯录.txt,a)=NULL)printf(无法打开文件,按任意键退出!n);char a
28、;scanf(%c,&a);exit(0);int num;printf(您想要增加几个联系人:n);scanf(%d,&num);struct lianxiren t50;printf(请输入联系人信息n);printf(名字地址年龄电话电子邮箱n);printf(-n);for(i=0;inum;i+)scanf(%s%s%s%s%s,ti.name ,ti.address ,ti.age ,ti.tele ,ti.e_mail );printf(_n);for(i=0;inum;i+)fprintf(fp,n);fprintf(fp,%s%s%s%s%s,ti.name ,ti.addr
29、ess ,ti.age ,ti.tele ,ti.e_mail);printf(*已成功添加%d个联系人*n,num);fclose(fp);void dele(struct lianxiren a,int n)struct lianxiren temp5;char mingzi20;int i,j=0,s=0;printf(输入你要删除人得名字:);scanf(%s,mingzi);printf(n);for(i=0;in;i+)if(strcmp(mingzi,ai.name)!=0)strcpy(tempj.name,ai.name);strcpy(tempj.address,ai.ad
30、dress);strcpy(tempj.age,ai.age);strcpy(tempj.tele,ai.tele);strcpy(tempj.e_mail,ai.e_mail);j+;else s+;printf(你要删除得人得信息是:n);printf(-n);printf(名字地址 年龄 电话邮箱n);printf(-n);printf(%-8s%-10s%-8s%-15s%-20sn,ai.name,ai.address,ai.age,ai.tele,ai.e_mail);FILE *fp;if(fp=fopen(通讯录.txt,w)=NULL)printf(无法打开文件,按任意键退出
31、!n);char a;scanf(%c,&a);exit(0);for(i=0;ij;i+)fprintf(fp,n);fprintf(fp,%s%s%s%s%s,tempi.name,tempi.address,tempi.age,tempi.tele,tempi.e_mail);if(s!=0) printf(*删除成功!*n);else printf(您所要删除的联系人不存在,请核查拼写及大小写n);fclose(fp);void print(struct lianxiren t,int n)if(n=0)printf(*文件为空!*n);return;int i;printf(*通讯录*n);printf(名字地址 年龄 电话邮箱n);printf(_n);for(i=0;in;i+)printf(%-8s%-10s%-