求各位解答一下,程序一直不对

img


要求:
1:分解程序,设计三个函数分别实现,输入,排序(不改变原始存储)和输出功能
2:设计一个查找函数实现按姓名查找,如果有输出员工信息,如果没输出“无此人”提示
3:为排序,查找和输出功能设计菜单选择

望采纳

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

struct person
{
    person() :m_strName(), m_nId(),m_fSalary() {}

    std::string m_strName;
    int m_nId;
    float m_fSalary;
};

class ST_Person
{
public:
    ST_Person():m_vecPersonList() {}

    ~ST_Person()
    {
        std::vector<person>().swap(m_vecPersonList);
    }

    /**
     * @brief 输入
     */
    void set_data(person st_pData)
    {
        m_vecPersonList.emplace_back(st_pData);
    }

    /**
     * @brief 排序 按id排序
     * @param isFlag: true:小到大;false:大到小
     */
    void sort_person(bool isFlag)
    {
        std::sort(m_vecPersonList.begin(), m_vecPersonList.end(),
            [&isFlag](person st_pData, person st_pDatatemp)
            {
                return (isFlag ? st_pData.m_nId < st_pDatatemp.m_nId : st_pData.m_nId > st_pDatatemp.m_nId);
            });
    }

    /**
     * @brief 输出
     */
    void print_person()
    {
        for (auto iter : m_vecPersonList)
        {
            std::cout << "name:" << iter.m_strName
                << " id:" << iter.m_nId
                << " salary:" << iter.m_fSalary << std::endl;
        }
    }

    /**
     * @brief 查找
     */
    void serarh_person(std::string m_pstrName)
    {
        bool isflag = false;
        for (auto iter : m_vecPersonList)
        {
            if (m_pstrName == iter.m_strName)
            {
                isflag = true;
                std::cout << "name:" << iter.m_strName
                    << " id:" << iter.m_nId
                    << " salary:" << iter.m_fSalary << std::endl;
            }
        }
        if (!isflag)
        {
            std::cout << "无此人 " << std::endl;
        }
    }

private:
    std::vector<person> m_vecPersonList;
};

int main()
{
    int ch = 0;          // 输入命令
    int y = 0;           // 输入结束符

    ST_Person stObjdata;
    person stdata;

    do
    {
        std::cout << "************************************" << std::endl;
        std::cout << "\n\t 输入指令 ";
        std::cout << "\n 1. 输入个人信息 ";
        std::cout << "\n 2. 打印全部个人信息记录";
        std::cout << "\n 3. 排序(按id排序,0:小到大;1:大到小)";
        std::cout << "\n 4. 根据名字查找对应的个人信息记录";
        std::cout << "\n 5. 退出 \n";
        std::cout << "************************************" << std::endl;
        std::cout << "\n输入您的选择: ";
        std::cin >> ch;
        switch (ch)
        {
        case 1:
        {
            std::string strName; // 名字
            std::cout << "\n 输入您的名字: ";
            std::cin >> stdata.m_strName;

            std::cout << "\n 输入您的个人id: ";
            std::cin >> stdata.m_nId;

            std::cout << "\n 输入您的个人薪水: ";
            std::cin >> stdata.m_fSalary;


            stObjdata.set_data(stdata);
            std::cout << "\n个人信息信息录入.\n";
            break;
        }
        case 2:
        {
            stObjdata.print_person();
            break;
        }
        case 3:
        {
            bool isflag = false;
            int nTemp = 0;
            std::cout << "\n 输入您要按id排序的选择(0:小到大;1:大到小): ";
            std::cin >> nTemp;
            while (nTemp != 0 && nTemp != 1)
            {
                std::cout << "\n 无效值";
                std::cout << "\n 请重新输入您要按id排序的选择(0:小到大;1:大到小): ";
                std::cin >> nTemp;
            }
            nTemp == 0 ? isflag = true : isflag = false;
            stObjdata.sort_person(isflag);
            break;
        }
        case 4:
        {
            std::string strTempName;
            std::cout << "\n 输入您要查找的名字: ";
            std::cin >> strTempName;
            stObjdata.serarh_person(strTempName);
            break;
        }
        case 5:
        {
            y = 1;
            break;
        }
        default: std::cout << "\n输入有效选项.";
        }
        cout << endl;

    } while (y != 1);
    return 0;
}

打印

************************************

         输入指令
 1. 输入个人信息
 2. 打印全部个人信息记录
 3. 排序(按id排序,0:小到大;1:大到小)
 4. 根据名字查找对应的个人信息记录
 5. 退出
************************************

输入您的选择: 1

 输入您的名字: 小明

 输入您的个人id: 1

 输入您的个人薪水: 152222222

个人信息信息录入.

************************************

         输入指令
 1. 输入个人信息
 2. 打印全部个人信息记录
 3. 排序(按id排序,0:小到大;1:大到小)
 4. 根据名字查找对应的个人信息记录
 5. 退出
************************************

输入您的选择: 2
name:小明 id:1 salary:1.52222e+08

************************************

         输入指令
 1. 输入个人信息
 2. 打印全部个人信息记录
 3. 排序(按id排序,0:小到大;1:大到小)
 4. 根据名字查找对应的个人信息记录
 5. 退出
************************************

输入您的选择: 3

 输入您要按id排序的选择(0:小到大;1:大到小): 0

************************************

         输入指令
 1. 输入个人信息
 2. 打印全部个人信息记录
 3. 排序(按id排序,0:小到大;1:大到小)
 4. 根据名字查找对应的个人信息记录
 5. 退出
************************************

输入您的选择: 2
name:小明 id:1 salary:1.52222e+08

************************************

         输入指令
 1. 输入个人信息
 2. 打印全部个人信息记录
 3. 排序(按id排序,0:小到大;1:大到小)
 4. 根据名字查找对应的个人信息记录
 5. 退出
************************************

输入您的选择: 4

 输入您要查找的名字:
小明
name:小明 id:1 salary:1.52222e+08

************************************

         输入指令
 1. 输入个人信息
 2. 打印全部个人信息记录
 3. 排序(按id排序,0:小到大;1:大到小)
 4. 根据名字查找对应的个人信息记录
 5. 退出
************************************

输入您的选择:
5