目录
1、题目。
2、设计分析。
3、分模块分析。
4、代码实现。
一、题目。
通讯录管理系统
手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机卡的联系人的信息只包含用户名和电话号码两项信息。存储在手机上的联系人的信息除了上面提到的两项信息外,还包含籍贯,QQ号等信息。
根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写一个手机通讯录管理。
要求:
- 创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的存储的联系人的信息)。
- 以菜单方式工作(字符界面即可)
- 存储在手机卡上的联系人的信息包括:姓名和电话号码;存储在手机上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息。
- 管理系统的功能包括:
- 新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中)
- 删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)
- 修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行修改操作)
- 查询:根据名字查询联系人信息(查询结果不唯一)
- 浏览:显示所有联系人的信息
- 将联系人的信息从手机转存到手机卡上(同时要避免重复数据的存在。并且在转存是要检查容量是否受限。下同。)
- 将联系人的信息从手机卡上转存到手机上(同时要避免重复数据的存在)
- 要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点。
二、设计分析。
建立两个文本文件,记录存储在手机上联系人的基本信息和存储在手机卡上的联系人的信息
建立以下几个类:
1、手机卡联系人类:表示一个联系人
数据成员包括:
姓名
电话号码
成员函数包括
带参并带默认值的构造函数
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成对象的输入和输出操作
2、手机联系人(继承于手机卡联系人类):
新增数据成员:
籍贯
QQ号
成员函数包括
一组set函数为数据成员赋值
一组modify函数,修改数据成员的值
重载>>,<<运算符,完成数据成员的输入输出操作
3、定义一个通讯簿抽象类,用来封装以下函数(为支持多态,可以将以下函数封装为纯虚函数)
增加函数:增加一个联系人
删除操作函数:删除一个联系人
Display函数:显示所有联系人的信息
修改某一联系人的信息函数:
查询并显示某一联系人的信息函数:
4、手机通讯簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机中存储的所有联系人的信息
数据成员包括:
手机联系人的数量
手机联系人对象数组
成员函数包括
构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
析构函数:将对象数组中的内容写入到文本文件中。
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
5、手机卡通信簿类(这是一个数据库类,继承于通讯簿抽象类):用于记录手机卡中存储的所有联系人的信息。
数据成员包括:
手机联系人的数量
手机联系人对象数组
成员函数包括
构造函数:读取文本文件中的数据,并根据文件内容创建联系人对象数组
析构函数:将对象数组中的内容写入到文本文件中。
增加函数:增加一个联系人
删除操作:删除一个联系人
Display:显示所有联系人的信息
修改某一联系人的信息:
查询并显示某一联系人的信息:
6、用户类(这是一个操作类,完成通讯簿的操作):用户拥有两个通讯簿(一个是手机中存储的联系人,一个是手机卡中存储的联系人),并且可以对通讯录进行管理。
数据成员包括:
两个通讯簿对象
成员函数包括(成员函数体现用户的行为):
添加联系人:利用基类指针,调用相应的通讯簿对象(手机通讯簿或手机卡通信簿)的增加函数完成联系人的添加。实现动态联编,体现出多态特点。(下同)
删除联系人:调用相应的通讯簿对象的删除操作删除一个联系人
Display:显示相应的通讯簿中联系人的信息
修改某一联系人的信息:调用通讯簿对象的函数完成操作
查询并显示某一联系人的信息:调用通讯簿对象的函数完成操作
将手机卡中的存储的联系人的信息移动到手机中
将手机中存储的联系人的信息移动到手机卡中
将手机卡中的存储的联系人的信息复制到手机中
将手机中存储的联系人的信息复制到手机卡中
7、界面菜单类:用来给出操作提示
数据成员:可以不定义数据成员
成员函数:
Display函数:显示操作菜单的提示。说明:可以根据需要定义多个函数,显示不同的菜单(操作提示)。
三、分模块分析。
该程序设计共分为4个模块,一共定义了7个类。
1、第一个模块,主要用于联系人初始化操作,分为对手机和对手机卡的初始化。
2、第二个模块主要为对联系人进行具体操作,并分为对手机卡还是对手机联系人操作。
3、第三个模块主要是用于综合起来对第二个模块进行操作,从而达到管理通讯录的目的。
4、第四个模块主要用于人机交互,让使用者有比较好的体验。文章来源:https://www.toymoban.com/news/detail-500283.html
#提示
代码的第一个类和第二个类,用的重载<<和>>,在某些编程软件中会报错,如果是因为这个原因的报错,可以将这两个类的重载全部屏蔽掉,不会影响这个系统的正常运行。只是让整个思路代码更完善。文章来源地址https://www.toymoban.com/news/detail-500283.html
四、代码实现。
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
class Mobilecard//手机卡联系人
{
protected:
string name;//姓名
string phonenumber;//电话号码
public:
Mobilecard(string pname, string pphonenumber = 0);
void set(string sname, string sphonenumber);
void modify();//修改数据成员值
friend istream& operator>>(istream& input, Mobilecard&);
friend ostream& operator<<(ostream& output, Mobilecard&);
};
class Phone :public Mobilecard //手机联系人
{
protected:
string Nativeplace;//籍贯
string QQ;
public:
void pset(string tname, string tphonenumber, string tNativeplace, string tQQ);//为数据成员赋值
void pmodify();//修改数据成员值
friend istream& operator>>(istream& input, Phone&);
friend ostream& operator<<(ostream& output, Phone&);
};
class Communication//通讯簿抽象类
{
public:
virtual int add() = 0;//增加联系人函数
virtual int reduce(string) = 0;//删除联系人函数
virtual int Display() = 0;//显示所有联系人信息
virtual int revise(string) = 0;//修改某一联系人信息
virtual int query(string) = 0;//查询并显示某一联系人信息
};
class Phoneaddressbook :public Communication//手机通讯簿类
{
protected:
int phonenumber;//手机联系人的数量
string XPhone[1005];//手机姓名数组
string PPhone[1005];//手机电话号码数组
string NPhone[1005];//手机籍贯数组
string QPhone[1005];//手机QQ号数组
public:
Phoneaddressbook();
~Phoneaddressbook();
int add();//增加联系人函数
int reduce(string);//删除联系人函数
int Display();//显示所有联系人信息函数
int revise(string);//修改某一联系人信息
int query(string);//查询并显示某一联系人信息
};
class Phonecardaddressbook :public Communication//手机卡通讯簿类
{
protected:
int Phonenumber;//手机卡联系人的数量
string TPhone[1005];//手机卡姓名数组
string YPhone[1005];//手机卡电话号数组
public:
Phonecardaddressbook();
~Phonecardaddressbook();
int add();//增加联系人函数
int reduce(string);//删除联系人函数
int Display();//显示所有联系人信息函数
int revise(string);//修改某一联系人信息
int query(string);//查询并显示某一联系人信息
};
class User//用户类
{
protected:
Phoneaddressbook Phone;//手机数据成员
Phonecardaddressbook Card;//手机卡数据成员
public:
int Reduce(string);//删除联系人
int recerse(int);//添加联系人
int Display(int);//显示相应通讯薄中联系人信息
int Revise(string);//修改联系人信息
int Query(string);//查询并显示某一联系人信息
int card_phone(int n);//卡移动到手机,手机移动到卡,卡复制到手机,手机复制到卡
};
class Menu//菜单类
{
public:
void mainmenu();//主菜单
void set();//新建联系人菜单
void out();//删除联系人菜单修改联系人菜单
void change();//修改联系人菜单
void lookinto();//查询联系人菜单
void looktotal();//浏览全部联系人菜单
void redeposit();//手机和手机卡复制转存菜单
};
Mobilecard::Mobilecard(string pname, string pphonenumber)
{
name = pname;
phonenumber = pphonenumber;
}
void Mobilecard::set(string sname, string sphonenumber)
{
name = sname;
phonenumber = sphonenumber;
}
void Mobilecard::modify()
{
string sphonenumber;
int n;
string pname;
cout << "请选择,1 为修改姓名,2 为修改电话号码,3 为同时修改," << endl;
cout << "请输入修改选项"; cin >> n;
switch (n)
{
case 1: cout << " 请输入你要更改的姓名" << endl; cin >> pname; name = pname; break;
case 2: cout << " 请输入你要更改的电话" << endl; cin >> sphonenumber; phonenumber = sphonenumber; break;
case 3: cout << "请输入你要更改的姓名和电话" << endl; cin >> pname >> sphonenumber;
name = pname; phonenumber = sphonenumber; break;
defauit: break;
}
}
istream& operator>>(istream& input, Mobilecard& t)
{
input >> t.name;
input >> t.phonenumber;
return input;
}
ostream& operator<<(ostream& output, Mobilecard& q)
{
output << q.name;
output << " ";
output << q.phonenumber;
output << endl;
return output;
}
void Phone::pset(string tname, string tphonenumber, string tNativeplace, string tQQ)
{
name = tname;
phonenumber = tphonenumber;
Nativeplace = tNativeplace;
QQ = tQQ;
}
void Phone::pmodify()
{
int n = 7;
string sphonenumber, qq;
string pname, tNativeplace;
while (n != 0)
{
cout << "请选择,1 为修改姓名,2 为修改电话号码,3 为修改籍贯,4 为修改QQ, 5 为同时修改,0 为修改完毕" << endl;
cout << "请输入修改选项"; cin >> n;
switch (n)
{
case 1: cin >> pname; name = pname; break;
case 2: cin >> sphonenumber; phonenumber = sphonenumber; break;
case 3: cin >> tNativeplace; Nativeplace = tNativeplace; break;
case 4: cin >> qq; QQ = qq; break;
case 5: cin >> pname >> sphonenumber >> tNativeplace >> qq;
name = pname; phonenumber = sphonenumber;
Nativeplace = tNativeplace; QQ = qq; break;
defauit: break;
}
}
}
istream& operator>>(istream& input, Phone& t)
{
input >> t.name;
input >> t.phonenumber;
input >> t.Nativeplace;
input >> t.QQ;
return input;
}
ostream& operator<<(ostream& output, Phone& q)
{
output << q.name;
output << " ";
output << q.phonenumber;
output << q.Nativeplace;
output << " ";
output << q.QQ;
output << endl;
return output;
}
Phoneaddressbook::Phoneaddressbook()
{
ifstream ist("my1.txt", ios::in);
if (!ist.is_open())
{
cout << "can not open file. ";
}
string tname; string tphonenumber; string tNativeplace; string tQQ;
int i = 0; phonenumber = 0;
while (ist >> tname >> tphonenumber >> tNativeplace >> tQQ)
{
XPhone[i] = tname;
PPhone[i] = tphonenumber;
NPhone[i] = tNativeplace;
QPhone[i] = tQQ;
i++; phonenumber++;
}
ist.close();
}
Phoneaddressbook::~Phoneaddressbook()
{
ofstream ost;
ost.open("my1.txt", ios::out); //默认为文本方式打开
if (!ost) // ost==0
{
cout << "can not open file.";
}
string tname; string tphonenumber; string tNativeplace; string tQQ;
for (int i2 = 0; i2 < phonenumber; i2++)
{
tname = XPhone[i2];
tphonenumber = PPhone[i2];
tNativeplace = NPhone[i2];
tQQ = QPhone[i2];
ost << tname << ' ' << tphonenumber << ' ' << tNativeplace << " " << tQQ << '\n';
}
ost.close();
}
int Phoneaddressbook::add()
{
ofstream ost("my1.txt", ios::app);//追加方式,将向文件输出的内容追加到文件末尾
if (!ost)
{
cout << "cannot open testnew.txt for ouput.";
return 1;
}
if (phonenumber <= 998)//判断内存是否满了
{
string x1, x3, x2, x4;
cout << "请输入增加联系人信息姓名" << endl;
cin >> XPhone[phonenumber]; x1 = XPhone[phonenumber];
ost << x1 << " ";
cout << "请输入增加联系人信息电话号码" << endl;
cin >> PPhone[phonenumber]; x2 = PPhone[phonenumber];
ost << x2 << " ";
cout << "请输入增加联系人信息籍贯" << endl;
cin >> NPhone[phonenumber]; x3 = NPhone[phonenumber];
ost << x3 << " ";
cout << "请输入增加联系人信息QQ" << endl;
cin >> QPhone[phonenumber]; x4 = QPhone[phonenumber];
ost << x4 << endl;
cout << "增加联系人完成,";
phonenumber = phonenumber + 1;
cout << "目前手机联系人数目为:" << phonenumber << endl;
ost.close();
}
else
cout << "手机内存不足,添加失败。" << endl;
}
int Phoneaddressbook::reduce(string z)
{
ifstream ist("my1.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file .";
}
string tname; string tphonenumber; string tNativeplace; string tQQ;
int i = 0; phonenumber = 0;
while (ist >> tname >> tphonenumber >> tNativeplace >> tQQ)
{
XPhone[i] = tname;
PPhone[i] = tphonenumber;
NPhone[i] = tNativeplace;
QPhone[i] = tQQ;
i++; phonenumber++;
}
ist.close();
int tt = 1002;
string number;
number = z;
for (int s = 0; s < phonenumber; s++)
{
if (!(PPhone[s].compare(number)))//判断string的值是否相等
{
tt = s;
cout << "手机删除联系人完成,";
break;
}
}
if (!(PPhone[tt].compare(number)))
{
for (int y = tt; y < phonenumber; y++)
{
XPhone[y] = XPhone[y + 1];
PPhone[y] = PPhone[y + 1];
NPhone[y] = NPhone[y + 1];
QPhone[y] = QPhone[y + 1];
}
ofstream oost("my1.txt", ios::trunc);//清除文本文件内容
oost.close();
phonenumber = phonenumber - 1;
cout << "手机目前联系人数目为:" << phonenumber << endl;
ofstream ost;
ost.open("f:\\my1.txt");
if (!ost)
{
cout << "can not open file. "; return 1;
}
for (int xy = 0; xy < phonenumber; xy++)
{
ost << XPhone[xy] << " " << PPhone[xy] << " " << NPhone[xy] << " " << QPhone[xy] << endl;
}
ost.close();
}
else
{
return 0;
}
}
int Phoneaddressbook::Display()
{
ifstream ist("my1.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file. ";
}
string tname; string tphonenumber; string tNativeplace; string tQQ;
int i = 0; phonenumber = 0;
while (ist >> tname >> tphonenumber >> tNativeplace >> tQQ)
{
XPhone[i] = tname;
PPhone[i] = tphonenumber;
NPhone[i] = tNativeplace;
QPhone[i] = tQQ;
i++; phonenumber++;
}
ist.close();
cout << "手机所有联系人信息" << endl;
for (int t = 0; t < phonenumber; t++)
{
cout << XPhone[t] << " " << PPhone[t] << " " << NPhone[t] << " " << QPhone[t] << endl;
}
return 0;
}
int Phoneaddressbook::revise(string z2)
{
ifstream ist("my1.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file.";
}
string tname; string tphonenumber; string tNativeplace; string tQQ;
int i = 0; phonenumber = 0;
while (ist >> tname >> tphonenumber >> tNativeplace >> tQQ)
{
XPhone[i] = tname;
PPhone[i] = tphonenumber;
NPhone[i] = tNativeplace;
QPhone[i] = tQQ;
i++; phonenumber++;
}
ist.close();
int n = 7, tt = 1002;
string number;
number = z2;
for (int s = 0; s < phonenumber; s++)
{
if (!(PPhone[s].compare(number)))
{
tt = s; break;
}
}
if (!(PPhone[tt].compare(number)))
{
string sphonenumber, qq, pname, pNativeplace;
cout << "1 为修改姓名,2 为修改电话号码,3 为修改籍贯,4 为修改QQ, 5 为同时修改" << endl;
cin >> n;
switch (n)
{
case 1: cout << " 请输入你要更改的姓名" << endl; cin >> pname; XPhone[tt] = pname; break;
case 2: cout << " 请输入你要更改的电话" << endl; cin >> sphonenumber; PPhone[tt] = sphonenumber; break;
case 3: cout << " 请输入你要更改的籍贯" << endl; cin >> pNativeplace; NPhone[tt] = pNativeplace; break;
case 4: cout << " 请输入你要更改的QQ" << endl; cin >> qq; QPhone[tt] = qq; break;
case 5:cout << " 请输入你要更改的姓名,电话,籍贯和QQ" << endl; cin >> pname >> sphonenumber >> pNativeplace >> qq;
XPhone[tt] = pname; PPhone[tt] = sphonenumber;
NPhone[tt] = pNativeplace; QPhone[tt] = qq; break;
defauit: break;
}
ofstream oost("my1.txt", ios::trunc);
oost.close();
ofstream ost;
ost.open("my1.txt",ios::out);
if (!ost)
{
cout << "can not open file. "; return 1;
}
for (int xy = 0; xy < phonenumber; xy++)
{
ost << XPhone[xy] << " " << PPhone[xy] << " " << NPhone[xy] << " " << QPhone[xy] << endl;
}
ost.close();
}
else
{
return 0;
}
}
int Phoneaddressbook::query(string th)
{
ifstream ist("my1.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file.";
}
string tname; string tphonenumber; string tNativeplace; string tQQ;
int i = 0; phonenumber = 0;
while (ist >> tname >> tphonenumber >> tNativeplace >> tQQ)
{
XPhone[i] = tname;
PPhone[i] = tphonenumber;
NPhone[i] = tNativeplace;
QPhone[i] = tQQ;
i++; phonenumber++;
}
ist.close();
int n = 7, tt;
string number;
number = th;
for (int s = 0; s < phonenumber; s++)
{
if (!(XPhone[s].compare(number)))
{
tt = s;
cout << XPhone[tt] << " " << PPhone[tt] << " " << NPhone[tt] << " " << QPhone[tt] << endl;
}
}
return 0;
}
Phonecardaddressbook::Phonecardaddressbook()
{
ifstream ist("my2.txt",ios::in);
if ( !ist.is_open() )
{ cout << "can not open file. " ; }
string tname; string tphonenumber;
int i = 0; Phonenumber = 0;
while (ist >> tname >> tphonenumber)
{
TPhone[i] = tname;
YPhone[i] = tphonenumber;
i++; Phonenumber++;
}
ist.close();
}
Phonecardaddressbook::~Phonecardaddressbook()
{
ofstream ost;
ost.open("my2.txt",ios::out); //默认为文本方式打开
if (!ost) // ost==0
{
cout << "can not open file.";
}
string tname; string tphonenumber;
for (int i2 = 0; i2 < Phonenumber; i2++)
{
tname = TPhone[i2];
tphonenumber = YPhone[i2];
ost << tname << " " << tphonenumber << endl;
}
ost.close();
}
int Phonecardaddressbook::add()
{
ofstream ost("my2.txt", ios::app);
if (!ost)
{
cout << "cannot open testnew.txt for ouput. ";
return 1;
}
if (Phonenumber <= 998)
{
string x1; string x2;
cout << "请输入增加联系人信息姓名" << endl;
cin >> TPhone[Phonenumber]; x1 = TPhone[Phonenumber];
ost << x1 << " ";
cout << "请输入增加联系人信息电话号码" << endl;
cin >> YPhone[Phonenumber]; x2 = YPhone[Phonenumber];
ost << x2 << endl;
cout << "增加联系人完成,";
Phonenumber = Phonenumber + 1;
cout << "目前手机卡联系人数目为:" << Phonenumber << endl;
ost.close();
}
else
cout << "手机卡内存不足" << endl;
}
int Phonecardaddressbook::reduce(string z1)
{
ifstream ist("my2.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file.";
}
string tname; string tphonenumber;
int i = 0; Phonenumber = 0;
while (ist >> tname >> tphonenumber)
{
TPhone[i] = tname;
YPhone[i] = tphonenumber;
i++; Phonenumber++;
}
ist.close();
int tt = 1002;
string number;
number = z1;
for (int s = 0; s < Phonenumber; s++)
{
if (!(YPhone[s].compare(number)))
{
tt = s;
cout << "手机卡删除联系人完成,";
break;
}
}
if (!(YPhone[tt].compare(number)))
{
for (int y = tt; y < Phonenumber; y++)
{
TPhone[y] = TPhone[y + 1];
YPhone[y] = YPhone[y + 1];
}
ofstream oost("my2.txt", ios::trunc);
oost.close();
Phonenumber = Phonenumber - 1;
cout << "手机卡目前联系人数目为:" << Phonenumber << endl;
ofstream ost;
ost.open("my2.txt",ios::out);
if (!ost)
{
cout << "can not open file. "; return 1;
}
for (int xy = 0; xy < Phonenumber; xy++)
{
ost << TPhone[xy] << " " << YPhone[xy] << endl;
}
ost.close();
}
else
{
return 0;
}
}
int Phonecardaddressbook::Display()
{
ifstream ist("my2.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file." << endl;
}
string tname; string tphonenumber;
int i = 0; Phonenumber = 0;
while (ist >> tname >> tphonenumber)
{
TPhone[i] = tname;
YPhone[i] = tphonenumber;
i++; Phonenumber++;
}
ist.close();
for (int t = 0; t < Phonenumber; t++)
{
cout << TPhone[t] << " " << YPhone[t] << endl;
}
return 0;
}
int Phonecardaddressbook::revise(string z3)
{
ifstream ist("my2.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file. ";
}
string tname; string tphonenumber; string tNativeplace; string tQQ;
int i = 0; Phonenumber = 0;
while (ist >> tname >> tphonenumber >> tNativeplace >> tQQ)
{
TPhone[i] = tname;
YPhone[i] = tphonenumber;
i++; Phonenumber++;
}
ist.close();
int n = 7, tt = 1002;
string number;
number = z3;
for (int s = 0; s < Phonenumber; s++)
{
if (!(YPhone[s].compare(number)))
{
tt = s; break;
}
}
if (!(YPhone[tt].compare(number)))
{
string pname;
string sphonenumber;
cout << "请输入你需要更改的信息" << endl;
cout << "1 为修改姓名,2 为修改电话号码 ,3 为同时修改," << endl;
cin >> n;
switch (n)
{
case 1:cout << " 请输入你要更改的姓名" << endl; cin >> pname; TPhone[tt] = pname; break;
case 2:cout << " 请输入你要更改的电话" << endl; cin >> sphonenumber; YPhone[tt] = sphonenumber; break;
case 3:cout << " 请输入你要更改的姓名和电话" << endl; cin >> pname >> sphonenumber;
TPhone[tt] = pname; YPhone[tt] = sphonenumber;
break;
defauit: break;
}
ofstream oost("my2.txt", ios::trunc);
oost.close();
ofstream ost;
ost.open("my2.txt",ios::out);
if (!ost)
{
cout << "can not open file."; return 1;
}
for (int xy = 0; xy < Phonenumber; xy++)
{
ost << TPhone[xy] << " " << YPhone[xy] << endl;
}
ost.close();
}
else
{
return 0;
}
}
int Phonecardaddressbook::query(string yh)
{
ifstream ist("my2.txt",ios::in);
if (!ist.is_open())
{
cout << "can not open file.";
}
string tname; string tphonenumber;
int i = 0; Phonenumber = 0;
while (ist >> tname >> tphonenumber)
{
TPhone[i] = tname;
YPhone[i] = tphonenumber;
i++; Phonenumber++;
}
ist.close();
int n = 7, tt;
string number;
number = yh;
for (int s = 0; s < Phonenumber; s++)
{
if (!(TPhone[s].compare(number)))
{
tt = s;
cout << TPhone[tt] << " " << YPhone[tt] << endl;
}
}
return 0;
}
int User::recerse(int n)
{
Communication* p;
while (n != 0)
{
if (n == 1)
{
p = &Phone;
p->add();
return 0;
}
else
if (n == 2)
{
p = &Card;
p->add();
return 0;
}
}
}
int User::Reduce(string n)
{
Communication* p;
p = &Phone;
p->reduce(n);
p = &Card;
p->reduce(n);
return 0;
}
int User::Display(int n)
{
Communication* pp;
while (n != 0)
if (n == 1)
{
pp = &Phone;
pp->Display();
return 0;
}
else
if (n == 2)
{
pp = &Card;
pp->Display();
return 0;
}
return 0;
}
int User::Revise(string n)
{
Communication* p;
p = &Phone;
p->revise(n);
p = &Card;
p->revise(n);
return 0;
}
int User::Query(string yy)
{
Communication* p;
p = &Phone;
p->query(yy);
p = &Card;
p->query(yy);
return 0;
}
int User::card_phone(int n)
{
char ch;
if (n == 1)
{
ifstream infile("my2.txt", ios::in);
ofstream oost("my1.txt", ios::trunc);
oost.close();
ofstream outfile("my1.txt", ios::out);
if (!infile)
{
cerr << "不能打开文件" << endl;
return 0;
}
if (!outfile)
{
cerr << "不能打开文件" << endl;
return 0;
}
while (infile.get(ch))
outfile.put(ch);
infile.close();
outfile.close();
ofstream toost("my2.txt", ios::trunc);
toost.close();
}
else if (n == 2)
{
ifstream iinfile("my1.txt", ios::in);
ofstream ioost("my2.txt", ios::trunc);
ioost.close();
ofstream ooutfile("my2.txt", ios::out);
if (!iinfile)
{
cerr << "不能打开文件" << endl;
return 0;
}
if (!ooutfile)
{
cerr << "不能打开文件" << endl;
return 0;
}
while (iinfile.get(ch))
ooutfile.put(ch);
iinfile.close();
ooutfile.close();
ofstream yoost("my1.txt", ios::trunc);
yoost.close();
}
else if (n == 3)
{
ifstream infile("my2.txt", ios::in);
ofstream oost("my1.txt", ios::trunc);
oost.close();
ofstream outfile("my1.txt", ios::out);
if (!infile)
{
cerr << "不能打开文件" << endl;
return 0;
}
if (!outfile)
{
cerr << "不能打开文件" << endl;
return 0;
}
while (infile.get(ch))
outfile.put(ch);
infile.close();
outfile.close();
}
else if (n == 4)
{
ifstream iinfile("my1.txt", ios::in);
ofstream ioost("my2.txt", ios::trunc);
ioost.close();
ofstream ooutfile("my2.txt", ios::out);
if (!iinfile)
{
cerr << "不能打开文件" << endl;
return 0;
}
if (!ooutfile)
{
cerr << "不能打开文件" << endl;
return 0;
}
while (iinfile.get(ch))
ooutfile.put(ch);
iinfile.close();
ooutfile.close();
}
}
void Menu::mainmenu()
{
cout << " **欢迎使用太阳手机管理系统,太阳竭诚为您服务^-^ **" << endl;
cout << " **************************************************" << endl;
cout << " * 1. 新建联系人 *" << endl;
cout << " * 2. 删除联系人 *" << endl;
cout << " * 3. 修改联系人信息 *" << endl;
cout << " * 4. 查询联系人信息 *" << endl;
cout << " * 5. 浏览全部联系人 *" << endl;
cout << " * 6. 手机和手机卡复制转存操作 *" << endl;
cout << " * 0. 离开本操作系统 *" << endl;
cout << " **************************************************" << endl;
}
void Menu::set()
{
cout << " **欢迎使用太阳手机管理系统,太阳竭诚为您服务^-^ **" << endl;
cout << " **************************************************" << endl;
cout << " * 1. 在手机中新建联系人 *" << endl;
cout << " * 2. 在手机卡中新建联系人 *" << endl;
cout << " * 0. 返回上一级 *" << endl;
cout << " **************************************************" << endl;
}
void Menu::out()
{
cout << " **欢迎使用太阳手机管理系统,太阳竭诚为您服务^-^ **" << endl;
cout << " **************************************************" << endl;
cout << " * 请需要输入您想要删除的人的电话号码 *" << endl;
cout << " **************************************************" << endl;
}
void Menu::change()
{
cout << " **欢迎使用太阳手机管理系统,太阳竭诚为您服务^-^ **" << endl;
cout << " **************************************************" << endl;
cout << " * 请输入您想要修改的人的电话号码 *" << endl;
cout << " **************************************************" << endl;
}
void Menu::lookinto()
{
cout << " **欢迎使用太阳手机管理系统,太阳竭诚为您服务^-^ **" << endl;
cout << " **************************************************" << endl;
cout << " * 请需要输入您想要查询的人的名字 *" << endl;
cout << " **************************************************" << endl;
}
void Menu::looktotal()
{
cout << " **欢迎使用太阳手机管理系统,太阳竭诚为您服务^-^ **" << endl;
cout << " * 1. 查看手机上的全部联系人 *" << endl;
cout << " * 2. 查看手机卡上的全部联系人 *" << endl;
cout << " * 0. 返回上一级 *" << endl;
cout << " **************************************************" << endl;
}
void Menu::redeposit()
{
cout << " **欢迎使用太阳手机管理系统,太阳竭诚为您服务^-^ **" << endl;
cout << " * 1. 将联系人的信息从手机卡转存到手机上 *" << endl;
cout << " * 2. 将联系人的信息从手机转存到手机卡上 *" << endl;
cout << " * 3. 将联系人的信息从手机复制到手机卡上 *" << endl;
cout << " * 4. 将联系人的信息从手机卡上复制到手机上 *" << endl;
cout << " * 0. 返回上一级 *" << endl;
cout << " **************************************************" << endl;
}
int main()
{
Menu s;
int n = 6;
int t1;
string t2, t3;
double t4, t5;
string y1;
User phoneandcard;
while (n != 0)
{
s.mainmenu();
cin >> n;
switch (n)
{
case 1:
s.set();
cin >> t1;
phoneandcard.recerse(t1);
system("pause"); system("cls"); break;
case 2:
s.out();
cin >> t2;
phoneandcard.Reduce(t2);
system("pause"); system("cls"); break;
case 3:
s.change();
cout << "请输入您需要修改联系人的电话号码" << endl;
cin >> t3;
phoneandcard.Revise(t3);
system("pause");
system("cls"); break;
case 4:
s.lookinto();
cin >> y1;
phoneandcard.Query(y1);
system("pause");
system("cls"); break;
case 5:
s.looktotal();
cin >> t4;
phoneandcard.Display(t4);
system("pause");
system("cls"); break;
case 6:
s.redeposit();
cin >> t5;
phoneandcard.card_phone(t5);
system("pause");
system("cls"); break;
case 0: break;
}
}
return 0;
}
到了这里,关于C++课程设计,题目:通讯录管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!