手机通讯录模拟1.docx
《手机通讯录模拟1.docx》由会员分享,可在线阅读,更多相关《手机通讯录模拟1.docx(65页珍藏版)》请在冰豆网上搜索。
手机通讯录模拟1
手机通讯录模拟
(1)
目录
摘要.............................................................2
1.绪论2
2.系统分析2
2.1功能需求2
2.2数据需求2
2.3性能需求2
3.总体设计3
3.1流程图3
3.2源程序4
4.详细设计20
4.1主界面20
4.2添加功能……………………………………………………………………21
4.3修改功能:
……………………………………………………………………21
4.4拨号功能:
……………………………………………………………………22
4.5保存功能……………………………………………………………………22
5.调试与测试22
6.结论23
结束语24
参考文献24
附录1-用户手册24
附录2-源程序26
摘要
本程序在安全性方面相对比较突出。
为避免程序实现一部分功能即结束,我们采用了用一个子函数代替主函数,子函数调用自身的方法。
同时在出现功能选择的地方,为防止出现意外的死循环,我们功能选择参数一律使用string类型。
在保存提取数据方面,我们严格按照有变动即存储,存储完立即提取到内存的规则,有效遏止了数据意外丢失或调用不及时等情况的发生。
本程序共使用了9个子函数分别来实现不同功能程序中最关键的通讯录成员采用结构体定义,丰富了成员所包含的信息。
在主界执行方面,采用独立的子函数执行。
在该函数中分别调用不同功能的函数,执行完相应的功能后可选择继或返回主菜单。
主菜单在运行时会先调用一个子函数将通讯录中的信息展示给用户,然后用户可对照信息进行响应的功能选择,不同功能调用不同函数。
各函数在执行功能时会进行相应的嵌套,以弥补各自的不足。
各功能采用不同函数来执行,方便调试和修改。
各函数相互调用,最后整合在一起便构成了该系统程序。
1.绪论
随着科技的发展,手机成为了必备的生活用品,越来越多的人意识到了他的重要性。
但是尽管手机功能在不断的完善,但是拨打电话是手机的重要功能。
所有管理好一个手机的联系人是必不可少的,这也正是编写本程序的目的所在。
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
1.添加功能:
能录入新数据。
当录入了重复的姓名时,则提示数据录入重复并取消录入;当通讯录中超过10条信息时,存储空间已满,不能再录入新数据。
2.拨号功能:
能显示出通讯录中所有人的姓名,当选择某个姓名时,屏幕上可显示出此人的电话号码。
3.修改功能:
选中某个人的姓名时,可对此人的相应数据进行修改。
2.系统分析
2.1功能需求
本系统主要是手机通讯录模拟的系统。
该系统需要有录入信息,根据所给条件查询信息,修改信息,循环显示主菜单,保存信息的功能,并且利用显示函数将通讯录的所有信息显示出来。
2.2数据需求
需要向系统输入姓名,联系电话,地址,分类等信息。
2.3性能需求
在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠。
3.总体设计
3.1流程图
3.2源程序
#defineNULL0
#include//定义文件输入输出流
#include
#include
usingnamespacestd;
//定义结构体类型
structperson
{
stringname;//姓名
stringnumber;//号码
stringgroup;//类别
stringemail;//邮箱
structperson*next;//链指针
};
//函数声明
voidsave(personcaller[],person*head,person*p);//执行保存功能
voidlookfor(personcaller[],person*head,person*p);//执行查询功能
voidadd(personcaller[],person*head,person*p);//执行填加功能
voidcut(personcaller[],person*head,person*p);//执行删除功能
voidmodify(person*caller1,personcaller[],person*head,person*p);//执行修改功能
voiddial(personcaller[],person*head,person*p);//执行拨号功能
voidlink(personcaller[],person*head,person*p);//执行链表连接功能
voidshow(personcaller[],person*head,person*p);//执行显示全部成员信息功能
voidrun(personcaller[],person*head,person*p);//执行主菜单功能
//建立链表
voidlink(personcaller[],person*head,person*p)
{
inti;
caller[15].next=NULL;//使最后一个链指针指向空
head=&caller[0];//使head指针指向caller[0]
for(i=0;i<15;i++)
{
if(caller[i].number=="0")
{caller[i].next==NULL;break;}//使链表在第一个空
caller[i].next=&caller[i+1];//联系人处结束
}
p=head;
}
//添加联系人
voidadd(personcaller[],person*head,person*p)
{
inti,j=20;
stringx;
stringname,email,number;
if(caller[14].name!
="0")//通讯录以满的条件
cout<<"存储空间已满!
"<else
{
for(i=14;i>=0;i--)//该循环保证了通讯录中成员
caller[i+1]=caller[i];//连续,将空成员至于末尾
cout<<"注意:
姓名、电话、邮箱不能是\"0\"!
"<cout<<"姓名:
";
cin>>name;
for(i=0;i<15;i++)
{
if(caller[i].name==name)
{j=i;}//当出现重复时,记下冲突位置
}
while(j!
=20)//如果添加内容与通讯录内容冲突
{//则重新添加
cout<<"该姓名已存在,请重新输入姓名:
";
cin>>name;
j=20;
for(i=0;i<15;i++)
{
if(caller[i].name==name)
{j=i;}
}
}
caller[0].name=name;//添加姓名已与成员无冲突
cout<<"------------------------------------------------------------\n";
cout<<"电话:
";
cin>>number;
for(i=0;i<15;i++)
{
if(caller[i].number==number)
{j=i;}//当出现重复时,记下冲突位置
}
while(j!
=20)//如果添加内容与通讯录内容冲突
{//则重新添加
cout<<"该号码已存在,请重新输入号码:
";
cin>>number;
j=20;
for(i=0;i<15;i++)
{
if(caller[i].number==number)
{j=i;}
}
}//添加号码已与成员无冲突
caller[0].number=number;
cout<<"------------------------------------------------------------\n";
cout<<"邮箱:
";
cin>>email;
for(i=0;i<15;i++)
{
if(caller[i].email==email)
{j=i;}//当出现重复时,记下冲突位置
}
while(j!
=20)//如果添加内容与通讯录内容冲突
{//则重新添加
cout<<"该邮箱已存在,请重新输入邮箱:
";
cin>>email;
j=20;
for(i=0;i<15;i++)
{
if(caller[i].email==email)
{j=i;}
}
}
caller[0].email=email;//添加邮箱已与成员无冲突
cout<<"************************************************************\n";
cout<<"*请选择存储类别:
A办公类B个人类C商务类*\n";
cout<<"************************************************************\n";
cin>>x;
while(x!
="a"&&x!
="b"&&x!
="c"&&x!
="A"&&x!
="B"&&x!
="C")
{
cout<<"你的操作有误,请重新选择:
";
cin>>x;
}
if(x=="a"||x=="A")caller[0].group="办公类";
if(x=="b"||x=="B")caller[0].group="个人类";
if(x=="c"||x=="C")caller[0].group="商务类";
cout<<"************************************************************\n";
cout<<""<cout<cout<<"************************************************************\n";
cout<<"添加成功!
"<save(caller,head,p);
link(caller,head,p);
cout<<"继续添加0任意键结束添加\n";
cin>>x;
if(x=="0")add(caller,head,p);
}
}
//执行删除
voidcut(personcaller[],person*head,person*p)
{
intj=20,i;
stringx,e;
stringgroup,name,email,number;
link(caller,head,p);
cout<<"************************************************************\n";
cout<<"*删除:
姓名1号码2类别3邮箱4*\n";
cout<<"************************************************************\n";
cout<<"请选择:
";
cin>>e;
while(e!
="1"&&e!
="2"&&e!
="3"&&e!
="4")
{
cout<<"你的操作有误,请重新选择:
";
cin>>e;
}
if(e=="1")//删除与输入姓名有关的信息
{
cout<<"请输入姓名:
";
cin>>name;//输入欲删除的姓名
for(i=0;i<15;i++)
{
if(caller[i].name==name)
{j=i;break;}
}
while(j==20)
{
cout<<"你要删除的姓名找不到,自动返回主菜单!
\n\n";
run(caller,head,p);//当没有与欲删除的信息相符合的内容时,返回主菜单
}
for(i=0;i<15;i++)
{
if(caller[i].name==name)
j=i;
for(i=j;i<15;i++)
caller[i]=caller[i+1];//删除的位置被后面成员替代,以保证
}//通讯录非空内容连续
}
if(e=="2")//删除与所输号码相关的信息
{
cout<<"请输入号码:
";
cin>>number;//输入欲删除的号码
for(i=0;i<15;i++)
{
if(caller[i].number==number)
{j=i;break;}
}
while(j==20)
{
cout<<"你要删除的号码找不到,自动返回主菜单!
\n\n";
run(caller,head,p);//当没有与欲删除的信息相符的内容时,返回主菜单
}
for(i=0;i<15;i++)
{
if(caller[i].number==number)
j=i;
for(i=j;i<15;i++)
caller[i]=caller[i+1];
}
}
if(e=="3")//删除与所输类别相关的信息
{
cout<<"请输入类别:
";
cin>>group;//输入欲删除的类别
for(i=0;i<15;i++)
{
if(caller[i].group==group)
{j=i;break;}
}
while(j==20)
{
cout<<"你要删除的类别找不到,自动返回主菜单!
\n\n";
run(caller,head,p);//当没有与欲删除的类别相符合的信息时,返回主菜单
}
for(intk=0;k<15;k++)
for(j=0;j<15;j++)
{
if(caller[j].group==group)
for(i=j;i<15;i++)
caller[i]=caller[i+1];
}
}
if(e=="4")//删除与邮箱相关的内容
{
cout<<"请输入邮箱:
";
cin>>email;//输入欲删除的邮箱
for(i=0;i<15;i++)
{
if(caller[i].email==email)
{j=i;break;}
}
while(j==20)
{
cout<<"你要删除的邮箱找不到,自动返回主菜单!
\n\n";
run(caller,head,p);//当没有与欲删除的内容相关的信息时,返回主菜单
}
for(i=0;i<15;i++)
{
if(caller[i].email==email)
j=i;
for(i=j;i<15;i++)
caller[i]=caller[i+1];
}
}
cout<<"删除成功!
"<save(caller,head,p);
cout<<"继续删除0按任意键结束删除\n";
cin>>x;
if(x=="0")
{
show(caller,head,p);
link(caller,head,p);
cut(caller,head,p);
}
link(caller,head,p);
}
//修改联系人信息
voidmodify(person*caller1,personcaller[],person*head,person*p)
{
intj=0,i;
stringname,email,number;
stringx;
cout<<"************************************************************\n";
cout<<"*修改:
姓名1号码2类别3邮箱4*\n";
cout<<"************************************************************\n";
cin>>i;
if(i<1||i>4)
{
cout<<"操作有误,自动返回主菜单!
\n";
run(caller,head,p);//返回主菜单
}
if(i==1)//修改姓名
{
cout<<"请输入新姓名:
";
cin>>name;//输入新姓名
for(i=0;i<15;i++)
{if(caller[i].name==name)j++;}
if(j==0)//新姓名可以存放
{
(*caller1).name=name;
cout<<"姓名修改成功!
"<}
else//姓名重复
cout<<"该姓名已存在,不能修改!
"<}
if(i==2)//修改号码
{
cout<<"请输入新号码:
";
cin>>number;//输入新号码
for(i=0;i<15;i++)
{if(caller[i].number==number)j++;}
if(j==0)//新号码可以存放
{
(*caller1).number=number;
cout<<"号码修改成功!
"<}
else//号码重复
cout<<"该号码已存在,不能修改!
"<}
if(i==3)//修改类别
{
cout<<"************************************************************\n";
cout<<"*请选择新存储类别:
A办公类B个人类C商务类*\n";
cout<<"************************************************************\n";
cin>>x;//输入类别代号
while(x!
="a"&&x!
="b"&&x!
="c"&&x!
="A"&&x!
="B"&&x!
="C")
{
cout<<"你的操作有误,返回修改首页!
\n";
modify(caller1,caller,head,p);//操作有误,返回修改首页
}
if(x=="a"||x=="A")(*caller1).group="办公类";
if(x=="b"||x=="B")(*caller1).group="个人类";
if(x=="c"||x=="C")(*caller1).group="商务类";
cout<<"类别更改成功!
\n";
}
if(i==4)//修改邮箱
{
cout<<"请输入新邮箱:
";
cin>>email;//输入新邮箱
for(i=0;i<15;i++)
{if(caller[i].email==email)j++;}
if(j==0)//新邮箱可以存放
{
(*caller1).email=email;
cout<<"邮箱修改成功!
"<}
else//邮箱重复
cout<<"该邮箱已存在,不能修改!
"<}
cout<<"------------------------------------------------------------\n";
save(caller,head,p);
cout<<"修改后通信录内容为:
\n";
cout<<""<<(*caller1).name<<""<<(*caller1).number<<""
<<(*caller1).group<<""<<(*caller1).email<cout<<"继续修改0任意键结束修改\n";
cin>>x;
if(x=="0")modify(caller1,caller,head,p);
}
//展示所有联系人信息
voidshow(personcaller[],person*head,person*p)
{
inti;
if(caller[0].number=="0")//通讯录为空
{
cout<<"通信录为空,请添加!
"<cout<<"\n\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\n";
add(caller,head,p);//添加通讯录联系人
}
else//通讯录中有成员
{
cout<<"\n\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\n";
cout<<"下是通讯录中所有信息,请查看后按提示进行\n";
cout<<"************************************************************\n";
for(i=0;i<15;i++)
{
cout<<""<<"NO."<
<<""<cout<<"************************************************************\n";
if(caller[i+1].number=="0")break;//展示通讯录全部信息,不展示空成员
}
}
link(caller,head,p);//建立新的链表
}
//拨号
voiddial(personcaller[],person*head,person*p)
{
inti,j;
stringx;
link(caller,head,p);//建立链表
cout<<"****************************************\n";