1、学号2016-2016学年 第二学期1608220203高级语言程序设计课程设计报告题目:通信录程序设计专业:网络工程(对口)班级:16(3)班姓名:代应豪指导教师:程庆成绩:计算机学院2017年4月25日目录1.设计内容及要求11.1、课程设计的内容11.2、课程设计的要求与数据12.概要设计13.设计过程或程序代码23.1 问题描述23.2 功能要求23.3 算法提示23.4 测试数据23.4课题的主要功能模块划分33.5主要功能的实现34.设计结果与分析154.1 程序调试154.2 程序实现154.3 总结165.参考文献171.设计内容及要求 1.1、课程设计的内容编写学生通信录程序
2、,包括以下功能模块:1、通信录的每一条信息包括姓名、地址、邮政编码、电话号码。2、输入功能:可以一次完成若干条信息的输入。3、显示功能:完成全部通信录信息的显示。4、查找功能:完成按姓名查找通信信息,并显示。5、增加功能:增加通信信息。6、删除功能:完成按姓名删除通信信息。7、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! 1.2、课程设计的要求与数据 1、要求利用结构化程序设计方法以及C的编程思想来完成系统的设计。 2、要求有菜单、文件操作,数据使用数组、结构体、链表等均可,键盘操作或鼠标操作均可。 3、系统具有增加,查询,删除等基本功能; 4、模块化程序设计:
3、要求在设计的过程中,按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现。 5、完成设计任务并编写课程设计说明书。2.概要设计设计与开发一个通讯录管理系统,对通讯录中的姓名、单位、电话、QQ 、mail等基本信息进行管理、主要功能如下: 1)输入记录; 2)显示记录; 3)按姓名查找显示记录; 4)删除记录; 5)插入记录; 6)记录保存为文件; 7)从文件中读记录; 8)按姓名排序; 9)显示单条记录;3.设计过程或程序代码 3.1 问题描述 制作一个通讯录,要求该系统对通讯录的姓名,单位,电话,进行输入,显示 ,查找,删除,插入,保存等操作的管理。 3.2 功能要求
4、1,本系统采用一个结构体数组,每个数据的结构应包括;姓名,单位,电话名称。 2, 本系统显示这样的菜单 请选择系统功能项 a 输入记录;b 显示全部纪录; c 查找记录; d 删除记录; e 插入记录; f 保存文件 ; g 读文件:(1)按序号显示记录;(2)按姓名排序;(3)快速查找记录;(4)复制文件。 3.3 算法提示1 数据结构;结构体类型数组。2 数据库结构;下表构成该系统的基本数据库。姓 名电 话学号3.4 测试数据姓名电话学号Zhang1523.4课题的主要功能模块划分 3.5主要功能的实现3.5.1源程序#include #include #include #include
5、#define N 100 int M=3; struct student char num10;char name10;char tel10; void myprint() system(cls); printf( |-|n); printf( | :-)请输入选项编号(0-7): |n); printf( |-|n); printf( |-1-创建通讯录-|n); printf( |-2-显示通讯录-|n); printf( |-3-查询通讯录-|n); printf( |-4-修改通讯录-|n); printf( |-5-添加通讯录-|n); printf( |-6-删除通讯录-|n);
6、 printf( |-7-排序通讯录-|n); printf( |-0-退出-|n); printf( |-|n); void mycreat(struct student *p,int n) struct student *q=p; FILE *fp=NULL; fp=fopen(d:jilu.dat,w); if(fp=NULL)printf(error); return; for(p=q;p-qnum); while(strcmp(p-num,)=0); printf(姓名:); gets(p-name); printf(电话:); gets(p-tel); fprintf(fp,%23
7、s%15s%15sn,p-num,p-name,p-tel); void mydisplay(struct student *p,int n) FILE *fp=NULL; fp=fopen(d:jilu.dat,r); if(fp=NULL)printf(error); return; system(cls); printf( 学号 姓名 电话n); while(n0) fscanf(fp,%23s%15s%15s,p-num,p-name,p-tel); printf(%23s%15s%15sn,p-num,p-name,p-tel); p+;n-; void mysearch(struc
8、t student *p,int n) struct student *q=p; int flag=0; char c=0,nm10=,nam10=; printf(n按照学号查询(h)或姓名查询(m):n); c=getche(); if(c=h|c=H) printf(请输入要查询记录的学号:);gets(nm); for(p=q;p-qnum)=0) printf( 学号 姓名 电话n); printf(%23s%15s%15sn,p-num,p-name,p-tel); flag=1; if(flag=0) printf(wrong.n); else if(c=m|c=M) print
9、f(请输入要查询记录的姓名:);gets(nam); for(p=q;p-qname)=0) printf( 学号 姓名 电话n); printf(%23s%15s%15sn,p-num,p-name,p-tel); flag=1; if(flag=0) printf(wrong.n); else printf(wrong.n); void mymodify(struct student *p,int n) struct student *q=p; FILE *fp=NULL; char nam10=; mydisplay(p,n); printf(请输入您想要修改记录的姓名:n);gets(
10、nam); for(p=q;p-qname)=0) break; if(p-q=n) printf(wrong.); else printf(请输入正确的学号:); do gets(p-num); while(strcmp(p-num,)=0); printf(请输入正确的姓名:); gets(p-name); printf(请输入正确的电话:); gets(p-tel); fp=fopen(d:jilu.dat,w); if(fp=NULL)printf(error); exit(0); for(p=q;p-qnum,p-name,p-tel); fclose(fp); void myadd
11、(struct student *p,int n) FILE *fp=NULL; struct student *q=p; char c=n,tempnum10=,tempname10=,temptel10=; printf(n); while(strcmp(p-num,)!=0) printf(%23s%15s%15sn,p-num,p-name,p-tel); p+; n=p-q; do printf(请输入新纪录的学号:); do gets(tempnum); while(strcmp(tempnum,)=0); printf(请输入新纪录的姓名:); gets(tempname); p
12、rintf(请输入新纪录的电话:); gets(temptel); for(p=q;p-qnum)=0|strcmp(temptel,p-tel)=0) printf(学号或电话号码需要重新输入吗(Y/N)?); c=getche(); putchar(n); break; if(p-q=n) strcpy(p-num,tempnum); strcpy(p-name,tempname); strcpy(p-tel,temptel); break; while(c=y|c=Y); fp=fopen(d:jilu.dat,w); if(fp=NULL)printf(error); return;
13、for(p=q;p-qnum,p-name,p-tel); fclose(fp); M+; void mydelete(struct student *p,int n) FILE *fp=NULL; struct student *q=p; char c10=,tempnum10=,tempname10=,temptel10=,choose=0; mydisplay(p,n); printf(选择删除记录的方式:学号(h)姓名(m); choose=getche(); printf(n); if(choose=m|choose=M) printf(删除的记录:); gets(c); for(;
14、p-qname)=0) break; if(p-qn) for(;p-qnum,(p+1)-num); strcpy(p-name,(p+1)-name); strcpy(p-tel,(p+1)-tel); else printf(non); else if(choose=h|choose=H) printf(删除的记录:); gets(c); for(;p-qnum)=0) break; if(p-qn) for(;p-qnum,(p+1)-num); strcpy(p-name,(p+1)-name); strcpy(p-tel,(p+1)-tel); else printf(no); e
15、lse printf(wrongn); fp=fopen(d:jilu.dat,w); if(fp=NULL)printf(error); return; for(p=q;p-qnum,p-name,p-tel); fclose(fp); M-; void mysort(struct student *p,int n) FILE *fp=NULL; struct student *q=p,*w=p,*a=p; char temp10=,c1=0,c2=0; mydisplay(p,n); printf(选择按照学号(h)或姓名(m)排序:n); c1=getche(); if(c1=h|c1=
16、H) printf(升序(s)或者降序(j)排列:); c2=getche(); if(c2=s|c2=S) for(;p-an;p+) w=p; for(q=p+1;q-anum,q-num)0) w=q; strcpy(temp,w-num); strcpy(w-num,p-num); strcpy(p-num,temp); strcpy(temp,w-name); strcpy(w-name,p-name); strcpy(p-name,temp); strcpy(temp,w-tel); strcpy(w-tel,p-tel); strcpy(p-tel,temp); else if(
17、c2=j|c2=J) for(;p-an;p+) w=p; for(q=p+1;q-anum,q-num)num); strcpy(w-num,p-num); strcpy(p-num,temp); strcpy(temp,w-name); strcpy(w-name,p-name); strcpy(p-name,temp); strcpy(temp,w-tel); strcpy(w-tel,p-tel); strcpy(p-tel,temp); else printf(555wrong.n); else if(c1=m|c1=M) printf(升序(s)或者降序(j)排列:); c2=ge
18、tche(); if(c2=s|c2=S) for(;p-an;p+) w=p; for(q=p+1;q-aname,q-name)0) w=q; strcpy(temp,w-num); strcpy(w-num,p-num); strcpy(p-num,temp); strcpy(temp,w-name); strcpy(w-name,p-name); strcpy(p-name,temp); strcpy(temp,w-tel); strcpy(w-tel,p-tel); strcpy(p-tel,temp); else if(c2=j|c2=J) for(;p-an;p+) w=p; f
19、or(q=p+1;q-aname,q-name)num); strcpy(w-num,p-num); strcpy(p-num,temp); strcpy(temp,w-name); strcpy(w-name,p-name); strcpy(p-name,temp); strcpy(temp,w-tel); strcpy(w-tel,p-tel); strcpy(p-tel,temp); else printf(555wrong.n); else printf(555wrong.n); fp=fopen(d:jilu.dat,w); if(fp=NULL)printf(error); ret
20、urn; for(p=a;p-anum,p-name,p-tel); fclose(fp); main() char choose=0,yes_no=0; struct student recordN=0; do myprint(); printf( :-)请选择(0-7):); choose=getche(); switch(choose) case 1:mycreat(record,M);break; case 2:mydisplay(record,M);break; case 3:mysearch(record,M);break; case 4:mymodify(record,M);br
21、eak; case 5:myadd(record,M);break; case 6:mydelete(record,M);break; case 7:mysort(record,M);break; case 0:exit(0); default :printf(nerror.n); printf(n :-)继续选择吗(y/n)?n); do yes_no=getch(); while(yes_no!=Y&yes_no!=y&yes_no!=N&yes_no!=n); while(yes_no=Y|yes_no=y); 4.设计结果与分析 4.1 程序调试 先进行人工检查,即静态检查。在写好一个
22、程序以后,不要匆匆忙忙上机,而应对程序进行人工检查。这一步十分重要,它能发现程序设计人员由于疏忽而造成的多数错误。这一步往往容易被人忽视,总希望把一切都推给计算机去做,但这样会多占用机器时间,作为一个程序人员应当养成严谨的作风,每一步都要严格把关,不把问题留给后面的工序。 为了更有效地进行人工检查,所编的程序应力求做到以下几点:应当采用结构化程序方法编程,以增加可读性;尽可能多加注释,以帮助理解每段程序的作用;在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。各函数之间除用参数传递数据外,尽量少出现耦合关系,这样便于分别检查和处理。二、在人工
23、检查无误后,再上机调试。通过上机发现错误称为动态检查。在编译时会给出语法错误的信息,调试时可以根据提示信息具体找出程序中出错之处并改正。应当注意的是有时提示出错的地方并不是真正出错的位置,如果在提示出错的行找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多且各种错误互有关联,因此要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。如果系统提示的出错信息很多,应当从上到下逐一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息。这时只要加上一个变
24、量定义,就所有错误都消除了。4.2 程序实现(1)功能通讯录的每一条信息包括学号、姓名、电话(字符数组)。1. 输入功能:可以一次完成若干条信息的输入。2. 显示功能:完成全部通讯录信息的显示。3. 查找功能:可以用学号或姓名分别完成按姓名查找每一个通讯信息,并显示新的通讯信息。4. 增加功能:可以无限增加学生数量。5. 删除功能:完成按姓名删除通讯信息 并显示新的通讯信息。6. 将通讯录信息存在文件d:jilu.dat中。7. 将通讯录信息保存到新的文件中。(2) 需要改进:不知道如何改变DOS界面的颜色,使界面更加完美;字体颜色也不知道如何改变。4.3 总结通过这次课程设计,使我对C语言有
25、了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前。5.参考文献1 谭浩强著. C程序设计(第三版). 北京:清华大学出版社,20052 谭浩强著. C程序设计题解与上机指导. 北京:清华大学出版社,2005