概述

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

  • 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录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. 匿名内部类和Lambda表达式是一样的吗?

    先看一下匿名内部类长什么样子: 1 package com.jvm.demo.test2; 2 3 public class InnerClassTest { 4 5 public static vo ...

  2. 如何让矢量瓦片配图神器maputnik支持 geoserver

    关键词:maputnik.geoserver.矢量地图.矢量瓦片.mapbox.mapboxgl.地图配图.地图配色 一直想搞一个类似百度.高德地图那样的矢量地图配图工具 百度个性化地图配图工具: 高 ...

  3. 0-完全开源的 Vue.js 入门级教程:HelloVue,发车啦!

    本教程基于 Vue.js 2.x 作者:HelloGitHub-追梦人物 欢迎来到 HelloVue-todo-tutorial,这个教程将手把手教你从零开始使用 Vue 搭建一个 Todo(待办事项 ...

  4. day20 Pyhton学习 面向对象-成员

    一.类的成员 class 类名: # 方法 def __init__(self, 参数1, 参数2....): # 属性变量 self.属性1 = 参数1 self.属性2 = 参数2 .... # ...

  5. 解决React前端在开发环境的跨域问题

    在前后端分离的分布式架构中,跨域是一道无法绕过去的门槛,众所周知,生产环境上解决跨域最便捷的方式是使用Nginx来处理,那么,在本地开发环境又该如何处理呢? React框架里处理跨域问题,可以使用ht ...

  6. 【C语言编程入门】Do you know 函数?不知道了吧,我来告诉你!

    ☆ 函数 在前面我们已经讲过了一些简单的函数,如程序的主函数main().标准输出函数printf().在C语言中,大多数功能都是依靠函数来实现的.But,你知道什么是函数吗?我猜你肯定不知道. 那么 ...

  7. 【数位DP】SCOI2014 方伯伯的商场之旅

    题目内容 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子. 说来也巧,位置在 \(i\) 的人面前的第 \(j\) 堆的石子的数量,刚好是 \(i\) 写成 ...

  8. Mac下面 matplotlib 中文无法显示解决

    一.环境描述 python 3.7 mac 10.14.5 二.问题描述 如下图所示,当使用matplotlib绘制图片的时候,所有的中文字符无法正常显示. 三.解决方法 1.下载字体ttf文件 链接 ...

  9. gti 常用命令

    git add 文件 : 追踪指定文件git add . :追踪所有的文件git commit -m "注释" : 提交报本地仓库git push : 推送远程仓库git pull ...

  10. 如何解决json返回的乱码

    方法一: 通过@RequestMaping的produces属性来实现,修改下代码 //produces:指定响应体返回类型和编码@RequestMapping(value = "/xxx& ...