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
由于每次启动程序,我们的数据是临时地储存在栈区,所以要保证通讯录一直开着才能储存信息,并不能达到[真正的实用]?
所以我们要用
文件交互
欢迎来到下一玩法——