基于C++的通讯管理系统

news2024/11/19 13:20:26

1、系统需求

通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现-个通讯录管理系统
系统中需要实现的功能如下:
●添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
●显示联系人:显示通讯录中所有联系人信息
●删除联系人:按照姓名进行删除指定联系人
●查找联系人:按照姓名查看指定联系人信息
●修改联系人:按照姓名重新修改指定联系人
●清空联系人:清空通讯录中所有信息
●退出通讯录:退出当前使用的通讯录
 

2、创建项目

我这边为了适应老版本的环境,使用的是Microsoft Visual Studio 2005环境创建了一个新项目。 

然后再头文件中右键“添加”->新建项->创建“通讯管理系统.cpp”文件

这样就完成了C++的项目创建。


3、菜单功能

        功能描述:用户选择功能的界面
        菜单界面效果如下图:

                 

步骤:
        ●封装函数显示该界面如void showMenu()
        ●在main函数中调用封装好的函数
代码:

//-封装函数显示该界面如void showMenu()
//-在main函数中调用封装好的函数
#include <iostream>
using namespace std;

// 菜单界面
void showMenu()
{

   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;
}

int main()
{
   showMenu();
   system("pause");
   return 0;
}

4、退出功能

功能描述:退出通讯录系统
思路:根据用户不同的选择,进入不同的功能,可以选择switch分支结构, 将整个架构进行搭建
当用户选择0时候,执行退出,选择其他先不做操作,也不会退出程序
代码:

//-封装函数显示该界面如void showMenu()
//-在main函数中调用封装好的函数
#include <iostream>
using namespace std;

// 菜单界面
void showMenu()
{

   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;
}

int main()
{
   int select = 0; // 创建用户选择输入的变量

   while (true)
   {
      // 菜单调用
      showMenu();

      cin >> select;
      switch (select)
      {
      case 1: // 1、添加联系人
         break;
      case 2: // 2、显示联系人
         break;
      case 3: // 3、删除联系人
         break;
      case 4: // 4、查找联系人
         break;
      case 5: // 5、修改联系人
         break;
      case 6: // 6、清空联系人
         break;
      case 0: // 0、退出联系人

         cout << "欢迎下次使用" << endl;
         system("pause");
         return 0;
         break;
      default:
         break;
      }
   }

   system("pause");
   return 0;
}

5、添加联系人

功能描述:
实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址)
添加联系人实现步骤:
  ●设计联系人结构体
  ●设计通讯录结构体
  ●main函数中创建通讯录
  ●封装添加联系人函数
  ●测试添加联系人功能
5.1设计联系人结构体.
  联系人信息包括:姓名、性别、年龄、联系电话、家庭住址
  设计如下:

#include <string>

// 设计联系人结构体
struct Person
{
   // 姓名
   string m_Name;
   // 性别 1 男  2 女
   int m_Sex;
   // 年龄
   int m_Age;
   // 电话
   string m_Phone;
   // 住址
   string m_Addr;
};

5.2设计通讯录结构体
  设计时候可以在通讯录结构体中,维护-个容量为1000的存放联系人的数组,并记录当前通讯录中联系人数量
  设计如下:

#define MAX 1000

// 设计通讯录结构体
struct Addressbooks
{
   /* data */
   // 通讯录中保存的联系人数组
   struct Person personArray[MAX];
   // 通讯录中当前记录联系人个数
   int m_Size;
};

5.3 main函数中创建通讯录
添加联系人函数封装好后,在main函数中创建一个通讯录变量, 这个就是我们需要一直维护的通讯录

  //创建通讯录
   Addressbooks abs;
   // 初始化通讯录中当前人员个数
   abs.m_Size = 0;

5.4封装添加联系人函数
思路:添加联系人前先判断通讯录是否E 3满,如果满了就不再添加,未满情况将新联系人信息逐个加入到通讯录
添加联系人代码:

// 1、添加联系人
void addPerson(Addressbooks *abs)
{
   // 判断通讯录是否已满,如果满了就不再添加
   if (abs->m_Size == MAX)
   {
      cout << "通讯录已满,无法添加!" << endl;
   }
   else
   {
      // 添加具体联系人
      // 姓名
      string name;
      cout << "请输入姓名:" << endl;
      cin >> name;
      abs->personArray[abs->m_Size].m_Name = name;

      // 性别
      int sex = 0;
      cout << "请输入性别:" << endl;
      cout << "1 --- 男" << endl;
      cout << "2 --- 女" << endl;
      while (true)
      {
         // 如果输入的是1或者2可以退出循环,因为输入的是正确值
         // 如果输入有误,重新输入
         cin >> sex;
         if (sex == 1 || sex == 2)
         {
            abs->personArray[abs->m_Size].m_Sex = sex;
            break;
         }
         cout << "输入有误,请重新输入" << endl;
      }

      // 年龄
      cout << "请输入年龄:" << endl;
      int age = 0;
      cin >> age;
      abs->personArray[abs->m_Size].m_Age = age;

      // 电话
      cout << "请输入电话:" << endl;
      string phone = 0;
      cin >> phone;
      abs->personArray[abs->m_Size].m_Phone = phone;

      // 家庭住址
      cout << "请输入住址:" << endl;
      string address;
      cin >> address;
      abs->personArray[abs->m_Size].m_Addr = address;

      // 更新通讯录人数
      abs->m_Size++;

      system("pause"); // 请按任意键继续
      system("cls");   // 清屏操作
   }
}

5.5测试添加联系人功能
选择界面中,如果玩家选择了1,代表添加联系人,我们可以测试下该功能;在switch case语句中,case1 里添加:

 case 1:             // 1、添加联系人
         addPerson(&abs); // 利用地址传递,可以修饰实参
         break;

测试效果图:



6、显示联系人

功能描述:显示通讯录中已有的联系人信息
显示联系人实现步骤:
  ●封装显示联系人函数
  ●测试显示联系人功能
6.1封装显示联系人函数
  思路:判断如果当前通讯录中没有人员,就提示记录为空,人数大于0,显示通讯录中信息
显示联系人代码:

// 2、显示所有联系人
void showPerson(Addressbooks *abs)
{
   // 判断通讯录中人数是否为0,如果为0,提示记录为空
   // 如果不为0,显示记录的联系人信息
   if (abs->m_Size == 0)
   {
      cout << "当前记录为空" << endl;
   }
   else
   {
      for (int i = 0; i < abs->m_Size; i++)
      {
         cout << "姓名: " << abs->personArray[i].m_Name << "\t";
         cout << "性别: " << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
         cout << "年龄: " << abs->personArray[i].m_Age << "\t";
         cout << "电话: " << abs->personArray[i].m_Phone << "\t";
         cout << "住址: " << abs->personArray[i].m_Addr << endl;
      }
   }
   system("pause"); // 请按任意键继续
   system("cls");   // 清屏操作
}



7、删除联系人
8、查找联系人

 

 

9、修改联系人
10、 清空联系人
 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/492180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你搭建ROS阿克曼转向小车之(增量式PID代码实现)

在上一篇文章中我们已经成功的把编码器的反馈值给计算出来&#xff0c;这篇文章将会讲解怎么使用反馈回来的速度值进行PID计算&#xff0c;从而闭环控制电机的速度。 PID算法介绍 1.开环控制系统 开环控制系统(open-loop control system)是指被控对象的输出(被控制量)对控制器…

【软件开发】从单机到分布式

从单机到分布式 1.单台服务器应用 问题&#xff1a;由于流量越来越大出现服务器性能问题。 2.应用服务器和数据库服务器分离 对架构增加了一台服务器&#xff0c;应用和数据库分别部署到不同的服务器上&#xff0c;对于开发和测试没有任何影响&#xff0c;只需要应用服务器新…

画了个 MSP430F149的最小系统板 开源出来了

使用MSP430F149单片机设计的一个最小系统板&#xff0c;包含晶振电路、复位电路、CH340串口和BSL下载电路、按键和LED电路等&#xff0c;使用了Type-C接口作为供电和串口通信&#xff0c;另外引出了JTAG接口&#xff0c;所有IO口都引出了。 板载了3个按键和LED&#xff0c;可以…

项目范围说明书如何编写?

范围说明书是一份定义了项目范围的所有要素以及假设、项目要求和验收标准的文件。项目范围说明书将作为主要工具&#xff0c;供利益相关者和团队成员参考&#xff0c;并作为准确衡量项目成功的准则。 项目范围说明书是范围管理计划的一部分&#xff0c;包含了管理项目范围的所…

百度智能云联合发布《雄安新区2022年大数据研究报告》

近日&#xff0c;百度智能云、百度研究院商业智能实验室联合发布《未来之城 雄姿初显——雄安新区2022年大数据研究报告》&#xff08;以下简称《报告》&#xff09;&#xff0c;运用人工智能和大数据分析技术&#xff0c;全面呈现过去一年雄安新区在承接疏解、生态治理、城市建…

Golang当中的定时器

定时器 前言定时器的基本使用 前言 在平时写代码的时候&#xff0c;我们经常会遇到在将来某个时间点或者间隔一段时间重复执行函数。这个时候我们就可以考虑使用定时器。本片文章主要介绍一下golang当中的几个常用的定时器。time.Timer,time.Ticker,time.After以及time.AfterF…

文鼎创智能物联云原生容器化平台实践

作者&#xff1a;sekfung&#xff0c;深圳市文鼎创数据科技有限公司研发工程师&#xff0c;负责公司物联网终端平台的开发&#xff0c;稳定性建设&#xff0c;容器化上云工作&#xff0c;擅长使用 GO、Java 开发分布式系统&#xff0c;持续关注分布式&#xff0c;云原生等前沿技…

《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1Hh4y1H7dR 《安富莱嵌入式周报》第311期&#xff1a;300V可调…

【机器学习】决策树算法解读

【机器学习】决策树算法解读 文章目录 【机器学习】决策树算法解读1. 介绍1.1 优缺点1.2 结构1.3 学习过程1.4 决策树与条件概率分布 2. 决策树学习过程2.1 训练策略2.2 特征选择2.2.1 信息增益和条件熵 2.3 决策树的生成2.3.1 ID32.3.2 C4.52.3.3 CART2.3.4 小结 2.4 决策树的…

Nacos配置中心、配置热更新、及配置共享的记录

Nacos除了提供了注册中心的功能,同样也提供了配置中心的功能,用于管理一些叫常改动的配置 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#xff0c;可以集中…

计算时间复杂度详解

1&#xff0c;前置知识 我们在计算时间复杂度之前的前置知识是等差数列的通项公式和求和公式以及等比数 列的通项公式和求和公式 等差数列&#xff1a; 通项公式&#xff1a;ana1(n-1)d&#xff08;d是公差&#xff09; 求和公式&#xff1a;Snn(a1an)/2 等比数列&#xf…

【Python入门知识】NumPy数组拆分,超详细讲解

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 今天我们来学习python中NumPy数组的拆分 拆分 NumPy 数组 拆分是连接的反向操作。 连接&#xff08;Joining&#xff09;是将多个数组合并为一个&#xff0c;拆分&#xff08;Spliting&#xff09;将一个数组拆分为多个。…

Mysql 学习(七)独立表结构存储 二

段的结构 上一节说过表空间分为各个段&#xff0c;每个段里面又是以区为单位&#xff0c;每个区则有64个页。区根据剩余存储空间分为&#xff1a;Free&#xff0c;FREE_FRAG&#xff0c;FULL_FRAG 三种类型&#xff0c;为了方便管理区&#xff0c;给每个区创建XDES Entry结构&…

【校招VIP】用户反驳:你说大厂校招不会问框架实战,现在就有问的了,打脸了吧?一看是专业技能给自己挖的坑

最近有个用户过来质疑&#xff0c;不是说大厂不考框架的使用吗&#xff1f; 但网上的这两份面经里&#xff0c;却问到关于SpringBoot的问题。 接着发来了相对应的简历&#xff0c;一看&#xff0c;直接真相大白&#xff1a; 他在专业技能这栏写了&#xff1a;我熟练掌握Sprin…

flink内存参数配置学习

直接上官网 配置 JobManager 内存 | Apache Flink配置 JobManager 内存 # JobManager 是 Flink 集群的控制单元。 它由三种不同的组件组成&#xff1a;ResourceManager、Dispatcher 和每个正在运行作业的 JobMaster。 本篇文档将介绍 JobManager 内存在整体上以及细粒度…

自动驾驶中地图匹配定位技术总结

引言 汽车定位是让自动驾驶汽车知道自身确切位置的技术&#xff0c;在自动驾驶系统中担负着相当重要的职责。汽车定位涉及多种传感器类型和相关技术&#xff0c;主要可分为卫星定位、惯性导航定位、地图匹配定位以及多传感器融合定位几大类。其中地图匹配定位技术利用道路物理…

CSS绝对定位、相对定位

目录 静态定位 - static 相对定位 - relative 绝对定位 - absolute 固定定位 - fixed z-index属性&#xff1a; 在CSS中定位有以下4种&#xff1a; 静态定位 - static相对定位 - relative绝对定位 - absolute 固定定位 - fixed 静态定位 - static 静态定位是css中的默认定…

网络机顶盒哪个牌子好?资深数码粉分享网络电视机顶盒排名

智能电视配置跟不上经常死机卡顿&#xff0c;但显示正常的情况下不想花钱换电视机怎么办&#xff1f;一台网络机顶盒就可以解决你的烦恼&#xff0c;安装上网络机顶盒以后就可以让旧电视新生&#xff0c;那么你知道网络机顶盒哪个牌子好吗&#xff1f;如果不懂这行&#xff0c;…

【自然语言处理 | Transformer】Transformer:Attention is All You Need论文讲解

Transformer由论文《Attention is All You Need》提出&#xff1a; 论文地址为&#xff1a; https://arxiv.org/pdf/1706.03762.pdf文章目录 一、Transformer 整体结构二、Transformer 的输入2.1 单词 Embedding2.2 位置 Embedding 三、Self-Attention&#xff08;自注意力机制…

.net7 通过 JsonTranscoding 实现 gRPC 与 Web API 一鱼两吃

目标 在一个网站内&#xff0c;用一套proto即提供gPRC 调用&#xff0c;又提供 Web API 调用。 实现方法 根据微软官方James Newton King&#xff08;Newtonsoft.json 作者&#xff09;的文章&#xff0c;.net7 里面提供了 JsonTranscoding 特性&#xff0c;只需要三步&#x…