题目2通讯录管理系统方案.docx
《题目2通讯录管理系统方案.docx》由会员分享,可在线阅读,更多相关《题目2通讯录管理系统方案.docx(27页珍藏版)》请在冰豆网上搜索。
![题目2通讯录管理系统方案.docx](https://file1.bdocx.com/fileroot1/2022-12/16/739c3586-4e5c-4574-8d98-2067a77e960a/739c3586-4e5c-4574-8d98-2067a77e960a1.gif)
题目2通讯录管理系统方案
题目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)可选择是否保存并退出系统。
3.模块设计
1.模块设计
本程序包含主程序模块.菜单选择模块和链表操作模块。
调用关系如图所示:
主程序模块
菜单选择块
链表操作模块
2.系统子程序及功能设计
本系统共设置8个函数.其中包含主函数.各函数名及功能说明如下:
voidaddman();//添加联系人
voiddeleteman();//删除联系人
voidupdateman();//修改联系人
voidsearchman();//查找联系人
voidprintcontact();//输出全部联系人
voidgroup();//分组
voidsave();//保存联系人
Intmain();//主函数
4.详细设计
1.数据类型定义
classNode{
public:
Node*next;
stringname;姓名
stringnum;电话
stringemail;邮箱
stringaddress;地址
stringgroup;分组
};
classcontact{
public:
Node*head;
contact(){head=newNode;head->next=NULL;};
voidaddman();//添加联系人
voiddeleteman();//删除联系人
voidupdateman();//修改联系人
voidsearchman();//查找联系人
voidprintcontact();//输出全部联系人
voidgroup();//分组
voidsave();//保存联系人
};
2.系统主要子程序详细设计
(1)主程序模块设计
主函数:
设定用户操作界面以及界面颜色和大小.调用菜单子模块函数
intmain()
{
system("color0D");
contactc;
cout<<"★*******★★★★★★*******★"<cout<<"**************★欢迎来到通讯录管理系统★**************"<cout<<"★*******★★★★★★*******★"<intj;
while
(1){
cout<<"*********************************************************"<cout<<"----☆★------|1.添加联系人|----★☆------"<cout<<"----☆★------|2.查询联系人|----★☆------"<cout<<"----☆★------|3.删除联系人|----★☆------"<cout<<"----☆★-----|4.修改联系人|----★☆------"<cout<<"----☆★-----|5.查看分组|----★☆------"<cout<<"----☆★------|6.输出全部联系人|----★☆------"<cout<<"----☆★------|0.退出系统|----★☆------"<cout<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"<cout<<"★★★★★★请**选**择★★★★★★:
"<cin>>j;
switch(j){
case1:
{
c.addman();
}continue;
case2:
{
c.searchman();
}continue;
case3:
{
c.deleteman();
}continue;
case4:
{
c.updateman();
}continue;
case5:
{
c.group();
}continue;
case6:
{
c.printcontact();
}continue;
case0:
{
chars;
cout<<"\n★是否要保存您的所有操作(Y/N):
"<cin>>s;
if(s=='Y')
c.save();
exit(0);
}continue;
default:
{cout<<"请输入正确的选择!
!
"<break;
}
}
return0;
}
(2)添加联系人模块设计
voidcontact:
:
addman()//添加联系人
{
boola=true;
inti;
Node*p;//新建结点.用来存放联系人信息
while(a)
{
p=newNode;//每循环一次.就新建结点存放联系人信息
cout<<"*********请输入联系人信息:
*********"<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<<"*********添加成功*********!
!
!
"<cout<cout<<"*********是否继续添加(是请输入1,否输入2)*********"<cin>>i;
cout<if(i==1){a=true;}
elsea=false;
}
}
(3)删除联系人模块设计
voidcontact:
:
deleteman()//删除联系人
{
Node*p,*q;//定义两个结点指针
p=q=head;//让指针都指向头结点
stringname,j;
cout<<"*********请输入要删除的联系人姓名:
*********"<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;
deletep;
}else{
//要删除联系人不在头结点
q->next=p->next;
deletep;
}
cout<<"*********删除成功-!
*********"<}elseif(!
p||p->next==NULL){
cout<<"*********你要删除的联系人不存在!
!
*********"<cout<<"*********是否继续删除(是请输入1.否输入2):
*********";
cin>>j;
if(j=="1")deleteman();
exit(0);
}
cout<}
(4)查询联系人模块设计
voidcontact:
:
searchman()//查询联系人
{
intx=0;//用来标记是否查询过
inti;
Node*p=newNode;
stringname;
cout<<"*********请输入要查询的联系人名字:
*********"<cin>>name;
while(p)
{
for(p=head->next;p!
=NULL;p=p->next){
if((p->name)==name)
{
x=1;//查到后.与要查询的联系人名字一致后.标为1.否则为0
cout<<""<<"姓名:
"<name<<""<<"手机号码:
"<num<<""<<"email:
"<email<<""<<"地址:
"<address<<""<<"分组:
"<group<<""<}
}
if(x==0){cout<<"*********你要查询的联系人不存在!
!
!
!
*********"<cout<<"*********是否继续查询(是请输入1.否输入2):
*********";
cin>>i;
if(i==1)searchman();
}
cout<}
(5)修改联系人模块设计
voidcontact:
:
updateman()//修改联系人
{
intn,x=0;//用来标记是否查询过
stringi;
Node*p=newNode;
stringname,num,email,address,group,t;
cout<<"*********请输入要修改信息的联系人名字:
*********"<cin>>name;
while(p)
{
for(p=head->next;p!
=NULL;p=p->next){
if((p->name)==name)
{
x=1;//查到后.与要查询的联系人名字一致后.标为1.否则为0
cout<<"*********请输入想要修改的信息:
1.姓名2.电话号码3.email4.地址5.分组*********"<cin>>n;
switch(n)
{
case1:
{
cout<<"*********请输入新的名字:
*********"<cin>>name;
p->name=name;
cout<<"修改成功!
!
"<}break;
case2:
{
cout<<"*********请输入新的的电话号码:
*********"<cin>>num;
p->num=num;
cout<<"修改成功!
!
"<}break;
case3:
{
cout<<"*********请输入新的email:
*********"<cin>>email;
p->email=email;
cout<<"修改成功!
!
"<}break;
case4:
{
cout<<"*********请输入新的地址:
*********"<cin>>address;
p->address=address;
cout<<"修改成功!
!
"<}break;
case5:
{
cout<<"*********请输入新的分组:
*********"<cin>>group;
p->group=group;
cout<<"修改成功!
!
"<}break;
}
}
}
if(x==0){cout<<"*********你要修改的联系人不存在!
!
!
!
*********"<}
}
(6)分组模块设计
voidcontact:
:
group()//分组
{
Node*p;
p=head->next;
stringn;
cout<<"请输入需要查看的分组:
"<cin>>n;
while(p!
=NULL)
{
if((p->group)==n)
{
cout<<""<<"姓名:
"<name<<""<<"手机号码:
"<num<<""<<"email:
"<email<<""<<"地址:
"<address<<""<<"分组:
"<group<<""<p=p->next;continue;
}
break;
}
}
(7)保存联系人模块设计
voidcontact:
:
save()//保存联系人
{
ofstreamoutfile("contacts.txt",ios:
:
out);
Node*p=head;
while(p->next!
=NULL)
{
p=p->next;
outfile<name<<""<num<<""<email<<""<address<<""<group<<""<}
}
(8)输出联系人模块设计
voidcontact:
:
printcontact()//全部输出
{
ifstreamintfile("contacts.txt",ios:
:
in);
Node*p;
for(p=head->next;p!
=NULL;p=p->next)
{
cout<<""<<"姓名:
"<name<<""<<"手机号码:
"<num<<""<<"email:
"<email<<""<<"地址:
"<address<<""<<"分组:
"<group<<""<}
cout<
}
5.测试分析
系统运行主界面如下所示
1.添加联系人菜单
在主菜单下.用户输入1并回车运行按照要求输入信息
结果如图所示
2.查询联系人菜单
在主菜单下.用户输入2并回车运行按照要求输入信息
结果如图所示
3.删除联系人菜单
在主菜单下.用户输入3并回车运行按照要求输入信息
结果如图所示
4.修改联系人菜单
在主菜单下.用户输入4并回车运行按照要求输入信息
结果如图所示
5.查看分组菜单
在主菜单下.用户输入5并回车运行按照要求输入信息
结果如图所示
6.全部输出菜单
在主菜单下.用户输入6并回车运行按照要求输入信息
结果如图所示
7.保存联系人菜单
在主菜单下.用户输入0并回车运行按照要求输入信息
结果如图所示
6.源程序代码
#include
#include
#include
#include
usingnamespacestd;
classNode{
public:
Node*next;
stringname;
stringnum;
stringemail;
stringaddress;
stringgroup;
};
classcontact{
public:
Node*head;
contact(){head=newNode;head->next=NULL;};
voidaddman();//添加联系人
voiddeleteman();//删除联系人
voidupdateman();//修改联系人
voidsearchman();//查找联系人
voidprintcontact();//输出全部联系人
voidgroup();//分组
voidsave();//保存联系人
};
voidcontact:
:
save()//保存联系人
{
ofstreamoutfile("contacts.txt",ios:
:
out);
Node*p=head;
while(p->next!
=NULL)
{
p=p->next;
outfile<name<<""<num<<""<email<<""<address<<""<group<<""<}
}
voidcontact:
:
addman()//添加联系人
{
boola=true;
inti;
Node*p;//新建结点.用来存放联系人信息
while(a)
{
p=newNode;//每循环一次.就新建结点存放联系人信息
cout<<"*********请输入联系人信息:
*********"<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<<"*********添加成功*********!
!
!
"<cout<cout<<"*********是否继续添加(是请输入1,否输入2)*********"<cin>>i;
cout<if(i==1){a=true;}
elsea=false;
}
}
voidcontact:
:
deleteman()//删除联系人
{
Node*p,*q;//定义两个结点指针
p=q=head;//让指针都指向头结点
stringname,j;
cout<<"*********请输入要删除的联系人姓名:
*********"<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;
deletep;
}else{
//要删除联系人不在头结点
q->next=p->next;
deletep;
}
cout<<"*********删除成功-!
*********"<}elseif(!
p||p->next==NULL){
cout<<"*********你要删除的联系人不存在!
!
*********"<cout<<"*********是否继续删除(是请输入1.否输入2):
*********";
cin>>j;
if(j=="1")deleteman();
exit(0);
}
cout<}
voidcontact:
:
searchman()//查询联系人
{
intx=0;//用来标记是否查询过
inti;
Node*p=newNode;
stringname;
cout<<"*********请输入要查询的联系人名字:
*********"<cin>>name;
while(p)
{
for(p=head->next;p!
=NULL;p=p->next){
if((p->name)==name)
{
x=1;//查到后.与要查询的联系人名字一致后.标为1.否则为0
cout<<""<<"姓名:
"<name<<""<<"手机号码:
"<num<<""<<"email:
"<email<<""<<"地址:
"<address<<""<<"分组:
"<group<<""<}
}
if(x==0){cout<<"*********你要查询的联系人不存在!
!
!
!
*********"<cout<<"*********是否继续查询(