编程序实现一下功能。
1. 按职工号由小到大的顺序将5个员工的数据(包括号码、姓名、年龄、工资)输出到磁盘文件中保存
2. 从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾
3. 输出文件中全部职工的数据
4. 从键盘输入一个号码,从文件中查找有无此职工号,如有则显示从职工是第几个职工,以及此职工的全部数据。如没有,就输出“无此人”。可以反复多次查询,如果查找的职工号为0,就结束查询询
- #include<iostream>
- #include<fstream>
- #include<string>
- #include<iomanip>
- #include<strstream>
- using namespace std;
- class Staff
- {
- public:
- Staff(int n=0,char nam[]=" ",int a=0,int p=0)
- {
- num=n;
- strcpy(name,nam);
- age=a;
- pay=p;
- }
- int num;
- char name[20];
- int age;
- int pay;
- };
- int main()
- {
- Staff sta[7]={
- Staff(111,"Li",18,4900),
- Staff(106,"Wi",13,1700),
- Staff(103,"Qam",22,1500),
- Staff(101,"Jia",15,900),
- Staff(105,"Mena",21,2900)
- };
- int i,j;
- Staff temp[5];
- for(i=0;i<4;i++)
- for(j=i+1;j<5;j++)
- {
- if(sta[i].num>sta[j].num)
- {
- temp[i]=sta[j];
- sta[j]=sta[i];
- sta[i]=temp[i];
- }
- }
- fstream iofile("f1.dat",ios::in|ios::out|ios::binary);
- for(i=0;i<5;i++)
- iofile.write((char *)&sta[i],sizeof(sta[i]));
- cout<<"请输入新员工数据: 工号 姓名 年龄 工资"<<endl;
- for(i=5;i<7;i++)
- {
- cin>>sta[i].num>>sta[i].name>>sta[i].age>>sta[i].pay;
- }
- for(i=5;i<7;i++)
- {
- iofile.seekp(i*sizeof(sta[i]),ios::beg);//定位新增加成员的位置
- iofile.write((char *)&sta[i],sizeof(sta[i]));
- }
- Staff put[7];//接收文件数据输出到显示屏
- for(i=0;i<7;i++)
- {
- iofile.seekg(i*sizeof(sta[i]),ios::beg);//定位位置
- iofile.read((char *)&put[i],sizeof(put[i]));//读入put对象数组中
- cout<<put[i].num<<" "<<put[i].name<<" "<<put[i].age<<" "<<put[i].pay<<endl;
- }
- bool go=true;
- do{
- cout<<"请输入你要查找的号码:";
- int b;
- bool yes=false;
- cin>>b;
- for(i=0;i<7;i++)
- {
- if(put[i].num==b)
- {
- yes=true;
- cout<<"你要寻找的是第:"<<i+1<<"个员工"<<endl;
- cout<<put[i].num<<" "<<put[i].name<<" "<<put[i].age<<" "<<put[i].pay<<endl;
- cout<<"继续查找吗?Y/N";
- char c;
- cin>>c;
- if(c=='n'||c=='N')
- go=false;
- }
- }
- if(!yes)
- {
- cout<<"无此人"<<endl;
- cout<<"继续查找吗?Y/N";
- char c;
- cin>>c;
- if(c=='n'||c=='N')
- go=false;
- }
- }while(go);
- iofile.close();
- }