..郑州大学课程报告课程名称:C语言程序设计专业班级:(15)班学生姓名:谢*学号:20127611***任课教师:赵**学期:2012-2013-2..课程报告任务书题目通讯录管理系统主要内容开发一个通讯录管理系统,基本信息包括:编号、姓名、性别、出生年月、固定电话、手机号、电子邮件等基本信息(也可以根据自己情况进行扩充)。使之能提供以下基本功能:(1)通讯录等信息录入功能(注:数据等要求用文件保存)--输入(2)通讯录信息的浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按电话号码进行查询②按姓名查询等③按照年龄排序④按姓名排序等(4)通讯录条目的删除与修改等扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打印功能(3)模糊查询,如姓张的人员等;或者给定电子邮件的部分进行查询等(4)给定指定年龄范围之内的查询等等。总之,可以根据自己需求进行分析功能,成绩评定按照难度进行区分。任务要求一、提交材料应包括:(1)系统源代码(2)课程报告二、整个设计过程具体要求(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师:..一.需求分析1,具有数据的插入、修改、删除、显示和查询功能的电话簿管理程序。2,数据包括:人名、工作单位、电话号码和E-MAIL地址。3,可对记录中的姓名和电话号码进行修改。4,可增加和删除记录。5,可显示所有的保存记录。6,可按人名或电话号码进行查询。分析建议采用结构体数组和文件系统实现。结构体成员包括人名、工作单位、电话号码和E-MAIL地址。根据题目的要求程序应该采用结构体数组和文件系统实现。应该有文件的操作功能;在程序中应该包括输入、显示、删除、查询、添加、修改、保存、加载和退出的功能。二、概要设计(1).程序的模块组成及各个函数的功能:程序的模块组成:主函数:main();输出数据函数:printf();读取数据函数:scanf();显示记录函数:Display();删除记录函数:shanchu();查找记录函数:chaxun();自定义清屏函数:system(“cls”);自定义输入函数:input();字符输入函数:getchar();修改数据函数:xiugai();保存数据函数:baocun();排序数据函数:paixu();各函数的主要功能:输出数据函数:随时输出数据;..读取数据函数:读取输入的数据信息;显示菜单函数:显示可供选择的主菜单;显示记录函数:显示通讯录所有输入的信息;删除记录函数:显示要删除的通讯录所有输入的信息;查找记录函数:显示要查询的通讯录所有输入的信息;自定义清屏函数:清除前面运行留下的信息;自定义输入函数:输入通讯录的成员;;字符输入函数:从终端输入一个字符,遇回车键返回;修改数据函数:修改通讯录的成员信息;保存数据函数:保存通讯录的成员信息;排序数据函数:排序通讯录的成员信息;(2)程序中的抽象数据类型的定义:用户的状态结构用户{编号:姓名:电话;年龄;邮箱:地址;(3)总体流程图根据上面的分析,可以将程序系统的设计分为如下几个模块:插入、显示、删除、查询、修改、保存和退出。}通讯录管理系统插入显示删除查询保存修改退出..三.详细设计(1).主菜单;主菜单一般设计得比较简洁,只提供输入,处理和输出部分的函数调用。其中各功能模块用菜单方式选择。流程图NY【程序】Personpe[80];intmenu_select(){charc;do{system(cls);//清屏printf(\t\t\t**********************************************\n);//窗口初始化printf(\t\t\t**********欢迎使用通讯录管理系统!***********\n);printf(\t\t\t*************┌───────┐***************\n);printf(\t\t\t**************1.添加记录***************\n);printf(\t\t\t**************│2.显示记录│****************\n);printf(\t\t\t**************│3.删除记录│****************\n);printf(\t\t\t**************│4.查询记录│****************\n);开始显示一系列功能选项输入n,判断是否是0~6根据n的值调用各功能模块函数结束..printf(\t\t\t**************│5.修改记录│****************\n);printf(\t\t\t**************│6.保存记录│*****************\n);printf(\t\t\t**************│7.排序记录│*****************\n);printf(\t\t\t**************│0.退出程序│*****************\n);printf(\t\t\t**************└──────┘****************\n);printf(\t\t请您选择(0-7):);c=getchar();}while(c'0'||c'7');return(c-'0');}(2)显示模块此模块为显示所有记录,流程图如下:voidDisplay(Personper[],intn){Inti;printf(----------------------------------------------------------------------\n);//格式printf(编号\t姓名\t年龄\t电话号码\t通讯地址\t电子邮箱\n);printf(----------------------------------------------------------------------\n);for(i=1;in+1;i++){printf(%-8d%-8s%-8s%-18s%-18s%-8s\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);(3)修改模块此模块先调用查找函数查找到所要修改的信息,然后用户根据需要修改信息。流程图如下:voidxiugai(Personper[],intn){chars[20];inti=0;printf(\t请输入想修改的记录中的名字:);scanf(%s,s);//输入修改人的名字开始输入要修改记录的姓名是否找到信息提示未找到信息显示要修改的信息修改需要修改的条目,并保存结束NY..while(strcmp(per[i].name,s)!=0&&in)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].num);printf(\t通讯住址:);scanf(\t%s,per[i].adds);printf(\t电子邮箱:);scanf(\t%s,per[i].email);printf(\t修改成功);}(4)插入模块此模块为插入信息模块,插入后再调用保存函数来保存所插入的数据,支持多条信息的插入。流程图..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);printf(\t电子邮箱:);scanf(\t%s,per[n+i].email);开始输入要插入的记录个数ni从0到n-1调用Input函数i!=0吗?返回主菜单保存调用baocun函数结束NYY..gets(x);printf(\n\t是否继续添加?(Y/N));scanf(\t%c,&sign);i++;}return(n+i);}(5)删除模块此模块先利用查找模块找到所要删除的信息,然后根据用户的选择来确定是否删除信息,此种调用到Save函数。其流程图如下:intshanchu(Personper[],intn){chars[20];inti=0,j;printf(\t请输入想删除记录中的名字:);scanf(%s,s);while(strcmp(per[i].name,s)!=0&&in)i++;if(i==n){开始输入要删除信息的名字是否找到信息提示没有找到信息NY显示找到的信息提示是否删除NY提示未删除提示删除成功结束..printf(\t通讯录中没有此人!\n);return(n);}for(j=i;jn-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);strcpy(per[j].email,per[j+1].email);}printf(\t\t\t已经成功删除!\n);return(n-1);}(6)查询模块voidchaxun(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];