编程序实现一下功能。

1. 按职工号由小到大的顺序将5个员工的数据(包括号码、姓名、年龄、工资)输出到磁盘文件中保存

2. 从键盘输入两个员工的数据(职工号大于已有的职工号),增加到文件的末尾

3. 输出文件中全部职工的数据

4. 从键盘输入一个号码,从文件中查找有无此职工号,如有则显示从职工是第几个职工,以及此职工的全部数据。如没有,就输出“无此人”。可以反复多次查询,如果查找的职工号为0,就结束查询询

 

  1.  
  2. #include<iostream>  
  3. #include<fstream>  
  4. #include<string>  
  5. #include<iomanip>  
  6. #include<strstream>  
  7. using namespace std;  
  8. class Staff  
  9. {  
  10. public:  
  11.       
  12.     Staff(int n=0,char nam[]=" ",int a=0,int p=0)  
  13.     {  
  14.         num=n;  
  15.         strcpy(name,nam);  
  16.         age=a;  
  17.         pay=p;  
  18.     }  
  19.       
  20.     int num;  
  21.     char name[20];  
  22.     int age;  
  23.     int pay;  
  24. };  
  25. int main()  
  26. {  
  27.       
  28.     Staff sta[7]={  
  29.         Staff(111,"Li",18,4900),  
  30.         Staff(106,"Wi",13,1700),  
  31.         Staff(103,"Qam",22,1500),  
  32.         Staff(101,"Jia",15,900),  
  33.         Staff(105,"Mena",21,2900)  
  34.     };  
  35.     int i,j;  
  36.       
  37.     Staff temp[5];  
  38.       
  39.     for(i=0;i<4;i++)  
  40.         for(j=i+1;j<5;j++)  
  41.         {  
  42.             if(sta[i].num>sta[j].num)  
  43.             {  
  44.                 temp[i]=sta[j];  
  45.                 sta[j]=sta[i];  
  46.                 sta[i]=temp[i];  
  47.             }  
  48.         }  
  49.       
  50.         fstream iofile("f1.dat",ios::in|ios::out|ios::binary);  
  51.       
  52.         for(i=0;i<5;i++)  
  53.             iofile.write((char *)&sta[i],sizeof(sta[i]));  
  54.         cout<<"请输入新员工数据: 工号 姓名 年龄 工资"<<endl;  
  55.         for(i=5;i<7;i++)  
  56.         {  
  57.             cin>>sta[i].num>>sta[i].name>>sta[i].age>>sta[i].pay;  
  58.           
  59.         }  
  60.             for(i=5;i<7;i++)  
  61.         {  
  62.           
  63.             iofile.seekp(i*sizeof(sta[i]),ios::beg);//定位新增加成员的位置  
  64.             iofile.write((char *)&sta[i],sizeof(sta[i]));  
  65.         }  
  66.       
  67.             Staff put[7];//接收文件数据输出到显示屏  
  68.             for(i=0;i<7;i++)  
  69.         {  
  70.           
  71.             iofile.seekg(i*sizeof(sta[i]),ios::beg);//定位位置  
  72.             iofile.read((char *)&put[i],sizeof(put[i]));//读入put对象数组中  
  73.             cout<<put[i].num<<" "<<put[i].name<<" "<<put[i].age<<" "<<put[i].pay<<endl;  
  74.         }  
  75.             bool go=true;  
  76.             do{  
  77.             cout<<"请输入你要查找的号码:";  
  78.             int b;  
  79.             bool yes=false;  
  80.             cin>>b;  
  81.             for(i=0;i<7;i++)  
  82.             {  
  83.                 if(put[i].num==b)  
  84.                 {      
  85.                     yes=true;  
  86.                     cout<<"你要寻找的是第:"<<i+1<<"个员工"<<endl;  
  87.                     cout<<put[i].num<<" "<<put[i].name<<" "<<put[i].age<<" "<<put[i].pay<<endl;  
  88.                     cout<<"继续查找吗?Y/N";  
  89.                 char c;  
  90.                 cin>>c;  
  91.                 if(c=='n'||c=='N')  
  92.                     go=false;  
  93.                 }  
  94.             }  
  95.             if(!yes)  
  96.             {  
  97.                 cout<<"无此人"<<endl;  
  98.                 cout<<"继续查找吗?Y/N";  
  99.                 char c;  
  100.                 cin>>c;  
  101.                 if(c=='n'||c=='N')  
  102.                     go=false;  
  103.             }  
  104.             }while(go);  
  105.             iofile.close();  
  106. }  
  107.