黑龙江工程学院1第一章问题分析和任务定义1.1问题分析问题:编写一个通讯录管理系统。要求包括通讯录建立、增加号码、删除号码、查询号码(按姓名、按号码)、修改号码、号码分组、打印通讯录(全部或分组号码)等功能,并设计主控菜单和子菜单供用户选择要执行的操作。分析:实现以下功能:1)通讯录编辑(添加、删除);2)按不同的项进行查找;3)对已存在的通讯录按不同的项排序;4)将通讯录写入文件;5)从文件读入通讯录。1.2任务定义创建一个链表,每个节点有姓名和号码以及关系三个信息。增加号码操作为增加节点,删除号码操作为删除节点,查找号码为链表的遍历。每个功能以函数的形式出现,由主控菜单控制。并以文件的形式对号码信息进行保存。第二章详细设计主函数(main()函数)是通过一个多分支语句(switch(i)语句)实现的。显示菜单函数(displaymenu()函数)显示与用户交互的界面。以下是各个模块实现程序各项功能的函数的详细设计:1、插入新的记录:insert()函数定义变量,设计loop模块,模块的功能是用来输入记录:输入姓名、性别、电话号码、地址的信息。用for语句查找是否输入了与原有记录相同的记录,用strcmp函数比较,if语句判断,如果输入了重复的记录,提示信息:“此记录已存在,请重新输入!”并且用goto语句返回到loop,重新输入信息。设计一个a模块:键盘输入一个字符,必须是“Y”“y”“N”“n”,否则重新输入。最后if语句判断变量的值是否重新输入信息,如果输入的是“Y”或“y”,返回到loop,黑龙江工程学院2用户可以输入下一条信息,直到用户输入“N”或“n”返回主界面。每插入一条记录n的值加1。功能的实现见源程序:2、示好友的信息:display()函数定义整型变量i用来循环输出记录。分别输出每条记录,并输出记录的个数。3、查找好友的信息search()函数定义字符型变量c,字符型数组a,定义loop模块,功能:通过键盘输入要查找的信息。首先显示提示信息:“输入你要查找的好友的姓名”然后从键盘输入姓名。For语句循环内嵌if语句,用strcmp函数查找信息,并且显示该记录的所有信息,并跳出循环。再用for语句内嵌if语句判断,如果没有查到显示提示信息:“如果没有查到相关语句,是否重新查找(Y/N)?定义abc模块的功能输入一个字符(“Y”或“y”“N”“n”)用来判断是否重新查找。如果输入“Y”或“y”,则用goto语句返回loop重新查找。否则令i的值为n跳出循环。最后返回主界面。4、删除好友信息:del()函数首先定义字符数组、变量和a、b两个goto标识符。在a模块中用scanf函数输入要删除的好友的姓名,用for循环和if语来实现对好友的查找,如果找到记录末尾,提示查无此人。在b模块中,用来实现删除功能。先确认是否删除,如果键盘输入Y或y来确认要删除再执行for循环,通过strcmpy函数把后一条记录复制到前一条记录。进行删除记录后,并把原末尾记录数据赋空字符,按任意键删除,按任意键返回主菜单。5、修改记录:modify()函数定义了a、b两个goto标识符。在a模块中,用scanf函数输入要修改人的姓名,用for循环、if语句及strcmp函数找到该姓名的记录,若到记录末尾提示“查无此人”是否继续重新输入姓名,黑龙江工程学院3如果重新输入姓名再用goto语句再执行重新查找。在b模块中,用于修改记录,如果要修改记录则从键盘输入Y或y,用scanf函数来输入新的记录数据来实现修改记录。6、排序:sort()函数选择法排序的方法。定义变量i,j,用于循环,定义4个字符型数组,用于替换的中间变量;用两个for循环语句,用strcmp函数比较。按姓名升序排序。比较前一条记录和后一条记录的姓名,如果strcmp函数值大于0,则将这两条记录的所有信息替换,4个字符型数组用作替换的中间变量。最后调用display()(显示结果)显示排序后的结果。第三章程序编码#includeiostream.h#includefstream.h#includestring.hstructstudent//结构体{charno[13];charname[20];charaddress[100];chartel_no[12];charpost_code[7];chare_mail[40];};classinter{private:studentst[35];public:voidadd(charno[13],charname[20],charaddress[100],chartel_no[12],charpost_code[7],chare_mail[40]);voiddel(charname[20]);voidfind1(charno[13]);voidfind2(charname[20]);voidlist1();voidlist2();intcorrect(charname[20]);voidread();voidwrite();黑龙江工程学院4voidformat();intback(){cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback;cinback;if(back=='R'||back=='r')return1;elsereturn0;}voidprint(inti){cout学号:st[i].noendl;cout姓名:st[i].nameendl;cout地址:st[i].addressendl;cout电话号码:st[i].tel_noendl;cout邮编:st[i].post_codeendl;coutE_MAIL:st[i].e_mailendl;}};//主函数首页intmain(){intera;a.format();charselect1;coutendl;top:cout\t\t计科N082endl\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★endl\t\t※※endl\t\t※通迅录※endl\t\t※※endl\t\t※1.通讯录编辑.4.按序排列.※endl\t\t※※endl\t\t※2.查询联系人.5.将文件读入程序.※endl\t\t※※endl\t\t※3.将资料写入文件.6.格式化(慎用).※endl\t\t※※endl\t\t★★★★★★★★★★★★★★★★★★★★★★★★★★endl\t\tendlendl\t\t\t选择:;cinselect1;switch(select1)黑龙江工程学院5{case'1':cout(1)添加:endl;cout(2)删除:endl;cout(3)修改:endl;charselect2;cout请选择:endl;cinselect2;switch(select2){case'1':cout输入添加的资料:endl;charno[13];charname[20];charaddress[100];chartel_no[12];charpost_code[7];chare_mail[40];cout输入学号:endl;cinno;cout输入姓名:endl;cinname;cout输入地址:endl;cinaddress;cout输入电话号码:endl;cintel_no;cout输入邮编:endl;cinpost_code;cout输入E_mail:endl;cine_mail;a.add(no,name,address,tel_no,post_code,e_mail);cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback_add;cinback_add;if(back_add=='R'||back_add=='r')gototop;elsegotobottom;break;case'2':cout输入要删除人的姓名:endl;charname2[20];cinname2;a.del(name2);cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;黑龙江工程学院6charback_del;cinback_del;if(back_del=='R'||back_del=='r')gototop;elsegotobottom;break;case'3':cout输入需要修改人的姓名:endl;charname3[20];cinname3;if(a.correct(name3))gototop;elsegotobottom;break;}break;case'2':cout(1)根据姓名查找endl;cout(2)根据学号查找endl;charselect3;cout请选择:;cinselect3;switch(select3){case'1':charname4[20];cout输入姓名:;cinname4;a.find2(name4);cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback_f1;cinback_f1;if(back_f1=='R'||back_f1=='r')gototop;elsegotobottom;break;case'2':charno4[13];cout输入学号:;cinno4;a.find1(no4);cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback_f2;cinback_f2;黑龙江工程学院7if(back_f2=='R'||back_f2=='r')gototop;elsegotobottom;break;}break;case'3':a.write();cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback_w;cinback_w;if(back_w=='R'||back_w=='r')gototop;elsegotobottom;break;case'4':cout(1)按学号排序:endl;cout(2)按姓名排序:endl;cout请选择:;charselect4;cinselect4;switch(select4){case'1':a.list1();cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback;cinback;if(back=='R'||back=='r')gototop;elsegotobottom;break;case'2':a.list2();cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback1;cinback1;if(back1=='R'||back1=='r')gototop;elsegotobottom;break;}黑龙江工程学院8break;case'5':a.read();cout返回还是回到主菜单(T为退出,R为回到主菜单,不计大小写):;charback_r;cinback_r;if(back_r=='R'||back_r=='r')gototop;elsegotobottom;break;case'6':cout请确认删除所有资料!(Y/N);charselect5;cinselect5;if(select5=='Y'||select5=='y')a.format();cout返回还是回到主菜单(T为退出,R为回