您好,欢迎访问三七文档
黔南民族师范学院C++课程设计名称:通讯录管理系统指导老师:学号:姓名:系别:计算机科学系班级:B12计科1、问题描述定义通讯录类,属性有:编号、姓名、性别、通讯地址、邮箱地址、电话等信息和相关的对属性做操作的行为。主要完成对通讯录的简单管理。2、功能要求(1)添加功能:程序能够添加通讯录信息,要求编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。(2)查询功能:可根据姓名、电话、邮箱地址等信息对已添加的信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;(3)显示功能:可显示当前系统中所有通讯信息,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除功能:主要实现对已添加的通讯记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作。(6)保存功能:可将当前系统中通讯录记录存入文件中,存入方式任意。(7)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。3、问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述;(5)完成类中各个成员函数的定义;(6)完成系统的应用模块;(7)功能调试;(8)完成系统总结报告。实体间与属性联系:功能描述添加功能:能够向链表之中输入相关的信息,在编号重复时取消本次输入,并且一次只能输入一条信息。删除功能:根据唯一标识一个对象的属性,删除与之对应的信息。修改功能:根据唯一标识一个对象的属性,选选择要修改的数据项进行修改。ClassPersonClassmanageNoNamemepostaddreTelSex友元类moddifyAddSaveLookdeleteFindNoName阅览功能:是对所有的数据进行访问,不能改变其中任何数据。查询功能:按照当前给定的信息,查询详细详细。保持功能:时对所有数据进行存档,方便以后的操作,如果一个程序没有保持功能,每一次使用时会更繁琐,保存其实是程序不可缺少的功能之一。读取功能:将已存在的数据从文档中读取出来;本程序是通过在建立对象时,系统自己调用构造函数实现的,如果将其单独作为一功能也是可以的,但是那样似乎比较繁琐。建立类:Person:数据成员stringNo;//编号stringpost;//邮箱地址stringaddre;//联系地址charName[20];//姓名charSex[10];//性别stringTel;//联系方式成员函数Person(stringID,char*Name,char*Sex,stringpost,stringTel,stringaddre)构造函数friendclassManage;manage作为有元函数,可以访问person类manage:数据成员Person*person建立了一个基类指针成员函数Manage()构造函数~Manage(){}//析构函数voidFindName();//按姓名查找oidFindID();//按编号查找voidAdd();//添加加信息voidDelete();//删除信息voidModify();//修改信息voidSave();//保存数据voidLoad();//读入数据voidLook();//预览程序首页添加功能阅览功能查找功能删除功能修改功能代码源程序:#includeiostream#includefstream#includestringusingnamespacestd;stringID;//编号唯一性classPerson{protected:stringNo;//编号stringpost;//邮箱地址stringaddre;//联系地址charName[20];//姓名charSex[10];//性别stringTel;//联系方式Person*next;//建立联系人的指针nextpublic:Person(stringID,char*Name,char*Sex,stringpost,stringTel,stringaddre)//有参构造函数{strcpy(this-Name,Name);strcpy(this-Sex,Sex);this-Tel=Tel;//this指针是指当前对象指针this-No=ID;this-post=post;this-addre=addre;}friendclassManage;//把manage作为有元函数,可以访问person类};classManage{protected:Person*person;public:Manage(){person=0;Load();//建立对象的同时,调用了读取这个函数}~Manage(){}//析构函数voidFindName();//按姓名查找voidFindID();//按编号查找voidAdd();//添加加信息voidDelete();//删除信息voidModify();//修改信息voidSave();//保存数据voidLoad();//读入数据voidLook();//预览};voidManage::Add(){Person*p,*p2;//新结点指针stringNo,post,Tel,addre;charName[20],Sex[10];charc;cout\n**新增联系人通讯录**\n;cout输入学号:\t;//输入联系人信息cinNo;coutendl;{Person*p1;p1=person;while(p1){if(p1-No==No){break;}else{p1=p1-next;}}if(p1!=NULL){cout该编号已存在,取消改该联系人的信息添加endlendl;return;}}cout输入:姓名性别邮箱地址联系方式联系地址,(并用逗号隔开)endl;cinNameSexpostTeladdre;p=newPerson(No,Name,Sex,post,Tel,addre);p-next=0;//联系人结点加入链表if(person)//若已经存在结点{p2=person;while(p2-next)//查找尾结点{p2=p2-next;}p2-next=p;//连接}else//若不存在结点(表空){person=p;//连接}return;}voidManage::Delete()//删除联系人{charc;stringNo;cout\n**删除信息**\n;cout输入要删除的联系人编号:\t;cinNo;coutendl;//查找要删除的结点Person*p1,*p2;p1=person;while(p1){if(p1-No==No)break;else{p2=p1;p1=p1-next;}}//删除结点if(p1!=NULL)//若找到结点,则删除{if(p1==person)//若要删除的结点是第一个结点{person=p1-next;deletep1;}else//若要删除的结点是后续结点{p2-next=p1-next;deletep1;}cout\t\t***删除成功***\n;return;}else//未找到结点cout未找到该联系人!\n;}voidManage::Modify(){cout请输入要修改联系人的编号:;cinID;coutendl;Person*p1;charc;p1=person;while(p1){if(p1-No==ID){cout所要修改的联系人的信息如下:\nendl;cout编号:p1-No\t姓名:p1-Name\t性别:p1-Sex\t年龄:p1-post\t电话:p1-Tel\t联系地址:p1-addreendl;coutendlendl;break;}else{p1=p1-next;}}if(p1!=NULL)//若找到结点{do{cout1.修改姓名2.修改性别3.修改邮箱地址4.修改联系方式5.修改联系地址0.退出\nendl;cout请选择(1-5)要修改的信息\nendl;cinc;if(c!='0')cout请输入新的信息:;switch(c){case'1':cinp1-Name;break;case'2':cinp1-Sex;break;case'3':cinp1-post;break;case'4':cinp1-Tel;break;case'5':cinp1-addre;break;default:break;}}while(c!='0');cout\t***修改成功***\nendlendl;return;}elsecout未找到该学生!\n;}//fPersonp-Nop-Namep-Sexp-postp-Telendl;voidManage::Save()//数据写入到文件{ofstreamfPerson(Person.txt,ios::out);if(!fPerson){cerropenerror!endl;abort();}charc;cout\n保存数据,是否继续?[Y/N]:;cinc;if(toupper(c)!='Y')return;Person*p=person;while(p){fPersonp-Nop-Namep-Sexp-postp-Telp-addreendl;p=p-next;}fPerson.close();cout\n保存成功...\n;}voidManage::Load()//数据读入{ifstreamfPerson;Person*p=person;stringNo,Tel,post,addre;charName[20],Sex[10];fPerson.open(person.txt,ios::in);if(!fPerson){cerropenerrorendl;abort();}fPersonNoNameSexpostTeladdre;while(fPerson.good()){p=newPerson(No,Name,Sex,post,Tel,addre);p-next=0;//联系人结点加入链表if(person)//若已经存在结点{Person*p2;p2=person;while(p2-next)//查找尾结点{p2=p2-next;}p2-next=p;//连接}else//若不存在结点(表空){person=p;//连接}fPersonNoNameSexpostTeladdre;}fPerson.close();}voidManage::FindID(){cout请输入要修改联系人的编号:;cinID;coutendl;Person*p1;p1=person;while(p1){if(p1-No==ID){cout编号:p1-No\t姓名:p1-Name\t性别:p1-Sex\t年龄:p1-post\t电话:p1-Tel\t联系地址:p1-addreendlendl;break;}else{p1=p1-next;}}if(p1!=NULL){}elsecout未找到该联系人endl;}voidManage::FindNam
本文标题:通讯录C++代码
链接地址:https://www.777doc.com/doc-4994634 .html