编程实现以下功能:
1、定义职工类employee:字段成员:职工号num,姓名name,年龄age,工资salary;
成员函数:返回职工号getnum();友元函数:重载运算符>>,<<。
2、编写函数按职工号从小到大的顺序将 5 个职工的数据输出到磁盘文件 file1.txt 中保存,int savetofile();该函数返回输入数据的个数。
3、编写函数从键盘输入一个员工的数据,增加到文件file1.txt 的末尾,int insertfile(int n);插入完成后将新的员工的数量返回。
4、编写函数从文件中输出全部员工的数据,void outfromfile(int n)。
5、编写函数从键盘输入一个号码,从文件中查找有无此职工号,如有则显示此职工是第几个职工以及此职工的全部数据,如没有,输出“无此人”,void findfile(int n)。
- 实验目的和要求
1.熟悉文件流的定义。
2.掌握读写文件的操作。
代码如下:
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
class Employee
{
public:
Employee(){};
Employee(int n,char*na,int a, float s);
void findfile(int n);
int getnum();
int num;
friend ostream& operator << (ostream& ,Employee&);
friend istream& operator >> (istream& ,Employee&);
protected:
char name[20];
int age;
float salary;
};
Employee::Employee(int n,char*na,int a, float s)
{
num=n;
strcpy(name,na);
age=a;
salary=s;
}
ostream& operator << (ostream&output ,Employee&e)
{
output<<e.num<<"\t"<<e.name<<"\t"<<e.age<<"\t"<<e.salary;
return output;
}
istream& operator >> (istream&input ,Employee&e)
{
input>>e.num>>e.name>>e.age>>e.salary;
return input;
}
int savetofile()//储存到文件
{
int n;
int a=0;
while(a=1)
{ cout<<"请输入职工个数(1-100):";
cin>>n;
if(n<100&&n>0)
{
Employee e1[100];
cout<<"NUM"<<"\t"<<"NAME"<<"\t"<<"AGE"<<"\t"<<"SALARY"<<"\n";
fstream outfile("file1.txt",ios::out);
if(!outfile)
{
cerr<<"open error"<<endl;
exit(1);
}
for(int i=0;i<n;i++)
{
cin>>e1[i];
}
for(i=0;i<n;i++)
{
outfile<<e1[i]<<endl;
}
outfile.close();
break;
a=1;
}
}
return n;
}
int insertfile(int n)//插入一个员工信息
{
Employee e2[1];
cout<<"请输入要添加的职工信息:\n";
cout<<"NUM"<<"\t"<<"NAME"<<"\t"<<"AGE"<<"\t"<<"SALARY"<<"\n";
fstream outfile("file1.txt",ios::app);
if(!outfile)
{
cerr<<"open error"<<endl;
exit(1);
}
cin>>e2[1];
outfile<<e2[1]<<endl;
outfile.close();
return n+1;
}
void outfromfile(int n) //从文件中输出
{
Employee e3[100];
ifstream infile("file1.txt");
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
cout<<"NUM"<<"\t"<<"NAME"<<"\t"<<"AGE"<<"\t"<<"SALARY"<<"\n";
for (int i=0;i<n;i++)
{
infile>>e3[i];
}
for (i=0;i<n;i++)
{
cout<<e3[i]<<endl;
}
infile.close();
}
void findfile(int n)
{
Employee e4[100];
int num;
cout<<"请输入要查找的职工号:";
cin>>num;
ifstream infile("file1.txt");
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
while(num)
{ int m,i;
int j=0;
for(i=0;i<n;i++) //从文件中输出到数组中
infile>>e4[i];
for(m=0;m<i;m++) //循环遍历数组
{
if(num==e4[m].num)
{
cout<<"查找成功!"<<endl;
cout<<"第"<<num<<"个职工。该职工信息如下:"<<endl;
cout<<"NUM"<<"\t"<<"NAME"<<"\t"<<"AGE"<<"\t"<<"SALARY"<<"\n";
cout<<e4[m]<<endl;
}
if(num!=e4[m].num)
{
j++; //标记查找失败次数
}
}
if(j==m) //若查找失败次数等于数组成员数,则查无此人
cout<<"无此人!"<<endl;
infile.close();
break;
}
}
int Employee::getnum()
{
return num;
}
int main()
{
int n;
n=savetofile();
outfromfile(n);
findfile(n);
n=insertfile(n);
findfile(n);
return 0;
}
预期效果: