C++课程设计,题目:通讯录管理系统

这篇具有很好参考价值的文章主要介绍了C++课程设计,题目:通讯录管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

          1、题目。

           2、设计分析。

           3、分模块分析。

           4、代码实现。

一、题目。

通讯录管理系统

手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个联系人)。存储在手机卡的联系人的信息只包含用户名和电话号码两项信息。存储在手机上的联系人的信息除了上面提到的两项信息外,还包含籍贯,QQ号等信息。

根据通用的手机通讯录的使用方式,采用OOP(Object Oriented Programming,面向对象编程)方法编写一个手机通讯录管理。

要求:

  1. 创建文本文件,记录联系人的信息(需要创建两个文本文件,分别存储手机和手机卡上的存储的联系人的信息)。
  2. 以菜单方式工作(字符界面即可)
  3. 存储在手机卡上的联系人的信息包括:姓名和电话号码;存储在手机上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息。
  4. 管理系统的功能包括:
    1. 新建联系人:添加新的联系人(添加时确定是添加到手机上还是手机卡中)
    2. 删除:删除一个联系人(输入电话号码,删除该联系人。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行删除操作)
    3. 修改:修改某个联系人的信息(输入电话号码,查询到联系人之后进行信息的修改。说明,如果两个存储位置上都存在该联系人的话,需要在两个存储位置上都要进行修改操作)
    4. 查询:根据名字查询联系人信息(查询结果不唯一)
    5. 浏览:显示所有联系人的信息
    6. 将联系人的信息从手机转存到手机卡上(同时要避免重复数据的存在。并且在转存是要检查容量是否受限。下同。)
    7. 将联系人的信息从手机卡上转存到手机上(同时要避免重复数据的存在)
  5. 要支持继承、多态、重载(运算符重载、函数重载)等面向对象的基本特点。

二、设计分析。

建立两个文本文件,记录存储在手机上联系人的基本信息和存储在手机卡上的联系人的信息

建立以下几个类:

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

四、代码实现。

#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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通讯录管理系统 C++

    目录 一、前言 二、设计要求  三、概要设计 3.1 主界面设计 3.1.1 设计图 3.1.2设计代码 3.2 存储结构设计 3.3 系统功能设计 3.3.1 系统流程图​编辑 3.3.2 系统子程序及功能介绍  四、详细设计 4.1 头文件 4.2 数据定义 4.3 系统主要子程序详细设计 4.3.1 主函数 4.3.2 添加联系人 4.3

    2024年02月09日
    浏览(65)
  • 通讯录管理系统C++代码

    目录 通讯录管理系统(课程设计) 一、系统中需要实现的功能 二、创建项目 三、实现功能 1、菜单功能  2.添加联系人功能  3.显示联系人功能 4.删除联系人  5 .查找联系人功能  6.修改联系人功能  7.清空联系人功能  8.退出功能 对于通讯录管理系统而言,不需要太复杂的

    2024年02月09日
    浏览(49)
  • c++手机通讯录管理系统280

    定制魏:QTWZPW,获取更多源码等 目录 软件达到的目的 功能分析说明图  各项功能说明  主要数据结构类型  各个模块之间的调用关系和数据储存格式说明  各软件模块之间的调用方式  软件中实现各项功能的函数与程序主要代码  软件使用结果  添加联系人 显示联系人 拨

    2024年04月12日
    浏览(71)
  • 网络编程——基于TCP协议的通讯录【课程设计】

    题目:基于TCP协议的通讯录 设计目标: (1)了解Socket通信的原理,在此基础上编写一个基于TCP协议的通讯录; (2)理解TCP通信原理; 课程设计系统组成及模块功能: 此TCP/IP课程设计实现了基于TCP的客户/服务器通信程序,需要实现以下一些基本功能: (1)客户端连接服务

    2024年02月06日
    浏览(76)
  • 学生通讯录管理系统的设计与实现

    1.1 问题的描述 学生通讯录管理系统是为了帮助老师、同学,或者其他一些需要使用通讯录的人员进行管理和分析的一种应用程序。 1.2 问题分析和任务定义 (1)输入数据建立通讯录; (2)查询通讯录中满足要求的信息; (3)插入新的通讯录信息; (4)删除不需要的通讯

    2024年02月10日
    浏览(51)
  • Python大学计算机程序设计-通讯录管理系统

    摘   要 通讯录是每一款手机必备的一个应用,它拥有的功能非常简单,大致有添加联系人,修改联系人信息,删除联系人,查找联系人等功能,本次课程设计我使用python和python中丰富的第三方库。在通讯录的设计中,我主要采用了python的tkinter模块和os模块,实现了代码的可

    2024年02月08日
    浏览(48)
  • C++编程案例讲解-基于结构体的控制台通讯录管理系统

    添加联系人 :向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人 :显示通讯录中所有的联系人信息 删除联系人 :按照姓名进行删除指定联系人信息 查找联系人 :按照姓名查看指定联系人信息 修改联系人 :按照姓名重新

    2024年02月05日
    浏览(59)
  • AndroidStudio课程设计-通讯录系统(高分毕设,Android期末作业,Android课设,AndroidStudio)

    博主介绍: 本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮

    2024年02月04日
    浏览(54)
  • 通讯录管理系统

    作者:狮子也疯狂 专栏:《项目集锦》 坚持做好每一步,幸运之神自然会驾凌在你的身上 该项目是用于日常生活中记录联系人信息的一款智能小工具。实现了对联系人的姓名、年龄、性别、电话号码、住址的添加及修改、查找、删除、排序等功能。该项目是以 Windows 控制台

    2024年02月05日
    浏览(50)
  • 简单通讯录管理系统(Java)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档     任务 : 在之前的练习任务中,我们已经实现了通讯录的增删改查等基本功能,主要实现一个通讯录的菜单管理功能。 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现通讯录菜单管

    2024年02月09日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包