C语言的课程设计通讯录系统管理 .doc
目 录目 录2一、课程设计的目的与要求3二、题目说明42.1程序开发背景42.2开发工具介绍4三、总体设计53.1系统结构图:53.2软件流程图:6四、详细说明74.1 系统实施7五、遇到的问题和解决方法10六、课程设计总结11七、参考文献12八附录(源程序代码)13 一、课程设计的目的与要求目的:进一步加深,巩固所学专业课程(C语言程序设计)的基本理论知识,理论联系实际,进一步培养自己综合分析问题的能力,掌握运用C语言独立地编写,调试应用程序和进行其他相关设计的技能。同时也加深自己对C语言程序的运用,更灵活的掌握C语言 。 要求: 1. 要求利用C语言面向过程的编程思想来完成系统的设计; 2. 突出C语言的函数特征,以多个函数实现每一个子功能; 3. 画出功能模块图; 4. 进行简单界面设计,能够实现友好的交互; 5. 具有清晰的程序流程图和数据结构的详细定义; 6. 熟练掌握C语言对文件的各种操作。 二、题目说明:2.1程序开发背景目前因此需要开发一套适合大众的.兼容性好的系统很有必要。本程序是一个通讯录管理系统, 对通讯录进行管理,通讯录的记录包括编号,姓名,年龄,电话,通讯地址,电子邮箱等。输入这些信息,本程序可以记录,保存。通过本程序可以实现对人员的记录,管理,满足用户的需求,提供一个电子化的通讯录管理系统2.2开发工具介绍本系统开发利用Turbo C2.0。Turbo C2.0是在微机上广泛使用的集成环境,它具有清晰,直观,简单易用,功能较强等特点,并把程序的编辑,编译,调试,连接和运行等操作全部集中在一个界面上进行,使用十分方便,灵活。三:总体设计3.1 系统结构图:主菜单添加显示删除查询修改保存图3-1添加:可以添加通讯录记录,依次输入编号,姓名,年龄,电话,通讯地址,电子邮箱后,会提示是否继续添加;显示:可以用表格形式输出所有通讯录里的记录;删除:输入欲删除的那个人的名字后,会自动删除关于他(她)的记录:查询:可以选择用姓名,电话,地址三种方式查询。修改:输入欲修改的那个人名字后,再依次输入编号,姓名,年龄,电话,通讯地址,电子邮箱即可完成修改;保存:输入文件名(带后缀名)后,即可将通讯录信息保存到文件。 3.2 软件流程图Rji开始i=0Sign1=nsign1=n输入信息Return(n=1)结束 图3-2 四详细说明4.1 系统实施 1输入模块: 函数功能:向链表的末尾添加从键盘输入通讯录的记录中的编号,姓名,年龄,电话,通讯地址,电子邮箱后,; 函数参数:结构体指针head,指向通讯录的记录中的编号,姓名,年龄,电话,通讯地址,电子邮箱后,; 图4-1int Appendscore(STU *head,int n,int m) int j; STU *p; char ch; for (p=head+n;p<head+STU_NUM;p+) printf("ninput number:"); /*输入学号*/ scanf("%d",&p->number); printf("input name:"); /*输入姓名*/ scanf("%s",p->name); for (j=0;j<m;j+) printf("input score%d:",j+1); /*输入成绩*/ scanf("%d",p->score+j); n+; printf("Do you want to append a new node(Y/N)?"); scanf("%c",&ch); if(ch='n'|ch='N') return n; 2排序模块:函数功能:用选择法编号,姓名,年龄,电话,通讯地址,电子邮箱后,; 函数参数:结构体指针head,指向编号,姓名,年龄,电话,通讯地址,电子邮箱后,; 图4-2void SortScore(STU *head,int n) int i,j,k; STU temp; for (i=0;i<n-1;i+) k=i; for (j=i;j<n;j+) if (head+j)->average > (head+k)->average) k=j; if (k!=j) temp=*(head+k);*(head+k)=*(head+j);*(head+i)=temp; 3. 查询模块:函数功能编号,姓名,年龄,电话,通讯地址,电子邮箱后,; 图4-3void SearchScore(STU *head,int n,int m) int name,findNo; printf("please input the name you want to search:"); findNo=SearchName(head,name,n) if(findNo=-1 ) printf("nNot found!n"); else printScore(head+findNo,1,m); 五、遇到的问题和解决方法1、 存在的不足:本学生成绩管理系统由六大模块组成,每个模块相互联系又相互独立。这个学生成绩管理系统存在着很多不足之处,由于自己本身编程能力的问题,这个系统可以实现的功能非常有限。只能实现学生管理系统最基本的功能,可以进行简单的输入、输出学生资料,查询和修改学生信息,能直接从文件中读入数据,能对系统所作的修改、操作进行保存等。而且在每个模块也有不足的地方,比如在输入学生资料时,对每个信息项没有严格的规定,可以输入任何的字符。这有待以后努力,更详尽的实现模块的功能。2、 指针数组的使用:就是在插入学生记录模块中,另一个指针数组的定义,之前做的时候没有注意到这点,结果所做的修改不能够保存到文件,之后操作的时候也没有显示所做修改的记录,之后找了资料看了之后才知道,是变量的问题,所以最后作了修改,加了一个另外的指针数组。3、 Clrscr的使用问题:刚开始时对菜单的切换不是很了解,编写的程序运行的时候是一竖行向下的,很影响使用者的视觉范围,通过查询一些资料得知了 clrscr()的作用,能够把一些暂时不用或不相关的信息通过清屏来处理。4、 细节方面其实在有些细节方面还是要特别注意啊,比如分号的添加,<<与>>的方向问题,函数的返回值等问题,虽然容易改掉,但是很容易养成不好的习惯,而且还会浪费时间,所以在一开始写的时候就要很仔细,这样才能保证程序编的精细,同时若出现很多这样的错误的话,在编写程序的时候也会心里烦的,所以在编程的时候要认真仔细。5、 内存的分配问题: 对于初学者的话对内存的分配和释放问题是比较抽象的和模糊的问题,在排序是之前就出现了交换数据困难的问题,以及内存分配空间繁琐释放空间不及时的问题,造成空间的浪费,使得程序运行时效率较低,因此最后采用了顺序存储记录的方式,这就能改变前面所出现的问题。6、 较小的问题方面: 其余的就没什么比较大的问题了,基本上只要细心一点的话就可以正确调试了。六、课程设计总结在经过这几天的的课程设计的学习让我学到了很多知识,让我有很多收获,它锻炼了我的细心,磨砺了我做事情的毅力,让我学会了与别人合作,增加了我与伙伴的感情。虽然为了课程设计整日在忙碌的生活中,但我感觉没一天过得很充实,很愉快。总的来说,这次课程设计,实在是受益匪浅。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,例如编写的程序在计算机上识别的是没有错误的,但是运行的结果确实不对的,不过最后在老师和同学的帮助下也都顺利解决。虽然课程设计只有短短的几天,但是我发现我学到的知识比整整一个学期学到的都多。理论和实践的相结合是学习最有效的方法。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。回顾起此次课程设计,我感慨颇多,的确,从拿到题目到完成整个编程,从理论到实践,在整整几天的日子里,可以学到很多很多的的东西,不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。而且在这个学生管理系统程序中,我对计算机C语言有了更深刻的认识,对很多的以前有些陌生的语言能够了解和掌握。其中的许多函数在我的脑海中留下了很深的印象,这次的课程设计同时也帮助我们再一次复习了我们的计算机C语言,巩固了我们的知识 。通过这次课程设计也使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为 实践服务,从而提高自己的实际动手能力和独立思考的能力。七、参考文献1C语言程序设计学习指导与实验教程 高禹 冯湘忠等主编,中国农业大学出版社 2.实用C语言程序设计教程 陈建铎等主编,中国水利水电出版社 3. .C语言程序设计教程 王敬华 林萍等主编,.清华大学出版社 附录(源程序代码)#include<stdio.h>#include<string.h>#include<ctype.h>#include<stdlib.h>#define STU_NUM 40 /*最多的学生人数*/#define COURSE_NUM 10 /*最多的考试科目*/struct student int number; /*每个学生的学号*/ char name; /*每个学生的姓名*/ int scoreCOURSE_NUM; /*每个学生门功课成绩*/ int sum;/*每个学生的总成绩*/ float average; /*每个学生的平均成绩*/;typedef struct student STU;int Appendscore(STU *head,int n,int m) int j; STU *p; char ch; for (p=head+n;p<head+STU_NUM;p+) printf("ninput number:"); scanf("%d",&p->number); printf("input name:"); scanf("%s",p->name); for (j=0;j<m;j+) printf("input score%d:",j+1); scanf("%d",p->score+j); n+; printf("Do you want to append a new node(Y/N)?"); scanf("%c",&ch); if(ch='n'|ch='N') return n; void PrintScore(STU *head,int n,int m) STU *p; int i; char str100='0', temp3; strcat(str,“Number Name"); for (i=1;i<=m;i+) strcat(str,"scoer"); itoa(i,temp,10); strcat(str,temp); strcat(str," "); strcat(str,"sum average"); printf("%s",str); for (p=head;p<head+n;p+) printf("nNo.%3d%8s",p->number,p->name); for (i=0;i<m;i+) printf("%7d",p->scorei); printf("%11d%9.2fn",p->sum,p->average); void TotalScore(STU *head,int n,int m) STU *p; int i; for (p=head;p<head+n;p+) p->sum=0; for(i=0;i<m;i+) p->sum=p->sum+p->scorei; p->average=(float)p->sum/m; void SortScore(STU *head,int n) int i,j,k; STU temp; for (i=0;i<n-1;i+) k=i; for (j=i;j<n;j+) if (head+j)->average > (head+k)->average) k=j; if (k!=j) temp=*(head+k);*(head+k)=*(head+j);*(head+i)=temp; void SearchScore(STU *head,int n,int m) int name,findNo; printf("please input the name you want to search:"); findNo=SearchName(head,name,n) if(findNo=-1 ) printf("nNot found!n"); else PrintScore(head+findNo,1,m); char Menu(void) switch (ch) char ch; printf("#=#n"); printf("# xue sheng guan li xi tong #n"); printf("#-#n"); printf("# copyright 2011-1-11 #n"); printf("#=#n"); printf("# 1.jia zai wen jian #n"); printf("# 2.xian shi xue sheng cheng ji #n"); printf("# 3.xue sheng cheng ji pai xu #n"); printf("# 4.cha xun xue sheng cheng ji #n"); printf("# 5.tui chu xi tong #n"); printf("#=#n"); printf("qing an 0-8 xuan ze can dan xiang:"); scanf("%c",&ch); return ch;main() char ch; int m=3,n=0; STU stuSTU_NUM; while(1) ch=Menu; /*显示菜单,并读取用户输入*/ switch (ch) case '1': LoadScoreFile(stu,&n,&m); break; case '2':n=PrintfScore(stu,n,m); /*调用成绩显示模块*/ break; case '3':SearchScore(stu,n,m); /*调用按姓名查找模块*/ break; case '4':SortScore(stu,n); /*调用成绩排序模块*/ printf("nSorted resultn"); PrintScore(stu,n,m); /*显示成绩排序结果*/ break; case '0':exit(0); /*退出程序*/printf("End of progrm!"); break; defult:printf("Input error!"); break;