通讯录管理系统(c++)

一:实现一个通讯录管理系统,基本要求如下:

1、可以使用命令行的方式进行交互,也可以使用QT等技术制作GUI。
2、数据可以直接写到程序中,也可以存储到文件或者SQLite数据库中。
3、具体功能:
1)添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)
2)显示联系人:显示通讯录中所有联系人信息
3)删除联系人:按照姓名进行删除指定联系人
4)查找联系人:按照姓名查看指定联系人信息
5)修改联系人:按照姓名重新修改指定联系人
6)清空联系人:清空通讯录中所有信息
7)退出通讯录:退出当前使用的通讯录

二:程序设计

1:使用命令行的方式进行交互
2:数据存储到文件中
3:建立User类,通讯录管理系统的功能由User类的成员函数完成

三:源代码

1:User.h

#pragma once
#include
#include
#include
using namespace std;
class User
{
public:
	void add();//添加联系人
	void print();//显示联系人
	void del();//删除联系人
	void find();//查找联系人
	void alter();//修改联系人
	void clear();//清空联系人
private:
	string name;//姓名
	string sex;//性别
	int age;//年龄
	string num;//电话号码
	string addr;//住址
};

2:User.cpp

#include"User.h"

void User::add()//添加联系人
{
	fstream file;
	file.open("text_1.txt", ios::app);//以追加写入的方式打开文件
	if (!file)
	{
		cout << "文件打开失败" << endl;
		return;
	}
	cout << "请输入联系人姓名:";
	cin >> name;
	cout << "请输入联系人性别:";
	cin >> sex;
	cout << "请输入联系人年龄:";
	cin >> age;
	cout << "请输入联系人电话:";
	cin >> num;
	cout << "请输入联系人家庭住址:";
	cin >> addr;
	file << name << "\t" << sex << "\t" << age << "\t" << num << "\t" << addr << endl;//写入
	file.close();//关闭文件
	cout << "成功添加联系人" << endl;
}

void User::print()//显示联系人
{
	cout << "姓名" << '\t' << "性别"<<'\t'<<"年龄"<<'\t'<<"电话" <<"\t        " << "家庭住址" << endl;
	fstream file;
	file.open("text_1.txt", ios::in);//以只读方式打开文件
	if (!file)
	{
		cout << "文件打开失败" << endl;
		return;
	}
	string str;
	while (!file.eof())//循环获取文件每一行并打印输出
	{
		getline(file, str);
		cout << str << endl;
	}
	file.close();//关闭文件
}

void User::find()//查找联系人
{
	string str1;//要查找联系人的姓名
	string str;//从文件中查找姓名
	cout << "请输入要查找的联系人姓名:";
	cin >> str1;//输入要查找的联系人
	fstream file;
	file.open("text_1.txt", ios::in);
	if (!file)
	{
		cout << "文件打开失败" << endl;
		return;
	}
	bool flag = true;//判断是否找到
	while (!file.eof())//循环查找要查找的联系人
	{
		file >> str;
		if (str == str1)//找到打印输出,退出循环
		{
			flag = false;
			getline(file, str);
			cout << str1 << str << endl;
			break;
		}
	}
	if (flag)//未找到显示“查无此联系人”
	{
		cout << "\a查无此联系人";
	}
	file.close();//关闭文件
}

void User::del()//删除联系人
{
	fstream file_2;
	fstream file_1;
	file_1.open("text_1.txt", ios::in);//打开通讯录存储文件
	file_2.open("text_2.txt",ios::out);//另建一个文件,作为信息转存处
	if (!file_1 || !file_2)
	{
		cout << "文件打开失败" << endl;
		return;
	}
	//获取要删除的联系人的姓名
	string str1;
	cout << "请输入要删除联系人的姓名:";
	cin >> str1;

	bool flag = true;//判断通讯录中是否有此人
	bool flag2 = true;//重名的情况下删除第一个
	while (!file_1.eof())
	{	
		//获取通讯录中联系人姓名
		string str;
		file_1 >> str;
		//双分支语句判断,如果查到此人不将此人的信息存入"text_2.txt"中,如果查不到则存入其中
		if (str == str1&&flag2)
		{
			flag2 = false;
			flag = false;//查到有此人,则flag置false,不执行下面的"无此联系人"操作
			string str2;
			getline(file_1, str2);
		}
		else
		{
			string str2;
			getline(file_1, str2);
			if (str2 != "\n")
			{
				file_2 << str << str2 <<'\n';
			}
		}
	}
	file_1.close();//关闭文件
	file_2.close();
	if (flag)
	{
		cout << "无此联系人" << endl;
	}
	else//通讯录中有此联系人,则将"text_2.txt"文件中的内容存入到"text_1.txt"通讯录文件中
	{
		fstream file_11("text_1.txt", ios::out);//以"ios::out"打开,存入删除后信息的同时将原文件信息删除
		ifstream file_22("text_2.txt");
		if (!file_22||!file_11)
		{
			cout << "文件打开失败" << endl;
			return;
		}
		else
		{
			string str;
			while (getline(file_22,str))
			{
				if(str!="\0")
					file_11 << str<<'\n';
				else
				{
					break;
				}
			}
			file_11.close();//关闭文件
			file_22.close(); 
		}
		
	}
}

void User::alter()//修改联系人
{
	//获取要修改人联系人的姓名
	string name;
	cout << "请输入要修改联系人的姓名:";
	cin >> name;
	//打开文件
	ifstream file_1("text_1.txt", ios::in);
	ofstream file_2("text_2.txt", ios::out);
	if (!file_1 || !file_2)//判断文件是否打开成功
	{
		cout << "文件打开失败" << endl;
		return;
	}
	bool flag = true;//判断是否重名,存在重名则只修改第一个
	bool flag2 = true;//判断是否有这个联系人
	while (!file_1.eof())//循环
	{
		//获取通讯录中联系人姓名
		string str;//存储姓名
		string str1;//存储其他信息
		file_1 >> str;
		if (str == name&&flag)
		{
			flag = false;
			flag2 = false;
			//输入新的信息
			cout << "请输入联系人姓名:";
			cin >> name;
			cout << "请输入联系人性别:";
			cin >> sex;
			cout << "请输入联系人年龄:";
			cin >> age;
			cout << "请输入联系人电话:";
			cin >> num;
			cout << "请输入联系人家庭住址:";
			cin >> addr;
			file_2 << name << "\t" << sex << "\t" << age << "\t" << num << "\t" << addr << endl;//写入
			string str;
			getline(file_1, str);
		}
		else
		{
			getline(file_1, str1);
			file_2 << str << str1 << endl;
		}
	}
	if (flag2)
	{
		cout << "查无此联系人"<<endl;
	}
	else
	{
		file_1.close();
		file_2.close();//关闭文件

		//再次创建文件
		ofstream file_11("text_1.txt", ios::out);
		ifstream file_22("text_2.txt", ios::in);
		if (!file_11 || !file_22)//判断文件是否打开成功
		{
			cout << "文件打开失败" << endl;
			return;
		}
		while (!file_22.eof())//while循环将
		{
			string str;
			getline(file_22, str);
			if (str == "\0")//防止文件末尾有多个空格
				break;
			file_11 << str << '\n';
		}
		file_11.close();
		file_22.close();
	}
 }

void User::clear()//清空联系人
{
	fstream file;
	file.open("text_1.txt", ios::out);//以"ios::out"方式打开文件,但并不写入信息,且文件信息被删除
	file.close();
	cout << "成功删除联系人" << endl;
}

3:测试文件

#include"User.h"

int select();//选择
void interface();//打印初始界面

int select()//选择
{
	int sel;
	cout << "请输入要选择的操作编号:";
	cin >> sel;//输入选择
	return sel;
}

void interface()//打印初始界面
{
	cout << "---------欢迎使用通讯录系统---------" << endl;
	cout << "---------1:添加联系人---------------" << endl;
	cout << "---------2:显示联系人---------------" << endl;
	cout << "---------3:删除联系人---------------" << endl;
	cout << "---------4:查找联系人---------------" << endl;
	cout << "---------5:修改联系人---------------" << endl;
	cout << "---------6:清空联系人---------------" << endl;
	cout << "---------7:退出通讯录---------------" << endl;
}
 

int main()
{
	User user;
	while (1)
	{
		system("cls");
		interface();
		switch (select())
		{
		case 1://添加联系人
			user.add();
			system("pause");//页面暂停
			break;
		case 2://显示联系人
			user.print();
			system("pause");//页面暂停
			break;
		case 3://删除联系人
			user.del();
			system("pause");//页面暂停
			break;
		case 4://查找联系人
			user.find();
			system("pause");//页面暂停
			break;
		case 5://修改联系人
			user.alter();
			system("pause");//页面暂停
			break;
		case 6://清空联系人
			user.clear();
			system("pause");//页面暂停
			break;
		case 7://退出通讯录系统
			exit(0);
			break;
		default:
			cout << "\a请输入正确的操作选择!";
		}
	}
}

**注:**文章为本人期末c++作业,请勿复制粘贴。

你可能感兴趣的:(c++)