通讯录是最简单的项目,现在用C++实现一下

需求描述:
用C++实现一个QQ通讯录系统
要求的功能如下:
0.退出通讯录
1.添加联系人
2.显示通讯录
3.删除联系人
4.查找联系人
5.修改联系人
6.清空联系人
7.显示联系人总数
暂不要求《【文件交互】》功能

目录:

  • 1.单文件代码实现>>>
  • 2.多文件代码实现>>>
    • "Addressbooks.h"接口实现
    • 源cpp文件:
  • 3.实现效果
    • 【1】:开始界面
    • 【2】:添加联系人
    • 【3】:显示所有联系人
    • 【4】:修改联系人的信息
    • 【5】:删除联系人
    • 【6】:清空通讯录
    • 【7】:退出通讯录
  • 4.后记

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

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

  1. 手机通讯录如何转移 QQ通讯录

    点击下载https://pan.baidu.com/s/1dGpAxc1 关注微信公众平台 IM社区 或扫描下二维码 回复 :东京食种 即可获取 更多精彩 查看全文 http://www.taodud ...

  2. 模拟通讯录系统2.0

    这是一个模拟通讯录系统,写的不到位的地方希望各位多多指点 通讯录2.0版本 1.Person类 2.Contacts类(通讯录) 3.代码实现效果 查看所有联系人 根据id查询联系人 根据id修改联系 ...

  3. 湖南工业大学教务系统爬虫(模拟登陆篇)

    湖南工业大学教务系统爬虫(模拟登陆篇) 之前写了一个教务系统的爬虫程序,可以根据用户要求爬取任何一部分的数据,也可以模拟提交数据,可能这也是部分工大计算机学生比较感兴趣的,所以今天就在这分享一下整个的 ...

  4. Java~通讯录系统

    Java~通讯录欢迎各位 1.需求分析 2.概要设计 2.1功能模块结构图 2.2业务流程图 3 运行环境 4 开发工具和编程语言 5 详细设计 5.1 数据库设计 5.2 类的设计 5.3登录 5. ...

  5. 个人通讯录系统——数据库课程设计

    课  程  设  计 课    程数据库原理及应用课程设计 题    目个人通讯录系统 学    院         信息工程学院                专    业        计算机科学 ...

  6. ios开发基础之通讯录系统实战-20

    ios开发基础之通讯录系统实战 基础知识 OC 基础 segue 的使用.delegate 代理的使用 自定义代理.面向对象思想 沙盒容器的数据持久化方案, controller 之间的跳转 ,登录方 ...

  7. C++ MFC 学习笔记+小型通讯录系统实现

    MFC 最详细入门教程 [MFC常用函数总结](https://www.cnblogs.com/jiu0821/p/4606639.html) [C++ & MFC]https://www.c ...

  8. C语言通讯录系统程序设计

    文章目录 1.前言 2.设计步骤 前言 利用链表增.删.改.查功能以及文件来完成通讯录系统.通讯录中包含联系人的基本信息:姓名.联系电话.家庭住址以及电子邮件. 以下是设计该系统的步骤: 1.导出通讯 ...

  9. android 手机号码去重,微信电话本和qq通讯录有什么不同?微信电话本常见问题汇总...

    微信电话本可谓是QQ通讯录的全新升级产品,重新整合进微信团队后,不仅仅UI界面更加类似微信,且功能上可将联系人对应的微信头像导入通讯录中,还可以识别陌生号码,支持来电号码归属地显示等等.对很多从QQ通 ...

最新文章

  1. [ACM] hdu 1671 Phone List (字典树)
  2. IntelliJ IDEA 2018.1正式发布!什么?还能这么玩?
  3. Altium Designer /DXP无网络铺铜:
  4. 黄金点游戏之客户端(homework-05)
  5. Node.js学习之(第二章:exports和module.exports)
  6. OSPF——NSSA区域及完全NSSA区域(含配置命令)、第七类LSA类型 LSA-7详解
  7. leetcode - 22. 括号生成
  8. springboot idea debug 模式下启动特别忙,且无法访问
  9. Java学习笔记1.1.2 搭建Java开发环境 - 安装配置JDK
  10. Java语言词法分析器
  11. WSL配置C/D盘大小写敏感
  12. React Router的Route的使用
  13. 广东大学计算机基础教材,21世纪高等学校计算机公共基础课规划教材:大学计算机基础(第2版)...
  14. IOS校园网破解更新了
  15. 高拍仪Twain接口功能
  16. 2010年翡翠岛露营
  17. 设计c语言程序得到回文数,C语言程序设计实训题目.pdf
  18. 微信公众平台开发(15)--群发消息
  19. 【JS里面使用var声明变量存在的三个问题】
  20. uoni扫地机器人好用吗_扫地机器人好用吗?选购注意这些关键指标,8.28张大奕生活节帮你选...

热门文章

  1. Android组件系列——Content Provider
  2. 笔记dng图片在premiere和ae中不一致
  3. 购买无线鼠标的单模,双模和可充电是什么意思
  4. 数据结构入门1(认识数据结构)
  5. SD卡是如何通过“lock”键实现写保护的?SD卡lock键坏掉怎么才能用,插入笔记本老提示写保护?
  6. ssh推送Warning: Permanently added 'gitee.com,120.55.226.24' (ECDSA) to the list of known ho
  7. 金牛能源管理信息化案例
  8. 微生物组-扩增子16S分析和可视化(线上/线下同时开课,2021.7)
  9. css3贝塞尔曲线_CSS3动画–使用贝塞尔曲线创建具有弹跳效果的扇出
  10. 网页小游戏源码丨FC模拟器网页版源码