当前位置:文档之家› 题目通讯录管理系统

题目通讯录管理系统

题目 2 通讯录管理系统一.设计要求1、问题描述设有一通讯录,记录联系人的联系信息,包括联系人姓名、联系人多个联系电话、邮箱、联系地址以及所属群组。

联系人按姓氏序列升序排列并按顺序编号。

使用者能根据姓名或编号对联系人信息进行增删改查。

请编制一程序模拟该通讯录的管理。

2、设计要求1)基本要求(1) 新建联系人。

输入联系人的姓名、电话、email、地址和分组等信息,并插入通讯录的正确位置。

(2) 编辑联系人。

可修改、新增或删除联系人的电话、设置首个默认电话号码、修改或删除email、地址和分组等信息。

(3) 删除联系人。

可按姓名或序号删除联系人的信息。

(4) 查询联系人。

可按姓名或序号查询联系人的信息并输出。

(5) 群组管理。

可根据实际情况删除或新增分组,可为联系人分配群组或移除群组,并可按群组查询联系人信息。

(6) 输出通讯录。

按顺序输出通讯录的全部信息。

2)以下为选做:(7) 按姓名查询联系人时可进行模糊查询。

(8) 通过文件读写实现通讯录信息的读取和记录。

二.概要设计1.主界面设计为了实现通讯录管理系统,设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。

本系统主菜单运行界面如下图所示。

2.存储结构设计本系统主要采用链表结构类型存储联系人信息。

3.系统功能设计本系统分为以下7个功能模块。

(1)添加联系人:添加联系人子模块可完成添加联系人姓名、电话、email、地址和分组等信息,并插入通讯录的正确位置。

(2) 编辑联系人。

可修改、新增或删除联系人的电话、设置首个默认电话号码、修改或删除email、地址和分组等信息。

(3) 删除联系人。

可按姓名或序号删除联系人的信息。

(4) 查询联系人。

可按姓名或序号查询联系人的信息并输出。

(5) 群组管理。

可根据实际情况删除或新增分组,可为联系人分配群组或移除群组,并可按群组查询联系人信息。

(6) 输出通讯录。

按顺序输出通讯录的全部信息。

(7)可选择是否保存并退出系统。

三.模块设计1.模块设计本程序包含主程序模块,菜单选择模块和链表操作模块。

调用关系如图所示:主程序模块菜单选择块链表操作模块2.系统子程序及功能设计本系统共设置8个函数,其中包含主函数,各函数名及功能说明如下:void addman();//添加联系人void deleteman();//删除联系人void updateman();//修改联系人void searchman();//查找联系人void printcontact();//输出全部联系人void group();//分组void save();//保存联系人Int main();//主函数四.详细设计1.数据类型定义class Node{public:Node *next;string name; 姓名string num; 电话string email; 邮箱string address; 地址string group; 分组};class contact{public :Node *head;contact(){head=new Node;head->next=NULL;};void addman();//添加联系人void deleteman();//删除联系人void updateman();//修改联系人void searchman();//查找联系人void printcontact();//输出全部联系人void group();//分组void save();//保存联系人};2.系统主要子程序详细设计(1)主程序模块设计主函数:设定用户操作界面以及界面颜色和大小,调用菜单子模块函数int main(){system("color 0D");contact c;cout<<" ★*******★★★★★★*******★"<<endl;cout<<"**************★欢迎来到通讯录管理系统★**************"<<endl;cout<<" ★*******★★★★★★*******★"<<endl;int j;while(1){cout<<"*********************************************************"<<e ndl;cout<<"----☆★------| 1.添加联系人 | ----★☆------"<<endl;cout<<"----☆★------| 2.查询联系人 | ----★☆------"<< endl;cout<<"----☆★------| 3.删除联系人 | ----★☆------"<< endl;cout<<"----☆★----- | 4.修改联系人 | ----★☆------"<< endl;cout<<"----☆★----- | 5.查看分组 | ----★☆------"<< endl;cout<<"----☆★------| 6.输出全部联系人 | ----★☆------"<< endl;cout<<"----☆★------| 0.退出系统 | ----★☆------"<< endl;cout<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"<<e ndl;cout<<" ★★★★★★请**选**择★★★★★★:" <<endl;cin>>j;switch(j){case 1:{c.addman();}continue;case 2:{c.searchman();}continue;case 3:{c.deleteman();}continue;case 4:{c.updateman();}continue;case 5:{c.group();}continue;case 6:{c.printcontact();}continue;case 0:{char s;cout<<"\n★是否要保存您的所有操作(Y/N): "<<endl; cin>>s;if(s=='Y')c.save();exit(0);}continue;default :{cout<<"请输入正确的选择!!"<<endl;} break;}}return 0;}(2)添加联系人模块设计void contact::addman()//添加联系人{bool a=true;int i;Node *p;//新建结点,用来存放联系人信息while (a){p=new Node;//每循环一次,就新建结点存放联系人信息cout<<"*********请输入联系人信息:*********"<<endl ; cout<<"姓名:";cin>>p->name;cout<<"手机号码:";cin>>p->num;cout<<"email:";cin>>p->email;cout<<"地址:";cin >>p->address;cout<< "分组:";cin>>p->group;p->next=head->next;//头插法建立链表head->next=p;cout<<"*********添加成功*********!!!"<<endl;cout<<endl;cout<<"*********是否继续添加(是请输入1,否输入2)*********"<<endl;cin>>i;cout<<endl;if(i==1) {a=true;}else a=false;}}(3)删除联系人模块设计void contact::deleteman()//删除联系人{Node *p,*q;//定义两个结点指针p=q=head; //让指针都指向头结点string name,j;cout<<"*********请输入要删除的联系人姓名:*********"<<endl;cin >>name;while(p){if(p->name==name){break;} else{ q=p;p=p->next;} //让p为要删除的结点,q为前一个结点 }if (p){if (p==head)//如果要找到要删除联系人是头结点{head=p->next;delete p;}else{//要删除联系人不在头结点q->next=p->next;delete p;}cout<<"*********删除成功-!*********"<<endl;}else if(!p||p->next==NULL){cout<<"*********你要删除的联系人不存在!!*********"<<endl;cout<<"*********是否继续删除(是请输入1,否输入2):*********";cin>>j;if(j=="1") deleteman();exit(0);}cout<<endl;}(4)查询联系人模块设计void contact::searchman()//查询联系人{int x=0;//用来标记是否查询过int i;Node *p=new Node;string name;cout<<"*********请输入要查询的联系人名字:*********"<<endl;cin>>name;while(p){for(p=head->next;p!=NULL;p=p->next){if((p->name)==name){x=1;//查到后,与要查询的联系人名字一致后,标为1,否则为0cout<<" "<<"姓名:"<<p->name <<" "<<"手机号码:"<<p->num <<" "<<"email:"<<p->email <<" "<<"地址:"<<p->address <<" "<<"分组:"<<p->group <<" "<<endl;}}if(x==0){cout<<"*********你要查询的联系人不存在!!!!*********"<<endl;}cout<<"*********是否继续查询(是请输入1,否输入2):*********";cin>>i;if(i==1) searchman();}cout<<endl;}(5)修改联系人模块设计void contact::updateman()//修改联系人{int n,x=0;//用来标记是否查询过string i;Node *p=new Node;string name,num,email,address,group,t;cout<<"*********请输入要修改信息的联系人名字:*********"<<endl;cin>>name;while(p){for(p=head->next;p!=NULL;p=p->next){if((p->name)==name){x=1;//查到后,与要查询的联系人名字一致后,标为1,否则为0cout<<"*********请输入想要修改的信息:1.姓名 2.电话号码 3.email 4.地址 5.分组*********"<<endl;cin>>n;switch (n){case 1:{cout<<"*********请输入新的名字:*********"<<endl;cin>>name;p->name=name;cout<<"修改成功!!"<<endl;}break;case 2:{cout<<"*********请输入新的的电话号码:*********"<<endl;cin>>num;p->num=num;cout<<"修改成功!!"<<endl;}break;case 3:{cout<<"*********请输入新的email:*********"<<endl;cin>>email;p->email=email;cout<<"修改成功!!"<<endl;}break;case 4:{cout<<"*********请输入新的地址:*********"<<endl;cin>>address ;p->address=address;cout<<"修改成功!!"<<endl;}break;case 5:{cout<<"*********请输入新的分组:*********"<<endl;cin>>group ;p->group=group;cout<<"修改成功!!"<<endl;}break;}}}if(x==0){cout<<"*********你要修改的联系人不存在!!!!*********"<<endl;}}}(6)分组模块设计void contact::group()//分组{Node *p;p=head->next;string n;cout<<"请输入需要查看的分组:"<<endl;cin>>n;while(p!=NULL){if((p->group)==n){cout<<" "<<"姓名:"<<p->name <<" "<<"手机号码:"<<p->num <<" "<<"email:"<<p->email <<" "<<"地址:"<<p->address <<" "<<"分组:"<<p->group <<" "<<endl;p=p->next;continue;}break;}}(7)保存联系人模块设计void contact::save()//保存联系人{ofstream outfile("contacts.txt",ios::out);Node *p=head;while(p->next!=NULL){p=p->next;outfile<<p->name<<" "<<p->num<<" "<<p->email<<" "<<p->address<<" "<<p->group<<" "<<endl;}}(8)输出联系人模块设计void contact ::printcontact()//全部输出{ifstream intfile("contacts.txt",ios::in);Node *p;for(p=head->next;p!=NULL;p=p->next){cout<<" "<<"姓名:"<<p->name <<" "<<"手机号码:"<<p->num <<" "<<"email:"<<p->email <<" "<<"地址:"<<p->address <<" "<<"分组:"<<p->group <<" "<<endl;}cout<<endl;}五.测试分析系统运行主界面如下所示1.添加联系人菜单在主菜单下,用户输入1并回车运行按照要求输入信息结果如图所示2.查询联系人菜单在主菜单下,用户输入2并回车运行按照要求输入信息结果如图所示3.删除联系人菜单在主菜单下,用户输入3并回车运行按照要求输入信息结果如图所示4.修改联系人菜单在主菜单下,用户输入4并回车运行按照要求输入信息结果如图所示5.查看分组菜单在主菜单下,用户输入5并回车运行按照要求输入信息结果如图所示6.全部输出菜单在主菜单下,用户输入6并回车运行按照要求输入信息结果如图所示7.保存联系人菜单在主菜单下,用户输入0并回车运行按照要求输入信息结果如图所示六.源程序代码#include <iostream>#include <string>#include <fstream>#include <iomanip>using namespace std;class Node{public:Node *next;string name;string num;string email;string address;string group;};class contact{public :Node *head;contact(){head=new Node;head->next=NULL;};void addman();//添加联系人void deleteman();//删除联系人void updateman();//修改联系人void searchman();//查找联系人void printcontact();//输出全部联系人void group();//分组void save();//保存联系人};void contact::save()//保存联系人{ofstream outfile("contacts.txt",ios::out);Node *p=head;while(p->next!=NULL){p=p->next;outfile<<p->name<<" "<<p->num<<" "<<p->email<<" "<<p->address<<" "<<p->group<<" "<<endl;}}void contact::addman()//添加联系人{bool a=true;int i;Node *p;//新建结点,用来存放联系人信息while (a){p=new Node;//每循环一次,就新建结点存放联系人信息cout<<"*********请输入联系人信息:*********"<<endl ;cout<<"姓名:";cin>>p->name;cout<<"手机号码:";cin>>p->num;cout<<"email:";cin>>p->email;cout<<"地址:";cin >>p->address;cout<< "分组:";cin>>p->group;p->next=head->next;//头插法建立链表head->next=p;cout<<"*********添加成功*********!!!"<<endl;cout<<endl;cout<<"*********是否继续添加(是请输入1,否输入2)*********"<<endl;cin>>i;cout<<endl;if(i==1) {a=true;}else a=false;}}void contact::deleteman()//删除联系人{Node *p,*q;//定义两个结点指针p=q=head; //让指针都指向头结点string name,j;cout<<"*********请输入要删除的联系人姓名:*********"<<endl; cin >>name;while(p){if(p->name==name){break;} else{ q=p;p=p->next;} //让p为要删除的结点,q为前一个结点}if (p){if (p==head)//如果要找到要删除联系人是头结点{head=p->next;delete p;}else{//要删除联系人不在头结点q->next=p->next;delete p;}cout<<"*********删除成功-!*********"<<endl;}else if(!p||p->next==NULL){cout<<"*********你要删除的联系人不存在!!*********"<<endl;cout<<"*********是否继续删除(是请输入1,否输入2):*********";cin>>j;if(j=="1") deleteman();exit(0);}cout<<endl;}void contact::searchman()//查询联系人{int x=0;//用来标记是否查询过int i;Node *p=new Node;string name;cout<<"*********请输入要查询的联系人名字:*********"<<endl;cin>>name;while(p){for(p=head->next;p!=NULL;p=p->next){if((p->name)==name){x=1;//查到后,与要查询的联系人名字一致后,标为1,否则为0cout<<" "<<"姓名:"<<p->name <<" "<<"手机号码:"<<p->num <<" "<<"email:"<<p->email <<" "<<"地址:"<<p->address <<" "<<"分组:"<<p->group <<" "<<endl;}}if(x==0){cout<<"*********你要查询的联系人不存在!!!!*********"<<endl;}cout<<"*********是否继续查询(是请输入1,否输入2):*********";cin>>i;if(i==1) searchman();}cout<<endl;}void contact::updateman()//修改联系人{int n,x=0;//用来标记是否查询过string i;Node *p=new Node;string name,num,email,address,group,t;cout<<"*********请输入要修改信息的联系人名字:*********"<<endl;cin>>name;while(p){for(p=head->next;p!=NULL;p=p->next){if((p->name)==name){x=1;//查到后,与要查询的联系人名字一致后,标为1,否则为0cout<<"*********请输入想要修改的信息:1.姓名 2.电话号码 3.email 4.地址 5.分组*********"<<endl;cin>>n;switch (n){case 1:{cout<<"*********请输入新的名字:*********"<<endl;cin>>name;p->name=name;cout<<"修改成功!!"<<endl;}break;case 2:{cout<<"*********请输入新的的电话号码:*********"<<endl;cin>>num;p->num=num;cout<<"修改成功!!"<<endl;}break;case 3:{cout<<"*********请输入新的email:*********"<<endl;cin>>email;p->email=email;cout<<"修改成功!!"<<endl;}break;case 4:{cout<<"*********请输入新的地址:*********"<<endl;cin>>address ;p->address=address;cout<<"修改成功!!"<<endl;}break;case 5:{cout<<"*********请输入新的分组:*********"<<endl;cin>>group ;p->group=group;cout<<"修改成功!!"<<endl;}break;}}}if(x==0){cout<<"*********你要修改的联系人不存在!!!!*********"<<endl;}}}void contact::group()//分组{Node *p;p=head->next;string n;cout<<"请输入需要查看的分组:"<<endl;cin>>n;while(p!=NULL){if((p->group)==n){cout<<" "<<"姓名:"<<p->name <<" "<<"手机号码:"<<p->num <<" "<<"email:"<<p->email <<" "<<"地址:"<<p->address <<" "<<"分组:"<<p->group <<" "<<endl;p=p->next;continue;}break;}}void contact ::printcontact()//全部输出{ifstream intfile("contacts.txt",ios::in);Node *p;for(p=head->next;p!=NULL;p=p->next){cout<<" "<<"姓名:"<<p->name <<" "<<"手机号码:"<<p->num <<" "<<"email:"<<p->email <<" "<<"地址:"<<p->address <<" "<<"分组:"<<p->group <<" "<<endl;}cout<<endl;}主函数代码#include <iostream>#include <string>#include <string.h>#include <iomanip>#include <fstream>#include<windows.h>#include"Contact.h"using namespace std;int main(){system("color 0D");contact c;cout<<" ★*******★★★★★★*******★"<<endl;cout<<"**************★欢迎来到通讯录管理系统★**************"<<endl;cout<<" ★*******★★★★★★*******★"<<endl;int j;while(1){cout<<"*********************************************************"<<e ndl;cout<<"----☆★------| 1.添加联系人 | ----★☆------"<<endl;cout<<"----☆★------| 2.查询联系人 | ----★☆------"<< endl;cout<<"----☆★------| 3.删除联系人 | ----★☆------"<< endl;cout<<"----☆★----- | 4.修改联系人 | ----★☆------"<< endl;cout<<"----☆★----- | 5.查看分组 | ----★☆------"<< endl;cout<<"----☆★------| 6.输出全部联系人 | ----★☆------"<< endl;cout<<"----☆★------| 0.退出系统 | ----★☆------"<< endl;cout<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"<<e ndl;cout<<" ★★★★★★请**选**择★★★★★★:" <<endl;cin>>j;switch(j){case 1:{c.addman();}continue;case 2:{c.searchman();}continue;case 3:{c.deleteman();}continue;case 4:{c.updateman();}continue;case 5:{c.group();}continue;case 6:{c.printcontact();}continue;case 0:{char s;cout<<"\n★是否要保存您的所有操作(Y/N): "<<endl; cin>>s;if(s=='Y')c.save();exit(0);}continue;default :{cout<<"请输入正确的选择!!"<<endl;} break;}}return 0;}七.用户手册1.本程序执行文件为“通讯录管理系统.exe”。

相关主题