鱼C论坛

 找回密码
 立即注册
查看: 816|回复: 1

[技术交流] C++ 通讯录

[复制链接]
发表于 2020-4-12 20:51:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. /*编写调试环境VS2019*/

  2. #include <iostream>
  3. #include <string>
  4. using namespace std;
  5. const int  MAX = 100;

  6. //设计联系人结构体
  7. struct Person
  8. {
  9.         string m_Name; //姓名
  10.         int m_Sex; //性别 1 男  2 女
  11.         int m_Age;        //年龄
  12.         string m_Phone; //手机号码
  13.         string m_Address; //地址

  14. };

  15. struct Addressbooks
  16. {
  17.         struct Person personArray[MAX];        //通讯录中保存的联系人数组
  18.         int m_Size;        //通讯录当前人的个数

  19. };

  20. /*菜单界面*/
  21. void showMenu()
  22. {
  23.         cout << "***************************" << endl;
  24.         cout << "*****  1、添加联系人  *****" << endl;
  25.         cout << "*****  2、显示联系人  *****" << endl;
  26.         cout << "*****  3、删除联系人  *****" << endl;
  27.         cout << "*****  4、查找联系人  *****" << endl;
  28.         cout << "*****  5、修改联系人  *****" << endl;
  29.         cout << "*****  6、清空联系人  *****" << endl;
  30.         cout << "*****  0、退出通讯录  *****" << endl;
  31.         cout << "***************************" << endl;
  32. }

  33. // 1、添加联系人
  34. void addPerson(Addressbooks  *abs)
  35. {
  36.         //判断通讯录是否已满,如果满了就不再添加
  37.         if (abs->m_Size == MAX)
  38.         {
  39.                 cout << "通讯录已满,无法添加!" << endl;
  40.                 return;
  41.         }
  42.         else
  43.         {
  44.                 //添加具体联系人
  45.                 //姓名
  46.                 string name;
  47.                 cout << "请输入姓名:" << endl;
  48.                 cin >> name;
  49.                 abs->personArray[abs->m_Size].m_Name = name;
  50.                 //性别
  51.                 cout << "请输入性别:" << endl;
  52.                 cout << "1 --- 男" << endl;
  53.                 cout << "2 --- 女" << endl;
  54.                 int sex = 0;
  55.                 while (true)
  56.                 {
  57.                         cin >> sex; //如果输入是1或者2可以退出循环,如果有误重新输入
  58.                         if (sex == 1 || sex == 2)
  59.                         {
  60.                                 abs->personArray[abs->m_Size].m_Sex = sex;
  61.                                 break;
  62.                         }
  63.                         cout << "输入有误,请重新输入" << endl;
  64.                 }
  65.                
  66.                 //年龄
  67.                 cout << "请输入年龄: " << endl;
  68.                 int age = 0;
  69.                 while (true)
  70.                 {
  71.                         cin >> age;
  72.                         if(age > 0 && age < 100) //年龄输入必须在 0 < age < 100范围内
  73.                         {
  74.                                 abs->personArray[abs->m_Size].m_Age = age;
  75.                                 break;
  76.                         }
  77.                         cout << "年龄输入不符合实际,请重新输入" << endl;
  78.                 }
  79.                
  80.                 //电话
  81.                 cout << "请输入联系电话: " << endl;
  82.                 string phone;
  83.                 cin >> phone;
  84.                 abs->personArray[abs->m_Size].m_Phone = phone;

  85.                 //地址
  86.                 string address;
  87.                 cout << "请输入家庭住址: " << endl;
  88.                 cin >> address;
  89.                 abs->personArray[abs->m_Size].m_Address = address;
  90.                 //更新通讯录人数
  91.                 abs->m_Size++;
  92.                 cout << "添加成功" << endl;
  93.                 system("cls");                //清屏
  94.         }
  95. }

  96. // 2、显示所有联系人
  97. void showPerson(const Addressbooks* abs)
  98. {
  99.         //判断通讯录中人数是否为0,如果为0,提示记录为空
  100.         //如果不为0,显示记录的联系人信息
  101.         if (abs->m_Size == 0)
  102.         {
  103.                 cout << "当前记录为空" << endl;
  104.         }
  105.         else
  106.         {
  107.                 for (int i = 0; i < abs->m_Size; i++)
  108.                 {
  109.                         cout << "姓名: " << abs->personArray[i].m_Name << "\t";
  110.                         cout << "性别: " << (abs->personArray[i].m_Sex == 1 ? "男":"女") << "\t";
  111.                        
  112.                         cout << "年龄: " << abs->personArray[i].m_Age << "\t";
  113.                         cout << "电话: " << abs->personArray[i].m_Phone << "\t";
  114.                         cout << "住址: " << abs->personArray[i].m_Address << endl;

  115.                 }

  116.         }
  117.         system("pause");
  118.         system("cls");
  119. }

  120. //查找联系人是否存在,如果存在返回联系人具体位置,不存在返回-1
  121. //参数1 被查找的通讯录 参数2 查找的人名
  122. int isExist(Addressbooks* abs, string name)
  123. {
  124.         for (int i = 0; i < abs->m_Size; i++)
  125.         {
  126.                 if (abs->personArray[i].m_Name == name) //找到返回被查找联系人位置
  127.                         return i;
  128.         }

  129.         return -1;

  130. }

  131. //3、删除联系人
  132. void delPerson(Addressbooks* abs)
  133. {
  134.         cout << "请输入你要删除的联系人" << endl;
  135.         string name;
  136.         cin >> name;
  137.         // ret == -1 查无此人
  138.         int ret = isExist(abs, name);

  139.         if (ret != -1)
  140.         {
  141.                 for (int i = ret; i < abs->m_Size; i++)
  142.                 {
  143.                         //数据前移
  144.                         abs->personArray[i] = abs->personArray[i + 1];
  145.                 }
  146.                 abs->m_Size--; //更新通讯录人数
  147.                 cout << "删除联系人成功" << endl;
  148.         }
  149.         else
  150.         {
  151.                 cout << "查无此人,无法删除" << endl;
  152.         }
  153.                
  154.         system("pause");
  155.         system("cls");
  156. }

  157. //4、查找联系人
  158. void findPerson(Addressbooks* abs)
  159. {
  160.         cout << "请输入您要查找的联系人" << endl;
  161.         string name;
  162.         cin >> name;

  163.         //判断联系人是否存在通讯录中
  164.         int ret = isExist(abs, name);
  165.         if (ret != -1)
  166.         {
  167.                 cout << "姓名: " << abs->personArray[ret].m_Name << "\t";
  168.                 cout << "性别: " << (abs->personArray[ret].m_Sex == 1 ? "男" : "女") << "\t";
  169.                 cout << "年龄: " << abs->personArray[ret].m_Age << "\t";
  170.                 cout << "电话: " << abs->personArray[ret].m_Phone << "\t";
  171.                 cout << "住址: " << abs->personArray[ret].m_Address << endl;
  172.         }
  173.         else
  174.         {
  175.                 cout << "查无此人" << endl;
  176.         }
  177.         system("pause");
  178.         system("cls");
  179. }

  180. //5、修改联系人
  181. void modifyPerson(Addressbooks* abs)
  182. {
  183.         cout << "请输入要修改的联系人姓名:" << endl;
  184.         string name;
  185.         cin >> name;
  186.         int ret = isExist(abs, name);
  187.         if (ret != -1)
  188.         {
  189.                 string m_name;
  190.                 cout << "请输入联系人姓名:" << endl;
  191.                 cin >> m_name;
  192.                 abs->personArray[ret].m_Name = m_name;
  193.                 int m_sex;
  194.                 cout << "请输入性别:" << endl;
  195.                 cout << "1 --- 男" << endl;
  196.                 cout << "2 --- 女" << endl;
  197.                 cin >> m_sex;
  198.                 abs->personArray[ret].m_Sex = m_sex;
  199.                 cout << "请输入年龄:" << endl;
  200.                 int m_age;
  201.                 cin >> m_age;
  202.                 abs->personArray[ret].m_Age = m_age;
  203.                 string m_phone;
  204.                 cout << "请输入号码:" << endl;
  205.                 cin >> m_phone;
  206.                 abs->personArray[ret].m_Phone = m_phone;
  207.                 cout << "请输入住址:" << endl;
  208.                 string m_addres;
  209.                 cin >> m_addres;
  210.                 abs->personArray[ret].m_Address = m_addres;
  211.                 cout << "修改联系人成功!" << endl;
  212.         }
  213.         else
  214.         {
  215.                 cout << "查无此人,无法修改联系人" << endl;
  216.         }
  217.         system("pause");
  218.         system("cls");
  219. }
  220. // 6、清空联系人
  221. void cleanPerson(Addressbooks* abs)
  222. {
  223.         int flag = 0;
  224.         cout << "请再次确认是否清空通讯录!" << endl;
  225.         cout << "1 --- 确定" << endl;
  226.         cout << "2 --- 取消" << endl;
  227.        
  228.         while (true)
  229.         {
  230.                 cin >> flag;
  231.                 if (flag == 1 || flag == 2)
  232.                 {
  233.                         if (flag == 1)
  234.                         {
  235.                                 abs->m_Size = 0; //将当前联系人数量置为零
  236.                                 cout << "通讯录已经清空" << endl;
  237.                                 break;
  238.                         }
  239.                         else
  240.                         {
  241.                                 cout << "通讯录清空已取消" << endl;
  242.                                 break;
  243.                         }
  244.                 }
  245.                 else
  246.                 {
  247.                         cout << "输入非法,请重新输入1或2" << endl;
  248.                 }
  249.                
  250.         }
  251.        
  252.         system("pause");
  253.         system("cls");

  254. }

  255. int main()
  256. {
  257.         Addressbooks abs; //创建通讯录结构体变量
  258.         abs.m_Size = 0;
  259.         int select = 0; //创建用户输入的变量
  260.         while (true)
  261.         {
  262.                 showMenu(); //菜单调用
  263.                 cin >> select;

  264.                 switch (select)
  265.                 {
  266.                 case 1:        //添加联系人
  267.                         addPerson(&abs);
  268.                         break;
  269.                 case 2: //显示联系人
  270.                         showPerson(&abs);
  271.                         break;
  272.                 case 3:        //删除联系人
  273.                         delPerson(&abs);
  274.                         break;
  275.                 case 4:        //查找联系人
  276.                         findPerson(&abs);
  277.                         break;
  278.                 case 5:        //修改联系人
  279.                         modifyPerson(&abs);
  280.                         break;
  281.                 case 6:        //清空联系人
  282.                         cleanPerson(&abs);
  283.                         break;
  284.                 case 0:        //退出通讯录
  285.                         cout << "欢迎下次使用" << endl;
  286.                         return 0;
  287.                         break;
  288.                 }
  289.         }
  290.         return 0;
  291. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-14 19:22:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表