表示一个联系人
数据成员包括:姓名、电话号码
成员函数包括:
带参并带默认值的构造函数
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成对象的输入和输出操作
class Phonecard_contact //手机卡联系人类
{
protected:
string name; //姓名
string pho_num; //电话
public:
Phonecard_contact(string tname="无姓名",string tpho_num="无号码")//有默认值的构造函数
{
name=tname;pho_num=tpho_num;
}
void Set(string tname,string tpho_num); //赋值
void modify(); //修改联系人信息
string getname();
string getpho_num();
friend istream&operator>>(istream &input,Phonecard_contact &);
friend ostream&operator<<(ostream &output,Phonecard_contact &);
};
void Phonecard_contact::Set(string tname,string tpho_num) //为数据成员赋值
{
name=tname;pho_num=tpho_num;
}
void Phonecard_contact::modify() //修改手机卡簿联系人信息
{
int a;
change1:
{
cout<<"**************************************"<<endl;
cout<<"*修改联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.修改联系人姓名 *"<<endl;
cout<<"* 2.修改联系人号码 *"<<endl;
cout<<"* 3.修改联系人全部信息 *"<<endl;
cout<<"* 4.返回上一级 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"修改联系人哪些信息?"<<'\n'<<endl;
cin>>a;
switch(a)
{
case 1:{
cout<<"请重新输入联系人姓名"<<endl;
cin>>name;
break;
}
case 2:{
cout<<"请重新输入联系人电话"<<endl;
cin>>pho_num;
break;
}
case 3:{
cout<<"请重新输入联系人姓名"<<endl;
cin>>name;
cout<<"请重新输入联系人电话"<<endl;
cin>>pho_num;
break;
}
case 4:{
return;//返回主菜单
}
default:{
cout<<"选择错误,请重新选择"<<endl;
goto change1;//回到change1,重新进行选择
}
}
}
}
string Phonecard_contact::getname() //获取姓名
{
return name;
}
string Phonecard_contact::getpho_num() //获取手机号
{
return pho_num;
}
istream&operator>>(istream &input,Phonecard_contact &obj) //重载运算符>>
{
cout<<"请输入联系人姓名"<<endl;
input>>obj.name;
cout<<"请输入联系人号码"<<endl;
input>>obj.pho_num;
return input;
}
ostream&operator<<(ostream &output,Phonecard_contact &obj) //重载运算符<<
{
output<<"联系人姓名:"<<obj.name<<endl;
output<<"联系人手机号:"<<obj.pho_num<<endl;
return output;
}
新增数据成员:籍贯、QQ号
成员函数包括
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成数据成员的输入输出操作
class Phone_contact:public Phonecard_contact//手机联系人类,继承手机卡联系人类
{
string nat_pla; //籍贯
string qq; //QQ
public:
Phone_contact(string tname="无姓名",string tpho_num="无号码",string tnat_pla="无籍贯",string tqq="无QQ"):Phonecard_contact(tname,tpho_num)//带默认值的构造函数
{
nat_pla=tnat_pla;qq=tqq;
}
void Set(string tname,string tpho_num,string tnat_pla,string tqq); //为数据成员赋值
void modify(); //修改手机簿联系人信息
string getnat_pla(); //获取籍贯
string getqq(); //获取QQ
friend istream&operator>>(istream &input,Phone_contact &); //重载运算符>>
friend ostream&operator<<(ostream &output,Phone_contact &); //重载运算符<<
};
void Phone_contact::Set(string tname,string tpho_num,string tnat_pla,string tqq)//为数据成员赋值
{
name=tname;pho_num=tpho_num;
nat_pla=tnat_pla;qq=tqq;
}
void Phone_contact::modify() //修改手机簿联系人信息
{
int a; //创建菜单类
change2: //方便引用goto
{
cout<<"**************************************"<<endl;
cout<<"*修改联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.修改联系人姓名 *"<<endl;
cout<<"* 2.修改联系人号码 *"<<endl;
cout<<"* 3.修改联系人籍贯 *"<<endl;
cout<<"* 4.修改联系人QQ *"<<endl;
cout<<"* 5.修改联系人全部信息 *"<<endl;
cout<<"* 6.返回上一级 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"修改联系人哪些信息?"<<'\n'<<endl;
cin>>a;
switch(a)
{
case 1:{
//修改姓名
cout<<"请重新输入联系人姓名"<<endl;
cin>>name;
break;
}
case 2:{
//修改号码
cout<<"请重新输入联系人号码"<<endl;
cin>>pho_num;
break;
}
case 3:{
//修改籍贯
cout<<"请重新输入联系人籍贯"<<endl;
cin>>nat_pla;
break;
}
case 4:{
//修改QQ
cout<<"请重新输入联系人QQ"<<endl;
cin>>qq;
break;
}
case 5:{
//全部修改
cout<<"请重新输入联系人姓名"<<endl;
cin>>name;
cout<<"请重新输入联系人号码"<<endl;
cin>>pho_num;
cout<<"请重新输入联系人籍贯"<<endl;
cin>>nat_pla;
cout<<"请重新输入联系人QQ"<<endl;
cin>>qq;
break;
}
case 6:{
//返回主菜单
return;
}
default:{
//错误输入
cout<<"选择错误,请重新选择"<<endl;
goto change2; //回到change2
}
}
}
}
string Phone_contact::getnat_pla() //获取籍贯
{
return nat_pla;
}
string Phone_contact::getqq() //获取QQ
{
return qq;
}
istream&operator>>(istream &input,Phone_contact &obj) //重载运算符>>
{
cout<<"请输入联系人姓名"<<endl;
input>>obj.name;
cout<<"请输入联系人号码"<<endl;
input>>obj.pho_num;
cout<<"请输入联系人籍贯"<<endl;
input>>obj.nat_pla;
cout<<"请输入联系人QQ"<<endl;
input>>obj.qq;
return input;
}
ostream&operator<<(ostream &output,Phone_contact &obj) //重载运算符<<
{
output<<"联系人姓名:"<<obj.name<<endl;
output<<"联系人号码:"<<obj.pho_num<<endl;
output<<"联系人籍贯:"<<obj.nat_pla<<endl;
output<<"联系人QQ:"<<obj.qq<<endl;
return output;
}
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
class Address_book //通讯簿类,都设置成纯虚函数
{
public:
virtual void newcontact()=0; //新建联系人
virtual void deletecontact(string tpho_num)=0; //删除联系人信息
virtual void modify(string tpho_num)=0; //修改联系人信息
virtual void query(string tname)=0; //查询联系人信息
virtual void browse()=0; //显示所有联系人信息
};
用于记录手机中存储的所有联系人的信息
数据成员包括:手机联系人的数量、手机联系人对象数组
成员函数包括
构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
析构函数:将对象数组中的内容写入到文本文件中。
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
class Phone_address_book:public Address_book //手机通讯簿类,继承Address_book类
{
protected:
int phone_contact_num; //手机通讯簿中联系人个数
vector<Phone_contact>phone_contact; //利用动态数组储存联系人信息
public:
Phone_address_book(); //构造
~Phone_address_book(); //析构
void newcontact(); //新建联系人到手机簿
void deletecontact(string tpho_num); //删除手机簿上的联系人
void modify(string tpho_num); //修改手机簿上联系人信息
void query(string tname); //查询手机簿上联系人
void browse(); //显示手机簿上所有联系人
int getphone_contact_num(); //获取手机簿上联系人个数
void copy(string tname,string tpho_num); //将姓名,号码压入动态数组phone_contact
string getname(int i); //获取姓名
string getpho_num(int i); //获取号码
void clear(); //清除手机通讯簿
};
Phone_address_book::Phone_address_book() //构造函数,读取文本文件的信息,并创造联系人对象数组
{
ifstream ist("手机.txt"); //打开文件
if(!ist)
{
cout<<"未找到手机.txt文件"<<endl;
return;
}
char str[80];
ist.getline(str,80);
ist.getline(str,80); //将光标移到下一行
ist.getline(str,80);
ist.getline(str,80);
phone_contact_num=-1; //数组存储从0开始,所以令初值为-1
string tname,tpho_num,tnat_ple,tqq;
while(ist>>tname>>tpho_num>>tnat_ple>>tqq) //读取文件中联系人的姓名 号码 籍贯和QQ
{
Phone_contact temp;
temp.Set(tname,tpho_num,tnat_ple,tqq);
phone_contact.push_back(temp); //利用动态数组储存联系人信息
phone_contact_num++; //联系人个数
}
ist.close(); //关闭文件
}
Phone_address_book::~Phone_address_book() //析构函数,将对象数组的内容写入文本文件
{
ofstream ost("手机.txt"); //打开文件
ost<<"**************************************************"<<endl;
ost<<"* 手机联系人 *"<<endl;
ost<<"**************************************************"<<endl;
//ost<<"姓名"<<'\t'<<'\t'<<"号码"<<'\t'<<'\t'<<"籍贯"<<'\t'<<'\t'<<"QQ"<<'\t'<<'\t'<
ost.setf(ios::left);
ost.width(16);
ost<<"姓名";
ost.width(16);
ost<<"号码";
ost.width(16);
ost<<"籍贯";
ost.width(16);
ost<<"QQ"<<endl;
for(int i=0;i<=phone_contact_num;i++) //将对象数组的内容写入文本文件
{
ost.setf(ios::left); //格式控制,左对齐
ost.width(16); //设置宽度为16,两个'\t'的长度
ost<<phone_contact[i].getname(); //输出姓名
ost.width(16);
ost<<phone_contact[i].getpho_num(); //输出号码
ost.width(16);
ost<<phone_contact[i].getnat_pla(); //输出籍贯
ost.width(16);
ost<<phone_contact[i].getqq(); //输出QQ
ost<<endl;
//ost<
}
phone_contact_num=-1; //手机联系人人数归-1
phone_contact.clear(); //将动态数组容器清空
ost.close(); //关闭文件
}
void Phone_address_book::newcontact() //新建联系人
{
if(phone_contact_num>=1000) //判断手机内存大小
{
cout<<"手机通讯簿内存已满。"<<endl;
cout<<"请重新选择操作。"<<endl;
return ;
}
else
{
Phone_contact temp; //建立手机联系人类
cin>>temp;
phone_contact.push_back(temp); //将信息压入动态数组
phone_contact_num++; //人数加1
cout<<"新建联系人成功。"<<endl;
}
}
void Phone_address_book::deletecontact(string tpho_num) //删除联系人
{
if(phone_contact_num<0) //判断是否有联系人
{
cout<<"手机通讯部内无联系人,请重新选择操作。"<<endl;
return ;
}
else
{
bool flag=false; //判断是否找到目标联系人
for(int i=0;i<=phone_contact_num;i++) //遍历
{
if(phone_contact[i].getpho_num()==tpho_num) //找到目标联系人
{
flag=true; //找到目标联系人
cout<<"要删除的联系人信息是:"<<endl;
cout<<phone_contact[i];
cout<<"是否删除该联系人"<<endl;
cout<<"1.确定删除"<<'\n'<<"2.取消删除"<<endl;
int sign;
cin>>sign;
if(sign==1) //删除目标联系人
{
phone_contact.erase(phone_contact.begin()+i);
phone_contact_num--;
cout<<"删除成功!"<<endl;
}
else
{
continue;
}
}
}
if(!flag)
{
cout<<"手机通讯簿中无该联系人,请重新选择操作。"<<endl;
return ;
}
}
}
void Phone_address_book::modify(string tpho_num) //修改联系人
{
if(phone_contact_num<0) //判断是否有联系人
{
cout<<"手机通讯簿无联系人,请重新选择。"<<endl;
return ;
}
else
{
bool flag=false; //判断是否找到目标联系人
for(int i=0;i<=phone_contact_num;i++) //遍历
{
if(phone_contact[i].getpho_num()==tpho_num)//找到目标联系人
{
flag=true; //找到目标联系人
cout<<"要修改的联系人信息是:"<<endl;
cout<<phone_contact[i];
cout<<"是否修改该联系人"<<endl;
cout<<"1.确定修改"<<'\n'<<"2.取消修改"<<endl;
int sign;
cin>>sign;
if(sign==1)
{
phone_contact[i].modify(); //进行目标联系人的信息修改
cout<<"修改成功"<<endl;
return;
}
else continue;
}
}
if(!flag)
{
cout<<"手机通讯簿中无该联系人,请重新选择。"<<endl;
return;
}
}
}
void Phone_address_book::query(string tname) //查询联系人
{
if(phone_contact_num<0) //判断手机通讯簿是否有联系人
{
cout<<"手机通讯簿无联系人,请重新选择。"<<endl;
return;
}
else
{
bool flag=false; //判断手机通讯簿是否有该联系人
for(int i=0;i<=phone_contact_num;i++) //遍历
{
if(phone_contact[i].getname()==tname) //标记有该联系人,并输出
{
flag=true;
cout<<"目标联系人信息"<<endl;
cout<<phone_contact[i];
return ;
}
}
if(!flag) //判断是否有该联系人
{
cout<<"手机通讯簿中无该人信息,请重新选择。"<<endl;
return;
}
}
}
void Phone_address_book::browse() //显示联系人
{
if(phone_contact_num<0) //判断手机通讯簿是否有联系人
{
cout<<"手机通讯簿无联系人信息,请重新选择。"<<endl;
return;
}
else //信息输出
{
cout<<"手机通讯簿中有联系人个数:"<<phone_contact_num+1<<endl;//输出个数
cout<<"信息如下:"<<endl;
vector<Phone_contact>::iterator temp; //phone_contact类型的指针
for(temp=phone_contact.begin();temp!=phone_contact.end();temp++)//遍历
{
cout<<(*temp);
cout<<endl;
}
}
}
int Phone_address_book::getphone_contact_num() //获取联系人个数
{
return phone_contact_num;
}
void Phone_address_book::copy(string tname,string tpho_num)//将目标姓名 号码压入动态数组
{
for(int i=0;i<=phone_contact_num;i++) //遍历
{
if(phone_contact[i].getname()==tname&&phone_contact[i].getpho_num()==tpho_num)
{
cout<<"姓名为;"<<tname<<"号码为:"<<tpho_num<<"的用户已存在!"<<endl;
return;}
}
Phone_contact temp(tname,tpho_num,"无籍贯","无QQ");//建立临时对象
phone_contact.push_back(temp); //压入动态数组
phone_contact_num++; //人数+1
cout<<"姓名为:"<<tname<<"号码为:"<<tpho_num<<"的用户已存储完!"<<endl;
}
string Phone_address_book::getname(int i) //获取手机通讯簿中第i个联系人姓名
{
return phone_contact[i].getname();
}
string Phone_address_book::getpho_num(int i) //获取手机通讯簿中第i个联系人号码
{
return phone_contact[i].getpho_num();
}
void Phone_address_book::clear() //手机通讯簿清空
{
phone_contact.clear(); //动态数组清空
phone_contact_num=-1; //人数归为-1
}
用于记录手机卡中存储的所有联系人的信息
数据成员包括:手机联系人的数量、手机联系人对象数组
成员函数包括
构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
析构函数:将对象数组中的内容写入到文本文件中。
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
class Phonecard_address_book:public Address_book //手机卡通讯簿类,继承Address_book类
{
protected:
int phonecard_contact_num; //手机卡通讯簿中联系人个数
vector<Phonecard_contact>phonecard_contact; //利用动态数组储存联系人信息
public:
Phonecard_address_book(); //构造
~Phonecard_address_book(); //析构
void newcontact(); //新建联系人到手机卡簿
void deletecontact(string tpho_num); //删除手机卡簿上的联系人
void modify(string tpho_num); //修改手机卡簿上联系人信息
void query(string tname); //查询手机卡簿上联系人
void browse(); //显示手机卡簿上所有联系人
int getphonecard_contact_num(); //获取手机卡簿上联系人个数
void copy(string tname,string tpho_num); //将姓名,号码压入动态数组phonecard_contact
string getname(int i); //获取姓名
string getpho_num(int i); //获取号码
void clear(); //清除手机卡通讯簿
};
Phonecard_address_book::Phonecard_address_book() //构造函数,读取文本文件的信息,并创造联系人对象数组
{
ifstream ist("手机卡.txt"); //打开文件
if(!ist)
{
cout<<"未找到手机卡.txt文件"<<endl;
return;
}
char str[80];
ist.getline(str,80);
ist.getline(str,80); //将光标移到下一行
ist.getline(str,80);
ist.getline(str,80);
phonecard_contact_num=-1; //数组存储从0开始,所以令初值为-1
string tname,tpho_num,tnat_ple,tqq;
while(ist>>tname>>tpho_num) //读取文件中联系人的姓名和号码
{
Phonecard_contact temp;
temp.Set(tname,tpho_num);
phonecard_contact.push_back(temp); //利用动态数组储存联系人信息
phonecard_contact_num++; //联系人个数
}
ist.close(); //关闭文件
}
Phonecard_address_book::~Phonecard_address_book() //析构函数,将对象数组的内容写入文本文件
{
ofstream ost("手机卡.txt"); //打开文件
ost<<"*********************************************"<<endl;
ost<<"* 手机卡联系人 *"<<endl;
ost<<"*********************************************"<<endl;
//ost<<"姓名"<<'\t'<<'\t'<<"号码"<<'\t'<<'\t'<
ost.setf(ios::left);
ost.width(16);
ost<<"姓名";
ost.width(16);
ost<<"号码"<<endl;
for(int i=0;i<=phonecard_contact_num;i++) //将对象数组的内容写入文本文件
{
ost.setf(ios::left); //格式控制,左对齐
ost.width(16); //设置宽度为16,两个'\t'的长度
ost<<phonecard_contact[i].getname(); //输出姓名
ost.width(16);
ost<<phonecard_contact[i].getpho_num();
ost<<endl; //输出号码
//ost<
}
phonecard_contact_num=-1; //手机卡联系人人数归-1
phonecard_contact.clear(); //将动态数组容器清空
ost.close(); //关闭文件
}
void Phonecard_address_book::newcontact() //新建联系人
{
if(phonecard_contact_num>=1000) //判断手机卡内存大小
{
cout<<"手机卡通讯簿内存已满。"<<endl;
cout<<"请重新选择操作。"<<endl;
return ;
}
else
{
Phonecard_contact temp; //建立手机卡联系人类
cin>>temp;
phonecard_contact.push_back(temp); //将信息压入动态数组
phonecard_contact_num++; //人数加1
cout<<"新建联系人成功。"<<endl;
}
}
void Phonecard_address_book::deletecontact(string tpho_num) //删除联系人
{
if(phonecard_contact_num<0) //判断是否有联系人
{
cout<<"手机卡通讯簿内无联系人,请重新选择操作。"<<endl;
return ;
}
else
{
bool flag=false; //判断是否找到目标联系人
for(int i=0;i<=phonecard_contact_num;i++) //遍历
{
if(phonecard_contact[i].getpho_num()==tpho_num) //找到目标联系人
{
flag=true; //找到目标联系人
cout<<"要删除的联系人信息是:"<<endl;
cout<<phonecard_contact[i];
cout<<"是否删除该联系人"<<endl;
cout<<"1.确定删除"<<'\n'<<"2.取消删除"<<endl;
int sign;
cin>>sign;
if(sign==1) //删除目标联系人
{
phonecard_contact.erase(phonecard_contact.begin()+i);
phonecard_contact_num--;
cout<<"删除成功!"<<endl;
}
else
{
continue;
}
}
}
if(!flag)
{
cout<<"手机卡通讯簿中无该联系人,请重新选择操作。"<<endl;
return ;
}
}
}
void Phonecard_address_book::modify(string tpho_num) //修改联系人
{
if(phonecard_contact_num<0) //判断是否有联系人
{
cout<<"手机卡通讯簿无联系人,请重新选择。"<<endl;
return ;
}
else
{
bool flag=false; //判断是否找到目标联系人
for(int i=0;i<=phonecard_contact_num;i++) //遍历
{
if(phonecard_contact[i].getpho_num()==tpho_num)//找到目标联系人
{
flag=true; //找到目标联系人
cout<<"要修改的联系人信息是:"<<endl;
cout<<phonecard_contact[i];
cout<<"是否修改该联系人"<<endl;
cout<<"1.确定修改"<<'\n'<<"2.取消修改"<<endl;
int sign;
cin>>sign;
if(sign==1)
{
phonecard_contact[i].modify(); //进行目标联系人的信息修改
cout<<"修改成功"<<endl;
return;
}
else continue;
}
}
if(!flag)
{
cout<<"手机卡通讯簿中无该联系人,请重新选择。"<<endl;
return;
}
}
}
void Phonecard_address_book::query(string tname) //查询联系人
{
if(phonecard_contact_num<0) //判断手机通讯簿是否有联系人
{
cout<<"手机卡通讯簿无联系人,请重新选择。"<<endl;
return;
}
else
{
bool flag=false; //判断手机通讯簿是否有该联系人
for(int i=0;i<=phonecard_contact_num;i++) //遍历
{
if(phonecard_contact[i].getname()==tname) //标记有该联系人,并输出
{
flag=true;
cout<<"目标联系人信息"<<endl;
cout<<phonecard_contact[i];
return ;
}
}
if(!flag) //判断是否有该联系人
{
cout<<"手机卡通讯簿中无该人信息,请重新选择。"<<endl;
return;
}
}
}
void Phonecard_address_book::browse() //显示联系人
{
if(phonecard_contact_num<0) //判断手机卡通讯簿是否有联系人
{
cout<<"手机卡通讯簿无联系人信息,请重新选择。"<<endl;
return;
}
else //信息输出
{
cout<<"手机卡通讯簿中有联系人个数:"<<phonecard_contact_num+1<<endl;//输出个数
cout<<"信息如下:"<<endl;
vector<Phonecard_contact>::iterator temp; //phone_contact类型的指针
for(temp=phonecard_contact.begin();temp!=phonecard_contact.end();temp++)//遍历
{
cout<<(*temp);
cout<<endl;
}
}
}
int Phonecard_address_book::getphonecard_contact_num() //获取联系人个数
{
return phonecard_contact_num;
}
void Phonecard_address_book::copy(string tname,string tpho_num)//将目标姓名 号码压入动态数组
{
for(int i=0;i<=phonecard_contact_num;i++) //遍历
{
//cout<
if(phonecard_contact[i].getname()==tname&&phonecard_contact[i].getpho_num()==tpho_num)
{
cout<<"姓名为:"<<tname<<"号码为:"<<tpho_num<<"的用户已存在!"<<endl;
return;}
}
Phonecard_contact temp; //建立临时对象
temp.Set(tname,tpho_num);
phonecard_contact.push_back(temp); //压入动态数组
phonecard_contact_num++; //人数+1
cout<<"姓名为;"<<tname<<"号码为:"<<tpho_num<<"的用户已存储完!"<<endl;
}
string Phonecard_address_book::getname(int i) //获取手机卡通讯簿中第i个联系人姓名
{
return phonecard_contact[i].getname();
}
string Phonecard_address_book::getpho_num(int i) //获取手机卡通讯簿中第i个联系人号码
{
return phonecard_contact[i].getpho_num();
}
void Phonecard_address_book::clear() //手机卡通讯簿清空
{
phonecard_contact.clear(); //动态数组清空
phonecard_contact_num=-1; //人数归为-1
}
用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理
数据成员包括:两个通讯簿对象
成员函数包括(成员函数体现用户的行为):
添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)
删除联系人:调用相应的通讯簿对象的删除操作删除一个联系人
Display:显示相应的通讯簿中联系人的信息
修改某一联系人的信息:调用通讯簿对象的函数完成操作
查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作
将手机卡中的存储的联系人的信息移动到手机中
将手机中存储的联系人的信息移动到手机卡中
将手机卡中的存储的联系人的信息复制到手机中
将手机中存储的联系人的信息复制到手机卡中
class User
{
Phone_address_book phone_address_book;
Phonecard_address_book phonecard_address_book;
Menu menu;
public:
User(); //构造
~User(); //析构
void New(); //新建联系人
void Delete(); //删除联系人
void modify(); //修改联系人信息
void query(); //查询联系人信息
void browse(); //显示全部联系人信息
void move_card_to_phone(); //将手机卡通讯簿的联系人转移到手机通讯簿上
void move_phone_to_card(); //将手机通讯簿的联系人转移到手机卡通讯簿上
void copy_card_to_phone(); //复制手机卡通讯簿联系人信息到手机通讯簿上
void copy_phone_to_card(); //复制手机通讯簿联系人信息到手机卡通讯簿上
};
User::User() //构造函数,实现用户友好型
{
cout<<"**********************************"<<endl;
cout<<"* 欢迎来到窝瓜的 *"<<endl;
cout<<"* 通讯录管理系统 *"<<endl;
cout<<"*--------------------------------*"<<endl;
cout<<"*当前联系人个数: *"<<endl;
cout<<"* 手机通讯簿上有"<<phone_address_book.getphone_contact_num()+1<<"个联系人 *"<<endl;
cout<<"* 手机卡通讯簿上有"<<phonecard_address_book.getphonecard_contact_num()+1<<"个联系人 *"<<endl;
cout<<"* *"<<endl;
cout<<"**********************************"<<endl;
cout<<'\n'<<endl;
system("pause");
}
User::~User() //析构函数,实现用户友好型
{
cout<<"**********************************"<<endl;
cout<<"* 感谢使用窝瓜的 *"<<endl;
cout<<"* 通讯录管理系统 *"<<endl;
cout<<"*--------------------------------*"<<endl;
cout<<"*当前联系人个数: *"<<endl;
cout<<"* 手机通讯簿上有"<<phone_address_book.getphone_contact_num()+1<<"个联系人 *"<<endl;
cout<<"* 手机卡通讯簿上有"<<phonecard_address_book.getphonecard_contact_num()+1<<"个联系人 *"<<endl;
cout<<"* *"<<endl;
cout<<"**********************************"<<endl;
cout<<'\n'<<endl;
system("pause"); //冻解屏幕,便于观察程序的执行结果
system("cls"); //清屏
}
void User::New() //新建联系人
{
change3:{
system("cls");
menu.newMenu(); //引用菜单类的新建菜单
Address_book *temp; //创建指向通讯簿类的指针
int sign; //进行选择
cin>>sign;
switch(sign)
{
case 1:{
//新建联系人到手机通讯簿
temp=&phone_address_book;//指针指向手机通讯簿对象
temp->newcontact();//调用手机通讯簿的新建联系人函数
break;
}
case 2:{
//新建联系人到手机卡通讯簿
temp=&phonecard_address_book;//指针指向手机卡通讯簿
temp->newcontact();//调用手机卡通讯簿的新建联系人函数
break;
}
case 3:{
//返回上一级
return;
}
default:{
//输入错误
cout<<"输入有误,请重新选择。"<<endl;
system("pause");
goto change3;//重新选择
}
}
}
}
void User::Delete() //删除联系人
{
change4:{
system("cls");
menu.deleteMenu(); //调用菜单类的删除菜单
Address_book *temp; //创建指向通讯簿类的指针
int sign; //用户进行选择
cin>>sign;
string tpho_num;
switch(sign)
{
case 1:{
//删除手机通讯簿的联系人
cout<<"请输入要删除的联系人号码"<<endl;
cin>>tpho_num;
temp=&phone_address_book;//指针指向手机通讯簿
temp->deletecontact(tpho_num);//调用删除函数
break;
}
case 2:{
//删除手机卡通讯簿的联系人
cout<<"请输入要删除的联系人号码"<<endl;
cin>>tpho_num;
temp=&phonecard_address_book;//指针指向手机卡通讯簿
temp->deletecontact(tpho_num);//调用删除函数
break;
}
case 3:{
//返回上一级
return;
}
default:{
//输入错误
cout<<"输入有误,请重新选择。"<<endl;
system("pause");
goto change4;
}
}
}
}
void User::modify() //修改联系人信息
{
change5:{
system("cls");
Address_book *temp; //创建指向通讯簿类的指针
menu.modifyMenu(); //调用菜单类的修改函数
int sign;
cin>>sign;
string tpho_num;
switch(sign){
case 1:{
//修改手机通讯簿联系人信息
cout<<"请输入要修改联系人的号码。"<<endl;
cin>>tpho_num;
temp=&phone_address_book;//指针指向手机通讯簿
temp->modify(tpho_num);//调用修改函数
break;
}
case 2:{
//修改手机卡通讯簿联系人信息
cout<<"请输入要修改联系人的号码。"<<endl;
cin>>tpho_num;
temp=&phonecard_address_book;//指针指向手机卡通讯簿
temp->modify(tpho_num);//调用修改函数
break;
}
case 3:{
//同时修改手机和手机卡通讯簿中联系人信息
cout<<"请输入要修改联系人的号码。"<<endl;
cin>>tpho_num;
cout<<"--------------手机通讯簿------------"<<endl;
temp=&phone_address_book;//指针指向手机通讯簿
temp->modify(tpho_num);
cout<<"-------------手机卡通讯簿-----------"<<endl;
temp=&phonecard_address_book;//指针指向手机卡通讯簿
temp->modify(tpho_num);
break;
}
case 4:{
//返回上一级
return;
}
default:{
//输入错误
cout<<"输入有误,请重新输入。"<<endl;
system("pause");
goto change5;
}
}
}
}
void User::query() //查询联系人信息
{
change6:
{
system("cls");
menu.queryMenu(); //调用菜单类的查询函数
Address_book *temp; //创建指向通讯簿的指针
int sign;
string tname;
cin>>sign;
switch(sign)
{
case 1:{
//查询手机通讯簿中联系人信息
cout<<"请输入要查询的联系人姓名"<<endl;
cin>>tname;
temp=&phone_address_book;//指针指向手机通讯簿
temp->query(tname);//调用查询函数
break;
}
case 2:{
//查询手机卡通讯簿中联系人信息
cout<<"请输入要查询的联系人姓名"<<endl;
cin>>tname;
temp=&phonecard_address_book;//指针指向手机卡通讯簿
temp->query(tname);//调用查询函数
break;
}
case 3:{
//查询手机和手机卡通讯簿中联系人信息
cout<<"请输入要查询的联系人姓名"<<endl;
cin>>tname;
cout<<"--------------手机通讯簿------------"<<endl;
temp=&phone_address_book;//指针指向手机通讯簿
temp->query(tname);//调用查询函数
cout<<"-------------手机卡通讯簿-----------"<<endl;
temp=&phonecard_address_book;//指针指向手机卡通讯簿
temp->query(tname);//调用查询函数
break;
}
case 4:{
//返回上一级
return;
}
default:{
//输入有误
cout<<"输入有误,请重新输入。"<<endl;
goto change6;
}
}
}
}
void User::browse() //显示联系人信息
{
change7:
{
system("cls");
menu.browseMenu(); //调用菜单浏览函数
Address_book *temp; //创建指向通讯簿的指针
int sign;
cin>>sign;
switch(sign)
{
case 1:{
//显示手机通讯簿中的联系人信息
cout<<"--------------手机通讯簿------------"<<endl;
temp=&phone_address_book;//指向手机通讯簿
temp->browse();
break;
}
case 2:{
//显示手机卡通讯簿中联系人信息
cout<<"-------------手机卡通讯簿-----------"<<endl;
temp=&phonecard_address_book;//只想手机卡通讯簿
temp->browse();
break;
}
case 3:{
//显示手机和手机卡通讯簿中联系人信息
cout<<"--------------手机通讯簿------------"<<endl;
temp=&phone_address_book;
temp->browse();
cout<<"-------------手机卡通讯簿-----------"<<endl;
temp=&phonecard_address_book;
temp->browse();
break;
}
case 4:{
//返回上一级
return;
}
default:{
//输入有误
cout<<"输入有误,请重新输入。"<<endl;
system("pause");
goto change7;
}
}
}
}
void User::move_phone_to_card() //将手机通讯簿中的联系人转移到手机卡通讯簿上
{
if(phone_address_book.getphone_contact_num()<0)//判断手机通讯簿中有无联系人
{
cout<<"手机通讯簿内无联系人。"<<endl;
return;
}
else
{
for(int i=0;i<=phone_address_book.getphone_contact_num();i++)//遍历手机通讯簿联系人
{
if(phonecard_address_book.getphonecard_contact_num()>=1000)//判断手机卡通讯簿内存是否已满
{
cout<<"手机卡通讯簿容量已满。"<<endl;
return;
}
phonecard_address_book.copy(phone_address_book.getname(i),phone_address_book.getpho_num(i));
}
phone_address_book.clear();//手机通讯簿清空
cout<<"移动成功。"<<endl;
}
}
void User::move_card_to_phone() //将手机卡通讯簿中的联系人转移到手机通讯簿上
{
if(phonecard_address_book.getphonecard_contact_num()<0)//判断手机卡通讯簿中有无联系人
{
cout<<"手机卡通讯簿内无联系人。"<<endl;
return;
}
else
{
for(int i=0;i<=phonecard_address_book.getphonecard_contact_num();i++)//遍历手机卡通讯簿
{
if(phone_address_book.getphone_contact_num()>=1000)//判断手机通讯簿内存是否已满
{
cout<<"手机通讯簿容量已满。"<<endl;
return;
}
phone_address_book.copy(phonecard_address_book.getname(i),phonecard_address_book.getpho_num(i));
}
phonecard_address_book.clear();//手机卡通讯簿清空
cout<<"移动成功。"<<endl;
}
}
void User::copy_phone_to_card() //将手机通讯簿中的联系人复制到手机卡通讯簿上
{
//cout<
if(phone_address_book.getphone_contact_num()<0)//判断手机通讯簿中有无联系人
{
cout<<"手机通讯簿内无联系人。"<<endl;
return;
}
else
{
for(int i=0;i<=phone_address_book.getphone_contact_num();i++)//遍历手机通讯簿联系人
{
//cout<
if(phonecard_address_book.getphonecard_contact_num()>=1000)//判断手机卡通讯簿内存是否已满
{
cout<<"手机卡通讯簿容量已满。"<<endl;
return;
}
phonecard_address_book.copy(phone_address_book.getname(i),phone_address_book.getpho_num(i));
}
cout<<"复制成功。"<<endl;
}
}
void User::copy_card_to_phone() //将手机卡通讯簿中的联系人复制到手机通讯簿上
{
if(phonecard_address_book.getphonecard_contact_num()<0)//判断手机卡通讯簿中有无联系人
{
cout<<"手机卡通讯簿内无联系人。"<<endl;
return;
}
else
{
for(int i=0;i<=phonecard_address_book.getphonecard_contact_num();i++)//遍历手机卡通讯簿
{
if(phone_address_book.getphone_contact_num()>=1000)//判断手机通讯簿内存是否已满
{
cout<<"手机通讯簿容量已满。"<<endl;
return;
}
phone_address_book.copy(phonecard_address_book.getname(i),phonecard_address_book.getpho_num(i));
}
cout<<"复制成功。"<<endl;
}
}
数据成员:可以不定义数据成员
成员函数:Display函数:显示操作菜单的提示。说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。
class Menu//界面菜单类
{
public:
void mainMenu();//主菜单
void newMenu();//新建菜单
void deleteMenu();//删除菜单
void modifyMenu();//修改菜单
void queryMenu();//查询菜单
void browseMenu();//浏览菜单
void archivedMenu();//转存菜单
};
void Menu::mainMenu() //主菜单
{
cout<<"**************************************"<<endl;
cout<<"*----------欢迎来到窝瓜的------------*"<<endl;
cout<<"*----------通讯录管理系统------------*"<<endl;
cout<<"**************************************"<<endl;
cout<<"*主菜单: *"<<endl;
cout<<"* 0.退出 *"<<endl;
cout<<"* 1.新建联系人 *"<<endl;
cout<<"* 2.删除联系人 *"<<endl;
cout<<"* 3.修改联系人 *"<<endl;
cout<<"* 4.查询联系人 *"<<endl;
cout<<"* 5.浏览联系人 *"<<endl;
cout<<"* 6.转存联系人 *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"请输入你的选择"<<'\n'<<endl;
}
void Menu::newMenu() //新建菜单
{
cout<<"**************************************"<<endl;
cout<<"*新建联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.手机通讯录 *"<<endl;
cout<<"* 2.手机卡通讯录 *"<<endl;
cout<<"* 3.返回主菜单 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"新建联系人到那个通讯录?"<<"\n"<<endl;
}
void Menu::deleteMenu() //删除菜单
{
cout<<"**************************************"<<endl;
cout<<"*删除联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.手机通讯录 *"<<endl;
cout<<"* 2.手机卡通讯录 *"<<endl;
cout<<"* 3.返回主菜单 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"删除哪个通讯录的联系人?"<<'\n'<<endl;
}
void Menu::modifyMenu() //修改菜单
{
cout<<"**************************************"<<endl;
cout<<"*修改联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.手机通讯簿 *"<<endl;
cout<<"* 2.手机卡通讯簿 *"<<endl;
cout<<"* 3.手机和手机卡通讯簿 *"<<endl;
cout<<"* 4.返回主菜单 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"修改哪个通讯簿联系人?"<<'\n'<<endl;
}
void Menu::queryMenu() //查询菜单
{
cout<<"**************************************"<<endl;
cout<<"*查询联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.手机通讯录 *"<<endl;
cout<<"* 2.手机卡通讯录 *"<<endl;
cout<<"* 3.手机通讯录和手机卡通讯录 *"<<endl;
cout<<"* 4.返回主菜单 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"查询哪个通讯录的联系人?"<<'\n'<<endl;
}
void Menu::browseMenu() //浏览菜单
{
cout<<"**************************************"<<endl;
cout<<"*浏览联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.手机通讯录 *"<<endl;
cout<<"* 2.手机卡通讯录 *"<<endl;
cout<<"* 3.手机通讯录和手机卡通讯录 *"<<endl;
cout<<"* 4.返回主菜单 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"浏览哪个通讯录的联系人?"<<'\n'<<endl;
}
void Menu::archivedMenu() //转存菜单
{
cout<<"**************************************"<<endl;
cout<<"*转存联系人: *"<<endl;
cout<<"* *"<<endl;
cout<<"* 1.将联系人信息从手机移动到手机卡上 *"<<endl;
cout<<"* 2.将联系人信息从手机卡移动到手机上 *"<<endl;
cout<<"* 3.将联系人信息从手机复制到手机卡上 *"<<endl;
cout<<"* 4.将联系人信息从手机卡复制到手机上 *"<<endl;
cout<<"* 5.返回上一级 *"<<endl;
cout<<"* *"<<endl;
cout<<"**************************************"<<endl;
cout<<'\n'<<"请输入你的选择"<<'\n'<<endl;
}
int main()
{
User user;
Menu menu;
int sign=1;
while(sign!=0)
{
change8:{
system("cls"); //清屏
menu.mainMenu(); //调用菜单类中的主菜单函数
cin>>sign; //用户进行选择
switch(sign)
{
case 1:{
//新建联系人
user.New();
goto change8;
}
case 2:{
//删除联系人
user.Delete();
goto change8;
}
case 3:{
//修改联系人
user.modify();
system("pause");
goto change8;
}
case 4:{
//查询联系人
user.query();
system("pause");
goto change8;
}
case 5:{
//显示联系人
user.browse();
system("pause");
goto change8;
}
case 6:{
//转存联系人
change9:{
system("cls");
int n;
menu.archivedMenu();
cin>>n;
switch(n)
{
case 1:{
//手机通讯簿信息移动到手机卡通讯簿
user.move_phone_to_card();
system("pause");
goto change8;
}
case 2:{
//手机卡通讯簿信息移动到手机通讯簿
user.move_card_to_phone();
system("pause");
goto change8;
}
case 3:{
//手机通讯簿信息复制到手机卡通讯簿
user.copy_phone_to_card();
system("pause");
goto change8;
}
case 4:{
//手机卡通讯簿信息复制到手机通讯簿
user.copy_card_to_phone();
system("pause");
goto change8;
}
case 5:{
//返回上一级
goto change8;
}
default:{
//输入有误
cout<<"输入有误,请重新输入。"<<endl;
system("pause");
goto change9;
}
}
}
}
case 0:{
//退出
//system("pause");//退出时暂停可有可无
system("cls");
break;
}
default:{
//输入有误
cout<<"输入有误,请重新输入"<<endl;
system("pause");
goto change8;
}
}
}
}
return 0;
}