通讯录管理系统C++
博主在此声明此文章还未上教作业仅供参考,发现抄袭者必究 ,建议根据博主的思维导图合理运用本代码,严谨复制抄袭等侵权行为;1.要求 通讯录管理系统手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手
博主在此声明此文章还未上教作业仅供参考,发现抄袭者必究 ,建议根据博主的思维导图合理运用本代码,严谨复制抄袭等侵权行为;
1.要求
通讯录管理系统
手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机中的联系人的信息只包含用户名和电话号码两项信息。存储在电话卡上的联系人的信息除了上面提到的两项信息外,还包含籍贯,QQ号等信息。
根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写一个手机通讯录管理。
要求:
1. 创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的存储的联系人的信息)。
2. 以菜单方式工作(字符界面即可)
3. 存储在手机上的联系人的信息包括:姓名和电话号码;存储在手机卡上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息
4. 管理系统的功能包括:
a) 新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中)
b) 删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)
c) 修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)
d) 查询:根据名字查询联系人信息(查询结果不唯一)
e) 浏览:显示所有联系人的信息
f) 将联系人的信息从手机转存到手机卡上(同时要避免重复数据的存在。并且在转存是要检查容量是否受限。下同。)
g) 将联系人的信息从手机卡上准存到手机上(同时要避免重复数据的存在)
5. 要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点
6. 提交程序源码和课程设计报告。
7. 课程设计评分说明:实现功能:通过;使用了继承技术:中;实现了运算符的重载:良;支持多态:优
实现过程分析:
建立两个文本文件,记录存储在手机上联系人的基本信息和存储在手机卡上的联系人的信息
建立以下几个类:
1. 手机联系人类:表示一个联系人
数据成员包括:
姓名
电话号码
成员函数包括
带参并带默认值的构造函数
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成对象的输入和输出操作
2. 手机卡联系人(继承于手机联系人类):
新增数据成员:
籍贯
QQ号
成员函数包括
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成数据成员的输入输出操作
3. 定义一个通讯簿抽象类,用来封装以下函数(为支持多态,可以将以下函数封装为纯虚函数)
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
4. 手机通讯簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机中存储的所有联系人的信息
数据成员包括:
手机联系人的数量
手机联系人对象数组
成员函数包括
构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
析构函数:将对象数组中的内容写入到文本文件中。
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
5. 手机卡通信簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机卡中存储的所有联系人的信息
数据成员包括:
手机联系人的数量
手机联系人对象数组
成员函数包括
构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
析构函数:将对象数组中的内容写入到文本文件中。
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
6. 用户类(这是一个操作类,完成通讯簿的操作):用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理
数据成员包括:
两个通讯簿对象
成员函数包括(成员函数体现用户的行为):
添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)
删除联系人:调用相应的通讯簿对象的删除操作删除一个联系人
Display:显示相应的通讯簿中联系人的信息
修改某一联系人的信息:调用通讯簿对象的函数完成操作
查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作
将手机卡中的存储的联系人的信息移动到手机中
将手机中存储的联系人的信息移动到手机卡中
将手机卡中的存储的联系人的信息复制到手机中
将手机中存储的联系人的信息复制到手机卡中
7. 界面菜单类:用来给出操作提示
数据成员:可以不定义数据成员
成员函数:
Display函数:显示操作菜单的提示。说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。
2.
3.课程设计报告
使用说明:
1.在使用本程序前,请先在d盘 创建名为my_phonelist.txt和my_phonelist.txt的文本文件,因统默认对手机联系人在my_phonelist.txt文件中进行读写,默认对手机卡联系人在my_cardlist.txt文件中进 行读写,0键退出系统保存文件。
2.默认手机和手机卡的联系人信息分别最多不超过1000个,删除联系人时,当删除一个存储位置的联系联系人时,系统会自动检测另一个存储位置的联系人信息,若相同的存在,系统将自动删除并告知 使用者,不存在也会返回对应的消息通知使用者。
3.进行修改操作时可选择单独修改手机和 手机卡的联系人信息,也可以同时 进行修改。
同时修改时需要两次输入需要修改的手机号,并根据相关提示完成修改。
编程体会:
1.第一次写那么长的程序,很早就知道需要写这个程序。每次写一点都不知道怎么写了,直到在程序设计星期的前两天才真正的开始写这个程序,由于开始的时候由于疏忽,没有看到老师给的程序框架,自己写写总是写不同,浪费了不少时间,心态 也几近崩溃,后来直到程序框架后就明显容易很多不会的地方就去查询各种资料,在这个过程中也收获不小,这个程序包含的知识点很多也相当于一次大的复习对于以往学习的知识。
2.写的过程中出现的bug还很好改,但是写好后调试阶段和测试功能阶段的bug很难改,一两个bug改一个小时左右也是正常的,甚至更多,在改bug的过程中也收获很多,积累了很多改bug的经验和技巧,只要你不放弃总能改好它;
3.虽然当时想用多文件写写,但是基于多文件不是太熟,也就一个cpp文件下来了,写完后
经过学习也明白了如何用项目去写多文件,以及codebook项目的使用和vs2017的使用,发现用多文件来写确实很实用,这次就一个CPP文件吧,不想去拆开了。
4.建议后者用map以及多文件来写,不会的自行百度就行。
4.代码详情,具体实现请看代码,根据思维导图结构分析,每一步实现都在代码中给出并附有注释,相对来说960多行代码算少的对于此通讯录系统的实现,当然用map或许会更少,不明白的请评论,认识的也可以私聊。点点关注不迷路啊
昨天的代码手机向手机卡复制移动时有一个小bug,不运行并且连续执行7命令后在执行 5命令是很难发现的,现已修复 ,带来的不变敬请谅解
#include<bits/stdc++.h>
using namespace std;
class phone_contact
{
protected:
string name;
string tell;
public:
phone_contact(string name1="0",string tell1="0")
{
name=name1;
tell=tell;
}
void set_(string name1="0",string tell1="0")
{
name=name1;
tell=tell1;
}
void modify();//修改
string get_name()
{
return name;
}
string get_tell()
{
return tell;
}
friend ostream & operator<<(ostream & output,phone_contact &);//因为ofstream是ostream类的一个子类,
friend istream & operator >>(istream &input,phone_contact &);//所以,只需要对<<运算符按照之前的方法重载一次即可
};
/*手机类phone_contact成员函数的定义*/
void phone_contact::modify()//修改手机信息
{
string new_name,new_tell;
int n;
cout<<"请选择你要修改的信息:1.仅修改手机号 2.仅修改姓名 3.修改手机号和姓名:";
cin>>n;
switch(n)
{
case 1:
cout<<"请输入新手机号:";
cin>>new_tell;
tell=new_tell;
cout<<"修改存储信息成功"<<endl;
break;
case 2:
cout<<"请输入新姓名:";
cin>>new_name;
name=new_name;
cout<<"修改手机存储信息成功"<<endl;
break;
case 3:
cout<<"请输入新手机号以及姓名:";
cin>>new_tell>>new_name;
name=new_name;
tell=new_tell;
cout<<"修改手机手机存储信息成功"<<endl;
break;
default:
cout<<"输入错误!"<<endl;
}
}
ostream & operator<<(ostream & output,phone_contact & a)//重载输出运算符
{
output<<a.get_name()<<" "<<a.get_tell()<<endl;
return output;
}
istream & operator >>(istream & input,phone_contact & b)
{
string name2,tell2;
cout<<"请输入 姓名 手机号:";
input>>name2>>tell2;
b.set_(name2,tell2);
return input;
}
/*第二个类:手机卡类的定义及成员函数的定义*/
class card_contact:public phone_contact
{
string address;
string QQ;
public:
card_contact(string a="0",string b="0",string address2="0",string QQ2="0"):phone_contact(a,b)
{
address=address2;
QQ=QQ2;
}
void set_(string a="0",string b="0",string address2="0",string QQ2="0")
{
phone_contact::set_(a,b);
address=address2;
QQ=QQ2;
}
string get_address()
{
return address;
}
string get_QQ()
{
return QQ;
}
void modify();
friend ostream & operator<<(ostream & output,card_contact &);
friend istream & operator >>(istream &input,card_contact &);
};
void card_contact::modify()//修改手机卡信息
{
string new_name,new_tell,new_address,new_QQ;
int n;
cout<<"请输入你所修改内容对应的操作:1.仅修改姓名 2.仅修改手机号 3.仅修改籍贯 4.仅修改 QQ 5.修改以上所有内容"<<endl;
cin>>n;
switch(n)
{
case 1:cout<<"请输入新姓名:";
cin>>new_name;
name=new_name;
cout<<"修改手机卡存储信息成功"<<endl;
break;
case 2:cout<<"请输入新手机号:";
cin>>new_tell;
tell=new_tell;
cout<<"修改手机卡存储信息成功"<<endl;
break;
case 3:cout<<"请输入新籍贯:";
cin>>new_address;
address=new_address;
cout<<"修改手机卡存储信息成功"<<endl;
break;
case 4:cout<<"请输入新QQ:";
cin>>new_QQ;
QQ=new_QQ;
cout<<"修改手机卡存储信息成功"<<endl;
break;
case 5:cout<<"请输入 新姓名 新手机号 新籍贯 以及新QQ:";
cin>>new_name>>new_tell>>new_address>>new_QQ;
name=new_name; tell=new_tell;
address=new_address; QQ=new_QQ;
break;
default: cout<<"输入错误!"<<endl;
}
}
ostream & operator<<(ostream & output,card_contact &a)
{
output<<a.get_name()<<" "<<a.get_tell()<<" "<<a.get_address()<<" "<<a.get_QQ()<<endl;
return output;
}
istream & operator >>(istream &input,card_contact &a)
{
string name3,tell3,address3,QQ3;
cout<<"请输入 姓名 手机号 籍贯 QQ号:";
input>>name3>>tell3>>address3>>QQ3;
a.set_(name3,tell3,address3,QQ3);
return input;
}
/*定义第三个类:address_list抽象类*/
class address_list//抽象类 通讯薄类封装函数用于支持多态
{
public:
virtual void add()=0;//添加联系人
virtual void cut_bytell(string bytell)=0;//删除 通过
virtual void cut_bytell2(string bytell2)=0;//直接删除
virtual void display()=0;//显示所有联系人的信息
virtual void change_bytell(string bytell)=0;//修改
virtual void query_byname(string byname)=0;//修改
};
/*第四个类:公有继承于抽象类*/
class phone_list:public address_list//手机通讯薄类
{
int number;
vector<phone_contact>my_phonelist;
public:
phone_list();//读取文件,创建联系人对象数组
void add();
void cut_bytell(string bytell);
void cut_bytell2(string bytell2);
void display();
void change_bytell(string bytell);
void query_byname(string byname);
void copy_set(string pname,string ptell);
void clear_phone();//"清空通讯录"
int get_number()
{
return number;
}
string get_name(int i)//返回第i个联系人的名字
{
return my_phonelist[i].get_name();
}
string get_tell(int i)//返回第i个联系人的手机号
{
return my_phonelist[i].get_tell();
}
~phone_list();//析构函数存入
};
phone_list::phone_list()
{
number=-1;
char name4[20],tell4[20];
phone_contact p;
ifstream fin("D://my_phonelist.txt",ios::in);
if(!fin){cout<<"con't open file";abort();}
char s[100];
fin.getline(s,100);
fin.getline(s,100);
fin.getline(s,100);
fin.getline(s,100);
while(fin>>name4>>tell4&&strcmp(name4,"Noname")!=0)
{
p.set_(name4,tell4);
my_phonelist.push_back(p);
number++;
}
fin.close();
}
void phone_list::clear_phone()
{
my_phonelist.clear();
number=-1;
}
void phone_list::add()
{
if(number>999){cout<<"手机通讯录已满!"<<endl;return;}
phone_contact p;
cin>>p;
my_phonelist.push_back(p);
number++;
cout<<"添加成功!"<<endl;
}
void phone_list::cut_bytell(string bytell)//删除
{
if(number<0){cout<<"没有可以删除的联系人!"<<endl;return;}
while(1)
{
int flag=0;
for(int i=0;i<=number;i++)
{
if(my_phonelist[i].get_tell()==bytell)
{
flag=1;
number--;
break;
}
}
if(flag==1) {cout<<"删除成功"<<endl;return;}
else if(flag==0)
{
int choose;
cout<<"通讯录内没有此联系人,继续查找删除请输入1,取消请输入0";
cin>>choose;
if(choose==1) continue;
else return;
}
}
}
void phone_list::cut_bytell2(string bytell2)
{
while(1)
{
int flag=0;
for(int i=0;i<=number;i++)
{
if(my_phonelist[i].get_tell()==bytell2)
{
flag=1;
number--;
break;
}
}
if(flag==1) {cout<<"在手机上发现同一电话号码信息并删除成功"<<endl;return;}
else
{
cout<<"未在手机上发现删除人联系信息 "<<endl;
return;
}
}
}
void phone_list::display()
{
for(int i=0;i<=number;i++)
cout<<my_phonelist[i]<<endl;
}
void phone_list::change_bytell(string bytell)//修改
{
if(number<0) return;
while(1)
{
int flag=0;
for(int i=0;i<=flag;i++)
{
if(my_phonelist[i].get_tell()==bytell)
{
flag=1;
my_phonelist[i].modify();
break;
}
}
if(flag==1) return;
else
{
int choose;
cout<<"未查到修改的联系人"<<endl;
cout<<"1.继续查找 phone2.取消"<<endl;
if(choose==1) continue;
else return;
}
}
}
void phone_list::copy_set(string pname,string ptell)
{
for(int i=0;i<=number;i++)
{
if(my_phonelist[i].get_name()==pname&&my_phonelist[i].get_tell()==ptell)
{
cout<<"所复制联系人的信息中,有原本原来已经存在,跳过存在联系人的复制"<<endl;
return ;
}
}
phone_contact temp;
temp.set_(pname,ptell);
my_phonelist.push_back(temp);
number++;
}
void phone_list::query_byname(string byname)
{
if(number<0) {cout<<"没有可以查询的联系人"<<endl;return;}
while(1)
{
int flag=0;
for(int i=0;i<=number;i++)
{
if(my_phonelist[i].get_name()==byname)
{
cout<<my_phonelist[i]<<endl;
flag=1;
break;
}
}
if(flag==1) return;
else
{
int choose;
cout<<"未查询到联系人"<<endl;
cout<<"1.继续查询 2.取消"<<endl;
cin>>choose;
if(choose==1) continue;
else return;
}
}
}
phone_list::~phone_list()
{
ofstream fout("D://my_phonelist.txt",ios::out);
if(!fout)
{
cout<<"con't open file"<<endl;
abort();
}
fout<<"*********************************************"<<endl;
fout<<" 手机通讯录 *"<<endl;
fout<<"*********************************************"<<endl;
fout<<"姓名"<<"\t\t手机号"<<endl;
for(int i=number;i>=0;i--)
{
fout<<my_phonelist[i]<<endl;
}
fout.close();
}
/*第5个类:定义手机卡通信类*/
class card_list:public address_list//手机通讯薄类
{
int number;
vector<card_contact>my_cardlist;
public:
card_list();//读取文件,创建联系人对象数组
void add();
void cut_bytell(string bytell);
void display();
void change_bytell(string bytell);
void cut_bytell2(string bytell2);
void query_byname(string byname);
void copy_set(string pname,string ptell);
void clear_card();//清空手机卡
int get_number()
{
return number;
}
string get_name(int i)//返回第i个联系人的名字
{
return my_cardlist[i].get_name();
}
string get_tell(int i)//返回第i个联系人的手机号
{
return my_cardlist[i].get_tell();
}
~card_list();//析构函数存入
};
card_list::card_list()
{
number=-1;
char name4[20],tell4[20],address4[20],QQ4[20];
card_contact p;
ifstream fin("D://my_cardlist.txt",ios::in);
if(!fin){cout<<"con't open file";abort();}
char s[100];
fin.getline(s,100);
fin.getline(s,100);
fin.getline(s,100);
fin.getline(s,100);
while(fin>>name4>>tell4>>address4>>QQ4&&strcmp(name4,"Noname")!=0)
{
p.set_(name4,tell4,address4,QQ4);
my_cardlist.push_back(p);
number++;
}
fin.close();
}
void card_list::clear_card()
{
my_cardlist.clear();
number=-1;
}
void card_list::add()
{
if(number>999){cout<<"手机通讯录已满!"<<endl;return;}
card_contact p;
cin>>p;
my_cardlist.push_back(p);
number++;
cout<<"添加成功!"<<endl;
}
void card_list::copy_set(string pname,string ptell)
{
for(int i=0;i<=number;i++)
{
if(my_cardlist[i].get_name()==pname&&my_cardlist[i].get_tell()==ptell)
{
{
cout<<"所复制的信息有原本存在的,跳过其中存在的联系人"<<endl;
return;
}
}
}
card_contact temp;
temp.set_(pname,ptell,"NOaddress","NoQQ" );
my_cardlist.push_back(temp);
number++;
}
void card_list::cut_bytell(string bytell)//删除
{
if(number<0){cout<<"没有可以删除的联系人!"<<endl;return;}
while(1)
{
int flag=0;
for(int i=0;i<=number;i++)
{
if(my_cardlist[i].get_tell()==bytell)
{
flag=1;
number--;
break;
}
}
if(flag==1) {cout<<"删除成功"<<endl;return;}
else if(flag==0)
{
int choose;
cout<<"通讯录内没有此联系人,继续查找删除请输入1,取消请输入0";
cin>>choose;
if(choose==1) continue;
else return;
}
}
}
void card_list::cut_bytell2(string bytell2)
{
while(1)
{
int flag=0;
for(int i=0;i<=number;i++)
{
if(my_cardlist[i].get_tell()==bytell2)
{
flag=1;
number--;
break;
}
}
if(flag==1) {cout<<"在手机卡上发现同一号码的联系人信息并删除成功"<<endl;return;}
else if(flag==0)
{
cout<<"未在手机卡上发现同一号码的联系人信息:"<<endl;
return;
}
}
}
void card_list::display()
{
for(int i=0;i<=number;i++)
cout<<my_cardlist[i]<<endl;
}
void card_list::change_bytell(string bytell)//修改
{
if(number<0) return;
while(1)
{
int flag=0;
for(int i=0;i<=number;i++)
{
if(my_cardlist[i].get_tell()==bytell)
{
flag=1;
my_cardlist[i].modify();
break;
}
}
if(flag==1) return;
else
{
int choose;
cout<<"未查到修改的联系人"<<endl;
cout<<"1.继续查找 2.取消"<<endl;
cin>>choose;
if(choose==1) continue;
else return;
}
}
}
void card_list::query_byname(string byname)
{
if(number<0) {cout<<"没有可以查询的联系人"<<endl;return;}
while(1)
{
int flag=0;
for(int i=0;i<=number;i++)
{
if(my_cardlist[i].get_name()==byname)
{
cout<<my_cardlist[i]<<endl;
flag=1;
break;
}
}
if(flag==1) return;
else
{
int choose;
cout<<"未查询到联系人"<<endl;
cout<<"1.继续查询 2.取消"<<endl;
cin>>choose;
if(choose==1) continue;
else return;
}
}
}
card_list::~card_list()
{
ofstream fout("D://my_cardlist.txt",ios::out);
if(!fout)
{
cout<<"con't open file"<<endl;
abort();
}
fout<<"*********************************************"<<endl;
fout<<" 手机卡通讯录 *"<<endl;
fout<<"*********************************************"<<endl;
fout<<"姓名"<<"\t\t手机号"<<"\t\t籍贯"<<"\t\tQQ"<<endl;
for(int i=number;i>=0;i--)
{
fout<<my_cardlist[i];
}
fout.close();
}
/*第 6个类,菜单类*/
class menu
{
public:
void descript();
void main_menu();
void add_menu();
void cut_menu();
void query_menu();
void change_menu();
};
void menu::change_menu()
{
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"$$ 请选择在哪个通讯录修改联系 $$"<<endl;
cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
cout<<"$$ 1. 手机通讯录 $$"<<endl;
cout<<"$$ 2. 手机卡通讯录 $$"<<endl;
cout<<"$$ 3. 同时修改手机和手机卡的通讯录 $$"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"请输入你的选择:"<<endl;
}
void menu::descript()
{
cout<<"*************************************************************"<<endl;
cout<<"* 系统默认对手机联系人在my_phonelist.txt文件中进 *"<<endl;
cout<<"* 行读写,默认对手机卡联系人在my_cardlist.txt文件中进 *"<<endl;
cout<<"* 行读写,0键退出系统保存文件。 *"<<endl;
cout<<"*************************************************************"<<endl;
}
void menu::main_menu()
{
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"$$ 请输入相应的操作 $$"<<endl;
cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
cout<<"$$ 1. 新建联系人 $$"<<endl;
cout<<"$$ 2. 删除一个联系人 $$"<<endl;
cout<<"$$ 3. 修改联系人的信息 $$"<<endl;
cout<<"$$ 4. 查询联系人的信息 $$"<<endl;
cout<<"$$ 5. 浏览所有人的信息 $$"<<endl;
cout<<"$$ 6. 将联系人的信息从手机卡转移到手机 $$"<<endl;
cout<<"&& 7. 将联系人的信息从手机转移到手机卡 $$"<<endl;
cout<<"$$ 0. 退出程序,保存文件 $$"<<endl;
cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
cout<<"$$ 欢迎使用通讯录系统 $$"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"请输入你的选择:"<<endl;
}
void menu::add_menu()
{
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"$$ 请选择添加联系人到哪个通讯录 $$"<<endl;
cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
cout<<"$$ 1. 手机通讯录 $$"<<endl;
cout<<"$$ 2. 手机卡通讯录 $$"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"请输入你的选择:"<<endl;
}
void menu::cut_menu()
{
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"$$ 请选择在哪个通讯录删除联系 $$"<<endl;
cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
cout<<"$$ 1. 手机通讯录 $$"<<endl;
cout<<"$$ 2. 手机卡通讯录 $$"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"请输入你的选择:"<<endl;
}
void menu::query_menu()
{
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"$$ 请选择在哪个通讯录查找联系人 $$"<<endl;
cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
cout<<"$$ 1. 手机通讯录 $$"<<endl;
cout<<"$$ 2. 手机卡通讯录 $$"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"请输入你的选择:"<<endl;
}
void menu_display_menu()
{
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"$$ 请选择你要显示哪个通讯录的所有联系人 $$"<<endl;
cout<<"$$~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~$$"<<endl;
cout<<"$$ 1. 手机通讯录 $$"<<endl;
cout<<"$$ 2. 手机卡通讯录 $$"<<endl;
cout<<"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"<<endl;
cout<<"请输入你的选择:"<<endl;
}
/*第7个类:user类*/
class user
{
phone_list my_phone;
card_list my_card;
menu my_menu;
public:
user();
void add();
void cut();//利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)
void display();
void change();
void query();
void move_tophone();
void move_tocard();
void copy_tophone();
void copy_tocard();
~user();
};
user::user()
{
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<endl;
cout<<" 欢迎进入通讯录管理系统 "<<endl;
cout<<" 你目前的手机联系人有:"<<my_phone.get_number()+1<<"人"<<endl;
cout<<" 你目前的手机卡联系人有:"<<my_card.get_number()+1<<"人"<<endl;
cout<<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"<<endl;
}
void user::add()
{
my_menu.add_menu();
address_list *p;
int choose;
cin>>choose;
switch(choose)
{
case 1: p=&my_phone;
p->add();
break;
case 2: p=&my_card;
p->add();
break;
default: cout<<"输入错误,操作介绍"<<endl;
return ;
}
}
void user::query()
{
my_menu.query_menu();
address_list *p;
int choose;
string byname;
cin>>choose;
switch(choose)
{
case 1: p=&my_phone;
cout<<"请输入查询的联系人姓名:";
cin>>byname;
p->query_byname(byname);
break;
case 2: p=&my_card;
cout<<"请输入查询的联系人姓名:";
cin>>byname;
p->query_byname(byname);
break;
default: cout<<"输入错误,操作结束"<<endl;
return ;
}
}
void user::cut()
{
my_menu.cut_menu();
address_list *p;
int choose;
string bytell;
cin>>choose;
switch(choose)
{
case 1:p=&my_phone;
cout<<"请输入要删除的手机号:";
cin>>bytell;
p->cut_bytell(bytell);
cout<<"正在检测手机卡上是否有该联系人信息:"<<endl;
p=&my_card;
p->cut_bytell2(bytell);
break;
case 2:p=&my_card;
cout<<"请输入要删除的手机号:";
cin>>bytell;
p->cut_bytell(bytell);
cout<<"正在检测手机上是否有该联系人信息:"<<endl;
p=&my_phone;
p->cut_bytell2(bytell);
break;
default: cout<<"输入错误,操作结束"<<endl;
return ;
}
}
void user::change()
{
my_menu.change_menu();
address_list *p;
int choose;
string bytell;
cin>>choose;
switch(choose)
{
case 1:p=&my_phone;
cout<<"请输入要修改的手机号:";
cin>>bytell;
p->change_bytell(bytell);
break;
case 2:p=&my_card;
cout<<"请输入要修改的手机号:";
cin>>bytell;
p->change_bytell(bytell);
break;
case 3:
cout<<"对手机里的信息进行修改 "<<endl;
p=&my_phone;
cout<<"请输入要修改的手机号:";
cin>>bytell;
p->change_bytell(bytell);
cout<<"对手机卡里的信息进行修改"<<endl;
p=&my_card;
cout<<"请输入要修改的手机号:";
cin>>bytell;
p->change_bytell(bytell);
break;
default: cout<<"输入错误,操作结束"<<endl;
return ;
}
}
void user::display()
{
address_list *p;
p=&my_phone;
cout<<"手机联系人:"<<endl;
p->display();
p=&my_card;
cout<<"手机卡联系人:"<<endl;
p->display();
}
void user::copy_tocard()
{
if(my_phone.get_number()<0) {cout<<"手机通讯录当前没有联系人!"<<endl; return;}
for(int i=0;i<=my_phone.get_number();i++)
{
if(my_card.get_number()>999) {cout<<"手机通讯录容量已满!无法增加新联系人!"<<endl; return ;}
my_card.copy_set(my_phone.get_name(i),my_phone.get_tell(i));
}
cout<<"操作成功!"<<endl;
}
void user::copy_tophone()
{
if(my_card.get_number()<0) {cout<<"手机卡通讯录当前没有联系人!"<<endl; return;}
for(int i=0;i<=my_card.get_number();i++)
{
if(my_phone.get_number()>999) {cout<<"手机通讯录容量已满!无法增加新联系人!"<<endl; return ;}
my_phone.copy_set(my_card.get_name(i),my_card.get_tell(i));
}
cout<<"操作成功!"<<endl;
}
void user::move_tocard()
{
if(my_phone.get_number()<0) {cout<<"手机通讯录当前没有联系人!"<<endl; return;}
for(int i=0;i<=my_phone.get_number();i++)
{
if(my_phone.get_number()>999) {cout<<"手机卡通讯录容量已满!无法增加新联系人!"<<endl; return ;}
my_card.copy_set(my_phone.get_name(i),my_phone.get_tell(i));
}
my_phone.clear_phone();
cout<<"操作成功!"<<endl;
}
void user::move_tophone()
{
if(my_card.get_number()<0) {cout<<"手机卡通讯录当前没有联系人!"<<endl; return;}
for(int i=0;i<=my_card.get_number();i++)
{
if(my_phone.get_number()>999) {cout<<"手机卡通讯录容量已满!无法增加新联系人!"<<endl; return ;}
my_phone.copy_set(my_card.get_name(i),my_card.get_tell(i));
}
my_card.clear_card();
cout<<"操作成功!"<<endl;
}
user::~user()
{
cout<<"谢谢使用本系统!您的联系人已存入相关文件中!"<<endl;
}
int main()
{
menu my_menu;
user me;
my_menu.descript();
int choose=1,c;
while(choose!=0)
{
my_menu.main_menu();
cin>>choose;
switch(choose)
{
case 0:
break;
case 1:
me.add();
break;
case 2:
me.cut();
break;
case 3:
me.change();
break;
case 4:
me.query();
break;
case 5:
me.display();
break;
case 6:
cout<<"请选择 1.复制 2移动"<<endl;
cin>>c;
switch(c)
{
case 1:
me.copy_tophone();
break;
case 2:
me.move_tophone();
break;
default:
cout<<"操作错误!"<<endl;
break;
}
break;
case 7:
cout<<"请选择 1.复制 2移动"<<endl;
cin>>c;
switch(c)
{
case 1:
me.copy_tocard();
break;
case 2:
me.move_tocard();
break;
default:
cout<<"操作错误!"<<endl;
break;
}
break;
}
}
return 0;
}
更多推荐
所有评论(0)