概述

系统中需要实现的功能如下:

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  • 显示联系人:显示通讯录中所有的联系人信息
  • 删除联系人:按照姓名进行删除指定联系人
  • 查找联系人:按照姓名查看指定联系人信息
  • 修改联系人:按照姓名重新修改指定联系人
  • 清空联系人:清空通讯录中所有信息
  • 退出通讯录:退出当前使用的通讯录

步骤

新建结构体

contact.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<string>
using namespace std;
 
struct Contact
{
  string name;//姓名
  string sex;//性别
  int age;//年龄
  int phoneNumber;//联系电话
  string address;//家庭地址
};
 
void printContactInfo(const Contact *p);

定义

contact.cpp

1
2
3
4
5
6
7
8
9
10
#include "Contact.h"
 
void printContactInfo(const Contact * p)
{
  cout << "姓名:" << p->name <<
    "---性别:" << p->sex <<
    "---年龄:" << p->age <<
    "---联系电话:" << p->phoneNumber <<
    "---家庭地址:" << p->address << endl;
}

ContactManager.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<iostream>
#include "Contact.h"
using namespace std;
 
#define MAX 1000
 
struct ContactManager
{
  //联系人数组
  Contact contactArr[MAX];
  //当前联系人数量
  int size;
};
 
void showMenu();
void exitSys();
void addContact(ContactManager *manager);
void showContactList(ContactManager *manager);
void delContactByName(ContactManager *manager);
void findContactByName(ContactManager *manager);
void updateContactByName(ContactManager *manager);
void clearManager(ContactManager *manager);

实现管理者

实现菜单功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "ContactManager.h"
 
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;
  cout << "-----> 请选择操作项并输入操作项编号:" << endl;
}

实现退出功能

1
2
3
4
5
void exitSys()
{
  cout << "欢迎下次使用,再见" << endl;
  system("pause");
}

新增联系人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void addContact(ContactManager *manager)
{
  cout << "请输入联系人姓名:";
  cin >> manager->contactArr[manager->size].name;
  cout << "请输入联系人性别:";
  cin >> manager->contactArr[manager->size].sex;
  cout << "请输入联系人年龄:";
  cin >> manager->contactArr[manager->size].age;
  cout << "请输入联系人号码:";
  cin >> manager->contactArr[manager->size].phoneNumber;
  cout << "请输入联系人地址:";
  cin >> manager->contactArr[manager->size].address;
  cout << "添加联系人成功!!!" << endl;
  manager->size++;
  system("pause");
  system("cls");
}

展示联系人列表

1
2
3
4
5
6
7
8
9
void showContactList(ContactManager * manager)
{
  for (int i = 0; i < manager->size; i++)
  {
    printContactInfo(&manager->contactArr[i]);
  }
  system("pause");
  system("cls");
}

删除联系人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void delContactByName(ContactManager * manager)
{
  cout << "请输入要删除联系人的姓名:";
  string name;
  cin >> name;
  int pos = isExist(manager, name);
  if (pos == -1)
  {
    cout << "联系人不存在!!" << endl;
  }
  else
  {
    cout << "联系人的位置在" << pos << endl;
    //数据前移
    for (int i = pos; i < manager->size; i++)
    {
      manager->contactArr[pos] = manager->contactArr[pos + 1];
    }
    cout << "删除联系人成功!!" << endl;
    manager->size--;
  }
   
  system("pause");
  system("cls");
}

查找联系人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void findContactByName(ContactManager * manager)
{
  cout << "请输入要查找联系人的姓名:";
  string name;
  cin >> name;
  int pos = isExist(manager, name);
  if (pos == -1)
  {
    cout << "联系人不存在!!" << endl;
  }
  else
  {
    printContactInfo(&manager->contactArr[pos]);
  }
 
  system("pause");
  system("cls");
}

更新联系人

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void updateContactByName(ContactManager * manager)
{
  cout << "请输入要修改联系人的姓名:";
  string name;
  cin >> name;
  int pos = isExist(manager, name);
  if (pos == -1)
  {
    cout << "联系人不存在!!" << endl;
  }
  else
  {
    cout << "请输入联系人性别:";
    cin >> manager->contactArr[pos].sex;
    cout << "请输入联系人年龄:";
    cin >> manager->contactArr[pos].age;
    cout << "请输入联系人号码:";
    cin >> manager->contactArr[pos].phoneNumber;
    cout << "请输入联系人地址:";
    cin >> manager->contactArr[pos].address;
    cout << "修改联系人成功!!!" << endl;
  }
  system("pause");
  system("cls");
}

清空通讯录

1
2
3
4
5
6
7
void clearManager(ContactManager * manager)
{
  manager->size = 0;
  cout << "清空联系人成功!!!" << endl;
  system("pause");
  system("cls");
}

运行截图

C++实现管理系统的更多相关文章

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统 (源码购买说明)

    系列目录 升级日志 !!!重大版本更新:于2016-12-20日完成了系统的结构重构并合并简化了T4(这是一次重要的更新,不需要修改现有功能的代码),代码总行数比上个版本又少了1/3.更新了代码生成器 ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  4. ShenNiu.MVC管理系统

    本篇将要和大家分享的是一个简单的后台管理系统,这里先发个地址http://www.lovexins.com:8081/(登陆账号:youke,密码:123123:高级用户账号:gaoji,密码:123 ...

  5. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  6. 基于jsp+servlet图书管理系统之后台万能模板

    前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...

  7. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展

    系列目录 不知不觉已经过了13讲,(本来还要讲多一讲是,数据验证之自定义验证,基于园友还是对权限这块比较敢兴趣,讲不讲验证还是看大家的反映),我们应该对系统有一个小结.首先这是一个团队开发项目,基于接 ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(23)-权限管理系统-角色组模块

    系列目录 距离上次发布22讲已经有少许日子了,真是太抱歉,最近年关项目比较急,时间太紧,没有时间发布.请大家见谅 接下来我们的目标是 角色组管理 角色组权限设置 用户管理 把角色组授权给用户 给用户分 ...

  9. ASP.NET MVC5+EF6+EasyUI 后台管理系统(34)-文章发布系统①-简要分析

    系列目录 最新比较闲,为了学习下Android的开发构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(1)-前言与,虽然有点没有目的的学习,但还是了解了Andro ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(35)-文章发布系统②-构建项目

    系列目录 注:阅读本文,需要阅读本系列的之前文章 代码生成器下载地址(文章开头处) 接下来我们建立数据库的表和各层的代码 我们只需要两张表,文章列表(MIS_Article)和类别表(MIS_Arti ...

随机推荐

  1. pycharm 解决PEP8问题,配置autopep8到菜单栏

    autopep8是一个可以将Python代码自动排版为PEP8风格第三方包,使用它可以轻松地排版出格式优美整齐的代码.网络上有很多介绍如何在pycharm中配置autopep8的方案,但很多方案中还是 ...

  2. centos 7 安装docker 常用指令

    什么是docker l  使用最广泛的开源容器引擎 l  一种操作系统级的虚拟化技术 l  依赖于Linux内核特性:Namespace和Cgroups l  一个简单的应用程序打包工具 docker ...

  3. 初探电波钟(A Brief Introduction Of Radio Controlled Clock AND Its Appliciations)

    文档标识符:Radio_Controlled_Clock_T-D-P11 作者:DLHC 最后修改日期:2020.10.12 本文链接:https://www.cnblogs.com/DLHC-TEC ...

  4. 实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发

    一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Postman 下发流表. 二.实验任务 流表有软超时和硬超时的概念,分别对应流表中的 idle_timeou ...

  5. 要是想让程序跳转到绝对地址是0x100000去执行

    要对绝对地址0x100000赋值,我们可以用 (unsigned int*)0x100000 = 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么做? *((void (* ...

  6. MeteoInfoLab脚本示例:计算水平螺旋度

    尝试了用MeteoInfoLab编写计算水平螺旋度的脚本,结果未经验证.脚本程序: print 'Open data files...' f_uwnd = addfile('D:/Temp/nc/uw ...

  7. 【Linux编译环境的搭建】Linux都没有,怎么学Linux编程?

    本文准备从0开始,一步步搭建一套属于自己的多节点Linux系统环境,这将是后续学Linux.用Linux.Linux环境编程.应用和项目部署.工具实验等一系列学习和实践的基石,希望对小伙伴们有帮助. ...

  8. swoole热启动

    通过扫描指定的要扫描的目录,把所有文件找出来,分别md5 连接字符串,最后再md5返回 启动定时器,扫描,当前的加密值和以前一样不管,否则就重启服务,把当前赋值给旧值 . httpServer.php ...

  9. Java 8 中的抽象类和接口到底有啥区别?

    上一篇栈长发了这篇<Java 8 有多牛逼?打破一切你对接口的认知!>,帮助许多人解开了疑惑,还有读者留言说两者还有啥区别,故引发了此篇: 在我们面试时也会经常遇到面试官问抽象类和接口的区 ...

  10. Windows快捷键与Dos命令学习

    部分Windows常用快捷键 复制:Ctrl + C 粘贴:Ctrl + V 全选:Ctrl + A 剪切:Ctrl + X 撤销:Ctrl + Z 保存:Ctrl + S 关闭窗口:Alt + F4 ...