通讯录C++代码.docx
《通讯录C++代码.docx》由会员分享,可在线阅读,更多相关《通讯录C++代码.docx(21页珍藏版)》请在冰豆网上搜索。
![通讯录C++代码.docx](https://file1.bdocx.com/fileroot1/2023-5/19/732e75e8-05e7-4184-9ba7-4f0473a3ebea/732e75e8-05e7-4184-9ba7-4f0473a3ebea1.gif)
通讯录C++代码
黔南民族师范学院C++课程设计
名称:
通讯录管理系统
指导老师:
学号:
姓名:
系别:
计算机科学系
班级:
B12计科
1、问题描述
定义通讯录类,属性有:
编号、姓名、性别、通讯地址、邮箱地址、电话等信息和相关的对属性做操作的行为。
主要完成对通讯录的简单管理。
2、功能要求
(1)添加功能:
程序能够添加通讯录信息,要求编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:
可根据姓名、电话、邮箱地址等信息对已添加的信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
(3)显示功能:
可显示当前系统中所有通讯信息,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:
主要实现对已添加的通讯记录进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!
”并返回操作。
(6)保存功能:
可将当前系统中通讯录记录存入文件中,存入方式任意。
(7)读取功能:
可将保存在文件中的信息读入到当前系统中,供用户进行使用。
3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
实体间与属性联系:
ClassPerson
Classmanage
No
Nameme
post
addre
Tel
Sex
友元类
Save
Look
delete
Find
No
Name
功能描述
添加功能:
能够向链表之中输入相关的信息,在编号重复时取消本次输入,并且一次只能输入一条信息。
删除功能:
根据唯一标识一个对象的属性,删除与之对应的信息。
修改功能:
根据唯一标识一个对象的属性,选选择要修改的数据项进行修改。
阅览功能:
是对所有的数据进行访问,不能改变其中任何数据。
查询功能:
按照当前给定的信息,查询详细详细。
保持功能:
时对所有数据进行存档,方便以后的操作,如果一个程序没有保持功能,每一次使用时会更繁琐,保存其实是程序不可缺少的功能之一。
读取功能:
将已存在的数据从文档中读取出来;本程序是通过在建立对象时,系统自己调用
构造函数实现的,如果将其单独作为一功能也是可以的,但是那样似乎比较繁琐。
建立类:
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();//预览
程序首页
添加功能
阅览功能
查找功能
删除功能
修改功能
代码源程序:
#include
#include
#include
usingnamespacestd;
stringID;//编号唯一性
classPerson
{protected:
stringNo;//编号
stringpost;//邮箱地址
stringaddre;//联系地址
charName[20];//姓名
charSex[10];//性别
stringTel;//联系方式
Person*next;//建立联系人的指针next
public:
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";//输入联系人信息
cin>>No;
cout<{
Person*p1;
p1=person;
while(p1)
{
if(p1->No==No)
{
break;
}
else
{
p1=p1->next;
}
}
if(p1!
=NULL)
{
cout<<"该编号已存在,取消改该联系人的信息添加"<return;
}
}
cout<<"输入:
姓名性别邮箱地址联系方式联系地址,(并用逗号隔开)"<cin>>Name>>Sex>>post>>Tel>>addre;
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";
cin>>No;
cout<//查找要删除的结点
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<<"请输入要修改联系人的编号:
";
cin>>ID;
cout<Person*p1;
charc;
p1=person;
while(p1)
{
if(p1->No==ID)
{cout<<"所要修改的联系人的信息如下:
\n"<cout<<"编号:
"<No<<"\t姓名:
"<Name<<"\t性别:
"<Sex<<"\t年龄:
"<post<<"\t电话:
"<Tel<<"\t联系地址:
"<addre<cout<break;}
else
{
p1=p1->next;
}
}
if(p1!
=NULL)//若找到结点
{
do
{
cout<<"1.修改姓名2.修改性别3.修改邮箱地址4.修改联系方式5.修改联系地址0.退出\n"<cout<<"请选择(1-5)要修改的信息\n"<cin>>c;
if(c!
='0')
cout<<"请输入新的信息:
";
switch(c)
{
case'1':
cin>>p1->Name;break;
case'2':
cin>>p1->Sex;break;
case'3':
cin>>p1->post;break;
case'4':
cin>>p1->Tel;break;
case'5':
cin>>p1->addre;break;
default:
break;
}
}while(c!
='0');
cout<<"\t***修改成功***\n"<return;
}
else
cout<<"未找到该学生!
\n";
}
//fPerson<No<<""<Name<<""<Sex<<""<post<<""<Tel<voidManage:
:
Save()//数据写入到文件
{
ofstreamfPerson("Person.txt",ios:
:
out);
if(!
fPerson)
{cerr<<"openerror!
"<charc;
cout<<"\n保存数据,是否继续?
[Y/N]:
";
cin>>c;
if(toupper(c)!
='Y')
return;
Person*p=person;
while(p)
{
fPerson<No<<""<Name<<""<Sex<<""<post<<""<Tel<<""<addre<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)
{cerr<<"openerror"<fPerson>>No>>Name>>Sex>>post>>Tel>>addre;
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;//连接
}
fPerson>>No>>Name>>Sex>>post>>Tel>>addre;
}
fPerson.close();
}
voidManage:
:
FindID()
{
cout<<"请输入要修改联系人的编号:
";
cin>>ID;
cout<Person*p1;
p1=person;
while(p1)
{
if(p1->No==ID)
{cout<<"编号:
"<No<<"\t姓名:
"<Name<<"\t性别:
"<Sex<<"\t年龄:
"<post<<"\t电话:
"<Tel<<"\t联系地址:
"<addre<else
{
p1=p1->next;
}
}
if(p1!
=NULL)
{}
else
cout<<"未找到该联系人"<}
voidManage:
:
FindName()
{charName[20];
cout<<"请输入要修改联系人的姓名:
";
cin>>Name;
cout<Person*p1;
intcount=0;
p1=person;
while(p1)
{
if(strcmp(p1->Name,Name)==0)
{
count++;
cout<<"编号:
"<No<<"\t姓名:
"<Name<<"\t性别:
"<Sex<<"\t年龄:
"<post<<"\t电话:
"<Tel<<"\t联系地址:
"<addre<}
p1=p1->next;
}
if(count)
{
cout<<"\t查询成功!
!
!
"<}
else
cout<<"\n\t\t未找到该联系人!
!
!
\n"<}
voidManage:
:
Look()
{
Person*p1;
intcount=0;
charc;
p1=person;
while(p1)
{
cout<<"编号:
"<No<<"\t姓名:
"<Name<<"\t性别:
"<Sex<<"\t年龄:
"<post<<"\t电话:
"<Tel<<"\t联系地址:
"<addre<count++;
p1=p1->next;
}
if(count!
=0)
cout<return;
}
intmain(void)
{
Managem;
intc;
do
{cout<cout<<"****^.^欢迎来到通讯录菜单^.^****"<cout<<"**"<cout<<"*1.新增通讯录5.删除通讯录*"<cout<<"*2.修改通讯录6.编号查询详细信息*"<cout<<"*3.预览信息7.姓名查询详细信息*"<cout<<"*4.保存数据0.退出*"<cout<<"*********************"<cout<<"请选择:
";
cin>>c;
switch(c)
{
case1:
m.Add();break;
case2:
m.Modify();;break;
case3:
m.Look();break;
case4:
m.Save();break;
case5:
m.Delete();break;
case6:
m.FindID();break;
case7:
m.FindName();break;
case0:
break;
default:
break;
}
}while(c!
=0);
ints;
cout<<"是否要保存您的所有操作(1.保存0.不保存):
"<cin>>s;
if(s==1)
m.Save();
return0;
}
THANKS!
!
!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考