版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计题目:通讯录管理系统一、系统需求分析1、建立通讯录新年系,信息至少包含编号、姓名、年龄、电话号码、通讯地址等;2、能够提供添加、删除、查找、修改和显示通讯录信息等功能;3、能够提供按不同方式查询的功能,如按姓名或年龄等查询;4、将通讯录保存到文件中;5、能够按表格方式输出通讯录信息。二、系统概要设计1、系统的主要功能系统的主要功能是实现基本的通讯录的数据管理和维护。主要包括:(1)增加数据记录:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址后,会提示是否继续添加。(2)显示数据记录:可以以表格形式输出所有通讯录里的记录。(3)删除数据记录:输入欲删除的那个人的姓名后,会自动删除他(她)的记录内容。(4)查找数据记录:可以选择用姓名,电话,地址三种方式查询。(5)修改数据记录:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址。(6)保存数据记录:输入文件明(带后缀名)后,即可将通讯录信息保存到文件。2、系统的总体结构增加数据记录增加数据记录显示数据记录删除数据记录查找数据记录修改数据记录保存数据记录通讯录管理系统3、系统软件环境本程序所适用的计算机系统软硬件环境要求为:硬件环境:<1>486,586及兼容机,640K基本内存;<2>1M以上扩充内存,10M以上的显示内存.软件环境:内置MS-DOS5.0或者Windows98,且有中文平台.如:UCDOS等。4、数据结构设计(1)通讯录:typedefstruct{Charscore;Charname[10];Charnum[15];Charage[8];Charadds[20];}Person;//编号,姓名,号码,年龄,住址Voidmain(0{intn=0;for(;;){Switch(menu_select())//主函数{case1:printf(“\n\t添加记录到通讯录\n);ninput(pe,n);break;Case2:printf(“\n\t\t\tDisplay,n”);break;//添加记录Case3:printf(“\n\t从通讯录中删除记录\n”);n=Delete_a_record(pe,n);Printf(“\t”);system(“pause”);break;Case4:printf(“\n\t在通讯录中查找记录\n”);Query_a_record(pe,n);Printf(“\t”);system(“pause”);break;Case5:printf(“\n\t修改通讯录中的记录\n”);Change(pe,n);Printf(“\t”);system(“pause”);break;Case6:printf(“\n\t保存功能\n”);WritetoText(pe,n);Printf(“\t”);system(“pause”);break;Case0:printf(“\n\t\t谢谢使用,再见!\n”);Printf(“\n\t\t”);system(“pause”);exit(0);}}}三、系统的详细设计系统实现的基本功能是通讯录数据管理,包括:添加数据记录、显示数据记录、删除数据记录、查找数据记录,修改数据记录以及保存数据记录。(分别使用了insert()、seek()、delete()、show()、sort()等函数)。其中数据的查找、数据的删除又可通过不同的方式如按学号或姓名等进行操作。主要函数实现说明:1、insert()该函数可对文件的数据进行添加。在进行添加的时候需要首先打开数据文件,在该函数中调用了file1()函数将数据文件打开。之后同creatfile()中一样的形式输入数据,输入完之后进行保存,对插入的数据进行保存前要先确定插入点,该函数在设计时将插入点放在了文件末尾,即将添加的数据加到文件的最后。同样以上操作为一循环过程,最后根据用户的选择决定循环操作是否进行。该函数与创建新数据文件函数除保存及被使用时间不同外,其他功能基本相同。2、show()使用该函数可以在屏幕上显示数据文件中已经存在的所有数据记录。该功能设计思路比较简单,只需先打开数据文件,读取其中的数据记录,然后将这些记录按一定的形式打印在屏幕上,为是打印的效果整齐、美观,则要对其输出的方式、格式进行设计3、delete()该函数用来删除不需要的数据记录。实现过程为:首先输入需要删除的记录的编号,将该数据逐一与以存文件中的编号进行比较,在比较过程中定义了一个变量g,并初始化为1,当找到要删除的数据的时候,将g赋制值成0,接着就是对该记录的删除操作,将此记录及其后的每一条记录逐一用它们之后的那一条记录替换,即实现了对数据的删除。若没有找到需要删除的数据,g的值任为1,则屏幕显示“cannotfindthename”。在删除记录后需对操作结果进行保存,最后根据用户的选择来决定是否继续删除。4、seek()该函数调用了by-name()和by-number()两个函数来实现不同方式的查找。具体使用什么方式查找需由用户自己选择,于是使用switch语句先设计一个选择过程。当选择按名字查找方式,就启用by-name()函数查找,过程为先要求用户输入所要查找的数据名字,然后再将这个名字与以存数据名字逐个进行比较,当找到数据的时候就调用prt()函数将该数据的所有信息打印出来,否则显示“cannotfindthename”以示没有找到。当选择按学号查找方式的时候,则启用by-number()函数进行查找,过程思路与by-name()函数相同。以上过程为一循环过程,再根据用户的选择决定是否继续循环操作。5、main()一个程序主函数不能少。当以上的函数均编完之后,要实现各个功能操作的连接,还必须有主函数将它们联系起来,这样才能达到理想的结果。对以上函数的连接,此程序采用了switch语句,格式清晰、容易接受。至此班级通讯录管理的基本功能便基本实现。辅助函数:以上介绍的是完成班级通讯录管理这个功能,程序主要包含的函数,为了使程序更有条理性或者更加完整形象,可以将主要函数经常使用的一些功能编成一个函数,这样便可在多处很方便调用,如此程序中的file1()(用来打开数据文件的操作)、file2()(用来保存数据)、prt()函数等便起到这个作用。另外还加了jm1()、jm2()进入界面、退出界面这两个函数,使本程序显得更加完整。四、系统的主要源程序#include<stdio.h>//#include<stdlib.h>#include<string.h>typedefstruct{ charscore; charname[10]; charnum[15]; charage[8]; charadds[20];}Person;Personper[80];intmenu_select(){ charc; do{ system("cls"); printf("\t\t*****通讯录*****\n"); printf("\t\t┍--------------┒\n"); printf("\t\t|1.添加记录|\n"); printf("\t\t|2.显示记录|\n"); printf("\t\t|3.删除记录|\n"); printf("\t\t|4.查询记录|\n"); printf("\t\t|5.修改记录|\n"); printf("\t\t|6.保存记录|\n"); printf("\t\t|0.退出程序|\n"); printf("\t\t┕--------------┙\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0');}intInput(Personper[],intn){ inti=0; charsign,x[10]; while(sign!='n'&&sign!='N') { printf("\t编号:"); scanf("\t%d",&per[n+1].score); printf("\t姓名:"); scanf("\t%s",per[n+1].name); printf("\t年龄:"); scanf("\t%s",per[n+1].age); printf("\t电话号码:"); scanf("\t%s",per[n+1].num); printf("\t通讯地址:"); scanf("\t%s",per[n+1].adds); gets(x); printf("\n\t是否继续添加?(Y/N)"); scanf("\t%c",&sign); i++; } return(n+i);}voidDisplay(Personper[],intn){ inti; printf("----------------------------------------\n"); printf("编号姓名年龄电话号码通讯地址\n"); printf("----------------------------------------\n"); for(i=1;i<n+1;i++) { printf("%-5d%-8s%-6s%-13s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds); if(i>1&&i%10==0) { printf("\t----------------------------------\n"); printf("\t");system("pause"); printf("\t----------------------------------\n"); } } printf("------------------------------------\n");system("pause");}intDelete_a_record(Personper[],intn){ chars[20]; inti=0,j; printf("\t请输入想删除记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return(n); } for(j=i;j<n-1;j++) { strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); per[j].score=per[j+1].score; } printf("\t\t\t已经成功删除!\n"); return(n-1);}voidQuery_a_record(Personper[],intn){ intm; printf("\\n请选择查询方式:\n"); printf("\t┍--------------┒\n"); printf("\t|1------姓名|\n"); printf("\t|2------电话|\n"); printf("\t|3------地址|\n"); printf("\t|4------返回|\n"); printf("\t┕--------------┙\n"); printf("请选择:"); scanf("%d",&m); while(m!=1&&m!=2&&m!=3&&m!=4) { printf("输入错误,请重新选择:"); scanf("%d",&m); } if(m==1) { chars[20]; inti=0; printf("\t请输入想查询的姓名:"); scanf("\t%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人年龄:%s\n",per[i].age); printf("\t电话号码:%s\n",per[i].num); printf("\t通讯地址:%s\n",per[i].adds); } if(m==2) { chars[20]; inti=0; printf("\t请输入想查询的电话:"); scanf("\t%s",s); while(strcmp(per[i].num,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t通讯地址:%s\n",per[i].adds); } if(m==3) { chars[20]; inti=0; printf("\t请输入想查询的地址:"); scanf("\t%s",s); while(strcmp(per[i].adds,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号:%d\n",per[i].score); printf("\t此人姓名:%s\n",per[i].name); printf("\t此人年龄:%s\n",per[i].age); printf("\t电话号码:%s\n",per[i].num); };}voidChange(Personper[],intn){ chars[20]; inti=0; printf("\t请输入想修改的记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return;} printf("\t编号:"); scanf("\t%d",&per[i].score); printf("\t姓名:"); scanf("\t%s",per[i].name); printf("\t年龄:"); scanf("\t%s",per[i].age); printf("\t通讯地址:"); scanf("\t%s",per[i].adds); printf("\t修改成功!");}voidWritetoText(Personper[],intn){ inti=0; FILE*fp; charfilename[20]; printf("\t保存到文件\n"); printf("\t请输入所保存的文件名:"); scanf("\t%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\t无法打开文件\n"); system("pause"); return; } fprintf(fp,"*************************通讯录********************\n"); fprintf(fp,"编号姓名年龄电话号码通讯地址\n"); fprintf(fp,"---------------------------------------------------\n"); while(i<n) { fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds); i++; } fprintf(fp,"---------------------------------------------------\n"); fprintf(fp,"*********************共有%d条记录***************************\n",n); fclose(fp); printf("保存成功!\n");}voidmain(){ intn=0; for(;;) { switch(menu_select()) { case1:printf("\n\t添加记录到通讯录\n");n=Input(per,n);break; case2:printf("\n\t\t\tDisplay,n");break; case3:printf("\n\t从通讯录中删除记录\n");n=Delete_a_record(per,n);printf("\t");system("pause");break;case4:printf("\n\t在通讯录中查找记录\n");Query_a_record(per,n);printf("\t");system("pause");break;case5:printf("\n\t修改通讯录中的记录\n");Change(per,n);printf("\t");system("pause");break;case6:printf("\n\t保存功能\n");WritetoText(per,n);printf("\t");system("pause");break;case0:printf("\n\t\t谢谢使用,再见!\n");printf("\n\t\t");system("pause");exit(0); } }}五、系统测试及调试测试是为了发现程序中错误,而执行程序的过程。程序调试是指对程序的查错和排错。为了便于查错、阅读,在设计该程序的时候我采用了结构化程序方法编辑,添加了尽可能多的注释,这为我后来的调试过程带来了很多方便。在上机调试之前我对所编的程序作了纸面上的检查,先找出一些低级错误,如{}没有搭配完整,漏写“;号”、拼写错误等。经过仔细检查之后进行上机调试。进行编译,如果在编译和连接过程中发现错误,屏幕上显示了出错信息,根据提示找到出错的位置,加以改正,再进行编译……如此反复,直到顺利通过编译和连接为止。在本次实习过程中碰到的编译、连接的错误主要有:1、缺少变量定义,定义位置不正确;前后有些变量前后定义和使用不一致,在错误信息的提示下一般还是很容易找到。需要注意的是有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。2、语法错误;一些语法错误在信息框的提示下一般是能够排除的。3、在c语言中有些符号是不能够一般显示的,需要用转义字符,我本来的目的是想打印出no两边的引号,但是要用\\’’才能最后输出一个引号;注释的时候,注释文字应写在一起,中间不能包含c语言的语句,不然又引起错误格式不正确或是多了字符等。这又让我学到了一点知识。编译、连接的成功并不意味着程序的最终成功。逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。运行通过后,还要对程序进行测试。要选
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 热硫化硅橡胶生产工成果转化模拟考核试卷含答案
- 特种动物养殖员安全理论能力考核试卷含答案
- 玻纤制品后处理工安全培训效果知识考核试卷含答案
- 锁具装配工常识模拟考核试卷含答案
- 露天采矿吊斗铲司机岗中班组协作考核试卷含答案
- 丙烯腈装置操作工工作改进强化考核试卷含答案
- 电切削工岗前生产安全技能考核试卷含答案
- 道路客运乘务员诚信水平考核试卷含答案
- 民间工艺品艺人技术传承模拟考核试卷含答案
- 绘图仪器制作工安全生产能力模拟考核试卷含答案
- 2026年会展运营(运营管理技巧)试题及答案
- 2026中国新能源汽车热管理系统技术发展现状及趋势
- 2025天津一中高一入学语文分班考试真题含答案
- 2026-2030中国便携式肺功能仪行业需求规模与前景动态预测报告版
- 基层医疗卫生机构急重患者判断及转诊技术标准(WS-T 810-2022)
- 2026年度实验室管理评审附新版《评审准则》内审检查表
- 2026年高考高校招收华侨港澳台生化学试卷试题(含答案详解)
- 2026年公立医院行政后勤招聘试题及答案解析
- 2025年平顶山工业职业技术学院辅导员招聘笔试试题及答案解析
- 高中数学知识点总结 第十三、四章极限与导数
- 2026西藏阿里地区革吉县人力资源和社会保障局(医疗保障局)补聘基层劳动就业社会保障公共服务平台工作人员1人备考题库及参考答案详解【满分必刷】
评论
0/150
提交评论