VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 2245|回复: 13

[分享] c++学习之路的点滴记录(利用基础语法)打造通讯录系统,大牛飘过

[复制链接]
13_avatar_middle
最佳答案
1 
在线会员 发表于 2021-4-7 00:04:19 | 显示全部楼层 |阅读模式
本帖最后由 小白学编程 于 2021-4-7 23:33 编辑


非常适合我这个小白练手c++学习之路的点滴记录(利用基础语法)打造通讯录系统,大牛飘过
通讯录是一个可以记录亲人、好友信息的工具。
系统中需要实现的功能如下:
* 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
* 显示联系人:显示通讯录中所有联系人信息
* 删除联系人:按照姓名进行删除指定联系人
* 查找联系人:按照姓名查看指定联系人信息
* 修改联系人:按照姓名重新修改指定联系人
* 清空联系人:清空通讯录中所有信息
* 退出通讯录:退出当前使用的通讯录

#include <iostream>
#include <string>
using namespace std;
#define  MAX  1000
1-----//设计联系人的结构体
struct Person
{
        //姓名
        string m_Name;
        //性别
        int m_Sex;
        //年龄
        int m_Age;
        //电话
        string m_Phone;
        //住址
        string m_Addr;
};
2----------//设计通讯录的结构体
struct Addressbooks
{
        //通讯录中保存的联系人数组
        struct Person personArray[MAX];
        //通讯录中当前联系人个数
        int m_Size;
};

3------//添加联系人
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");//清空屏幕
        }
}

4-----//显示所有联系人
void showPerson(Addressbooks * abs)
{
        //判断通讯录中人数是否为0
        if (abs->m_Size==0)
        {
                cout << "当前记录为空" << endl;
        }
        else
        {
                for (int i=0;i<abs->m_Size;i++)
                {
                        //姓名
                        cout << "姓名" << abs->personArray.m_Name << "\t";
                        //年龄
                        cout << "年龄" << abs->personArray.m_Age << "\t";
                        //性别
                        cout << "性别" << (abs->personArray.m_Sex==1?"男":"女")<<"\t";
                        //电话
                        cout << "电话" << abs->personArray.m_Phone << "\t";
                        //住址
                        cout << "住址" << abs->personArray.m_Addr << endl;
                }
        }
        system("pause");
        system("cls");
}

5------//检测联系人是否存在,如果存在,返回联系人所在的数组中的具体位置,不存在返回-1
int isExist(Addressbooks * abs, string name)
{
        for (int i = 0; i < abs->m_Size; i++)
        {
                //找到用户输入的姓名了
                if (abs->personArray.m_Name==name)
                {
                        return i;
                }
        }
        return -1; //如果遍历结束都没有找到,返回-1
}

6-------//删除指定联系人
void deletePerson(Addressbooks * abs)
{
        cout << "请输入你要删除的联系人" << endl;
        string name;
        cin >> name;
        //ret==-1未查到
        //ret!=1查到了
        int ret = isExist(abs, name);
        if (ret != -1)
        {
                for (int i=ret;i<abs->m_Size;i++)
                {
                        abs->personArray = abs->personArray[i + 1];
                }
                abs->m_Size--; //更新通讯录的人员数
        }
        else
        {
                cout << "查无此人" << endl;
        }
}

7--------//查找指定联系人信息
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 << "\t";
                //年龄
                cout << "年龄" << abs->personArray[ret].m_Age << "\t";
                //电话
                cout << "电话" << abs->personArray[ret].m_Phone << "\t";
                //住址
                cout << "住址" << abs->personArray[ret].m_Addr << "\t";
        }
        else
        {
                cout << "查无此人" << endl;
        }
        system("pause");
        system("cls");
}

8------------//修改指定联系人信息
void modifyPerson(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;
                //性别
                cout << "请输入性别" << endl;
                cout << "1---男" << endl;
                cout << "2---女" << endl;
                int sex = 0;

                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;
                cout << "修改成功" << endl;
        }
        else
        {
                cout << "查无此人" << endl;
        }
        system("pause");
        system("cls");
}

9----------------//清空所有联系人
void cleanPerson(Addressbooks *abs)
{
        abs->m_Size = 0;
        cout << "通讯录已清空" << endl;
        system("pause");
        system("cls");
}

10------------void showMoun()
{
        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)
        {
                showMoun();  //调用菜单
                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.修改联系人
                        modifyPerson(&abs);
                        break;
                case 6:   //6.清空通讯录
                        cleanPerson(&abs);
                        break;
                case 0:   //0.退出通讯录
                        cout << "欢迎下次使用" << endl;
                        system("pause");
                        system("cls");
                        return 0;
                default:
                        break;
                }
        }
        system("pause");
        return 0;
}

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 学习了

查看全部评分





上一篇:一起跟我学习c++之路的点点滴滴,从入门学到废
下一篇:VS2010怎么打开高版本工程或解决方案
70_avatar_middle
最佳答案
49 
在线会员 发表于 2021-4-7 08:49:30 | 显示全部楼层
很赞,不过能不能把代码放到代码块里呢,这么多代码看着怪别扭的,看一眼直接失去耐心了c++学习之路的点滴记录(利用基础语法)打造通讯录系统,大牛飘过
96_avatar_middle
最佳答案
0 
donate_vip 发表于 2021-4-7 08:57:22 | 显示全部楼层
运行报错,
13_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2021-4-7 23:35:12 | 显示全部楼层
tony666 发表于 2021-4-7 08:49
很赞,不过能不能把代码放到代码块里呢,这么多代码看着怪别扭的,看一眼直接失去耐心了

怎么编辑,不会啊   怎么放代码块??  我想图片和代码编辑搞不清楚怎么弄   上传一张图片看不到
70_avatar_middle
最佳答案
49 
在线会员 发表于 2021-4-8 08:56:18 | 显示全部楼层
本帖最后由 tony666 于 2021-4-8 08:57 编辑
小白学编程 发表于 2021-4-7 23:35
怎么编辑,不会啊   怎么放代码块??  我想图片和代码编辑搞不清楚怎么弄   上传一张图片看不到


编辑里的 <>就是  ,
c++学习之路的点滴记录(利用基础语法)打造通讯录系统,大牛飘过

图片上传之后 需要再点一下
c++学习之路的点滴记录(利用基础语法)打造通讯录系统,大牛飘过
13_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2021-4-8 16:11:08 | 显示全部楼层
tony666 发表于 2021-4-8 08:56
编辑里的 就是  ,

c++学习之路的点滴记录(利用基础语法)打造通讯录系统,大牛飘过非常感谢你指导 学会编辑了
37_avatar_middle
最佳答案
1 
在线会员 发表于 2021-4-8 16:39:34 | 显示全部楼层
学习了return 0;
70_avatar_middle
最佳答案
49 
在线会员 发表于 2021-4-9 08:39:55 | 显示全部楼层
小白学编程 发表于 2021-4-8 16:11
非常感谢你指导 学会编辑了

感谢分享这么多东西c++学习之路的点滴记录(利用基础语法)打造通讯录系统,大牛飘过
45_avatar_middle
最佳答案
0 
在线会员 发表于 2022-5-19 22:28:33 | 显示全部楼层
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. #define  MAX  1000

  5. /**
  6. 实现的功能
  7. * 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  8. * 显示联系人:显示通讯录中所有联系人信息
  9. * 删除联系人:按照姓名进行删除指定联系人
  10. * 查找联系人:按照姓名查看指定联系人信息
  11. * 修改联系人:按照姓名重新修改指定联系人
  12. * 清空联系人:清空通讯录中所有信息
  13. * 退出通讯录:退出当前使用的通讯录  **/

  14. //1---- -设计联系人的结构体
  15. struct Person
  16. {
  17.         //姓名
  18.         string m_Name;
  19.         //性别
  20.         int m_Sex;
  21.         //年龄
  22.         int m_Age;
  23.         //电话
  24.         string m_Phone;
  25.         //住址
  26.         string m_Addr;
  27. };
  28. //2----------设计通讯录的结构体
  29. struct Addressbooks
  30. {
  31.         //通讯录中保存的联系人数组
  32.         struct Person personArray[MAX];
  33.         //通讯录中当前联系人个数
  34.         int m_Size;
  35. };

  36. //3------添加联系人
  37. void addPerson(Addressbooks *abs)
  38. {
  39.         //判断通讯录是否已满,满了就不在添加
  40.         if (abs->m_Size == MAX)
  41.         {
  42.                 cout << "通讯录已满,无法添加" << endl;
  43.                 return;
  44.         }
  45.         else
  46.         {
  47.                 //姓名
  48.                 string name;
  49.                 cout << "请输入姓名:" << endl;
  50.                 cin >> name;
  51.                 abs->personArray[abs->m_Size].m_Name = name;
  52.                 //性别
  53.                 cout << "请输入性别:" << endl;
  54.                 cout << "1-----男" << endl;
  55.                 cout << "2-----女:" << endl;
  56.                 int sex = 0;

  57.                 while (true)
  58.                 {
  59.                         cin >> sex;
  60.                         if (sex == 1 || sex == 2)
  61.                         {
  62.                                 abs->personArray[abs->m_Size].m_Sex = sex;
  63.                                 break;
  64.                         }
  65.                         cout << "输入有误,请重新输入" << endl;
  66.                 }

  67.                 //年龄
  68.                 cout << "请输入年龄:" << endl;
  69.                 int age = 0;
  70.                 cin >> age;
  71.                 abs->personArray[abs->m_Size].m_Age = age;
  72.                 //电话
  73.                 cout << "请输入电话:" << endl;
  74.                 string phone;
  75.                 cin >> phone;
  76.                 abs->personArray[abs->m_Size].m_Phone = phone;
  77.                 //住址
  78.                 cout << "请输入住址:" << endl;
  79.                 string address;
  80.                 cin >> address;
  81.                 abs->personArray[abs->m_Size].m_Addr = address;
  82.                 //更新通讯录人数
  83.                 abs->m_Size++;
  84.                 cout << "添加成功" << endl;
  85.                 system("pause");
  86.                 system("CLS");//清空屏幕
  87.         }
  88. }

  89. //4---- -显示所有联系人
  90. void showPerson(Addressbooks *abs)
  91. {
  92.         //判断通讯录中人数是否为0
  93.         if (abs->m_Size == 0)
  94.         {
  95.                 cout << "当前记录为空" << endl;
  96.         }
  97.         else
  98.         {
  99.                 for (int i = 0; i < abs->m_Size; i++)
  100.                 {
  101.                         //姓名
  102.                         cout << "姓名" << abs->personArray[i].m_Name << "\t";
  103.                         //年龄
  104.                         cout << "年龄" << abs->personArray[i].m_Age << "\t";
  105.                         //性别
  106.                         cout << "性别" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
  107.                         //电话
  108.                         cout << "电话" << abs->personArray[i].m_Phone << "\t";
  109.                         //住址
  110.                         cout << "住址" << abs->personArray[i].m_Addr << endl;
  111.                 }
  112.         }
  113.         system("pause");
  114.         system("CLS");
  115. }

  116. //5------检测联系人是否存在,如果存在,返回联系人所在的数组中的具体位置,不存在返回-1
  117. int isExist(Addressbooks * abs, string name)
  118. {
  119.         for (int i = 0; i < abs->m_Size; i++)
  120.         {
  121.                 //找到用户输入的姓名了
  122.                 if (abs->personArray[i].m_Name == name)
  123.                 {
  124.                         return i;
  125.                 }
  126.         }
  127.         return -1; //如果遍历结束都没有找到,返回-1
  128. }

  129. //6------ -删除指定联系人
  130. void deletePerson(Addressbooks * abs)
  131. {
  132.         cout << "请输入你要删除的联系人" << endl;
  133.         string name;
  134.         cin >> name;
  135.         //ret==-1未查到
  136.         //ret!=1查到了
  137.         int ret = isExist(abs, name);
  138.         if (ret != -1)
  139.         {
  140.                 for (int i = ret; i < abs->m_Size; i++)
  141.                 {
  142.                         abs->personArray[i] = abs->personArray[i + 1];
  143.                 }
  144.                 abs->m_Size--; //更新通讯录的人员数
  145.         }
  146.         else
  147.         {
  148.                 cout << "查无此人" << endl;
  149.         }
  150. }

  151. //7--------查找指定联系人信息
  152. void findPerson(Addressbooks * abs)
  153. {
  154.         cout << "请输入你要查找的联系人" << endl;
  155.         string name;
  156.         cin >> name;
  157.         //判断指定的联系人是否在通讯录中
  158.         int ret = isExist(abs, name);
  159.         if (ret != -1)
  160.         {
  161.                 //姓名
  162.                 cout << "姓名" << abs->personArray[ret].m_Name << "\t";
  163.                 //性别
  164.                 cout << "性别" << abs->personArray[ret].m_Sex << "\t";
  165.                 //年龄
  166.                 cout << "年龄" << abs->personArray[ret].m_Age << "\t";
  167.                 //电话
  168.                 cout << "电话" << abs->personArray[ret].m_Phone << "\t";
  169.                 //住址
  170.                 cout << "住址" << abs->personArray[ret].m_Addr << "\t";
  171.         }
  172.         else
  173.         {
  174.                 cout << "查无此人" << endl;
  175.         }
  176.         system("pause");
  177.         system("CLS");
  178. }

  179. //8------------修改指定联系人信息
  180. void modifyPerson(Addressbooks * abs)
  181. {
  182.         cout << "请输入你要修改的联系人" << endl;
  183.         string name;
  184.         cin >> name;
  185.         int ret = isExist(abs, name);
  186.         if (ret != -1)
  187.         {
  188.                 //姓名
  189.                 string  name;
  190.                 cout << "请输入姓名" << endl;
  191.                 cin >> name;
  192.                 abs->personArray[ret].m_Name = name;
  193.                 //性别
  194.                 cout << "请输入性别" << endl;
  195.                 cout << "1---男" << endl;
  196.                 cout << "2---女" << endl;
  197.                 int sex = 0;

  198.                 while (true)
  199.                 {
  200.                         cin >> sex;
  201.                         if (sex == 1 || sex == 2)
  202.                         {
  203.                                 abs->personArray[ret].m_Sex = sex;
  204.                                 break;
  205.                         }
  206.                         cout << "输入有误,请重新输入" << endl;
  207.                 }
  208.                 //年龄
  209.                 cout << "请输入年龄" << endl;
  210.                 int age = 0;
  211.                 cin >> age;
  212.                 abs->personArray[ret].m_Age = age;
  213.                 //电话
  214.                 cout << "请输入电话" << endl;
  215.                 string phone;
  216.                 cin >> phone;
  217.                 abs->personArray[ret].m_Phone = phone;
  218.                 //住址
  219.                 cout << "请输入住址" << endl;
  220.                 string address;
  221.                 cin >> address;
  222.                 abs->personArray[ret].m_Addr = address;
  223.                 cout << "修改成功" << endl;
  224.         }
  225.         else
  226.         {
  227.                 cout << "查无此人" << endl;
  228.         }
  229.         system("pause");
  230.         system("CLS");
  231. }

  232. //9----------------清空所有联系人
  233. void cleanPerson(Addressbooks *abs)
  234. {
  235.         abs->m_Size = 0;
  236.         cout << "通讯录已清空" << endl;
  237.         system("pause");
  238.         system("CLS");
  239. }

  240. //10------------
  241. void showMoun()
  242. {
  243.         cout << "**************************" << endl;
  244.         cout << "*****  1.添加联系人  *****" << endl;
  245.         cout << "*****  2.显示联系人  *****" << endl;
  246.         cout << "*****  3.删除联系人  *****" << endl;
  247.         cout << "*****  4.查找联系人  *****" << endl;
  248.         cout << "*****  5.修改联系人  *****" << endl;
  249.         cout << "*****  6.清空联系人  *****" << endl;
  250.         cout << "*****  0.退出通讯录  *****" << endl;
  251.         cout << "**************************" << endl;
  252. }

  253. int main()
  254. {
  255.         //创建通讯录结构体变量
  256.         Addressbooks abs;
  257.         //初始化通讯录中当前人员个数
  258.         abs.m_Size = 0;
  259.         int select = 0; //用户选择输入的变量


  260.         while (true)
  261.         {
  262.                 showMoun();  //调用菜单
  263.                 cin >> select;
  264.                 switch (select)
  265.                 {
  266.                 case 1:  //1.添加联系人
  267.                         addPerson(&abs);
  268.                         break;
  269.                 case 2:   //2.显示联系人
  270.                         showPerson(&abs);
  271.                         break;
  272.                 case 3:   //3.删除联系人
  273.                         deletePerson(&abs);
  274.                         break;
  275.                 case 4:   //4.查找联系人
  276.                         findPerson(&abs);
  277.                         break;
  278.                 case 5:   //5.修改联系人
  279.                         modifyPerson(&abs);
  280.                         break;
  281.                 case 6:   //6.清空通讯录
  282.                         cleanPerson(&abs);
  283.                         break;
  284.                 case 0:   //0.退出通讯录
  285.                         cout << "欢迎下次使用" << endl;
  286.                         system("pause");
  287.                         system("CLS");
  288.                         return 0;
  289.                 default:
  290.                         break;
  291.                 }
  292.         }
  293.         system("pause");
  294.         return 0;
  295. }
复制代码
92_avatar_middle
最佳答案
0 
在线会员 发表于 2022-6-21 23:11:38 | 显示全部楼层
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
79_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-19 21:17:57 | 显示全部楼层

你改写的很好,在程序里我也改好了;删除那段可以用最后一个覆盖前面的一个;
  1. /*for (int i=ret;i<abs->m_Size;i++)
  2.                         {
  3.                                 abs->personArray[i] = abs->personArray[i + 1];

  4.                         }*/
  5.                         int de1=abs->m_Size-1;
  6.                         abs->personArray[ret]=abs->personArray[de1];
复制代码
79_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-19 21:20:42 | 显示全部楼层
这个练习没有保存到文件上,下一步就是保存到文件上;
79_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-24 17:09:37 | 显示全部楼层
把写入文件的程序写了,但是有问题,程序退出的时候发生崩溃
  1. #include "StdAfx.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <fstream>
  5. using namespace std;
  6. #define  MAX  1000

  7. /**
  8. 实现的功能
  9. * 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人
  10. * 显示联系人:显示通讯录中所有联系人信息
  11. * 删除联系人:按照姓名进行删除指定联系人
  12. * 查找联系人:按照姓名查看指定联系人信息
  13. * 修改联系人:按照姓名重新修改指定联系人
  14. * 清空联系人:清空通讯录中所有信息
  15. * 退出通讯录:退出当前使用的通讯录  **/

  16. //1---- -设计联系人的结构体
  17. struct Person
  18. {
  19.         //姓名
  20.         string m_Name;
  21.         //性别
  22.         int m_Sex;
  23.         //年龄
  24.         int m_Age;
  25.         //电话
  26.         string m_Phone;
  27.         //住址
  28.         string m_Addr;
  29. };
  30. //2----------设计通讯录的结构体
  31. struct Addressbooks
  32. {
  33.         //通讯录中保存的联系人数组
  34.         struct Person personArray[MAX];
  35.         //通讯录中当前联系人个数
  36.         int m_Size;
  37. };

  38. //3------添加联系人
  39. void addPerson(Addressbooks *abs)
  40. {
  41.         //判断通讯录是否已满,满了就不在添加
  42.         if (abs->m_Size == MAX)
  43.         {
  44.                 cout << "通讯录已满,无法添加" << endl;
  45.                 return;
  46.         }
  47.         else
  48.         {
  49.                 //姓名
  50.                 string name;
  51.                 cout << "请输入姓名:" << endl;
  52.                 cin >> name;
  53.                 abs->personArray[abs->m_Size].m_Name = name;
  54.                 //性别
  55.                 cout << "请输入性别:" << endl;
  56.                 cout << "1-----男" << endl;
  57.                 cout << "2-----女:" << endl;
  58.                 int sex = 0;

  59.                 while (true)
  60.                 {
  61.                         cin >> sex;
  62.                         if (sex == 1 || sex == 2)
  63.                         {
  64.                                 abs->personArray[abs->m_Size].m_Sex = sex;
  65.                                 break;
  66.                         }
  67.                         cout << "输入有误,请重新输入" << endl;
  68.                 }

  69.                 //年龄
  70.                 cout << "请输入年龄:" << endl;
  71.                 int age = 0;
  72.                 cin >> age;
  73.                 abs->personArray[abs->m_Size].m_Age = age;
  74.                 //电话
  75.                 cout << "请输入电话:" << endl;
  76.                 string phone;
  77.                 cin >> phone;
  78.                 abs->personArray[abs->m_Size].m_Phone = phone;
  79.                 //住址
  80.                 cout << "请输入住址:" << endl;
  81.                 string address;
  82.                 cin >> address;
  83.                 abs->personArray[abs->m_Size].m_Addr = address;
  84.                 //更新通讯录人数
  85.                 abs->m_Size++;
  86.                 cout << "添加成功" << endl;
  87.                 system("pause");
  88.                 system("CLS");//清空屏幕
  89.         }
  90. }

  91. //4---- -显示所有联系人
  92. void showPerson(Addressbooks *abs)
  93. {
  94.         //判断通讯录中人数是否为0
  95.         if (abs->m_Size == 0)
  96.         {
  97.                 cout << "当前记录为空" << endl;
  98.         }
  99.         else
  100.         {
  101.                 for (int i = 0; i < abs->m_Size; i++)
  102.                 {
  103.                         //姓名
  104.                         cout << "姓名" << abs->personArray[i].m_Name << "\t";
  105.                         //年龄
  106.                         cout << "年龄" << abs->personArray[i].m_Age << "\t";
  107.                         //性别
  108.                         cout << "性别" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t";
  109.                         //电话
  110.                         cout << "电话" << abs->personArray[i].m_Phone << "\t";
  111.                         //住址
  112.                         cout << "住址" << abs->personArray[i].m_Addr << endl;
  113.                 }
  114.         }
  115.         system("pause");
  116.         system("CLS");
  117. }

  118. //5------检测联系人是否存在,如果存在,返回联系人所在的数组中的具体位置,不存在返回-1
  119. int isExist(Addressbooks * abs, string name)
  120. {
  121.         for (int i = 0; i < abs->m_Size; i++)
  122.         {
  123.                 //找到用户输入的姓名了
  124.                 if (abs->personArray[i].m_Name == name)
  125.                 {
  126.                         return i;
  127.                 }
  128.         }
  129.         return -1; //如果遍历结束都没有找到,返回-1
  130. }

  131. //6------ -删除指定联系人
  132. void deletePerson(Addressbooks * abs)
  133. {
  134.         cout << "请输入你要删除的联系人" << endl;
  135.         string name;
  136.         cin >> name;
  137.         //ret==-1未查到
  138.         //ret!=1查到了
  139.         int ret = isExist(abs, name);
  140.         if (ret != -1)
  141.         {
  142.                 for (int i = ret; i < abs->m_Size; i++)
  143.                 {
  144.                         abs->personArray[i] = abs->personArray[i + 1];
  145.                 }
  146.                 abs->m_Size--; //更新通讯录的人员数
  147.         }
  148.         else
  149.         {
  150.                 cout << "查无此人" << endl;
  151.         }
  152. }

  153. //7--------查找指定联系人信息
  154. void findPerson(Addressbooks * abs)
  155. {
  156.         cout << "请输入你要查找的联系人" << endl;
  157.         string name;
  158.         cin >> name;
  159.         //判断指定的联系人是否在通讯录中
  160.         int ret = isExist(abs, name);
  161.         if (ret != -1)
  162.         {
  163.                 //姓名
  164.                 cout << "姓名" << abs->personArray[ret].m_Name << "\t";
  165.                 //性别
  166.                 cout << "性别" << abs->personArray[ret].m_Sex << "\t";
  167.                 //年龄
  168.                 cout << "年龄" << abs->personArray[ret].m_Age << "\t";
  169.                 //电话
  170.                 cout << "电话" << abs->personArray[ret].m_Phone << "\t";
  171.                 //住址
  172.                 cout << "住址" << abs->personArray[ret].m_Addr << "\t";
  173.         }
  174.         else
  175.         {
  176.                 cout << "查无此人" << endl;
  177.         }
  178.         system("pause");
  179.         system("CLS");
  180. }

  181. //8------------修改指定联系人信息
  182. void modifyPerson(Addressbooks * abs)
  183. {
  184.         cout << "请输入你要修改的联系人" << endl;
  185.         string name;
  186.         cin >> name;
  187.         int ret = isExist(abs, name);
  188.         if (ret != -1)
  189.         {
  190.                 //姓名
  191.                 string  name;
  192.                 cout << "请输入姓名" << endl;
  193.                 cin >> name;
  194.                 abs->personArray[ret].m_Name = name;
  195.                 //性别
  196.                 cout << "请输入性别" << endl;
  197.                 cout << "1---男" << endl;
  198.                 cout << "2---女" << endl;
  199.                 int sex = 0;

  200.                 while (true)
  201.                 {
  202.                         cin >> sex;
  203.                         if (sex == 1 || sex == 2)
  204.                         {
  205.                                 abs->personArray[ret].m_Sex = sex;
  206.                                 break;
  207.                         }
  208.                         cout << "输入有误,请重新输入" << endl;
  209.                 }
  210.                 //年龄
  211.                 cout << "请输入年龄" << endl;
  212.                 int age = 0;
  213.                 cin >> age;
  214.                 abs->personArray[ret].m_Age = age;
  215.                 //电话
  216.                 cout << "请输入电话" << endl;
  217.                 string phone;
  218.                 cin >> phone;
  219.                 abs->personArray[ret].m_Phone = phone;
  220.                 //住址
  221.                 cout << "请输入住址" << endl;
  222.                 string address;
  223.                 cin >> address;
  224.                 abs->personArray[ret].m_Addr = address;
  225.                 cout << "修改成功" << endl;
  226.         }
  227.         else
  228.         {
  229.                 cout << "查无此人" << endl;
  230.         }
  231.         system("pause");
  232.         system("CLS");
  233. }

  234. //9----------------清空所有联系人
  235. void cleanPerson(Addressbooks *abs)
  236. {
  237.         abs->m_Size = 0;
  238.         cout << "通讯录已清空" << endl;
  239.         system("pause");
  240.         system("CLS");
  241. }

  242. //10------------
  243. void showMoun()
  244. {
  245.         cout << "**************************" << endl;
  246.         cout << "*****  1.添加联系人  *****" << endl;
  247.         cout << "*****  2.显示联系人  *****" << endl;
  248.         cout << "*****  3.删除联系人  *****" << endl;
  249.         cout << "*****  4.查找联系人  *****" << endl;
  250.         cout << "*****  5.修改联系人  *****" << endl;
  251.         cout << "*****  6.清空联系人  *****" << endl;
  252.         cout << "*****  0.退出通讯录  *****" << endl;
  253.         cout << "**************************" << endl;
  254. }

  255. int main()
  256. {
  257.         //创建通讯录结构体变量
  258.         Addressbooks abs;
  259.        
  260.         ifstream ifa;
  261.         ifa.open("d:\\通讯录.data",ios::in|ios::binary);
  262.         if(ifa.is_open())      //如果打开文件成功查看是否是空文件
  263.         {
  264.       ifa.seekg(0,ios::end);//把文件指针指到文件末尾;
  265.           streampos ps=ifa.tellg();//用tellg函数返回一个值,这个值存放在streampos类的ps对象里;
  266.           ifa.seekg(0,0);          //文件指针重新返回首部
  267.        
  268.           if (ps)         //如果长度不是零
  269.           {
  270.          ifa.read((char *)&abs,sizeof(abs));//把数据读入ifa;
  271.              ifa.close();                        //关闭文件;
  272.           }
  273.         }
  274.         else//否则认为是首次
  275.        
  276.    
  277.         abs.m_Size = 0;//初始化通讯录中当前人员个数
  278.        
  279.         int select = 0; //初始化用户选择输入的变量
  280.         ofstream ofa;   //定义一个用于输出的文件对象;
  281.         while (true)
  282.         {
  283.                 showMoun();  //调用菜单
  284.                 cin >> select;
  285.                 switch (select)
  286.                 {
  287.                 case 1:  //1.添加联系人
  288.                         addPerson(&abs);
  289.                         break;
  290.                 case 2:   //2.显示联系人
  291.                         showPerson(&abs);
  292.                         break;
  293.                 case 3:   //3.删除联系人
  294.                         deletePerson(&abs);
  295.                         break;
  296.                 case 4:   //4.查找联系人
  297.                         findPerson(&abs);
  298.                         break;
  299.                 case 5:   //5.修改联系人
  300.                         modifyPerson(&abs);
  301.                         break;
  302.                 case 6:   //6.清空通讯录
  303.                         cleanPerson(&abs);
  304.                         break;
  305.                 case 0:   //0.退出通讯录
  306.                         cout << "欢迎下次使用" << endl;
  307.                         ofa.open("d:\\通讯录.data",ios::out|ios::binary);//先把内容存入文件再退出;
  308.                         ofa.write((const char *)&abs,sizeof(abs));       //把对象abs写入二进制文件;
  309.                         ofa.close();                                     //关闭文件;
  310.                        
  311.                         system("CLS");
  312.                        
  313.                         return 0;
  314.                        
  315.                 default:
  316.                         break;
  317.                 }
  318.         }
  319.        
  320.        
  321. }
复制代码
,请大家看看为了啥?
79_avatar_middle
最佳答案
0 
在线会员 发表于 2022-7-25 23:17:57 | 显示全部楼层
改好了可以存到硬盘上了,不崩溃了;
  1. // 引用.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "StdAfx.h"
  4. #include <iostream>
  5. #include <fstream>
  6. using std::string;
  7. using namespace std;
  8. #define  MAX  20//先定一个小的本子存20人;
  9. //定义联系人结构
  10. struct Person  //结构名称为Person;
  11. {   //姓名用64个字节
  12.         char m_Name[64];
  13.         //性别用整数
  14.         int m_Sex;
  15.         //年龄用整数
  16.         int m_Age;
  17.         //电话号码用20字节char数组
  18.         char m_Phone[20];
  19.         //地址用128字节char数组
  20.         char m_Addr[128];
  21. };//记得加分号;
  22. //以下定义记录本结构
  23. struct bk
  24. {        //第一个元素是person结构类型的数组;
  25.         struct Person perArr[MAX];
  26.         //记录本里的序列号;
  27.         int m_Size;

  28. };//记得加分号;

  29. struct bk book;//定义一个记录本类型的变量用来存储真实数据;

  30. /****************************************************************
  31. //自己写的拷贝函数用来进行字符串拷贝
  32. target是目标char数组,source是源char字符串;
  33. ******************************************************************/
  34. void mycpy(char *target, const char *source)
  35. {
  36.         if ( source == NULL) //如果是空字符串就没必要拷贝了;
  37.         {
  38.                 return ;
  39.         }

  40.         int i = 0;       //定义一个整型变量用来当下标;
  41.         while (source[i] != '\0')//从第零个下标指示的源数组开始拷贝直到出现\0
  42.         {
  43.                 target[i] = source[i];//逐个字节拷贝;
  44.                 i++;                   //下标自增;
  45.         }
  46.         target[i] = '\0';//\0没有拷贝走,最后往目标数组最后补充\0代表字符串结尾;

  47. }
  48. //3------添加联系人
  49. void addPerson()
  50. {
  51.         //判断通讯录是否已满,满了就不再添加
  52.         if (book.m_Size == MAX)
  53.         {
  54.                 cout << "通讯录已满,无法添加" << endl;
  55.                 return;
  56.         }
  57.         else
  58.         {
  59.                 //姓名
  60.                 char name[64];
  61.                 cout << "请输入姓名:" << endl;
  62.                 cin >> name;//键盘输入字符串存入name[]char 数组;
  63.                 //用自己写的拷贝函数逐字节地把输入的字节考入结构体内的数组;
  64.                 mycpy(book.perArr[book.m_Size].m_Name , name);
  65.                 //性别
  66.                 cout << "请输入性别:" << endl;
  67.                 cout << "1-----男" << endl;
  68.                 cout << "2-----女:" << endl;
  69.                 int sex = 0;

  70.                 while (true)
  71.                 {
  72.                         cin >> sex;
  73.                         if (sex == 1 || sex == 2)
  74.                         {
  75.                                 book.perArr[book.m_Size].m_Sex = sex;
  76.                                 break;
  77.                         }
  78.                         cout << "输入有误,请重新输入" << endl;
  79.                 }

  80.                 //年龄
  81.                 cout << "请输入年龄:" << endl;
  82.                 int age = 0;
  83.                 cin >> age;
  84.                 book.perArr[book.m_Size].m_Age = age;
  85.                 //电话
  86.                 cout << "请输入电话:" << endl;
  87.                 char phone[20];
  88.                 cin >> phone;
  89.                 ////用自己写的拷贝函数逐字节地把输入的字节考入结构体内的数组;
  90.                 mycpy(book.perArr[book.m_Size].m_Phone, phone);
  91.                 //住址
  92.                 cout << "请输入住址:" << endl;
  93.                 char  address[128];
  94.                 cin >> address;
  95.                 //用自己写的拷贝函数逐字节地把输入的字节考入结构体内的数组;
  96.                 mycpy(book.perArr[book.m_Size].m_Addr ,address);
  97.                 //更新通讯录人数
  98.                 book.m_Size++;
  99.                 cout << "添加成功" << endl;
  100.                 system("pause");
  101.                 system("CLS");//清空屏幕
  102.         }
  103. }
  104. //4---- -显示所有联系人
  105. void showPerson()
  106. {
  107.         //判断通讯录中人数是否为0
  108.         if (book.m_Size == 0)
  109.         {
  110.                 cout << "当前记录为空" << endl;
  111.         }
  112.         else
  113.         {
  114.                 for (int i = 0; i < book.m_Size; i++)
  115.                 {
  116.                         //姓名
  117.                         cout << "姓名" << book.perArr[i].m_Name << "\t";
  118.                         //年龄
  119.                         cout << "年龄" << book.perArr[i].m_Age << "\t";
  120.                         //性别
  121.                         cout << "性别" << (book.perArr[i].m_Sex == 1 ? "男" : "女") << "\t";
  122.                         //电话
  123.                         cout << "电话" << book.perArr[i].m_Phone << "\t";
  124.                         //住址
  125.                         cout << "住址" << book.perArr[i].m_Addr << endl;
  126.                 }
  127.         }
  128.         system("pause");
  129.         system("CLS");
  130. }
  131. //5------检测联系人是否存在,如果存在,返回联系人所在的数组中的具体位置,不存在返回-1
  132. int isExist(char name[64])
  133. {
  134.         for (int i = 0; i < book.m_Size; i++)
  135.         {
  136.                 //找到用户输入的姓名了
  137.                 //用字符比较函数strcmp比较两个字符串里的内容是否相同,相同返回0;所以取反;
  138.                 if(!( strcmp(book.perArr[i].m_Name , name)))
  139.                 {
  140.                         return i;//若相同返回下表号;
  141.                 }
  142.         }
  143.         return -1; //如果遍历结束都没有找到,返回-1
  144. }

  145. //6------ -删除指定联系人
  146. void deletePerson()
  147. {
  148.         cout << "请输入你要删除的联系人" << endl;
  149.         char  name[64];
  150.         cin >> name;
  151.         //ret==-1未查到
  152.         //ret!=1查到了
  153.         int ret = isExist( name);
  154.         if (ret != -1)
  155.         {   //这里写得罗嗦了,直接用最后一个覆盖被删除的比这个快;
  156.                 for (int i = ret; i < book.m_Size; i++)
  157.                 {
  158.                         book.perArr[i] = book.perArr[i + 1];
  159.                 }
  160.                 book.m_Size--; //更新通讯录的人员数
  161.         }
  162.         else
  163.         {
  164.                 cout << "查无此人" << endl;
  165.         }
  166. }

  167. //7--------查找指定联系人信息
  168. void findPerson()
  169. {
  170.         cout << "请输入你要查找的联系人" << endl;
  171.         char name[64];
  172.         cin >> name;
  173.         //判断指定的联系人是否在通讯录中
  174.         int ret = isExist(name);
  175.         if (ret != -1)
  176.         {
  177.                 //姓名
  178.                 cout << "姓名" << book.perArr[ret].m_Name << "\t";
  179.                 //性别
  180.                 cout << "性别" << book.perArr[ret].m_Sex << "\t";
  181.                 //年龄
  182.                 cout << "年龄" << book.perArr[ret].m_Age << "\t";
  183.                 //电话
  184.                 cout << "电话" << book.perArr[ret].m_Phone << "\t";
  185.                 //住址
  186.                 cout << "住址" << book.perArr[ret].m_Addr << "\t";
  187.         }
  188.         else
  189.         {
  190.                 cout << "查无此人" << endl;
  191.         }
  192.         system("pause");
  193.         system("CLS");
  194. }
  195. //8------------修改指定联系人信息
  196. void modifyPerson()
  197. {
  198.         cout << "请输入你要修改的联系人" << endl;
  199.         char name[64];
  200.         cin >> name;
  201.         int ret = isExist(name);
  202.         if (ret != -1)
  203.         {
  204.                 //姓名
  205.                 char  name[64];
  206.                 cout << "请输入姓名" << endl;
  207.                 cin >> name;
  208.                 mycpy(book.perArr[ret].m_Name , name);
  209.                 //性别
  210.                 cout << "请输入性别" << endl;
  211.                 cout << "1---男" << endl;
  212.                 cout << "2---女" << endl;
  213.                 int sex = 0;

  214.                 while (true)
  215.                 {
  216.                         cin >> sex;
  217.                         if (sex == 1 || sex == 2)
  218.                         {
  219.                                 book.perArr[ret].m_Sex = sex;
  220.                                 break;
  221.                         }
  222.                         cout << "输入有误,请重新输入" << endl;
  223.                 }
  224.                 //年龄
  225.                 cout << "请输入年龄" << endl;
  226.                 int age = 0;
  227.                 cin >> age;
  228.                 book.perArr[ret].m_Age = age;
  229.                 //电话
  230.                 cout << "请输入电话" << endl;
  231.                 char phone[20];
  232.                 cin >> phone;
  233.                 mycpy(book.perArr[ret].m_Phone, phone);
  234.                 //住址
  235.                 cout << "请输入住址" << endl;
  236.                 char address[128];
  237.                 cin >> address;
  238.                 mycpy(book.perArr[ret].m_Addr , address);
  239.                 cout << "修改成功" << endl;
  240.         }
  241.         else
  242.         {
  243.                 cout << "查无此人" << endl;
  244.         }
  245.         system("pause");
  246.         system("CLS");
  247. }

  248. //9----------------清空所有联系人
  249. void cleanPerson()
  250. {
  251.         book.m_Size = 0;
  252.         cout << "通讯录已清空" << endl;
  253.         system("pause");
  254.         system("CLS");
  255. }

  256. void showMoun()
  257. {
  258.         cout << "**************************" << endl;
  259.         cout << "*****  1.添加联系人  *****" << endl;
  260.         cout << "*****  2.显示联系人  *****" << endl;
  261.         cout << "*****  3.删除联系人  *****" << endl;
  262.         cout << "*****  4.查找联系人  *****" << endl;
  263.         cout << "*****  5.修改联系人  *****" << endl;
  264.         cout << "*****  6.清空联系人  *****" << endl;
  265.         cout << "*****  0.退出通讯录  *****" << endl;
  266.         cout << "**************************" << endl;
  267. }





  268. int main()
  269. {
  270.        

  271.         int codes=0;  //定义一个整型变量用来判断文件是我们要的类型吗
  272.         int filen=0;  //定义一个整型变量用来存储文件长度;
  273.         ifstream ifa; //定义一个用于输出的流对象ifa;
  274.         book.m_Size = 0;//初始化通讯录中当前人员个数
  275.         //查看是否有我们要用的记录
  276.         ifa.open("d:\\通讯录.data",ios::in|ios::binary);


  277.            if(ifa.is_open())      //如果打开文件成功查看是否是空文件
  278.               {

  279.                 ifa.read((char*)&codes,4);//先二进制读4个字节看看跟我们预留的暗号0xa5a55a5a相符吗?
  280.                 if(codes==0xa5a55a5a)     //如果相符
  281.                 {
  282.                         ifa.read ((char *)&filen,4);//如果相符再读4字节,这是我们上次写入的长度;
  283.                         //用char*强制类型转换;把上次的长度字节数读入到book对象;
  284.                         ifa.read((char *)&book,filen);//把上次写入的数据读入book;

  285.                         ifa.close();                        //关闭文件;
  286.                 }//if(codes==0xa5a55a5a)结尾

  287.            }// if(ifa.is_open()) 结尾;
  288.         else//如果打开文件不成功则认为是首次使用
  289.                 book.m_Size = 0;//直接把下标放到首位;


  290.         int tiaojian=1; //让死循环跳出的条件用了拼音;
  291.         int select = 0; //初始化用户选择输入的变量
  292.         ofstream ofa;   //定义一个用于输出的文件对象;
  293.         while (tiaojian)
  294.         {
  295.                 showMoun();  //调用菜单
  296.                 cin >> select;
  297.                 switch (select)
  298.                 {
  299.                 case 1:  //1.添加联系人
  300.                         addPerson();
  301.                         break;
  302.                 case 2:   //2.显示联系人
  303.                         showPerson();
  304.                         break;
  305.                 case 3:   //3.删除联系人
  306.                         deletePerson();
  307.                         break;
  308.                 case 4:   //4.查找联系人
  309.                         findPerson();
  310.                         break;
  311.                 case 5:   //5.修改联系人
  312.                         modifyPerson();
  313.                         break;
  314.                 case 6:   //6.清空通讯录
  315.                         cleanPerson();
  316.                         break;
  317.                 case 0:   //0.退出通讯录

  318.                         cout << "欢迎下次使用" << endl;
  319.                         codes=0xa5a55a5a;//文件类型验证码;
  320.                         ofa.open("d:\\通讯录.data",ios::out|ios::binary);//先把内容存入文件再退出;
  321.                         ofa.write((const char *)&codes,4); //先写入4个字节验证码;
  322.                         filen=sizeof(book);                //算出变量的长度,写入文件;
  323.                         ofa.write((const char *)&filen,4);
  324.                         ofa.write((const char *)&book,filen);       //把对象book写入二进制文件;
  325.                         ofa.close();                                     //关闭文件;


  326.                         system("CLS");
  327.                         tiaojian=0;//跳出死循环;
  328.                         break;

  329.                 default:
  330.                         break;
  331.                 };//switch
  332.         }//while()


  333. }
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-12-7 12:15

Powered by CcTry.CoM

© 2009-2021 cctry.com

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