《C语言课程设计报告(学生通讯录管理系统设计).doc》由会员分享,可在线阅读,更多相关《C语言课程设计报告(学生通讯录管理系统设计).doc(18页珍藏版)》请在三一办公上搜索。
1、课程设计报告(本科)课程:高级语言程序设计学号:1310411031姓名:秦钱军班级:2013级计算机科学与技术教师:冯凤时间:2014年1月计算机科学与技术系设计名称:学生通讯录管理系统设计设计内容、目的与要求:设计内容:设计一个学生通讯录,学生通讯录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通讯录数据类型定义为结构类型。目的与要求: 设计学生通讯录1.主要功能:(1)能建立、修改和增减学生通讯录 (2)能够多种方式进行查询2.要求:界面友好,易于操作,采用文件存储数据。计划与进度安排:12月20日至12月22日:研究题目的要求及所给条件,综合分析实验应该达到
2、的目标,探讨实验需要使用的方法和解决此问题的实际情况,图书馆查阅相关资料,综合比较;12月23日至12月25日:设计解题的方法和具体步骤,并进行分步思考,利用主菜单函数menu()将程序模块化,在进行各个模块的设计和制作方案,绘制实验的流程图,再将各个模块综合,将各个函数运用于主函数中,绘制主函数的流程图,综合运用所有的函数;12月26日至12月31日:查阅书籍,仔细研究书本上的例题,再结合网络资料,结合各方面所得的资料,编写程序,仔细修改程序;1月1日至1月2日:调试程序,运行程序,再次将程序修改;1月3日至1月5日:完善程序,仔细填写课程设计报告,再次认真阅读程序并熟悉程序,为验收做最后的
3、准备。设计过程、步骤(可加页):整个程序主要使用了结构体类型,结构体类型充当了整个程序的骨架,将各个程序段有机巧妙的结合在一起。例如: struct student /声明一个结构体类型 struct student long num; /学号 char name20; /姓名 int banji; /班级 char tel11; /号码 char Email20; /邮箱 int sushe; / 宿舍 struct student *next; / next是指针变量,指向结构体变量 ;整个系统必须有一个主函数,为了尽量提高程序的易修改性,且不至于相互干扰,将每一个功能分成不同的模块,用不
4、同的函数来实现,例如在我写的这个程序中,一共用了9个函数,分别是:主菜单函数 void menu(void);输入函数 struct student *shuru(void);输出单个学生信息函数 void shuchu(struct student *s);输出所有学生信息函数 void findall();按姓名查找函数 void findname();按学号查找函数 void findnum();删除函数 struct student *stushanchu(struct student *stu);排序函数 void paixu();主函数 void main(),这样在整个程序的设计
5、过程中也就一目了然,写起来也相对轻松了不少。下面是摘自源程序的主函数: void main() /*主函数*/ char a; menu(); puts(n您为首次使用本系统,建议您按1开始录入学生信息,); a=getche(); while(a) puts(); switch(a) case0:goto end;break; case 1: puts(n好了,您可以开始向本系统录入学生通讯录信息了:); stu=shuru(); system(cls); menu(); puts(n学生信息录入完毕,请输入你的选择(06):n); break; case 2:findall();puts(
6、n请输入你的选择(06):); break; case 3:findname();puts(n请输入你的选择(06):); break; case 4:findnum();puts(n请输入你的选择(06):); break; case 5:stu=shanchu(stu);puts(n请输入你的选择(06):); break; case 6:paixu();puts(n请输入你的选择(06):); break; default:puts(输错了!按数字1键录入学生信息吧!); break; a=getche(); end:; puts(谢谢您使用本系统,欢迎再次使用!);结果与分析(可以加页
7、): 主界面:按1录入学生通讯录信息:按2查看所有学生信息:按3按姓名查找学生信息:按4按学号查找学生信息:按5删除学生信息:删除后:按6将通讯录信息排序:按0退出: 程序已实现对学生信息的录入、按姓名查询、按学号查询和删减,唯一的不足之处是没能实现对学生信息的修改。设计体会与建议: 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在是生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。具体的各个函数是参照课本上链表那一章的内容的,比如
8、结构体的建立、查找和排序等功能,这些书上都有类似的,例如在第六章中有一个用冒泡法排序的例题,我就是仿照这个模式来对结构体进行排序的。 回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第
9、一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温顾。 在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,
10、那么我怎么能说经受住了考验?谢谢老师的那句话,她说:人力有所不能及,然而,人的精神是不会败倒的。我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。不得不说这是精神的胜利,是永不言败的精神让我的程序重见天日。 我们的课程设计结束了,但是它留给我的印象是不可磨灭的。无论我以后会不会涉及到C语言程序编译的研究,我想,我至少掌握了一种系统的研究方法,我们学习的目的就在于运用,我们运用这种研究方法的时候会很多,我最后要感谢课程设计,它的确教会我很多。附录:#include#include#include#include#include#
11、define NULL 0struct studentlong num;char name20;int banji;char tel11;char Email20;int sushe;struct student *next;struct student *stu;int n;void menu(void) /*主菜单函数*/system(cls);puts(*);puts(* _学生通讯录管理系统_ *);puts(*);puts(* *);puts(* 1=录入学生通讯录信息 *);puts(* 2=列出所有学生通讯录 *);puts(* 3=按姓名查询信息 *);puts(* 4=按学号
12、查询信息 *);puts(* 5=删除学生信息 *);puts(* 6=按学号将通讯录排序 *);puts(* 0=退出 *);puts(* *);puts(* *);puts(* *);puts(*);struct student *shuru(void) /*输入函数*/system(cls);struct student *s1,*s2;n=1;int num;puts(请输入学生个数(提示:个数不能输入0!):);scanf(%d,&num);s1=s2=(struct student *)malloc(sizeof(struct student);puts(*);puts(请输入学号
13、:);scanf(%ld,&s1-num);puts(请输入学生姓名:);scanf(%s,s1-name);puts(请输入班级:);scanf(%d,&s1-banji);puts(请输入电话号码:);scanf(%s,s1-tel);puts(请输入电子邮件:);scanf(%s,s1-Email);puts(请输入学生宿舍号:);scanf(%d,&s1-sushe);stu=s1;while(nnext=s1;s2=s1;s1=(struct student *)malloc(sizeof(struct student);puts(*);puts(请输入学号:);scanf(%ld,
14、&s1-num);puts(请输入学生姓名:);scanf(%s,s1-name);puts(请输入班级:);scanf(%d,&s1-banji);puts(请输入电话号码:);scanf(%s,s1-tel);puts(请输入电子邮件:);scanf(%s,s1-Email);puts(请输入学生宿舍号:);scanf(%d,&s1-sushe);n=n+1;puts(*);s2-next=s1;s2=s1;s2-next=NULL;return(stu);/system(cls);void shuchu(struct student *s) /*输出单个学生信息*/printf(* %-
15、8ld,s-num);printf(%-15s,s-name);printf(%-8d,s-banji);printf(%-15s,s-tel);printf(%-15s,s-Email);printf(%-5d *n,s-sushe);void findall() /*输出所有学生信息*/ system(cls);struct student *s;/if(n=2)/printf(n现在有%d个学生信息,分别是:n,n);/elseprintf(n现在有%d个学生信息,分别是:n,n);puts(_);puts(* 学号 姓名 班级 电话 电子邮件 宿舍 *);s=stu;while(s!=
16、NULL) shuchu(s); s=s-next;puts(_);puts(返回主菜单请按【9】);if(getche()=9) menu();void findname() /*按姓名查找函数*/system(cls);struct student *s;char name20;printf(n请输入你要查询的学生姓名:n);scanf(%s,name);s=stu;while(strcmp(s-name,name)!=0)s=s-next;if(s=NULL)puts(查无此学生姓名!);goto end;elseputs(该学生的信息为:); puts(* 学号 姓名 班级 电话 电子
17、邮件 宿舍 *);shuchu(s);end:;puts(返回主菜单请按【9】);if(getche()=9) menu();void findnum() /*按学号查找函数*/system(cls);struct student *s;puts(请输入你要查询的学生学号:);long i;scanf(%ld,&i);s=stu;while(s-num!=i)s=s-next;if(s=NULL)puts(查无此学生学号!);goto end;elseputs(该学生的信息为:);puts(* 学号 姓名 班级 电话 电子邮件 宿舍 *);shuchu(s);end:;puts(返回主菜单请按
18、【9】);if(getche()=9) menu();struct student *shanchu(struct student*stu) /*删除函数*/system(cls);long num;char s;struct student *s1,*s2;if(stu=NULL)puts(没有任何学生信息。);goto end;puts(请输入你要删除的学生学号:);scanf(%ld,&num);s1=stu;puts(警告:你确定要删除这个学生的信息吗(Y/N)?);scanf(%s,&s);if(s=Y)|(s=y) while(num!=s1-num)&(s1-next!=NULL
19、) s2=s1;s1=s1-next; if(num=s1-num) puts(该学生的信息为:); puts(* 学号 姓名 班级 电话 电子邮件 宿舍 *); shuchu(s1);if(s1=stu) stu=s1-next; else s2-next=s1-next; puts(注意哟,该学生的信息已经删除了!剩下的学生通讯录信息如下:); n=n-1; findall();return(stu);end:;puts(返回主菜单请按【9】);if(getche()=9) menu();void paixu() /*排序函数*/struct student *p, *p1,*p2;int
20、 i,j;int temp; char b20; if(stu=NULL) printf(n学生信息不存在n); goto end; for(i=0;in-1;i+) p1=stu; for(j=0;jnext; if(p1-nump2-num) temp=p1-num;p1-num=p2-num;p2-num=temp; strcpy(b,p1-name);strcpy(p1-name,p2-name);strcpy(p2-name,b); temp=p1-banji;p1-banji=p2-banji;p2-banji=temp; strcpy(b,p1-tel);strcpy(p1-te
21、l,p2-tel);strcpy(p2-tel,b); strcpy(b,p1-Email);strcpy(p1-Email,p2-Email);strcpy(p2-Email,b); temp=p1-sushe;p1-sushe=p2-sushe;p2-sushe=temp; p1=p1-next; p=stu; puts(已按学生学号顺序排序完毕!重新排序如下:); puts(*); puts(* 学号 姓名 班级 电话 电子邮件 宿舍 *);while(p!=NULL)printf(* %-8ld,p-num);printf(%-15s,p-name);printf(%-8d,p-ban
22、ji);printf(%-15s,p-tel);printf(%-15s,p-Email);printf(%-5d *n,p-sushe);p=p-next;end:;puts(返回主菜单请按【9】); if(getche()=9) menu();void main() /*主函数*/char a;menu();puts(n您为首次使用本系统,建议您按1开始录入学生信息,);a=getche();while(a) puts(); switch(a) case0:goto end;break; case 1: puts(n好了,您可以开始向本系统录入学生通讯录信息了:); stu=shuru()
23、; system(cls); menu(); puts(n学生信息录入完毕,请输入你的选择(06):n); break; case 2:findall();puts(n请输入你的选择(06):); break; case 3:findname();puts(n请输入你的选择(06):); break; case 4:findnum();puts(n请输入你的选择(06):); break; case 5:stu=shanchu(stu);puts(n请输入你的选择(06):); break; case 6:paixu();puts(n请输入你的选择(06):); break; default:puts(输错了!按数字1键录入学生信息吧!); break; a=getche(); end:;puts(谢谢您使用本系统,欢迎再次使用!);