1《C语言程序》课程设计设计题目:电子通讯录班级:************************姓名:****学号:***************指导教师:********日期:***********目录一.课程设计目的........................................................................2二.课程设计题目描述和要求....................................................3三.课程设计报告内容................................................................423.1需求分析.....................................................................43.2概要设计....................................................................53.3详细设计....................................................................53.4主要源程序代码......................................................113.5测试分析..................................................................18四.结论与心得..........................................................................23五.参考文献............................................................................23一.课程设计目的随着当今世界经济的迅猛发展,通讯技术日益成熟,个人间的联系增加,个人对自己联系人信息的管理成为一个重要的环节。与此同时,通讯录便产生了。形形色色的关于通讯录的软件也越来越方便着人们的生活。本次设计便是利用目前先进的开发工具TurboC2.01开发一个电子通讯录。此次的开发系统便于客户能迅速简洁的找到自己所需要的联系人的所有信息,其内容包括添加联系人、显示联系人、删除联系人、查找联系人、修改联系人、将信息保存到文件,达到省时省力的目的,在此次课程设计的实验中,便是利用C语3言和数据结构的一些知识模拟电子通讯录管理系统。二.课程设计题目描述和要求题目:电子通讯录电子通讯录实现下面的功能:①添加联系人添加联系人信息,包括姓名、编号、年龄、地址、电子邮箱、电话号码。②查找联系人输入姓名、电话号码、地址,能查找相对应的信息。③删除联系人输入姓名,能够找到对应的信息,能够对其进行删除。④修改联系人4输入要修改的姓名,再依次修改其信息。⑤显示联系人可以以表格形式输出所有通讯录里的记录。⑥保存联系人输入文件名后,即可将通讯录信息保存到文件。要求:除了上述功能要切实可行外,对于自主修正,在实训过程能切实感受程序的可靠性,功能能的完善性和能力的提高性与课本的理解性,这才是最重要,也是最关键的。三.课程设计报告内容3.1需求分析对于现如今我们高速发展的社会,有着各种各样的管理模式,但是却都离不开计算机,在学习过程中,我们慢慢学到了编程,这就是一个简单的管理系统,这就是一个让我们理解系统管理的起步点。对于电子通讯录的实训,这是一次很好的体验机会。在程序的设计中,采用的是函数的嵌套,这样就告别了main函数的复杂冗长,采用每一个模块的形式能够清晰化,简单化,也能让我知道函数的巧妙变化,提高自己的优化能力。对于操作界面,要达到能好好与用户交流,要考虑到每一个方面,从而达到完善。在每一个模块中,采用结构体类型,这样也是一个优化的过程,而每一步的衔接设计了循环,这样操作既方便又能使程序代码变得简单明了。53.2概要设计以上就是一个主要的设计思路,对于管理系统的设计,我采用结构体类型结合函数的嵌套结构来完成,一步步的来实现整个系统的完善性与可用性。主要思路我分为了六大块来完成,这六大块即为:①添加联系人;②显示联系人;③删除联系人;④查找联系人;⑤修改联系人;⑥保存联系人3.3详细设计①添加联系人添加联系人显示联系人保存联系人修改联系人删除联系人查找联系人电通讯录i=0开始6②显示联系人sign!=’n’&&sign!=’N’开始输入信息return(n+i)结束YNYinti;i=1in+17③删除联系人结束判断通讯录中是否有此人NN输出一个记录i++开始输入删除的姓名Y8④查找联系人输出“通讯录中没有此人”删除该项记录结束开始输入查找的姓名判断通讯录中是否有此人输入“通讯录中没有此人”NY9⑤修改联系人显示该人所有记录结束开始输入修改的姓名判断通讯录中是否有此人NY10根据上边的流程图,我们能看见有一个大体的框架出现了,就是按照这样的顺序,一步步的编写,一步步的完善,这对于编写有着很大的意义。同样,这也是一个摹本,能够让我们清楚的看清每一个模块的衔接,对于编程中的错误有着一定的改正帮助,同样也能让我们熟知每一步的主要功能。3.4源程序代码#includestdio.h#includestdlib.h#includestring.htypedefstruct{charscore;/*编号*/charname[10];/*姓名*/charnum[15];/*号码*/输出“通讯录中没有此人”依次输入修改的内容结束11charemail[20];/*邮箱*/charage[8];/*年龄*/charadds[20];/*住址*/}Person;Personpe[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+i].score);printf(\t姓名:);scanf(\t%s,per[n+i].name);printf(\t年龄:);scanf(\t%s,per[n+i].age);printf(\t电话号码:);scanf(\t%s,per[n+i].num);printf(\t通讯住址:);scanf(\t%s,per[n+i].adds);12printf(\t电子邮箱:);scanf(\t%s,per[n+i].email);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;in+1;i++){printf(%-5d%-8s%-6s%-13s%-15s%-15s\n,per[i-1].score,per[i-1].name,per[i-1].age,per[i-1].num,per[i-1].adds,per[i-1].email);if(i1&&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&&in)i++;if(i==n){printf(\t通讯录中没有此人!\n);return(n);}for(j=i;jn-1;j++){13strcpy(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);strcpy(per[j].email,per[j+1].email);per[j].score=per[j+1].score;}printf(\t\t\t已经成功删除!\n);return(n-1);}voidQuery_a_record(Personper[],intn){intm;printf(\t\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&&in)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);printf(\t电子邮箱:%s\n,per[i].email);14}if(m==2){chars[20];inti=0;printf(\t请输入想查询的电话:);scanf(\t%s,s);while(strcmp(per[i].num,s)!=0&&in)i++;if(i==n){printf(\