c通信录程序设计课程设计报告.docx
《c通信录程序设计课程设计报告.docx》由会员分享,可在线阅读,更多相关《c通信录程序设计课程设计报告.docx(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- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 程序设计 课程设计 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文