学生通讯录管理系统设计第1页共25页1需求分析1.1设计任务要求通讯录系统主要包含以下要求:(1)设计一个学生通讯录管理系统,每个学生数据信息包括:姓名、电话号码、qq、邮编和地址;(2)创建学生数据类型为结构体并以磁盘文件保存;(3)能读取磁盘文件并显示输出学生的相关信息;(4)能按姓名或电话等多种方式进行学生信息查询;(5)能查询、添加、修改和删除学生通讯录。1.2系统功能需求分析系统主要包含以下主要功能:(1)查询通讯录记录;(2)添加通讯录记录;(3)修改通讯录记录;(4)删除通讯录记录;(5)关闭通讯录。学生通讯录管理系统设计第2页共25页2概要设计2.1数据类型本系统中所有变量都定义为字符串型,学生通讯录数据类型定义为结构体类型。然而为了更加方便,添加了抽象数据类型类book,再私有继承了以结构体存储的学生数据。2.2主程序及各程序层次关系以下是系统功能模块关系图,主要包含查询、添加、修改、删除联系人和关闭系统等功能。另外还提供了键盘式选择菜单实现功能选择。图2.1系统功能模块关系图查询联系人:可以选择用姓名和电话两种方式查询添加联系人:可以添加通讯录记录,依次输入姓名、电话、qq、邮编和地址修改联系人:输入欲修改联系人姓名后,再依次输入修改姓名、电话、qq、邮编和地址即可完成修改删除联系人:输入欲删除联系人的姓名后,会自动删除该联系人的记录内容关闭系统:选择相关操作进行系统正常关闭,保存有效数据记录学生通讯录查询联系人添加联系人修改联系人删除联系人关闭系统学生通讯录管理系统设计第3页共25页3详细设计3.1实现数据类型(1)以字符串类型定义通讯录中学生数据信息变量:stringname;//姓名stringnumber;//电话号码stringqq;//QQ号stringpost;//邮编stringaddress;//地址(2)学生通讯录数据类型定义为结构体存储:structinf{stringname;//姓名stringaddress;//地址stringnumber;//电话号码stringpost;//邮编stringqq;//QQ号}datatype;(3)实现类book私有继承结构体inf:classbook:privateinf{public:book(){};//默认构造函数intface();//首页voidadd_person();//添加联系人voiddel_person();//删除联系人voidfix();//修改信息voidfind();//查询联系人voidsave_new();//保存新增加的联系人};3.2实现各操作模块的功能学生通讯录管理系统设计第4页共25页(1)主函数的实现:intmain(){intchoose;bookb;while(choose=b.face()){switch(choose){case1:b.find();////查询联系人break;case2:b.add_person();////添加联系人break;case3:b.fix();////修改信息break;case4:b.del_person();////删除联系人break;case5:coutendl谢谢使用!!!endlendl;exit(0);//退出系统break;default:break;}}return0;}(2)各操作模块函数的实现:voidbook::add_person()//添加联系人{coutendl请根据提示输入信息endlendl学生通讯录管理系统设计第5页共25页cout姓名:;cinname;cout电话:;cinnumber;coutQQ:;cinqq;cout邮编:;cinpost;cout地址:;cinaddress;save_new();coutendlendl新联系人信息已经保存好!endlendl;system(pause);//出现中文的显示:按任意键继续。。。}voidbook::del_person()//删除联系人{ofstreamoutData(temp.txt,ios::out);ifstreaminData(pbook.txt,ios::in);if(!outData||!inData){coutendl对不起!找不到文件!endl;system(pause);return;}strings;coutendl你要删除输入姓名、电话或QQ:;cins;stringstr;boolflag=true;while(inDatanamenumber){getline(inData,str);if((s==name)||(s==number)){coutendl你想删除的联系人:endlendl;coutsetiosflags(ios::left)setw(17)姓名setw(16)电话号码setw(18)QQsetw(14)邮编setw(20)地址endl;coutsetiosflags(ios::left)setw(17)namenumberstrendlendl;flag=false;break;学生通讯录管理系统设计第6页共25页}outDatasetiosflags(ios::left)setw(17)name//将不删除的信息放到temp.txtnumberqqstrendl;}if(flag){coutendl对不起!联系人中没你找的人!endlendl;}else//将temp.txt的数据复制到pbook.txt,直接覆盖要删除的信息,达到删除效果{while(getline(inData,str)){outDatastrendl;}outData.close();inData.close();ofstreamout(pbook.txt,ios::out);ifstreamin(temp.txt,ios::in);if(!out||!in){coutendl对不起!不能打开文件!endlendl;system(pause);return;}while(getline(in,str)){outstrendl;}out.close();in.close();coutendl该联系人信息已从通迅录中删除!!!endlendl;}system(pause);}voidbook::fix()//修改信息{ofstreamoutData(temp.txt,ios::out);ifstreaminData(pbook.txt,ios::in);//学生通讯录管理系统设计第7页共25页if(!outData||!inData){coutendl对不起!!!!找不到文件!!!!endl;system(pause);return;}strings;coutendl你要修改输入姓名或电话号:;cins;boolflag=true;stringstr;while(inDatanamenumber){getline(inData,str);if((s==name)||(s==number)){coutendl你想修改的联系人:endlendl;coutsetiosflags(ios::left)setw(17)姓名setw(16)电话号码setw(18)QQsetw(14)邮编setw(20)地址endl;coutsetiosflags(ios::left)setw(17)namenumberstrendl;coutendl请根据下面提示修改信息:endl;cout姓名:;cinname;cout电话号:;cinnumber;coutQQ:;cinqq;cout邮编:;cinpost;cout地址:;cinaddress;save_new();flag=false;break;}outDatasetiosflags(ios::left)setw(17)namenumberstrendl;}if(flag)学生通讯录管理系统设计第8页共25页{coutendl对不起!!!联系人中没你找的人!!!!endlendl;}else{while(getline(inData,str)){outDatastrendl;}outData.close();inData.close();ofstreamout(pbook.txt,ios::out);ifstreamin(temp.txt,ios::in);if(!out||!in){coutendl对不起!不能打开文件!endlendl;system(pause);return;}while(getline(in,str)){outstrendl;}out.close();//in.close();coutendl该联系人已在通迅录中修改!!!endlendl;}system(pause);}voidbook::find()//查询联系人{ifstreaminData(pbook.txt,ios::in);if(!inData){coutendl对不起!文件找不到!endl;system(pause);return;}strings;coutendl输入你想查找的联系人的姓名、电话或QQ:;cins;boolflag=true;stringstr;学生通讯录管理系统设计第9页共25页while(inDatanamenumber){getline(inData,str);if((name==s)||(number==s)){coutendl你要查找的联系人是:endlendl;coutsetiosflags(ios::left)setw(17)姓名setw(16)电话号码setw(18)QQsetw(14)邮编setw(20)地址endl;coutsetiosflags(ios::left)setw(17)namenumberstrendlendl;flag=false;break;}}if(flag){coutendl该联系人不存在!endlendl;}system(pause);}voidbook::save_new(){ofstreamf(pbook.txt,ios::app);if(!f){coutendl对不起!打开文件失败!endlendl;system(pause);return;}fsetiosflags(ios::left)setw(17)namesetw(16)numbersetw(18)qqsetw(14)postsetw(20)addressendl;f.close();}学生通讯录管理系统设计第10页共25页4调试分析1.在程序的调试过程中遇上了文件存储数据的正确读取错误,但经过不断查问和查阅相关书籍后,根据调试提示错误,解决了所有错误。通过文件存储学生数据信息,使得读取信息操作更加方便、省事;2.在执行操作时,是根据文件搜索算法,去获取学生数据信息。使得在时间和空间上读取数据都要更加快捷、省事。其时间复杂度为O(2n);3.经过这一