编程实现以下功能: 1、定义职工类employee:字段成员:职工号nurn,姓名narne,年龄age,工资salary: 成员函数:返回职工号getnum0:友元函数:重载运算符>>, ≤≤。 2、编写函数按职工号从小到大的顺序将5个职工的数据输出到磁益文件 filel.txt 中保存,int savetofileO:该函数返回输入数据的个数。 3、编写函数从键盘输入一个员工的数据,增加到文件flel.txt的末感,intinserttile(int n):插入完成后将新的员工的数量返回。 4、编写函数从文件中输出全部员工的数据,void outfromfile(int n)。 5、编写函数从键盘输入一个号码,从文件中查找有无此职工号,如有则豆示此职工是第几个职工以及此职工的全部数据,如没有,输出“无此人”,void findfle(int a)。
时间: 2024-02-01 07:17:02 浏览: 81
以下是实现上述功能的代码:
```c++
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
class employee{
private:
int num;
string name;
int age;
int salary;
public:
employee(){}
employee(int n, string nm, int a, int s):num(n), name(nm), age(a), salary(s){}
friend istream& operator>>(istream& in, employee& e);
friend bool operator<=(employee& e1, employee& e2);
int getnum() const {return num;}
void print() const {cout<<num<<'\t'<<name<<'\t'<<age<<'\t'<<salary<<endl;}
};
istream& operator>>(istream& in, employee& e){
in>>e.num>>e.name>>e.age>>e.salary;
return in;
}
bool operator<=(employee& e1, employee& e2){
return e1.num<=e2.num;
}
int savetofile(employee* emp, int n){
sort(emp, emp+n, [](employee& e1, employee& e2){return e1<=e2;});
ofstream fout("file1.txt");
if(!fout){
cout<<"Cannot open the file!"<<endl;
}
else{
for(int i=0;i<n;i++){
fout<<emp[i].getnum()<<'\t'<<emp[i].name<<'\t'<<emp[i].age<<'\t'<<emp[i].salary<<endl;
}
fout.close();
}
return n;
}
int insertfile(int n){
employee newemp;
cout<<"Please input the information of the new employee:"<<endl;
cin>>newemp;
ofstream fout("file1.txt", ios::app);
if(!fout){
cout<<"Cannot open the file!"<<endl;
return n;
}
else{
fout<<newemp.getnum()<<'\t'<<newemp.name<<'\t'<<newemp.age<<'\t'<<newemp.salary<<endl;
fout.close();
return n+1;
}
}
void outfromfile(int n){
ifstream fin("file1.txt");
if(!fin){
cout<<"Cannot open the file!"<<endl;
}
else{
employee emp;
for(int i=0;i<n;i++){
fin>>emp;
emp.print();
}
fin.close();
}
}
void findfile(int a){
ifstream fin("file1.txt");
if(!fin){
cout<<"Cannot open the file!"<<endl;
}
else{
employee emp;
bool found=false;
int count=0;
while(fin>>emp){
count++;
if(emp.getnum()==a){
found=true;
cout<<"The employee is the "<<count<<"th employee:"<<endl;
emp.print();
break;
}
}
if(!found){
cout<<"No such employee!"<<endl;
}
fin.close();
}
}
int main(){
employee emp[5]={employee(1001,"Tom",25,5000),employee(1002,"Jerry",26,6000),
employee(1003,"Bob",30,8000),employee(1004,"Alice",28,7000),
employee(1005,"Lucy",23,4500)};
int n=savetofile(emp, 5);
cout<<"The number of employees in the file is "<<n<<endl;
cout<<"The information of all employees in the file:"<<endl;
outfromfile(n);
n=insertfile(n);
cout<<"After inserting a new employee, the number of employees in the file is "<<n<<endl;
cout<<"The information of all employees in the file:"<<endl;
outfromfile(n);
int num;
cout<<"Please input the number of the employee you want to find:"<<endl;
cin>>num;
findfile(num);
return 0;
}
```
这个程序中,职工类`employee`包含了职工的基本信息,包括职工号、姓名、年龄和工资。其中,`getnum`函数返回职工号,而`print`函数输出职工的全部信息。
为了方便操作,我们在类中定义了一个友元函数`operator>>`用来输入职工信息,以及一个重载运算符`<=`用来比较两个职工的职工号大小。
`savetofile`函数用来将职工信息按职工号从小到大的顺序输出到文件中保存。具体操作是,先使用`sort`函数将职工数组按职工号从小到大排序,然后依次将每个职工的信息输出到文件中。
`insertfile`函数用来从键盘输入一个新员工的信息,并将其添加到文件的末尾。具体操作是,先使用`ofstream`打开文件并指定为追加模式,然后将新员工的信息输出到文件中。
`outfromfile`函数用来从文件中输出全部职工的信息。具体操作是,使用`ifstream`打开文件,然后依次读取每个职工的信息并输出。
`findfile`函数用来从文件中查找指定职工号的职工信息。具体操作是,使用`ifstream`打开文件,并依次读取每个职工的信息。如果找到了指定职工号的职工,则输出其信息并退出循环;如果没有找到,则输出提示信息。
在`main`函数中,我们首先创建了5个职工对象,并使用`savetofile`函数将它们的信息输出到文件中。然后,我们使用`outfromfile`函数从文件中输出全部职工信息。接着,我们使用`insertfile`函数向文件中添加一个新职工,并使用`outfromfile`函数输出全部职工信息。最后,我们使用`findfile`函数从文件中查找指定职工号的职工信息。
阅读全文