您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 人员通讯录1、问题描述编写一个简单的通讯录管理程序。通讯录记
人员通讯录1、问题描述编写一个简单的通讯录管理程序。通讯录记录有姓名,地址(省、市(县)、街道),电话号码,邮政编码等四项。程序应提供的基本管理功能有:1)添加:即增加一个人的记录到通讯录中。2)显示:即在屏幕上显示所有通讯录中的人员信息,应能分屏显示。3)存储:即将通讯录信息保存到一个文件中。4)装入:即将文件中的信息读入程序。5)查询:可根据姓名查找某人的相关信息,若找到显示其心目、地址、电话号码和邮政编码。6)修改:可修改一个人的除姓名外其他信息。注意:测试数据中应考虑到人员可以同名的情况。2、问题解析�方法一:程序中使用自定义类Person存储通讯录中单条记录的信息(一个联系人的所有信息),Phbok类表示通讯录,通讯录存储在无头节点的链表中,链表节点为结构体element。所使用知识点为:类,枚举类型,文件流操作,运算符重载(),链表,字符串操作,指针操作,对输入进行了异常处理。由Phbok类实现所有的功能,其不同的函数实现不同的功能:1)添加:由add函数完成,数据从标准输入读取2)显示:由show函数完成,输出6条记录后暂停输出,按任一键继续输出3)存储:由store函数完成,用到了重载的输出运算符4)装入:由input函数完成,函数中用到了skipws跳过多余的空白字符5)查询:由search函数完成,挨个节点搜索链表,若搜到则将节点移至链表头6)修改:由modify函数完成,根据用户输入的姓名搜索联系人,若找到多个同名的联系人,则再让用户选择要修改的联系人,选好联系人后可选择不同的项进行修改Phbok类中move_to_head函数用于将链表中的节点移至链首,center函数用于提供用户操作接口。main函数实现创建通讯录、编辑通讯录和退出程序三个功能。�方法二:程序中使用结构contactData存储通讯录中单条记录的信息(一个联系人的所有信息),构造类contact表示通讯录,contact中用一个数组std::vectorcontactDatacData表示通讯录,在contact中定义相关操作,从而实现通讯录功能,如:private:boolparse(std::stringstr);voidFindName();voidFindGroup();voidfindOption();public:contact();boolOpenFile(std::stringfileName);boolSaveAs(std::stringfileName);boolAdd();boolDelete();boolFind();boolPrint();boolClear();intsize();应用程序中包含Main函数和菜单选择函数Option。该程序还对通讯录进行了一些扩展,如对通讯录里的成员进行分组,如:家人、朋友、同事及其他。�方法三:程序创建一个Person类,表示通讯录的每条记录,将每条记录的指针存储在STL中的list容器中。所使用知识点为:类,文件流操作,运算符重载(),STL中的容器和迭代器,字符串操作。1)voidinputfromfile(char*file_name,listPerson*&list2)//从文件读入通讯录2)voidoutputtoscreen(listPerson*list3)//输出通讯录到屏幕3)voidinsertfromscreen(listPerson*&list2,char*file_name)//从屏幕读入时将一条记录插入到文件末端4)intsearch(char*name,listPerson*&list2)//输入姓名,从已有通讯录查找5)intmodify(char*name,listPerson*&list2)//修改已有记录,可逐项修改Main函数进行流程控制3、示例程序方法一://person.h#includeiostream#includefstreamusingnamespacestd;enumItem{It_name,It_province,It_city,It_street,It_phone_num,It_postaddr};classPerson{public:Person();voidset_item(char*name,char*province,char*city,char*street,char*phone_num,intpostaddr);friendostream&operator(ostream&stream,Person&p);voidmodify_item(Itemit);~Person();public:char*m_name;char*m_province;char*m_city;char*m_street;char*m_phone_num;unsignedlongm_postaddr;};structelement{Personp;element*next;element(){next=0;}};typedefelement*Node;classPhonebook{public:Nodehead;public:Phonebook(){head=NULL;}voidadd_person(char*name1=0,char*province1=0,char*city1=0,char*street1=0,char*phone_num=0,intpostadd=0);voidsave_to_file(char*file_name=0);Nodesearch(Nodestart,char*name,int&count,intndo=0,intmshow=1);voiddisplay();voidload_from_file(char*file_name=0);voidmodify_person(char*name);voidmove_to_head(Nodemoved);voidopt_center();~Phonebook();};//phonebook.cpp#includecstdlib#includecstring#includeiomanip#includefstream#includeconio.h#includeperson.husingnamespacestd;staticintstn=0;Person::Person(){m_name=0;m_province=0;m_city=0;m_street=0;m_phone_num=0;m_postaddr=0;}Person::~Person(){if(m_name!=0)deletem_name;if(m_province!=0)deletem_province;if(m_city!=0)deletem_city;if(m_street!=0)deletem_street;if(m_phone_num!=0)deletem_phone_num;}voidPerson::modify_item(Itemit){char*item;switch(it){caseIt_name:item=m_name;break;caseIt_province:item=m_province;break;caseIt_city:item=m_city;break;caseIt_street:item=m_street;break;caseIt_phone_num:item=m_phone_num;break;default:item=NULL;};if(!item)return;char*temp=newchar[20];cintemp;if(item!=0)deleteitem;item=newchar[strlen(temp)+1];strcpy(item,temp);deletetemp;}//修改联系人的信息voidPerson::set_item(char*name,char*province,char*city,char*street,char*phone_num,intpostaddr){m_name=newchar[strlen(name)+1];m_province=newchar[strlen(province)+1];m_city=newchar[strlen(city)+1];m_street=newchar[strlen(street)+1];m_phone_num=newchar[strlen(phone_num)+1];strcpy(m_name,name);strcpy(m_province,province);strcpy(m_city,city);strcpy(m_street,street);strcpy(m_phone_num,phone_num);m_postaddr=postaddr;}voidPhonebook::add_person(char*name1,char*province1,char*city1,char*street1,char*phone_num1,intpostaddr1){Nodetemp;do{temp=newelement;}while(!temp);if(name1==0)//若姓名为空则提示用户输入信息{char*name1=newchar[20];char*province1=newchar[20];char*city1=newchar[20];char*street1=newchar[20];char*phone_num1=newchar[20];cout姓名省份城市街道电话号码邮政编码\n;cinname1province1city1street1phone_num1postaddr1;temp-p.set_item(name1,province1,city1,street1,phone_num1,postaddr1);temp-next=head;head=temp;deletename1;deleteprovince1;deletecity1;deletestreet1;deletephone_num1;return;}else{temp-p.set_item(name1,province1,city1,street1,phone_num1,postaddr1);temp-next=head;head=temp;return;}}//overloadofPersonostream&operator(ostream&stream,Person&p){stream.setf(ios::left);streamp.m_namep.m_provincep.m_cityp.m_streetp.m_phone_nump.m_postaddr;returnstream;}voidPhonebook::save_to_file(char*file_name){char*outfile;if(!file_name)//如果文件名为空则提示输入文件名{cout请输入文件名:endl;char*file_name=newchar[20];cinfile_name;outfile=newchar[strlen(file_name)+1];strcpy(outfile,file_name);deletefile_name;}else{outfile=newchar[strlen(file_name)+1];strcpy(outfile,file_name);}ofstreamoutput_file(outfile);if(head==0){cout通讯录是空的!\n;deleteoutfile;return;}else{for(Nod
本文标题:人员通讯录1、问题描述编写一个简单的通讯录管理程序。通讯录记
链接地址:https://www.777doc.com/doc-1020315 .html