复习简单操作,实现一个非常非常简单的通讯录管理小程序

#include <iostream>
using namespace std;
#include <string>
constexpr auto MAX = 1000; //通讯录最大人数; //设计联系人结构体
struct Person{
string m_Name; //姓名
int m_Sex; //性别
int m_Age; //年龄
string m_Phone; //电话
string m_Addr; //住址
}; //设计通讯录结构体
struct Addressbooks{
//通讯录中保存的联系人数组
struct Person personArray[MAX];
//通讯录中当前记录联系人个数
int m_Size;
}; //1、添加联系人
void addPerson(Addressbooks *abs){
//判断通讯录是否已满,满了则不再添加
if (abs->m_Size == MAX){
cout << "通讯录已满,无法添加" << endl;
return;
}
else {
//添加具体联系人 //姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personArray[abs->m_Size].m_Name = name;
//性别
cout << "请输入性别:" << endl;
cout << "1——男" << endl;
cout << "2——女" << endl;
int sex = 0;
while (true) {
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;
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++;
cout << "添加成功" << endl; system("pause"); //请按任意键继续
system("cls"); //清屏功能
}
} //2、显示联系人
void showPerson(Addressbooks *abs) {
//判断通讯录中人数是否为0
if (abs->m_Size == 0) {
cout << "当前记录为空" << endl;
}
//不为0时,显示联系人信息
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");
} //3、删除联系人
/*检测联系人是否存在*/
int isExist(Addressbooks *abs,string name){
for (int i = 0; i < abs->m_Size; i++) {
if (abs->personArray[i].m_Name == name) {
return i;
}
}
return -1;
}
/*删除指定联系人*/
void deletePerson(Addressbooks *abs) {
cout << "请输入您要删除的联系人:" << endl;
string name;
cin >> name; int ret = isExist(abs, name); if (ret != -1) {
for (int i = ret; i < abs->m_Size; i++) {
abs->personArray[i] = abs->personArray[i + 1];
}
abs->m_Size--;
cout << "删除成功" << endl;
}
else {
cout << "查无此人" << endl;
}
system("pause"); //请按任意键继续
system("cls"); //清屏功能
} //4、查找联系人
void findPerson(Addressbooks *abs) {
cout << "请输入您要查找的联系人:" << endl;
string name;
cin >> name; int ret = isExist(abs, name); if (ret != -1) {
cout << "姓名:" << abs->personArray[ret].m_Name<<"\t";
cout << "性别:" << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
cout << "年龄:" << abs->personArray[ret].m_Age << "\t";
cout << "电话:" << abs->personArray[ret].m_Phone << "\t";
cout << "住址:" << abs->personArray[ret].m_Addr << endl; }
else {
cout << "查无此人" << endl;
}
system("pause"); //请按任意键继续
system("cls"); //清屏功能
} //5、修改联系人
void modefyPerson(Addressbooks *abs) {
cout << "请输入您要修改的联系人:" << endl;
string name;
cin >> name; int ret = isExist(abs, name);
if (ret!=-1){
//姓名
string name;
cout << "请输入姓名:" << endl;
cin >> name;
abs->personArray[ret].m_Name = name;
//性别
int sex=0;
cout << "请输入性别:" << endl;
cout << "1——男" << endl;
cout << "2——女" << endl;
while (true) {
cin >> sex;
if (sex == 1 || sex == 2) {
abs->personArray[ret].m_Sex = sex;
break;
}
cout << "输入有误,请重新输入" << endl;
}
//年龄
cout << "请输入年龄:" << endl;
int age = 0;
cin >> age;
abs->personArray[ret].m_Age = age;
//电话
cout << "请输入联系电话:" << endl;
string phone;
cin >> phone;
abs->personArray[ret].m_Phone = phone;
//住址
cout << "请输入家庭住址:" << endl;
string address;
cin >> address;
abs->personArray[ret].m_Addr = address;
}
else {
cout << "查无此人" << endl;
}
system("pause"); //请按任意键继续
system("cls"); //清屏功能
} //6、清空联系人
void cleanPerson(Addressbooks *abs) {
abs->m_Size = 0; //静态内存在进程结束时自动释放,无需其他操作
cout << "通讯录已清空" << endl;
system("pause"); //请按任意键继续
system("cls"); //清屏功能
} //菜单界面
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()
{
//创建通讯录的结构体变量
Addressbooks abs;
//初始化通讯录中当前人员个数
abs.m_Size = 0; int select = 0; //创建用户选择输入的变量 while (true)
{
//菜单调用
showMenu(); cin >> select; switch (select)
{
case 1: //1、添加联系人
addPerson(&abs); //利用地址传递通过修改形参来修改实参
break;
case 2: //2、显示联系人
showPerson(&abs);
break;
case 3: //3、删除联系人
deletePerson(&abs);
break;
case 4: //4、查找联系人
findPerson(&abs);
break;
case 5: //5、修改联系人
modefyPerson(&abs);
break;
case 6: //6、清空联系人
break;
case 0: //0、退出通讯录
cout << "欢迎下次使用" << endl;
system("pause");
return 0;
break;
default:
break;
}
} system("pause");
return 0;
}

C++学习(4)——通讯录管理程序的更多相关文章

  1. CentOS学习笔记—软件管理程序RPM、YUM

    软件管理程序 Linux的软件安装分为源代码编译安装和打包安装.RPM是一种打包安装方式,是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多 distributions 就使用这个机制 ...

  2. Linux学习-RPM 软件管理程序: rpm

    RPM 默认安装的路径 一般来说,RPM 类型的文件在安装的时候,会先去读取文件内记载的设定参数内容,然后将该数据用来比对 Linux 系统的环境,以找出是否有属性相依的软件尚未安装的问题. 若环境检 ...

  3. 《Blue Flke团队》第二次作业通讯录项目开题报告

      Just_Do_IT! N:8A:8B:7C:6D:8总分:37   Miracle-House N:8A:6B:7C:6D:8总分:35   Spring_Four N:7A:7B:8C:8D: ...

  4. DOS通讯录

    #include"stdio.h" #include"string.h" #include"stdlib.h" FILE *fp; #def ...

  5. C++通讯录

    C++通讯录1.0 历时一天,终于把通讯录写好了. 项目要求: 编写一个通讯录管理程序. 有一已存在的通讯录文件,数据内容为各联系人信息. 每个联系人信息的组成部分为: 姓名.电话号码和住址 等个人基 ...

  6. C实现通讯录管理系统(亮点:纯链表实现、子串匹配,文件读写)

    题目:通讯录管理程序 问题描述 编写一个简单的通讯录管理程序.通讯录记录有姓名,地址(省.市(县).街道),电话号码,邮政编码等四项. 基本要求 程序应提供的基本基本管理功能有: 1) 添加:即增加一 ...

  7. Python - 函数实战

    前言 参考的是慕课网提供的实战,自己编码 http://www.imooc.com/wiki/pythonlesson1/function2.html 什么是模块化程序设计 在进行程序设计时将一个大程 ...

  8. IOS学习之-私人通讯录

    通过一段时间IOS的学习完成了一个简单的应用,"私人通讯录". 运行效果如下图: 1.登录页 2.通讯录列表 3.添加 4.编辑 5.删除 6.注销 总视图结构如下图: 总结本程序 ...

  9. redis系列:通过通讯录案例学习hash命令

    前言 这一篇文章将讲述Redis中的hash类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了. 项目Github地址:https://github.com/rainbowda/learn ...

随机推荐

  1. Redis与Mysql双写一致性方案解析

    一 前言 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用.在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作 但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存 ...

  2. 免费https证书

    https://certbot.eff.org/lets-encrypt/ubuntuother-nginx https://ruby-china.org/topics/31942 https://l ...

  3. 使用 KVO 可能会拖慢启动速度

    问题  在某一次启动速度优化中,发现最开始的某个 runLoop 中,一个runLoop 耗时很长.发现一个 KVO 变量的初始化消耗了13ms之久,这对启动速度是不可接受了. 源码分析 用 Ins ...

  4. oracle 之 using 使用

    oracle  中 using关键字使用规则: 1.查询必须是等值连接.2.等值连接中的列必须具有相同的名称和数据类型. 使用using关键字简化连接时,需要注意以下几点:1.使用 table1表和 ...

  5. CountDownLatch源码

    public class CountDownLatchExample1 { public static void main(String[] args) throws Exception { Exec ...

  6. Ubiq:A Scalable and Fault-tolerant Log Processing Infrastructure

    Abstract 互联网应用通常会产生大量的时间日志需要进行分析和处理.本文介绍Ubiq的架构,它是一个分布式系统,用于处理不断增长的日志文件,具有可扩展性.高可用.低延迟的特性.Ubiq框架容忍基础 ...

  7. GoF的23种设计模式之行为型模式的特点和分类(1)

    行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配. 行为型模式分为类行为模式和对象行为模式,前者采用继 ...

  8. Python开发【第十五篇】模块的导入

    的导入语句 import 语句 语法: import 模块名1 [as 模块别名] 作用: 将某模块整体导入到当前模块 示例: import math import sys,os 用法: 模块名.属性 ...

  9. 一张图看懂SharpCamera

    通过下面的图片,可以瞬间看懂整个类库的脉络.

  10. Beego 学习笔记一:环境的配置

    Beego 环境的配置 1>     下载go,并安装.下载地址是: https://golang.org/dl/.最好选择这部分的最新的下载安装 2>     配置环境变量(若是没有配置 ...