收藏 分销(赏)

c通信录程序设计课程设计报告.docx

上传人:精*** 文档编号:2940533 上传时间:2024-06-11 格式:DOCX 页数:18 大小:55.34KB 下载积分:8 金币
下载 相关 举报
c通信录程序设计课程设计报告.docx_第1页
第1页 / 共18页
c通信录程序设计课程设计报告.docx_第2页
第2页 / 共18页


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

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服