山东工商学院信电学院高级语言程序设计课程设计报告高级语言程序设计课程设计报告题目:手机通讯录管理系统专业:电子信息工程班级:电子112学号:姓名:指导教师:日期:2012年7月9日至2012年7月14日山东工商学院信电学院山东工商学院信电学院高级语言程序设计课程设计报告注:用户名和密码均为dianzi1121、程序基本功能要求手机通信录采用文件存储,因而要提供文件的输入输出操作;查看功能要提供显示操作;增加新数据的过程要检查是否有重复,存储空间是否已满,且录入的新数据能按递增的顺序自动进行条目编号,因而要提供查找、统计和排序操作;要提供修改与删除和自动调整编号功能;另外还要提供键盘式选择菜单以实现功能选择。(1)数据查看模块通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。(2)数据添加模块提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。(3)数据修改模块修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。(4)数据删除模块通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。2、总体设计(功能模块说明,如函数功能、参数说明,函数调用关系描述等,并注明各模块的具体成员分工)建立结构体来储存和整合各个信息。然后利用模块来分别实现程序的各个功能。各个模块用函数来实现。在通过主函数来判断输入数字,从而调动函数,实现所需功能。最后将输入的文件保存在文件里,以便重复使用。整个系统可以设计为数据查看模块、数据添加模块、数据修改模块、数据删除模块。函数体构造和查看模块编写人-------------张睿数据添加和修改模块编写人--------------闫君数据删除和switch函数模块-------------杨留洋山东工商学院信电学院高级语言程序设计课程设计报告3、详细设计(程序设计组成框图、流程图)1)数据查看模块通过菜单选择查看信息,然后选择办公类、个人类或者商务类,则显示所选类信息列表。这是一个查找与显示的过程,在手机通信录文件中查找type类型符合的记录,输出。voidQuery_a_record(Personper[],intn)//查找记录函数{intm;printf(\t\n请选择查询方式:\n);printf(\t\n);printf(\t1------姓名\n);printf(\t2------电话\n);printf(\t3------地址\n);printf(\t4------返回\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].num);printf(\t此人年龄:%s\n,per[i].age);printf(\t电话号码:%s\n,per[i].tel);printf(\t通讯地址:%s\n,per[i].adds);printf(\t电子邮箱:%s\n,per[i].email);};if(m==2){chars[20];inti=0;printf(\t请输入想查询的电话:);scanf(\t%s,s);while(strcmp(per[i].tel,s)!=0&&in)i++;if(i==n){printf(\t通讯录中没有此人!\n);return;}printf(\t此人编号:%d\n,per[i].num);printf(\t此人姓名:%s\n,per[i].name);printf(\t此人年龄:%s\n,per[i].age);printf(\t通讯地址:%s\n,per[i].adds);printf(\t电子邮箱:%s\n,per[i].email);};if(m==3){chars[20];inti=0;printf(\t请输入想查询的地址:);scanf(\t%s,s);while(strcmp(per[i].adds,s)!=0&&in)i++;if(i==n){printf(\t通讯录中没有此人!\n);return;}山东工商学院信电学院高级语言程序设计课程设计报告printf(\t此人编号:%d\n,per[i].num);printf(\t此人姓名:%s\n,per[i].name);printf(\t此人年龄:%s\n,per[i].age);printf(\t电话号码:%s\n,per[i].tel);printf(\t电子邮箱:%s\n,per[i].email);};}(2)数据添加模块提示输入一条记录,将对通信录执行查找操作,查找姓名和电话号码字段,如不存在相同的记录,则用以追加方式写入文件,并给记录的条目字段赋值(在检查有无重复的过程中启动计数),否则提示“数据已经存在,请重新输入或者取消!”。intInput(Personper[],intn)//添加记录函数{inti=0;charsign,x[10];while(sign!='n'&&sign!='N'){printf(\t编号:);scanf(\t%d,&per[n+i].num);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].tel);printf(\t通讯住址:);scanf(\t%s,per[n+i].adds);printf(\t电子邮箱:);scanf(\t%s,per[n+i].email);gets(x);printf(\n\t是否继续添加?(Y/N));scanf(\t%c,&sign);i++;}return(n+i);}(3)数据修改模块修改通信录信息,则需要读文件,判断信息是否是要修改的信息,如果是,修改,重新写入文件;否则直接重新写入文件。voidChange(Personper[],intn)//修改记录函数{chars[20];山东工商学院信电学院高级语言程序设计课程设计报告inti=0;printf(\t请输入想修改的记录中的名字:);scanf(%s,s);while(strcmp(per[i].name,s)!=0&&in)i++;if(i==n){printf(\t通讯录中没有此人!\n);return;}printf(\t编号:);scanf(\t%d,&per[i].num);printf(\t姓名:);scanf(\t%s,per[i].name);printf(\t年龄:);scanf(\t%s,per[i].age);printf(\t电话号码:);scanf(\t%s,per[i].tel);printf(\t通讯住址:);scanf(\t%s,per[i].adds);printf(\t电子邮箱:);scanf(\t%s,per[i].email);printf(\t修改成功!);}(4)数据删除模块通过菜单选择删除操作,由于C语言没有提供直接删除文件记录的函数,因而需要自己实现:读记录,判断是否要删除(与输入的要删除的记录比较),如果要删除,则舍弃;否则重新写入文件。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++){strcpy(per[j].tel,per[j+1].tel);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].num=per[j+1].num;}printf(\t\t\t已经成功删除!\n);return(n-1);}4、程序运行结果(截图)山东工商学院信电学院高级语言程序设计课程设计报告山东工商学院信电学院高级语言程序设计课程设计报告山东工商学院信电学院高级语言程序设计课程设计报告注:用户名和密码均为dianzi1125、源程序代码(代码中注明每段代码的完成人)#includestdio.h#includestdlib.h#includestring.htypedefstruct{charnum;/*编号*/charname[20];/*姓名*/chartel[20];/*号码*/charemail[20];/*邮箱*/charage[20];/*年龄*/charadds[20];/*住址*/}Person;Personpe[300];intmenu_select(){charc;do{system(cls);printf(\t***********************欢迎使用手机通讯录********************\t\n);printf(\t\t***************************菜单*************************\t\n);山东工商学院信电学院高级语言程序设计课程设计报告printf(\t\t1.添加记录\n);printf(\t\t2.显示记录\n);printf(\t\t3.删除记录\n);printf(\t\t4.查询记录\n);printf(\t\t5.修改记录\n);printf(\t\t6.保存记录\n);printf(\t\t0.退出程序\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].num);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].tel);printf(\t通讯住址:);scanf(\t%s,per[n+i].adds);printf(\t电子邮箱:);scanf(\t%s,per[n+i].email);gets(x);printf(\