目錄
題目
源碼
結果示例
題目
編寫程序實現以下功能:【要求處理ASCII文件】
(1)按職工號由小到大的順序將5個員工的數據(包括號碼、姓名、年齡和工資)輸出到磁盤文件中保存;
(2)從鍵盤輸入兩個員工的數據(職工號大于已有的職工號),增加到文件末尾;
(3)輸出文件中全部職工的數據;
(4)從鍵盤輸入一個號碼,從文件中查找有無此職工號,如有則顯示此職工是第幾個職工以及此職工的全部數據。如沒有,輸出“無此人”。可以反復多次查詢,如果輸入查找的職工號為0,就結束查詢。
源碼
#include <iostream>
#include <fstream>
#include <string>using namespace std;class Employee
{
public:int id;string name;int age;double salary;Employee() {}Employee(int i, string n, int a, double s) : id(i), name(n), age(a), salary(s) {}void output(ofstream &file){file << "號碼: " << id << ", 姓名: " << name << ", 年齡: " << age << ", 工資: " << salary << endl;}
};int main()
{ofstream file("employee_data.txt", ios::app);// (1) 輸出5個員工的數據到文件Employee employees[7] = {{101, "qqq", 25, 5000},{102, "www", 30, 6000},{103, "eee", 28, 5500},{104, "rrr", 35, 7000},{105, "ttt", 27, 5200}};for (int i = 0; i < 5; i++){employees[i].output(file);}// (2) 從鍵盤輸入兩個員工的數據,增加到文件末尾for (int i = 5; i < 7; i++){cout << "請輸入員工號碼: ";cin >> employees[i].id;cout << "請輸入員工姓名: ";cin >> employees[i].name;cout << "請輸入員工年齡: ";cin >> employees[i].age;cout << "請輸入員工工資: ";cin >> employees[i].salary;employees[i].output(file);}file.close();// (3) 輸出文件中全部職工的數據ifstream inFile("employee_data.txt");string line;while (getline(inFile, line)){cout << line << endl;}inFile.close();// (4) 從文件中查找職工號int searchId;while (true){cout << "輸入員工號碼查找員工 (輸入0以結束): ";cin >> searchId;if (searchId == 0){break;}ifstream inFile("employee_data.txt");bool found = false;int count = 0;while (getline(inFile, line)){count++;if (line.find("號碼: " + to_string(searchId)) != string::npos){found = true;cout << "此職工是第" << count << "個員工: " << line << endl;break;}}inFile.close();if (!found){cout << "未找到職工" << endl;}}return 0;
}