QQ通讯录系统——用C++模拟实现,学C++必玩项目】

通讯录是最简单的项目,现在用C++实现一下
在这里插入图片描述
需求描述:
用C++实现一个QQ通讯录系统
要求的功能如下:
0.退出通讯录
1.添加联系人
2.显示通讯录
3.删除联系人
4.查找联系人
5.修改联系人
6.清空联系人
7.显示联系人总数
暂不要求**【文件交互】**功能

1.单文件代码实现>>>

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct Person {//联系人结构体
	string m_name;        //姓名
	string m_sex;         //性别
	int m_age;            //年龄
	string m_qq;          //QQ号
	string m_addr;        //地址
};
class Findper {
private:
	string name;
public:
	Findper(const string& name) {
		this->name = name;
	}
	bool operator()(vector<Person>::value_type& p) {
		return this->name == p.m_name;
	}
};
class Addressbooks {
private:
	vector<Person>personArr;
public:
    //------------------------------------------------------
	void showmenu() {
		cout << "通讯录菜单:" << endl;
		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;

	}
	//----------------------------------------------
	void addPerson() {//添加具体联系人
		Person p;
		cout << "请输入联系人姓名:" << endl;
		cin >> p.m_name;
		cout << "请输入联系人性别:" << endl;
		cin >> p.m_sex;
		cout << "请输入联系人年龄:" << endl;
		cin >> p.m_age;
		cout << "请输入联系人QQ号:" << endl;
		cin >> p.m_qq;
		cout << "请输入联系人地址:" << endl;
		cin >> p.m_addr;
		while (true) {
			vector<Person>::iterator it = find_if(this->personArr.begin(), this->personArr.end(), Findper(p.m_name));
			if (it == this->personArr.end())break;
			else {
				cout << "通讯录中已有该联系人!可在其名字后面添加数字,保证通讯录姓名唯一!" << endl;
				cin >> p.m_name;
			}
		}
		this->personArr.push_back(p);
		cout << "添加成功" << endl;
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-------------------------------------------------
	void showallPersons() { //显示所有联系人
		if (this->personArr.empty())cout << "该通讯录中暂时没有联系人,等待添加" << endl;
		else {
			for (int i = 0; i < this->personArr.size(); i++) {
				cout << "姓名:" << this->personArr[i].m_name <<"  ";
				cout << "性别:" << this->personArr[i].m_sex << "  ";
				cout << "年龄:" << this->personArr[i].m_age << "  ";
				cout << "QQ:" << this->personArr[i].m_qq << "  ";
				cout << "地址:" << this->personArr[i].m_addr << endl;
			}
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//--------------------------------------------------------
	void deletePerson() {
		cout << "请输入要删除联系人的姓名:" << endl;
		string name;
		cin >> name;
		vector<Person>::iterator find_res = find_if(this->personArr.begin(), this->personArr.end(), Findper(name));
		if (find_res == this->personArr.end())cout << "查无此人!!!" << endl;
		else {
			this->personArr.erase(find_res);
			cout << "—删除成功!—" << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-------------------------------------------------------------
	void findPerson() {
		cout << "请输入您要查找的联系人的名字:" << endl;
		string name;
		cin >> name;
		vector<Person>::iterator it = find_if(this->personArr.begin(), this->personArr.end(), Findper(name));
		if (it == this->personArr.end())cout << "查无此人!!!" << endl;
		else {
			cout << "姓名:" << it->m_name << "t";
			cout << "性别:" << it->m_sex << "t";
			cout << "年龄:" << it->m_age << "t";
			cout << "QQ:" << it->m_qq << "t";
			cout << "地址:" << it->m_addr << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-------------------------------------------------------------------------
	void modifyPerson() {
		cout << "请输入您要修改的联系人的名字:" << endl;
		string name;
		cin >> name;
		vector<Person>::iterator it = find_if(this->personArr.begin(), this->personArr.end(), Findper(name));
		if (it == this->personArr.end())cout << "查无此人!!!" << endl;
		else {
			cout << "重新输入联系人的除姓名外的所有信息!" << endl;
			cout << "姓别:" << endl;
			cin >> it->m_sex;
			cout << "年龄:" << endl;
			cin >> it->m_qq;
			cout << "地址:" << endl;
			cin >> it->m_addr;
			cout << "修改成功!!!" << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-----------------------------------------------------------------------
	void cleanPeron() {
		cout << "确定清空吗?" << endl;
		bool jd;
		cout << "1----------确定||||||||||0--------退出" << endl;
		cin >> jd;
		if (jd) {
			this->personArr.clear();
			cout << "^_^删除成功!" << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-----------------------------------------------------------------------
	void showsize() {
		cout << "通讯录现有的人数为:" << this->personArr.size() << endl;
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//--------------------------------------------------------------------------
	void start() {
		while (true) {
			this->showmenu();
			int select = -1;
			cout << endl;
			cout << "请输入操作选项:" << endl;
			cout << endl;
			cin >> select;
			cout << endl;
			cout << "OK执行—>" << endl;
			switch (select) {
			case 1:
				this->addPerson();      //添加联系人
				break;
			case 2:
				this->showallPersons(); //显示通讯录
				break;
			case 3:
				this->deletePerson();  //删除联系人
				break;
			case 4:
				this->findPerson();    //查找联系人
				break;
			case 5:
				this->modifyPerson();  //修改联系人
				break;
			case 6:
				this->cleanPeron();    //清空通讯录
				break;
			case 7:
				this->showsize();      //显示通讯录的总人数
				break;
			case 0:
				cout << "“你已退出通讯录,欢迎下次使用”" << endl;
				return;
			default:
				cout << "无此类选项,请重新输入选项!" << endl;
				break;
			}
		}
	}
};

int main() {
	Addressbooks mybook;
	mybook.start();
	system("pause");
	return 0;
}

2.多文件代码实现>>>

分文件编写,使用VS 2022

"Addressbooks.h"接口实现
#pragma once
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct Person {//联系人结构体
	string m_name;        //姓名
	string m_sex;         //性别
	int m_age;            //年龄
	string m_qq;          //QQ号
	string m_addr;        //地址
};
class Findper {
private:
	string name;
public:
	Findper(const string& name) {
		this->name = name;
	}
	bool operator()(vector<Person>::value_type& p) {
		return this->name == p.m_name;
	}
};
class Addressbooks {
private:
	vector<Person>personArr;
public:
	void showmenu() {
		cout << "通讯录菜单:" << endl;
		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;

	}
	//----------------------------------------------
	void addPerson() {//添加具体联系人
		Person p;
		cout << "请输入联系人姓名:" << endl;
		cin >> p.m_name;
		cout << "请输入联系人性别:" << endl;
		cin >> p.m_sex;
		cout << "请输入联系人年龄:" << endl;
		cin >> p.m_age;
		cout << "请输入联系人QQ号:" << endl;
		cin >> p.m_qq;
		cout << "请输入联系人地址:" << endl;
		cin >> p.m_addr;
		while (true) {
			vector<Person>::iterator it = find_if(this->personArr.begin(), this->personArr.end(), Findper(p.m_name));
			if (it == this->personArr.end())break;
			else {
				cout << "通讯录中已有该联系人!可在其名字后面添加数字,保证通讯录姓名唯一!" << endl;
				cin >> p.m_name;
			}
		}
		this->personArr.push_back(p);
		cout << "添加成功" << endl;

		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-------------------------------------------------
	void showallPersons() { //显示所有联系人
		if (this->personArr.empty())cout << "该通讯录中暂时没有联系人,等待添加" << endl;
		else {
			for (int i = 0; i < this->personArr.size(); i++) {
				cout << "姓名:" << this->personArr[i].m_name << "  ";
				cout << "性别:" << this->personArr[i].m_sex << "  ";
				cout << "年龄:" << this->personArr[i].m_age << "  ";
				cout << "QQ:" << this->personArr[i].m_qq << "  ";
				cout << "地址:" << this->personArr[i].m_addr << endl;
			}
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//--------------------------------------------------------
	void deletePerson() {
		cout << "请输入要删除联系人的姓名:" << endl;
		string name;
		cin >> name;
		vector<Person>::iterator find_res = find_if(this->personArr.begin(), this->personArr.end(), Findper(name));
		if (find_res == this->personArr.end())cout << "查无此人!!!" << endl;
		else {
			this->personArr.erase(find_res);
			cout << "—删除成功!—" << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-------------------------------------------------------------
	void findPerson() {
		cout << "请输入您要查找的联系人的名字:" << endl;
		string name;
		cin >> name;
		vector<Person>::iterator it = find_if(this->personArr.begin(), this->personArr.end(), Findper(name));
		if (it == this->personArr.end())cout << "查无此人!!!" << endl;
		else {
			cout << "姓名:" << it->m_name << "t";
			cout << "性别:" << it->m_sex << "t";
			cout << "年龄:" << it->m_age << "t";
			cout << "QQ:" << it->m_qq << "t";
			cout << "地址:" << it->m_addr << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-------------------------------------------------------------------------
	void modifyPerson() {
		cout << "请输入您要修改的联系人的名字:" << endl;
		string name;
		cin >> name;
		vector<Person>::iterator it = find_if(this->personArr.begin(), this->personArr.end(), Findper(name));
		if (it == this->personArr.end())cout << "查无此人!!!" << endl;
		else {
			cout << "重新输入联系人的除姓名外的所有信息!" << endl;
			cout << "姓别:" << endl;
			cin >> it->m_sex;
			cout << "年龄:" << endl;
			cin >> it->m_qq;
			cout << "地址:" << endl;
			cin >> it->m_addr;
			cout << "修改成功!!!" << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-----------------------------------------------------------------------
	void cleanPeron() {
		cout << "确定清空吗?" << endl;
		bool jd;
		cout << "1----------确定||||||||||0--------退出" << endl;
		cin >> jd;
		if (jd) {
			this->personArr.clear();
			cout << "^_^删除成功!" << endl;
		}
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//-----------------------------------------------------------------------
	void showsize() {
		cout << "通讯录现有的人数为:" << this->personArr.size() << endl;
		cout << endl;
		system("pause");
		system("cls");
		return;
	}
	//--------------------------------------------------------------------------
	void start() {
		while (true) {
			this->showmenu();
			int select = -1;
			cout << endl;
			cout << "请输入操作选项:" << endl;
			cout << endl;
			cin >> select;
			cout << endl;
			cout << "OK执行—>" << endl;
			switch (select) {
			case 1:
				this->addPerson();      //添加联系人
				break;
			case 2:
				this->showallPersons(); //显示通讯录
				break;
			case 3:
				this->deletePerson();  //删除联系人
				break;
			case 4:
				this->findPerson();    //查找联系人
				break;
			case 5:
				this->modifyPerson();  //修改联系人
				break;
			case 6:
				this->cleanPeron();    //清空通讯录
				break;
			case 7:
				this->showsize();      //显示通讯录的总人数
				break;
			case 0:
				cout << "“你已退出通讯录,欢迎下次使用”" << endl;
				return;
			default:
				cout << "无此类选项,请重新输入选项!" << endl;
				break;
			}
		}
	}
};

代码如单文件所写
( ̄︶ ̄)↗

源cpp文件:
#include"Addressbook.h"//直接调用写好的接口
using namespace std;
int main() {
	Addressbooks mybook;
	mybook.start();
	system("pause");
	return 0;
}

3.实现效果

【1】:开始界面

在这里插入图片描述

【2】:添加联系人

输入小黑、小明——
在这里插入图片描述
在这里插入图片描述

【3】:显示所有联系人

在这里插入图片描述

【4】:修改联系人的信息

在这里插入图片描述

【5】:删除联系人

在这里插入图片描述

在这里插入图片描述

【6】:清空通讯录

在这里插入图片描述
在这里插入图片描述

【7】:退出通讯录

在这里插入图片描述

4.后记

这个通讯录是我为应对
学校大作业:
《图书馆管理系统》的练手项目ψ(`∇´)ψ
对于这个专栏,可能不会太涉及算法,但会搞一些有意思的项目之类的
计划中的有《坦克大战》《飞机大战》《班级学生学习管理系统》之类。


一定会比较实用或者比较好玩**( •̀ ω •́ )✧**
O(∩_∩)O
由于每次启动程序,我们的数据是临时地储存在栈区,所以要保证通讯录一直开着才能储存信息,并不能达到[真正的实用]?
所以我们要用
文件交互

欢迎来到下一玩法——

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>