手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。
存储在手机中的联系人的信息只包含用户名和电话号码两项信息。存储在电话卡上的联系人的信息除了上面提到的两项信息外,还包含籍贯,QQ号等信息。
根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写一个手机通讯录管理。
1.创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的存储的联系人的信息)。
2.以菜单方式工作(字符界面即可)
3.存储在手机上的联系人的信息包括:姓名和电话号码;存储在手机卡上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息
4.管理系统的功能包括:
a)新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中)
b)删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)
c)修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行修改操作)
d)查询:根据名字查询联系人信息(查询结果不唯一)
e)浏览:显示所有联系人的信息
f)将联系人的信息从手机转存到手机卡上(同时要避免重复数据的存在。并且在转存是要检查容量是否受限。下同。)
g)将联系人的信息从手机卡上准存到手机上(同时要避免重复数据的存在)
5.要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点
6.提交程序源码和课程设计报告。
7.课程设计评分说明:实现功能:通过;使用了继承技术:中;实现了运算符的重载:良;支持多态:优
一开始思路没捋清楚,就简单的分为联系人类、通讯录类、菜单类、用户类四个类,然后在一个文件里按照功能一个个硬写,敲了500多行发现不仅思路跑偏了而且代码乱的写不下去了,看了老师发的实验过程分析有了新思路,于是用多文件结构的写法,将下述的七个类分拆成声明的头文件和实现的源文件,成功实现。
说明:
1.实验过程分析为老师所发的过程分析+自己理解整合而成;
2.为了便于数据存储与使用,联系人姓名、号码、籍贯、QQ均使用string类进行操作;
3.为了易于进行联系人新建、删除、修改、查询等操作,故将手机通讯簿类和手机卡通讯簿类中的对象数组改用 STL 容器中的 vector 动态数组;
4.为避免一个源文件中实现所有功能使得代码冗长复杂,故使用多文件结构进行功能实现;
5.程序的核心为手机通讯簿类与手机卡通讯簿类,实质是具有手机联系人对象与具有手机卡联系人对象的两个数据库,其成员函数用于实现通讯录系统的增删改查;
6.程序的操作由菜单类与用户类实现,菜单类提供操作界面,用户类提供操作;用户类中两个对象分别为手机通讯簿类与手机卡通讯簿类,通过在用户类对这两个类的动态联编,从而实现在两个文本文件中的操作;
7.程序开始时,用户类及其对象的构造函数会自动打开文件进行数据读入,结束时会自动关闭文件进行数据写入并保存;
8.本程序大量使用了转向语句,只有按0才会结束。
————————————————————————————————————————————————
建立两个文本文件:记录存储在手机上联系人的基本信息(文本文件:手机.txt)和存储在手机卡上的联系人的信息(文本文件:手机卡.txt)。
建立以下几个类:
1.手机联系人类(PhoneContact):表示一个手机联系人
数据成员:
姓名:string name;
电话号码:string tel_num;
成员函数:
并带默认值参数的构造函数:PhoneContact(string rname = "新联系人", string rtel_num = "无号码");
修改数据成员值的函数:void modify();
重载>>运算符,完成对象的输入操作:friend istream &operator >>(istream &input, PhoneContact &obj);
重载<<运算符,完成对象的输出操作:friend ostream &operator <<(ostream &output, PhoneContact &obj);
获取姓名的函数:get_name();
获取号码的函数:string get_tel_num();
为数据成员赋值的函数:void set(string rname, string rtel_num);
2.手机卡联系人(CardContact):继承于手机联系人类,表示一个手机卡联系人
新增数据成员:
籍贯:string homeland;
QQ号:string QQ;
成员函数:
并带默认值参数的构造函数:CardContact(string rname = "新联系人", string rtel_num = "无号码", string rhomeland = "无地址", string rQQ = "无QQ");
修改数据成员值的函数:void modify();
重载>>运算符,完成对象的输入操作:friend istream & operator >>(istream &input, CardContact &obj);
重载<<运算符,完成对象的输出操作:friend ostream & operator <<(ostream &output, CardContact &obj);
获取籍贯的函数:string get_homeland();
获取QQ的函数:string get_QQ();
为数据成员赋值的函数:void set(string rname, string rtel_num,string rhomeland,string rQQ);
3.通讯簿抽象类(Maillist):为支持多态,将函数封装为纯虚函数
数据成员:无
成员函数:
新建联系人的函数:virtual void add() = 0;
删除联系人的函数:virtual void Delete(string rtel_num) = 0;
修改联系人的信息:virtual void change(string rtel_num) = 0;
查询并显示某一联系人的信息的函数:virtual void inquiry(string rname) = 0;
显示所有联系信息的函数:virtual void display() = 0;
4.手机通讯簿类(PhoneMaillist):继承于通讯簿抽象类,用于记录手机中存储的所有联系人的信息
数据成员:
手机联系人的数量:int phone_contact_num;
手机联系人对象数组:vector
成员函数:
构造函数:PhoneMaillist(); //读取文本文件(手机.txt)中的数据,并根据文件内容创建联系人对象数组
析构函数:~PhoneMaillist(); //将对象数组中的内容写入到文本文件(手机.txt)中
新建联系人的函数:void add();
删除联系人的函数:void Delete(string rtel_num);
修改联系人的信息:void change(string rtel_num);
查询并显示某一联系人的信息的函数:void inquiry(string rname);
显示所有联系信息的函数:void display();
获取手机通讯录联系人数量的函数:int get_phone_contact_num();
获取动态数组第i个联系人的姓名的函数: string get_name(int i); //用于查询联系人信息
获取动态数组第i个联系人的号码的函数:string get_tel_num(int i); //用于查询联系人信息
将姓名、号码压入动态数组的函数:void copy(string rname, string rtel_num); //用于两个通讯簿之间数据复制、移动
清空手机通讯录的函数:void clear(); //用于两个通讯簿之间数据复制、移动
5.手机卡通信簿类(CardMaillist):继承于通讯簿抽象类,用于记录手机卡中存储的所有联系人的信息
数据成员:
手机卡联系人的数量:int card_contact_num;
手机卡联系人对象数组:vector
成员函数:
构造函数:CardMaillist(); //读取文本文件(手机卡.txt)中的数据,并根据文件内容创建联系人对象数组
析构函数:~CardMaillist(); //将对象数组中的内容写入到文本文件(手机卡.txt)中
新建联系人的函数:void add();
删除联系人的函数:void Delete(string rtel_num);
修改联系人的信息:void change(string rtel_num);
查询并显示某一联系人的信息的函数:void inquiry(string rname);
显示所有联系信息的函数:void display();
获取手机卡通讯录联系人数量的函数:int get_card_contact_num();
获取动态数组第i个联系人的姓名的函数: string get_name(int i); //用于查询联系人信息
获取动态数组第i个联系人的号码的函数:string get_tel_num(int i); //用于查询联系人信息
将姓名、号码压入动态数组的函数:void copy(string rname, string rtel_num); //用于两个通讯簿之间数据复制、移动
清空手机卡通讯录的函数:void clear(); //用于两个通讯簿之间数据复制、移动
6.用户类(User):对通讯录进行管理,利用基类指针,调用相应的通讯簿对象,从而实现动态联编。
数据成员:
手机通讯簿:phonemaillist;
手机卡通讯簿:cardmaillist;
菜单类对象:uimenu;
成员函数:
新建联系人的函数:void add();
删除联系人的函数:void Delete();
修改联系人的信息:void change();
查询并显示某一联系人的信息的函数:void inquiry();
显示所有联系信息的函数:void display();
移动手机卡通讯录到手机通讯录:void move_card_to_phone();
移动手机通讯录到手机卡通讯录:void move_phone_to_card();
复制手机卡通讯录到手机通讯录:void copy_card_to_phone();
复制手机通讯录到手机卡通讯录:void copy_phone_to_card();
7.界面菜单类(Uimenu):用来给出操作提示
数据成员:无
成员函数:
主菜单:void MainUimenu();
添加菜单:void AddUimenu();
删除菜单:void DeleteUimenu();
修改菜单:void ChangeUimenu();
修改手机联系人菜单:void ChangePhoneUimenu();
修改手机卡联系人菜单:void ChangeCardUimenu();
查询菜单:void InquiryUimenu();
显示菜单:void DisplayUimenu();
转存菜单:void TransferredMethod();
//phonecontact.h
/*手机联系人类*/
#ifndef PHONECONTACT_H
#define PHONECONTACT_H
#include
#include
using namespace std;
class PhoneContact {
protected:
string name;
string tel_num;
public:
PhoneContact(string rname = "新联系人", string rtel_num = "无号码"); //有参构造函数
void modify(); //修改数据成员的值
friend istream &operator >>(istream &input, PhoneContact &obj); //重载>>运算符
friend ostream &operator <<(ostream &output, PhoneContact &obj); //重载<<运算符
string get_name(); //获取姓名
string get_tel_num(); //获取号码
void set(string rname, string rtel_num); //为数据成员赋值
};
#endif
//cardcontact.h
/*手机卡联系人类*/
#ifndef CARDCONTACT_H
#define CARDCONTACT_H
#include"phonecontact.h"
class CardContact : public PhoneContact{
protected:
string homeland;
string QQ;
public:
CardContact(string rname = "新联系人", string rtel_num = "无号码", string rhomeland = "无地址", string rQQ = "无QQ"); //有参构造函数
void modify(); //修改数据成员的值
friend istream & operator >>(istream &input, CardContact &obj); //重载>>运算符
friend ostream & operator <<(ostream &output, CardContact &obj); //重载<<运算符
string get_homeland(); //获取籍贯
string get_QQ(); //获取QQ
void set(string rname, string rtel_num,string rhomeland,string rQQ); //为数据成员赋值
};
#endif
//maillist.h
/*通讯簿抽象类*/
#ifndef MAILLIST_H
#define MAILLIST_H
#include
#include
using namespace std;
class Maillist {
public:
virtual void add() = 0; //新建联系人
virtual void Delete(string rtel_num) = 0; //删除联系人
virtual void change(string rtel_num) = 0; //修改联系人信息
virtual void inquiry(string rname) = 0; //查询联系人信息
virtual void display() = 0; //显示所有联系人信息
};
#endif
//phonemaillist.h
/*手机通讯簿类*/
#ifndef PHONEMAILLIST_H
#define PHONEMAILLIST_H
#include"cardcontact.h"
#include"maillist.h"
#include
class PhoneMaillist:public Maillist {
protected:
int phone_contact_num; //手机联系人数量
vector phone_contact; //手机联系人对象动态数组
public:
PhoneMaillist(); //构造函数,读取文本文件中的数据,并根据文件内容创建联系人对象数组
~PhoneMaillist(); //析构函数,将对象数组中的内容写入到文本文件中
void add(); //新建联系人
void Delete(string rtel_num); //删除联系人
void change(string rtel_num); //修改联系人信息
void inquiry(string rname); //查询联系人信息
void display(); //显示所有联系人信息
int get_phone_contact_num(); //获取手机通讯录联系人数量
void copy(string rname, string rtel_num); //将姓名、号码压入动态数组
string get_name(int i); //获取动态数组第i个联系人的姓名
string get_tel_num(int i); //获取动态数组第i个联系人的号码
void clear(); //清空手机通讯录
};
#endif
//cardmaillist.h
#ifndef CARDMAILLIST_H
#define CARDMAILLIST_H
#include"cardcontact.h"
#include"maillist.h"
#include
class CardMaillist :public Maillist {
protected:
int card_contact_num; //手机卡联系人数量
vector card_contact; //手机卡联系人对象动态数组
public:
CardMaillist(); //构造函数,读取文本文件中的数据,并根据文件内容创建联系人对象数组
~CardMaillist(); //析构函数,将对象数组中的内容写入到文本文件中
void add() ; //新建联系人
void Delete(string rtel_num) ; //删除联系人
void change(string rtel_num) ; //修改联系人信息
void inquiry(string rname) ; //查询联系人信息
void display() ; //显示所有联系人信息
int get_card_contact_num(); //获取手机卡通讯录联系人数量
void copy(string rname, string rtel_num); //将姓名、号码压入动态数组
string get_name(int i); //获取动态数组第i个联系人的姓名
string get_tel_num(int i); //获取动态数组第i个联系人的号码
void clear(); //清空手机卡通讯录
};
#endif
//user.h
#ifndef USER_H
#define USER_H
#include"cardmaillist.h"
#include"phonemaillist.h"
#include"uimenu.h"
class User {
PhoneMaillist phonemaillist;
CardMaillist cardmaillist;
Uimenu uimenu;
public:
User(); //构造函数
~User(); //析构函数
void add(); //新建联系人
void Delete(); //删除联系人
void change(); //修改联系人信息
void inquiry(); //查询联系人信息
void display(); //显示所有联系人信息
void move_card_to_phone(); //移动手机卡通讯录到手机通讯录
void move_phone_to_card(); //移动手机通讯录到手机卡通讯录
void copy_card_to_phone(); //复制手机卡通讯录到手机通讯录
void copy_phone_to_card(); //复制手机通讯录到手机卡通讯录
};
#endif
//uimenu.h
/*菜单类*/
#ifndef UIMENU_H
#define UIMENU_H
#include
using namespace std;
class Uimenu {
public:
void MainUimenu(); //主菜单
void AddUimenu(); //添加菜单
void DeleteUimenu(); //删除菜单
void ChangeUimenu(); //修改菜单
void ChangePhoneUimenu(); //修改手机联系人菜单
void ChangeCardUimenu(); //修改手机卡联系人菜单
void InquiryUimenu(); //查询菜单
void DisplayUimenu(); //显示菜单
void TransferredMethod(); //转存菜单
};
#endif
//PhoneContact.cpp
/*手机联系人类的实现*/
#include"PhoneContact.h"
#include"Uimenu.h"
PhoneContact::PhoneContact(string rname , string rtel_num ) {//有参构造函数
name = rname;
tel_num = rtel_num;
}
void PhoneContact::modify() {//修改数据成员的值
int n;
Uimenu obj;
change1:{
obj.ChangePhoneUimenu();
cin >> n;
switch (n)
{
case 1: {
cout << "请重新输入联系人姓名:";
cin >> name;
cout << "请重新输入联系人号码:";
cin >> tel_num;
break;
}
case 2: {
cout << "请重新输入联系人姓名:";
cin >> name;
break;
}
case 3: {
cout << "请重新输入联系人号码:";
cin >> tel_num;
break;
}
case 0: {
return;
}
default:{
cout << "选择错误,请重新选择!" << endl;
goto change1;
}
}
}
}
istream &operator >>(istream &input, PhoneContact &obj) {//重载>>运算符
cout << "请输入联系人姓名:";
input >> obj.name;
cout << "请输入联系人号码:";
input >> obj.tel_num;
return input;
}
ostream &operator <<(ostream &output, PhoneContact &obj) {//重载<<运算符
output << "联系人姓名:" << obj.name << "\t";
output << "联系人号码:" << obj.tel_num << endl;
return output;
}
string PhoneContact::get_name() { //获取姓名
return name;
}
string PhoneContact::get_tel_num() { //获取号码
return tel_num;
}
void PhoneContact::set(string rname, string rtel_num) {//为数据成员赋值
name = rname;
tel_num = rtel_num;
}
//CardContact.cpp
/*手机卡联系人类的实现*/
#include"cardcontact.h"
#include"Uimenu.h"
CardContact::CardContact(string rname, string rtel_num, string rhomeland, string rQQ) :PhoneContact(rname, rtel_num){//有参构造函数
homeland = rhomeland;
QQ = rQQ;
}
void CardContact::modify() {//修改数据成员的值
int n;
Uimenu obj;
change2: {
obj.ChangeCardUimenu();
cin >> n;
switch (n)
{
case 1: {
cout << "请重新输入联系人姓名:";
cin >> name;
cout << "请重新输入联系人号码:";
cin >> tel_num;
cout << "请重新输入联系人籍贯:";
cin >> homeland;
cout << "请重新输入联系人QQ:";
cin >> QQ;
break;
}
case 2: {
cout << "请重新输入联系人姓名:";
cin >> name;
break;
}
case 3: {
cout << "请重新输入联系人号码:";
cin >> tel_num;
break;
}
case 4: {
cout << "请重新输入联系人籍贯:";
cin >> homeland;
break;
}
case 5: {
cout << "请重新输入联系人QQ:";
cin >> QQ;
break;
}
case 0: {
return;
}
default: {
cout << "选择错误,请重新选择!" << endl;
goto change2;
}
}
}
}
istream & operator >> (istream & input, CardContact & obj){//重载>>运算符
cout << "请输入联系人姓名:";
input >> obj.name;
cout << "请输入联系人号码:";
input >> obj.tel_num;
cout << "请输入籍贯:";
input >> obj.homeland;
cout << "请输入QQ:";
input >> obj.QQ;
return input;
}
ostream & operator << (ostream &output, CardContact &obj){//重载<<运算符
output << "联系人姓名:" << obj.name << "\t";
output << "联系人号码:" << obj.tel_num << "\t";
output << "联系人籍贯:" << obj.homeland << "\t";
output << "联系人QQ:" << obj.QQ << endl;
return output;
}
string CardContact::get_homeland() { //获取籍贯
return homeland;
}
string CardContact::get_QQ() { //获取QQ
return QQ;
}
void CardContact::set(string rname, string rtel_num, string rhomeland, string rQQ) { //为数据成员赋值
PhoneContact::set(rname,rtel_num);//调用基类set函数
homeland = rhomeland;
QQ = rQQ;
}
//PhoneMaillist.cpp
/*手机通讯簿类的实现*/
#include"phonemaillist.h"
#include"uimenu.h"
#include
PhoneMaillist::PhoneMaillist() { //构造函数,读取文本文件中的数据,并根据文件内容创建联系人对象数组
ifstream fin("手机.txt");//打开文件
/*吸收标题行*/
char str[100];
fin.getline(str, 100);
fin.getline(str, 100);
fin.getline(str, 100);
fin.getline(str, 100);
phone_contact_num = -1;
string rname, rtel_num;
while (fin >> rname >> rtel_num )//读取文件中的联系人姓名与号码,且跳过姓名为“新联系人”的联系人
{
PhoneContact temp; //建立手机联系人临时对象
temp.set(rname, rtel_num); //存储联系人姓名和号码
phone_contact.push_back(temp); //压入vector容器
phone_contact_num++; //联系人数量+1
}
fin.close();//关闭文件
}
PhoneMaillist::~PhoneMaillist() { //析构函数,将对象数组中的内容写入到文本文件中
ofstream fout("手机.txt");//打开文件
/*写入文件标题*/
fout << " ----------------------------------------------- " << endl;
fout << "| 手机联系人 |" << endl;
fout << " ----------------------------------------------- " << endl;
fout << " 姓名\t\t\t号码\t\t\t" << endl;
for (int i = phone_contact_num; i >= 0; i--)
{
fout.setf(ios::left); //设置左对齐
fout.width(24); //设置域宽,与上述三个/t对应
fout << phone_contact[i].get_name(); //写入姓名
fout.width(24); //设置域宽,与上述三个/t对应
fout << phone_contact[i].get_tel_num() << endl; //写入号码
}
phone_contact_num = -1; //待存储联系人数量清空
phone_contact.clear(); //vector容器清空
fout.close(); //关闭文件
}
void PhoneMaillist::add() { //新建联系人
if (phone_contact_num>1000) { //当达到容量上限时不再添加
cout << "手机通讯录容量已满,无法新建联系人!" << endl;
cout << "请尝试在手机卡通讯录新建联系人" << endl;
return;
}
PhoneContact temp; //建立临时对象
cin >> temp; //使用重载 >> 输入数据
phone_contact.push_back(temp); //压入vector容器
phone_contact_num++; //手机联系人个数+1
cout << "新建联系人成功!" << endl;
}
void PhoneMaillist::Delete(string rtel_num) { //删除联系人
if (phone_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
while (true) {
bool flag = false;
for (int i = 0; i <= phone_contact_num; i++) { //枚举所有联系人
if (phone_contact[i].get_tel_num() == rtel_num) { //如果号码相同
flag = true;
cout << "该联系人信息为:" << endl;
cout << phone_contact[i];
cout << "是否删除该联系人?" << endl;
cout << "1.确定删除" << endl;
cout << "2.取消删除" << endl;
int t;
cin >> t;
if (t == 1)
{
phone_contact.erase(phone_contact.begin() + i);
phone_contact_num--;
cout << "删除成功!" << endl;
}
else //如果取消删除,继续向下枚举
continue;
}
}
if (flag == false) { //如果未找到相应联系人
cout << "在手机通讯录未找到相应联系人!" << endl;
cout << "是否重新输入号码?" << endl;
cout << "1.重新输入" << endl;
cout << "2.不重新输入" << endl;
int t;
cin >> t;
if (t == 1) {
cout << "请重新输入号码 :";
cin >> rtel_num;
continue;
}
else {
cout << "输入取消" << endl;
return;
}
}
else { //如果找到相应联系人
cout << "搜索结束,删除完毕!" << endl;
return;
}
}
}
void PhoneMaillist::change(string rtel_num) { //修改联系人信息
if (phone_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
while (true)
{
bool flag = false;
for (int i = 0; i <= phone_contact_num; i++) { //枚举所有联系人
if (phone_contact[i].get_tel_num() == rtel_num) { //如果号码相同
flag = true;
cout << "该联系人信息为:" << endl;
cout << phone_contact[i];
cout << "是否修改该联系人?" << endl;
cout << "1.确定修改" << endl;
cout << "2.取消修改" << endl;
int t;
cin >> t;
if (t == 1) {
phone_contact[i].modify();
cout << "修改成功!" << endl;
cout << "是否寻找相同姓名联系人?" << endl;
cout << "1.确定寻找" << endl;
cout << "2.取消寻找" << endl;
int t;
cin >> t;
if (t == 1)
continue;
else
break;
}
else { //如果取消修改,继续向下枚举
cout << "是否寻找相同姓名联系人?" << endl;
cout << "1.确定寻找" << endl;
cout << "2.取消寻找" << endl;
int t;
cin >> t;
if (t == 1)
continue;
else
break;
}
}
}
if (flag == false) { //如果未找到相应联系人
cout << "在手机通讯录未找到相应联系人!" << endl;
cout << "是否重新输入号码?" << endl;
cout << "1.重新输入" << endl;
cout << "2.不重新输入" << endl;
int t;
cin >> t;
if (t == 1) {
cout << "请重新输入号码 :";
cin >> rtel_num;
continue;
}
else {
cout << "输入取消" << endl;
return;
}
}
else { //如果找到相应联系人
cout << "搜索结束,修改完毕!" << endl;
return;
}
}
}
void PhoneMaillist::inquiry(string rname) { //查询联系人信息
if (phone_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
while (true)
{
bool flag = false;
for (int i = 0; i <= phone_contact_num; i++) { //枚举所有联系人
if (phone_contact[i].get_name() == rname) { //如果姓名相同
flag = true;
cout << "该联系人信息为:" << endl;
cout << phone_contact[i];
cout << "是否寻找相同姓名联系人?" << endl;
cout << "1.确定寻找" << endl;
cout << "2.取消寻找" << endl;
int t;
cin >> t;
if (t==1)
continue;
else
break;
}
}
if (flag == false) { //如果未找到相应联系人
cout << "在手机通讯录未找到相应联系人!" << endl;
cout << "是否重新输入姓名?" << endl;
cout << "1.重新输入" << endl;
cout << "2.不重新输入" << endl;
int t;
cin >> t;
if (t == 1) {
cout << "请重新输入姓名 :";
cin >> rname;
continue;
}
else {
cout << "输入取消" << endl;
return;
}
}
else { //如果找到相应联系人
cout << "搜索结束,查询完毕!" << endl;
return;
}
}
}
void PhoneMaillist::display() { //显示所有联系人信息
if (phone_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
cout << "手机通讯录中共有" << phone_contact_num + 1 << "个联系人." << endl;
cout << "信息如下:" << endl;
vector ::iterator temp; //vector迭代器
for (temp = phone_contact.begin(); temp != phone_contact.end(); temp++) //显示vector容器内的所有信息
cout << (*temp);
}
int PhoneMaillist::get_phone_contact_num() { //获取手机通讯录联系人数量
return phone_contact_num;
}
void PhoneMaillist::copy(string rname, string rtel_num) { //将姓名、号码压入动态数组
for (int i = 0; i <= phone_contact_num; i++) { //枚举所有联系人
if (phone_contact[i].get_name() == rname && phone_contact[i].get_tel_num() == rtel_num) { //避免存在相同的联系人
cout << "姓名为:" << rname << " 电话为:" << rtel_num << " 的联系人已存在!" << endl;
return;
}
}
PhoneContact temp; //建立手机联系人临时对象
temp.set(rname, rtel_num); //将联系人信息赋给临时对象
phone_contact.push_back(temp); //压入动态数组
phone_contact_num++; //手机联系人数量+1
cout << "已存入姓名为:" << rname << " 电话为:" << rtel_num << " 的联系人!" << endl;
}
string PhoneMaillist::get_name(int i) { //获取动态数组第i个联系人的姓名
return phone_contact[i].get_name();
}
string PhoneMaillist::get_tel_num(int i) { //获取动态数组第i个联系人的号码
return phone_contact[i].get_tel_num();
}
void PhoneMaillist::clear() { //清空手机通讯录
phone_contact.clear();
phone_contact_num = -1;
}
//CardMaillist.cpp
/*手机卡通讯簿类的实现*/
#include"cardmaillist.h"
#include"uimenu.h"
#include
CardMaillist::CardMaillist() { //构造函数,读取文本文件中的数据,并根据文件内容创建联系人对象数组
ifstream fin("手机卡.txt");//打开文件
/*吸收标题行*/
char str[100];
fin.getline(str, 100);
fin.getline(str, 100);
fin.getline(str, 100);
fin.getline(str, 100);
card_contact_num = -1;
string rname, rtel_num,rhomeland,rQQ;
while (fin >> rname >> rtel_num >> rhomeland >> rQQ)//读取文件中的联系人姓名、号码、籍贯与QQ
{
CardContact temp; //建立手机卡联系人临时对象
temp.set(rname, rtel_num , rhomeland , rQQ); //存储联系人姓名和号码
card_contact.push_back(temp); //压入vector容器
card_contact_num++; //联系人数量+1
}
fin.close();//关闭文件
}
CardMaillist::~CardMaillist() { //析构函数,将对象数组中的内容写入到文本文件中
ofstream fout("手机卡.txt");//打开文件
/*写入文件标题*/
fout << " ----------------------------------------------------------------------- " << endl;
fout << "| 手机卡联系人 |" << endl;
fout << " ----------------------------------------------------------------------- " << endl;
fout << " 姓名\t\t号码\t\t籍贯\t\tQQ\t\t" << endl;
for (int i = card_contact_num; i >= 0; i--)
{
fout.setf(ios::left); //设置左对齐
fout.width(16); //设置域宽,与上述2个/t对应
fout << card_contact[i].get_name(); //写入姓名
fout.width(16); //设置域宽,与上述2个/t对应
fout << card_contact[i].get_tel_num(); //写入号码
fout.width(16); //设置域宽,与上述2个/t对应
fout << card_contact[i].get_homeland(); //写入籍贯
fout.width(16); //设置域宽,与上述2个/t对应
fout << card_contact[i].get_QQ() << endl; //写入QQ
}
card_contact_num = -1; //待存储联系人数量清空
card_contact.clear(); //vector容器清空
fout.close(); //关闭文件
}
void CardMaillist::add() { //新建联系人
if (card_contact_num>1000) { //当达到容量上限时不再添加
cout << "手机通讯录容量已满,无法新建联系人!" << endl;
cout << "请尝试在手机卡通讯录新建联系人" << endl;
return;
}
CardContact temp; //建立临时对象
cin >> temp; //使用重载 >> 输入数据
card_contact.push_back(temp); //压入vector容器
card_contact_num++; //手机联系人个数+1
cout << "新建联系人成功!" << endl;
}
void CardMaillist::Delete(string rtel_num) { //删除联系人
if (card_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
while (true) {
bool flag = false;
for (int i = 0; i <= card_contact_num; i++) { //枚举所有联系人
if (card_contact[i].get_tel_num() == rtel_num) { //如果号码相同
flag = true;
cout << "该联系人信息为:" << endl;
cout << card_contact[i];
cout << "是否删除该联系人?" << endl;
cout << "1.确定删除" << endl;
cout << "2.取消删除" << endl;
int t;
cin >> t;
if (t == 1)
{
card_contact.erase(card_contact.begin() + i);
card_contact_num--;
cout << "删除成功!" << endl;
}
else //如果取消删除,继续向下枚举
continue;
}
}
if (flag == false) { //如果未找到相应联系人
cout << "在手机通讯录未找到相应联系人!" << endl;
cout << "是否重新输入号码?" << endl;
cout << "1.重新输入" << endl;
cout << "2.不重新输入" << endl;
int t;
cin >> t;
if (t == 1) {
cout << "请重新输入号码 :";
cin >> rtel_num;
continue;
}
else {
cout << "输入取消" << endl;
return;
}
}
else { //如果找到相应联系人
cout << "搜索结束,删除完毕!" << endl;
return;
}
}
}
void CardMaillist::change(string rtel_num) { //修改联系人信息
if (card_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
while (true)
{
bool flag = false;
for (int i = 0; i <= card_contact_num; i++) { //枚举所有联系人
if (card_contact[i].get_tel_num() == rtel_num) { //如果号码相同
flag = true;
cout << "该联系人信息为:" << endl;
cout << card_contact[i];
cout << "是否修改该联系人?" << endl;
cout << "1.确定修改" << endl;
cout << "2.取消修改" << endl;
int t;
cin >> t;
if (t == 1) {
card_contact[i].modify();
cout << "修改成功!" << endl;
cout << "是否寻找相同姓名联系人?" << endl;
cout << "1.确定寻找" << endl;
cout << "2.取消寻找" << endl;
int t;
cin >> t;
if (t == 1)
continue;
else
break;
}
else { //如果取消修改,继续向下枚举
cout << "是否寻找相同姓名联系人?" << endl;
cout << "1.确定寻找" << endl;
cout << "2.取消寻找" << endl;
int t;
cin >> t;
if (t == 1)
continue;
else
break;
}
}
}
if (flag == false) { //如果未找到相应联系人
cout << "在手机通讯录未找到相应联系人!" << endl;
cout << "是否重新输入号码?" << endl;
cout << "1.重新输入" << endl;
cout << "2.不重新输入" << endl;
int t;
cin >> t;
if (t == 1) {
cout << "请重新输入号码 :";
cin >> rtel_num;
continue;
}
else {
cout << "输入取消" << endl;
return;
}
}
else { //如果找到相应联系人
cout << "搜索结束,修改完毕!" << endl;
return;
}
}
}
void CardMaillist::inquiry(string rname) { //查询联系人信息
if (card_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
while (true)
{
bool flag = false;
for (int i = 0; i <= card_contact_num; i++) { //枚举所有联系人
if (card_contact[i].get_name() == rname) { //如果姓名相同
flag = true;
cout << "该联系人信息为:" << endl;
cout << card_contact[i];
cout << "是否寻找相同姓名联系人?" << endl;
cout << "1.确定寻找" << endl;
cout << "2.取消寻找" << endl;
int t;
cin >> t;
if (t == 1)
continue;
else
break;
}
}
if (flag == false) { //如果未找到相应联系人
cout << "在手机通讯录未找到相应联系人!" << endl;
cout << "是否重新输入姓名?" << endl;
cout << "1.重新输入" << endl;
cout << "2.不重新输入" << endl;
int t;
cin >> t;
if (t == 1) {
cout << "请重新输入姓名 :";
cin >> rname;
continue;
}
else {
cout << "输入取消" << endl;
return;
}
}
else { //如果找到相应联系人
cout << "搜索结束,查询完毕!" << endl;
return;
}
}
}
void CardMaillist::display() { //显示所有联系人信息
if (card_contact_num<0) { //手机通讯录没有联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
cout << "手机通讯录中共有" << card_contact_num + 1 << "个联系人." << endl;
cout << "信息如下:" << endl;
vector ::iterator temp; //vector迭代器
for (temp = card_contact.begin(); temp != card_contact.end(); temp++) //显示vector容器内的所有信息
cout << (*temp);
}
int CardMaillist::get_card_contact_num() { //获取手机卡通讯录联系人数量
return card_contact_num;
}
void CardMaillist::copy(string rname, string rtel_num) { //将姓名、号码压入动态数组
for (int i = 0; i <= card_contact_num; i++) { //枚举所有联系人
if (card_contact[i].get_name() == rname && card_contact[i].get_tel_num() == rtel_num) { //避免存在相同的联系人
cout << "姓名为:" << rname << " 电话为:" << rtel_num << " 的联系人已存在!" << endl;
return;
}
}
CardContact temp; //建立手机卡联系人临时对象
temp.set(rname, rtel_num, "无地址", "无QQ"); //将联系人信息赋给临时对象
card_contact.push_back(temp); //压入动态数组
card_contact_num++; //手机卡联系人数量+1
cout << "已存入姓名为:" << rname << " 电话为:" << rtel_num << " 的联系人!" << endl;
}
string CardMaillist::get_name(int i) { //获取动态数组第i个联系人的姓名
return card_contact[i].get_name();
}
string CardMaillist::get_tel_num(int i) { //获取动态数组第i个联系人的号码
return card_contact[i].get_tel_num();
}
void CardMaillist::clear() { //清空手机卡通讯录
card_contact.clear();
card_contact_num = -1;
}
//User.cpp
/*用户类的实现*/
#include"user.h"
#include
using namespace std;
User::User() { //构造函数
cout << "****************************************" << endl;
cout << "* 欢迎使用通讯录管理系统 *" << endl;
cout << "* 手机通讯录目前有" << phonemaillist.get_phone_contact_num() + 1 << "个联系人 *" << endl;
cout << "* 手机卡通讯录目前有" << cardmaillist.get_card_contact_num() + 1 << "个联系人 *" << endl;
cout << "****************************************" << endl;
}
User::~User() { //析构函数
cout << "****************************************" << endl;
cout << "* 感谢您使用本通讯录管理系统 *" << endl;
cout << "* 手机通讯录目前有" << phonemaillist.get_phone_contact_num() + 1 << "个联系人 *" << endl;
cout << "* 手机卡通讯录目前有" << cardmaillist.get_card_contact_num() + 1 << "个联系人 *" << endl;
cout << "****************************************" << endl;
/*显示控制,使界面更友好*/
system("pause");
system("cls");
}
void User::add() { //新建联系人
change3: {
uimenu.AddUimenu(); //新建菜单
Maillist *temp; //通讯簿基类指针
int t;
cin >> t;
switch (t) {
case 1: { //新建联系人到手机
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> add(); //调用手机通讯簿对象函数
break;
}
case 2: { //新建联系人到手机卡
temp = &cardmaillist; //指针指向手机卡通讯簿对象
temp -> add(); //调用手机卡通讯簿对象函数
break;
}
case 0: { //返回上一级
return;
}
default: { //选择错误
cout << "选择错误,请重新选择!" << endl;
goto change3;
}
}
}
}
void User::Delete() { //删除联系人
change4: {
uimenu.DeleteUimenu(); //删除菜单
Maillist *temp; //通讯簿基类指针
string rtel_num;
int t;
cin >> t;
switch (t)
{
case 1: { //在手机通讯录删除联系人
cout << "请输入要删除的联系人的号码:";
cin >> rtel_num;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> Delete(rtel_num); //调用手机通讯簿对象函数
break;
}
case 2: { //在手机卡通讯录删除联系人
cout << "请输入要删除的联系人的号码:";
cin >> rtel_num;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp -> Delete(rtel_num); //调用手机卡通讯簿对象函数
break;
}
case 3: { //在两个通讯录都进行删除
cout << "请输入要删除的联系人的号码:";
cin >> rtel_num;
cout << "--------------手机通讯录----------------" << endl;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> Delete(rtel_num); //调用手机通讯簿对象函数
cout << "--------------手机卡通讯录----------------" << endl;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp -> Delete(rtel_num); //调用手机卡通讯簿对象函数
break;
}
case 0: { //返回上一级
return;
}
default: { //选择错误
cout << "选择错误,请重新选择!" << endl;
goto change4;
}
}
}
}
void User::change() { //修改联系人信息
change5: {
uimenu.ChangeUimenu(); //修改菜单
Maillist *temp; //通讯簿基类指针
string rtel_num;
int t;
cin >> t;
switch (t)
{
case 1: { //在手机通讯录修改联系人
cout << "请输入要修改的联系人的号码:";
cin >> rtel_num;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> change(rtel_num); //调用手机通讯簿对象函数
break;
}
case 2: { //在手机卡通讯录修改联系人
cout << "请输入要修改的联系人的号码:";
cin >> rtel_num;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp -> change(rtel_num); //调用手机卡通讯簿对象函数
break;
}
case 3: { //在两个通讯录都进行修改
cout << "请输入要修改的联系人的号码:";
cin >> rtel_num;
cout << "--------------手机通讯录----------------" << endl;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> change(rtel_num); //调用手机通讯簿对象函数
cout << "--------------手机卡通讯录----------------" << endl;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp -> change(rtel_num); //调用手机卡通讯簿对象函数
break;
}
case 0: { //返回上一级
return;
}
default: { //选择错误
cout << "选择错误,请重新选择!" << endl;
goto change5;
}
}
}
}
void User::inquiry() { //查询联系人信息
change6: {
uimenu.InquiryUimenu(); //查询菜单
Maillist *temp; //通讯簿基类指针
string rname;
int t;
cin >> t;
switch (t)
{
case 1: { //在手机通讯录查询联系人
cout << "请输入要查询的联系人的姓名:";
cin >> rname;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> inquiry(rname); //调用手机通讯簿对象函数
break;
}
case 2: { //在手机卡通讯录查询联系人
cout << "请输入要查询的联系人的姓名:";
cin >> rname;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp ->inquiry(rname); //调用手机卡通讯簿对象函数
break;
}
case 3: { //在两个通讯录都进行修改
cout << "请输入要查询的联系人的姓名:";
cin >> rname;
cout << "--------------手机通讯录----------------" << endl;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp ->inquiry(rname); //调用手机通讯簿对象函数
cout << "--------------手机卡通讯录----------------" << endl;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp ->inquiry(rname); //调用手机卡通讯簿对象函数
break;
}
case 0: { //返回上一级
return;
}
default: { //选择错误
cout << "选择错误,请重新选择!" << endl;
goto change6;
}
}
}
}
void User::display() { //显示所有联系人信息
change6: {
uimenu.DisplayUimenu(); //显示菜单
Maillist *temp; //通讯簿基类指针
int t;
cin >> t;
switch (t)
{
case 1: { //显示手机通讯录所有联系人
cout << "--------------手机通讯录----------------" << endl;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> display(); //调用手机通讯簿对象函数
break;
}
case 2: { //显示手机卡通讯录所有联系人
cout << "--------------手机卡通讯录----------------" << endl;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp -> display(); //调用手机卡通讯簿对象函数
break;
}
case 3: { //显示两个通讯录的所有联系人
cout << "--------------手机通讯录----------------" << endl;
temp = &phonemaillist; //指针指向手机通讯簿对象
temp -> display(); //调用手机通讯簿对象函数
cout << "--------------手机卡通讯录----------------" << endl;
temp = &cardmaillist; //指针指向手机通讯簿对象
temp -> display(); //调用手机卡通讯簿对象函数
break;
}
case 0: { //返回上一级
return;
}
default: { //选择错误
cout << "选择错误,请重新选择!" << endl;
goto change6;
}
}
}
}
void User::move_card_to_phone() { //移动手机卡通讯录到手机通讯录
if (cardmaillist.get_card_contact_num()<0) { //手机卡通讯录无联系人时
cout << "手机卡通讯录无联系人!" << endl;
return;
}
for (int i = 0; i <= cardmaillist.get_card_contact_num(); i++) { //枚举手机卡通讯录所有联系人
if (phonemaillist.get_phone_contact_num() >= 1000) { //当手机通讯录容量满时
cout << "手机通讯录已满!无法增加新联系人!" << endl;
return;
}
phonemaillist.copy(cardmaillist.get_name(i), cardmaillist.get_tel_num(i)); //将手机卡通讯录的第i个用户存入手机通讯录
}
cardmaillist.clear(); //清空手机卡通讯录
cout << "移动成功!" << endl;
}
void User::move_phone_to_card() { //移动手机通讯录到手机卡通讯录
if (phonemaillist.get_phone_contact_num()<0) { //手机通讯录无联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
for (int i = 0; i <= phonemaillist.get_phone_contact_num(); i++) { //枚举手机通讯录所有联系人
if (cardmaillist.get_card_contact_num() >= 1000) { //当手机卡通讯录容量满时
cout << "手机卡通讯录已满!无法增加新联系人!" << endl;
return;
}
cardmaillist.copy(phonemaillist.get_name(i), phonemaillist.get_tel_num(i)); //将手机通讯录的第i个用户存入手机卡通讯录
}
phonemaillist.clear(); //清空手机通讯录
cout << "移动成功!" << endl;
}
void User::copy_card_to_phone() { //复制手机卡通讯录到手机通讯录
if (cardmaillist.get_card_contact_num()<0) { //手机卡通讯录无联系人时
cout << "手机卡通讯录无联系人!" << endl;
return;
}
for (int i = 0; i <= cardmaillist.get_card_contact_num(); i++) { //枚举手机卡通讯录所有联系人
if (phonemaillist.get_phone_contact_num() >= 1000) { //当手机通讯录容量满时
cout << "手机通讯录已满!无法增加新联系人!" << endl;
return;
}
phonemaillist.copy(cardmaillist.get_name(i), cardmaillist.get_tel_num(i)); //将手机卡通讯录的第i个用户存入手机通讯录
}
cout << "复制成功!" << endl;
}
void User::copy_phone_to_card() { //复制手机通讯录到手机卡通讯录
if (phonemaillist.get_phone_contact_num()<0) { //手机通讯录无联系人时
cout << "手机通讯录无联系人!" << endl;
return;
}
for (int i = 0; i <= phonemaillist.get_phone_contact_num(); i++) { //枚举手机通讯录所有联系人
if (cardmaillist.get_card_contact_num() >= 1000) { //当手机卡通讯录容量满时
cout << "手机卡通讯录已满!无法增加新联系人!" << endl;
return;
}
cardmaillist.copy(phonemaillist.get_name(i), phonemaillist.get_tel_num(i)); //将手机通讯录的第i个用户存入手机卡通讯录
}
cout << "复制成功!" << endl;
}
//Uimenu.cpp
/*菜单类的实现*/
#include"uimenu.h"
void Uimenu::MainUimenu() { //主菜单
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 << "请选择要进行的操作:";
}
void Uimenu::AddUimenu() { //添加联系人菜单
cout << "***********************************" << endl;
cout << "* 1.新建联系人到手机 *" << endl;
cout << "* 2.新建联系人到手机卡 *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "***********************************" << endl;
cout << "请选择要进行的操作:";
}
void Uimenu::DeleteUimenu() { //删除菜单
cout << "************************************" << endl;
cout << "* 1.在手机通讯录删除联系人 *" << endl;
cout << "* 2.在手机卡通讯录删除联系人 *" << endl;
cout << "* 3.在两个通讯录都进行删除 *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "************************************" << endl;
cout << "请选择要进行的操作:";
}
void Uimenu::ChangeUimenu() { //修改菜单
cout << "************************************" << endl;
cout << "* 1.在手机通讯录修改联系人 *" << endl;
cout << "* 2.在手机卡通讯录修改联系人 *" << endl;
cout << "* 3.在两个通讯录都进行修改 *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "************************************" << endl;
cout << "请选择要进行的操作:";
}
void Uimenu::ChangePhoneUimenu() { //修改手机联系人菜单
cout << "**********************************" << endl;
cout << "* 1.修改联系人姓名和号码 *" << endl;
cout << "* 2.修改联系人姓名 *" << endl;
cout << "* 3.修改联系人号码 *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "**********************************" << endl;
cout << "请选择要进行的操作:";
}
void Uimenu::ChangeCardUimenu() { //修改手机卡联系人菜单
cout << "**********************************" << endl;
cout << "* 1.修改联系人全部信息 *" << endl;
cout << "* 2.修改联系人姓名 *" << endl;
cout << "* 3.修改联系人号码 *" << endl;
cout << "* 4.修改联系人籍贯 *" << endl;
cout << "* 5.修改联系人QQ *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "**********************************" << endl;
cout << "请选择要进行的操作:";
}
void Uimenu::InquiryUimenu() { //查询菜单
cout << "************************************" << endl;
cout << "* 1.在手机通讯录查询联系人 *" << endl;
cout << "* 2.在手机卡通讯录查询联系人 *" << endl;
cout << "* 3.在两个通讯录都进行查询 *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "************************************" << endl;
cout << "请选择要进行的操作:";
}
void Uimenu::DisplayUimenu() { //显示菜单
cout << "************************************" << endl;
cout << "* 1.显示手机通讯录所有联系人 *" << endl;
cout << "* 2.显示手机卡通讯录所有联系人 *" << endl;
cout << "* 3.显示两个通讯录的所有联系人 *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "************************************" << endl;
cout << "请选择要进行的操作:";
}
void Uimenu::TransferredMethod() { //转存菜单
cout << "************************************" << endl;
cout << "* 1.复制 *" << endl;
cout << "* 2.移动 *" << endl;
cout << "* 0.返回上一级 *" << endl;
cout << "************************************" << endl;
cout << "请选择要进行的操作:";
}
//Main.cpp
/*主函数*/
#include"uimenu.h"
#include"phonecontact.h"
#include"cardcontact.h"
#include"maillist.h"
#include"phonemaillist.h"
#include"cardmaillist.h"
#include"user.h"
int main()
{
User user; //创建用户对象
Uimenu uimenu; //创建菜单对象
int m=1;
while (m != 0) {
change_begin: {
/*显示控制,使界面更友好*/
system("pause");
system("cls");
uimenu.MainUimenu(); //显示主菜单
cin >> m;
switch (m) { //对主菜单操作选择
case 1: { //新建联系人
user.add();
goto change_begin;
}
case 2: { //删除联系人
user.Delete();
goto change_begin;
}
case 3: { //查询联系人
user.inquiry();
goto change_begin;
}
case 4: { //修改联系人信息
user.change();
goto change_begin;
}
case 5: { //浏览所有联系人信息
user.display();
goto change_begin;
}
case 6: { //将联系人的信息从手机转存到手机卡上
Transferred1: {
uimenu.TransferredMethod();
int n;
cin >> n;
switch (n) {
case 1: {
user.copy_phone_to_card();
goto change_begin;
}
case 2: {
user.move_phone_to_card();
goto change_begin;
}
case 0: {
goto change_begin;
}
default: {
cout << "选择错误,请重新选择!" << endl;
goto Transferred1;
}
}
}
}
case 7: { //将联系人的信息从手机卡转存到手机上
Transferred2: {
uimenu.TransferredMethod();
int n;
cin >> n;
switch (n) {
case 1: {
user.copy_card_to_phone();
goto change_begin;
}
case 2: {
user.move_card_to_phone();
goto change_begin;
}
case 0: {
goto change_begin;
}
default: {
cout << "选择错误,请重新选择!" << endl;
goto Transferred2;
}
}
}
}
case 0: { //退出
/*显示控制,使界面更友好*/
system("pause");
system("cls");
break;
}
default: {
cout << "选择错误,请重新选择!" << endl;
goto change_begin;
}
}
}
}
getchar();
return 0;
}