用C++编写程序实现以下功能: (1)按职工号由小到大的顺序将5个员工的数据(包括号码、姓名、年龄、工资)输出到磁盘文件中保存。 (2)从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾。 (3)输出文件中全部职工的数据。 (4)从键盘输入一个号码,从文件中查找有无此职工号,如有则显示此职工是第几个只工以及此职工的全部数据。如没有,就输出“无此人”。可以反复多次查询,如果输入找的职工号为0,就结束查询。(注意不要漏掉sort函数)
时间: 2023-07-14 09:12:41 浏览: 106
以下是实现功能的C++程序:
```c++
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
struct Employee {
int num;
char name[20];
int age;
double salary;
};
void display(const Employee& emp) {
cout << emp.num << "\t" << emp.name << "\t" << emp.age << "\t" << emp.salary << endl;
}
bool cmp(const Employee& a, const Employee& b) {
return a.num < b.num;
}
int main() {
// (1)按职工号由小到大的顺序将5个员工的数据(包括号码、姓名、年龄、工资)输出到磁盘文件中保存。
Employee emps[5] = {
{1001, "Tom", 25, 5000},
{1002, "Jerry", 30, 6000},
{1003, "Mike", 28, 5500},
{1004, "Mary", 27, 5200},
{1005, "John", 29, 5800}
};
sort(emps, emps + 5, cmp);
ofstream ofs("employee.txt");
if (!ofs) {
cerr << "Cannot open file!" << endl;
return 1;
}
for (int i = 0; i < 5; i++) {
ofs << emps[i].num << "\t" << emps[i].name << "\t" << emps[i].age << "\t" << emps[i].salary << endl;
}
ofs.close();
// (2)从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾。
Employee newEmps[2];
cout << "Input two new employees:" << endl;
for (int i = 0; i < 2; i++) {
cin >> newEmps[i].num >> newEmps[i].name >> newEmps[i].age >> newEmps[i].salary;
}
sort(newEmps, newEmps + 2, cmp);
ofstream ofs2("employee.txt", ios::app);
if (!ofs2) {
cerr << "Cannot open file!" << endl;
return 1;
}
for (int i = 0; i < 2; i++) {
ofs2 << newEmps[i].num << "\t" << newEmps[i].name << "\t" << newEmps[i].age << "\t" << newEmps[i].salary << endl;
}
ofs2.close();
// (3)输出文件中全部职工的数据。
ifstream ifs("employee.txt");
if (!ifs) {
cerr << "Cannot open file!" << endl;
return 1;
}
Employee emp;
while (ifs >> emp.num >> emp.name >> emp.age >> emp.salary) {
display(emp);
}
ifs.close();
// (4)从键盘输入一个号码,从文件中查找有无此职工号,如有则显示此职工是第几个只工以及此职工的全部数据。如没有,就输出“无此人”。
int num;
while (true) {
cout << "Input a number to query (0 to exit): ";
cin >> num;
if (num == 0) {
break;
}
ifstream ifs2("employee.txt");
if (!ifs2) {
cerr << "Cannot open file!" << endl;
return 1;
}
int count = 0;
bool found = false;
while (ifs2 >> emp.num >> emp.name >> emp.age >> emp.salary) {
count++;
if (emp.num == num) {
found = true;
cout << "Employee " << count << ":" << endl;
display(emp);
break;
}
}
ifs2.close();
if (!found) {
cout << "No such employee!" << endl;
}
}
return 0;
}
```
注意不要漏掉 `sort` 函数,它是对员工数据按职工号进行排序的关键。
阅读全文