望采纳
#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