C++设置通讯录

简介: C++设置通讯录

简介:

       本个通讯录的设计包含七个功能:  

       1,增添人员    

       2,展示通讯录中的人员    

       3,删除通讯录中的指定人员  

       4,查找通讯录中的指定人  

       5,修改指定人的消息    

       6,清空通讯录  

       7,用来查找指定人的序号      

       对于不同的功能,我们采取不同的函数功能来实现。

一,创建头文件

       在头文件中,我们设置必要的函数和必要的C++头文件

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
//下面为C++所提供的一系列头文件
#include<iostream>
#include<windows.h>
#include<cstring>
using namespace std;
//设置通讯录最大的容量,可根据情况进行修改
#define m 1000
//通讯录的菜单
void menu();

//增添人员
void addperson(struct add* a, int*);
//展示通讯录中的人员
void show(struct add* a);
//删除通讯录中的指定人员
void deleteperson(struct add* a);
//查找通讯录中的指定人
void found(struct add* a);
//修改指定人的消息
void fix(struct add* a);
//清空通讯录
void clean(struct add* a);
//用来查找指定人的序号
int foundperson(struct add* a,string);

二,通讯录的实现

思路:

       首先我们要理解通讯录的实现功能,是要存储个人的一系列消息,我们可以用创建一个结构体来存储这一系列的消息,因为通讯录中不知一个人的消息,所以需要创建一个结构体数组,而对于每一个通讯录的功能需要创建函数来实现,所以,为了改变每一个结构体中存储的人员消息,我们需要传递地址,即结构体指针

1,通讯录的框架实现

#include"list.h"//引用设计的头文件
struct person//创建要存储个人的结构体
{
   string name;//姓名
   int sex;//性别
   int age;//年龄
   string phone;//手机号
   string number;//身份证号
   string address;//地址
};
struct add
{
   struct person arr[m];//用数组来存储一系列个人数据
   int size;//表明通讯录中指向的个体
}a;

//通讯录的菜单说明
void menu()
{
   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;
   a.size = 0;
   cout << "\t\t\t\t\t\t通讯录的制作" << endl;
   do//结构框架,用循环结构实现多个功能
   {
       menu();
       cin >> select;
       switch (select)
       {
       case 0:
           cout << "您已退出系统平台" << endl;
           return 0;
       case 1:
           cout << "您已进入“添加联系人”模式" << endl;
           addperson(&a,&a.size);
           a.size++;//增向通讯录放入完一组数据后,将指向往后移动一位
           break;
           cout << "您已进入“显示联系人”模式" << endl;
       case 2:
           show(&a);
           break;
       case 3:
           cout << "您已进入“删除联系人”模式" << endl;
           deleteperson(&a);
           break;
       case 4:
           cout << "您已进入“查找联系人”模式" << endl;
           found(&a);
           break;
       case 5:
           cout << "您已进入“修改联系人”模式" << endl;
           fix(&a);
           break;
       case 6:
           cout << "您已进入“清空联系人”模式" << endl;
           clean(&a);
           break;
       default:cout << "输入错误,请重新输出" << endl;
       }
   } while (select);
   return 0;
}

2,增添人员的功能实现

void addperson(struct add* a,int* p)
{
   if (a->size == m)
   {

//考虑通讯放满时候的情况
       cout << "通讯录存放已满,无法添加" << endl;
       return;
   }
   else
   {
       //姓名
       cout << "请输入姓名: ";
       cin >> a->arr[*p].name;
       //性别
       cout << "1,男\n" << "2,女" << endl;
       while (true)
       {
           cout << "请选择性别: ";
           int select;
           cin >> select;
           if (select == 1 || select == 2)
           {
               if (select == 1)
                   a->arr[*p].sex = 1;
               else
                   a->arr[*p].sex = 2;
               break;
           }
           else
               cout << "输入错误,请重新输入" << endl;
       }
       //年龄
       cout << "请输入年龄: ";
       cin >> a->arr[*p].age;
       //电话
       cout << "请输入电话: ";
       cin >> a->arr[*p].phone;
       //身份证号
       cout << "请输入身份证号: ";
       cin >> a->arr[*p].number;
       //地址
       cout << "请输入家庭地址: ";
       cin >> a->arr[*p].address;
   }
   system("pause");
   system("cls");
}

3,展示通讯录中的人员的功能

void show(struct add* a)
{

//当没有任何数据放入的时候的情况
   if (a->size == 0)
       cout << "当前没有任何记录" << endl;
   else
   {
       cout << "此时通讯录中的记录的人员如下:" << endl;
       for (int i = 0; i < a->size; i++)
       {
           cout << "姓名: " << a->arr[i].name << "   ";
           cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << "   ";
           cout << "年龄: " << a->arr[i].age << "   ";
           cout << "手机号: " << a->arr[i].phone << "   ";
           cout << "身份证号: " << a->arr[i].number << "   ";
           cout << "家庭地址: " << a->arr[i].address << endl;
       }
   }
   system("pause");
   system("cls");
}

4,删除通讯录中的指定人员的功能

int foundperson(add* a,string name1)//用此函数来查找要指定的人员
{
   for (int i = 0; i < a->size; i++)
   {
       if (a->arr[i].name == name1)
       {
           return i;
       }
   }
   return -1;//当要删除的人没有在通讯录中时此函数返回-1
}

void deleteperson(add* a)
{
   string name;
   int number;
   cout << "请输入要删除人员的姓名: ";
   cin >> name;
   number = foundperson(a, name);

//当要删除的人在通讯录中时,我们进行删除操作
   if (number != -1)
   {
       for (int i = number; i < a->size; i++)
       {
           a->arr[i] = a->arr[i + 1];
       }

//删除完时候,通讯库的记录人员的数量减少1
       a->size--;
       cout << "删除成功" << endl;
   }

//当通讯录中没有要指定删除的人的情况
   else
   {
       cout << "没有此人" << endl;
   }
   system("pause");
   system("cls");

}

5,查找通讯录中的指定人的功能

void found(add* a)
{
   int i;
   string name;
   cout << "请输入要查找人的姓名: ";
   cin >> name;
   i = foundperson(a, name);//用来查找指定的人

//与删除功能的原理一样,当存在此人的时候输出,不存在此人的时候说明
   if (i != -1)
   {
       cout << "姓名: " << a->arr[i].name << "   ";
       cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << "   ";
       cout << "年龄: " << a->arr[i].age << "   ";
       cout << "手机号: " << a->arr[i].phone << "   ";
       cout << "身份证号: " << a->arr[i].number << "   ";
       cout << "家庭地址: " << a->arr[i].address << endl;
   }
   else
   {
       cout << "没有此人" << endl;
   }
   system("pause");
   system("cls");
}

6,修改指定人的消息

void fix(add* a)
{
   int number;
   string name;
   cout << "请输入即将要修改人的名字: ";
   cin >> name;
   number = foundperson(a, name);//用此函数来查找指定的内容
   if (number != -1)
   {
       cout << "请输入将要修改成员的信息" << endl;

//用此函数进行修改,但是需注意的是,此时通讯录中的存储量是不变的
       addperson(a, &number);

       show(a);//当修改完之后我们查看一下此时通讯录的内容
   }
   else
   {
       cout << "没有此人" << endl;
       system("pause");
       system("cls");
   }
}

7,清空通讯录  

因为我们在展示通讯录时是用size所包含的数量,当将其赋与0时,就相当无法访问里面的任何数据了,进而相当于与清空了

void clean(add* a)
{
   a->size = 0;
   cout << "通讯录已全部清空" << endl;
   system("pause");
   system("cls");
}

8,用来查找指定人的序号

此函数功能是配合其他功能所使用的,当我们需要查找通讯录中的莫个人的名字是,用此函数来查找

int foundperson(add* a,string name1)//a代表通讯录,而name1代表要查找的人
{
   for (int i = 0; i < a->size; i++)
   {
       if (a->arr[i].name == name1)
       {
           return i;
       }
   }
   return -1;
}

实现通讯录功能的总代码

#include"list.h"
struct person
{
  string name;
  int sex;
  int age;
  string phone;
  string number;//身份证号
  string address;
};
struct add
{
  struct person arr[m];
  int size;
}a;
void menu()
{
  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;
}
void addperson(struct add* a,int* p)
{
  if (a->size == m)
  {
    cout << "通讯录存放已满,无法添加" << endl;
    return;
  }
  else
  {
    //姓名
    cout << "请输入姓名: ";
    cin >> a->arr[*p].name;
    //性别
    cout << "1,男\n" << "2,女" << endl;
    while (true)
    {
      cout << "请选择性别: ";
      int select;
      cin >> select;
      if (select == 1 || select == 2)
      {
        if (select == 1)
          a->arr[*p].sex = 1;
        else
          a->arr[*p].sex = 2;
        break;
      }
      else
        cout << "输入错误,请重新输入" << endl;
    }
    //年龄
    cout << "请输入年龄: ";
    cin >> a->arr[*p].age;
    //电话
    cout << "请输入电话: ";
    cin >> a->arr[*p].phone;
    //身份证号
    cout << "请输入身份证号: ";
    cin >> a->arr[*p].number;
    //地址
    cout << "请输入家庭地址: ";
    cin >> a->arr[*p].address;
  }
  system("pause");
  system("cls");
}
void show(struct add* a)
{
  if (a->size == 0)
    cout << "当前没有任何记录" << endl;
  else
  {
    cout << "此时通讯录中的记录的人员如下:" << endl;
    for (int i = 0; i < a->size; i++)
    {
      cout << "姓名: " << a->arr[i].name << "   ";
      cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << "   ";
      cout << "年龄: " << a->arr[i].age << "   ";
      cout << "手机号: " << a->arr[i].phone << "   ";
      cout << "身份证号: " << a->arr[i].number << "   ";
      cout << "家庭地址: " << a->arr[i].address << endl;
    }
  }
  system("pause");
  system("cls");
}
int foundperson(add* a,string name1)
{
  for (int i = 0; i < a->size; i++)
  {
    if (a->arr[i].name == name1)
    {
      return i;
    }
  }
  return -1;
}
void deleteperson(add* a)
{
  string name;
  int number;
  cout << "请输入要删除人员的姓名: ";
  cin >> name;
  number = foundperson(a, name);
  if (number != -1)
  {
    for (int i = number; i < a->size; i++)
    {
      a->arr[i] = a->arr[i + 1];
    }
    a->size--;
    cout << "删除成功" << endl;
  }
  else
  {
    cout << "没有此人" << endl;
  }
  system("pause");
  system("cls");
}
void found(add* a)
{
  int i;
  string name;
  cout << "请输入要查找人的姓名: ";
  cin >> name;
  i = foundperson(a, name);
  if (i != -1)
  {
    cout << "姓名: " << a->arr[i].name << "   ";
    cout << "性别: " << (a->arr[i].sex == 1 ? "男" : "女") << "   ";
    cout << "年龄: " << a->arr[i].age << "   ";
    cout << "手机号: " << a->arr[i].phone << "   ";
    cout << "身份证号: " << a->arr[i].number << "   ";
    cout << "家庭地址: " << a->arr[i].address << endl;
  }
  else
  {
    cout << "没有此人" << endl;
  }
  system("pause");
  system("cls");
}
void fix(add* a)
{
  int number;
  string name;
  cout << "请输入即将要修改人的名字: ";
  cin >> name;
  number = foundperson(a, name);
  if (number != -1)
  {
    cout << "请输入将要修改成员的信息" << endl;
    addperson(a, &number);
    show(a);
  }
  else
  {
    cout << "没有此人" << endl;
    system("pause");
    system("cls");
  }
}
void clean(add* a)
{
  a->size = 0;
  cout << "通讯录已全部清空" << endl;
  system("pause");
  system("cls");
}
int main()
{
  int select;
  a.size = 0;
  cout << "\t\t\t\t\t\t通讯录的制作" << endl;
  do
  {
    menu();
    cin >> select;
    switch (select)
    {
    case 0:
      cout << "您已退出系统平台" << endl;
      return 0;
    case 1:
      cout << "您已进入“添加联系人”模式" << endl;
      addperson(&a,&a.size);
      a.size++;
      break;
    case 2:
      cout << "您已进入“显示联系人”模式" << endl;
      show(&a);
      break;
    case 3:
      cout << "您已进入“删除联系人”模式" << endl;
      deleteperson(&a);
      break;
    case 4:
      cout << "您已进入“查找联系人”模式" << endl;
      found(&a);
      break;
    case 5:
      cout << "您已进入“修改联系人”模式" << endl;
      fix(&a);
      break;
    case 6:
      cout << "您已进入“清空联系人”模式" << endl;
      clean(&a);
      break;
    default:cout << "输入错误,请重新输出" << endl;
    }
  } while (select);
  return 0;
}
相关文章
|
18天前
|
编译器 开发工具 C++
Dev-C++详细安装教程及中文设置(附带安装包链接)
Dev-C++详细安装教程及中文设置(附带安装包链接)
166 0
|
18天前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置软件触发模式(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置软件触发模式(C++)
37 0
|
18天前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机的图像剪切(ROI)功能(C++)
31 1
|
18天前
|
存储 数据管理 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C++)
54 0
|
18天前
|
存储 数据采集 数据处理
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列(C++)
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列(C++)
39 0
|
7月前
|
存储 Cloud Native Linux
C++Qt表格控件一些常用的设置封装
C++Qt表格控件一些常用的设置封装
|
8月前
|
文件存储 C++
C/C++之分文件写静态通讯录详解(保姆级教学)
C/C++之分文件写静态通讯录详解(保姆级教学)
70 2
C/C++之分文件写静态通讯录详解(保姆级教学)
|
18天前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C++)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C++)
35 0
|
18天前
|
C++
c++实现通讯录管理系统(控制台版)
c++实现通讯录管理系统(控制台版)
|
18天前
|
Linux API C++
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
58 2