0
点赞
收藏
分享

微信扫一扫

第16周-任务1-涨工资了

何晓杰Dev 2022-03-21 阅读 50


【题目】从文件salary.txt中读入500名工人的工资,全部增加100元后进行排序,将排序后的结果在屏幕上输出,并保存到文件ordered_salary.txt中。

  <下载相关文件>


【说明】这个题目只是练习ASCII文件的读写,顺便排个序什么的。总体的结构可以是:

  • 将文件中的数据读出来(到一个数组中);
  • 加工资;
  • 排序;
  • 将排序后数组中的值保存到文件中;

  仅此而已,有些同学忘了自己分析,简单的问题不知套哪里来的“例子”,用了好几个函数,传参数把自己传晕了,或者没有传参数错得莫名其妙。

  任何时候,都要先自己想一想。

  此为上计。


【参考程序】

#include <fstream>
#include<iostream>
using namespace std;
int main( )
{
float a[500],t;
int i,j;
ifstream infile("salary.txt",ios::in); //以输入的方式打开文件
if(!infile) //测试是否成功打开
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0;i<500;i++)
infile>>a[i]; //从文件中读取数据
infile.close();
for(i=0;i<10;i++)
a[i]+=100; //涨工资了

for(j=0;j<500-2;j++) //排序,用冒泡法,其他法类似
{
for(i=0;i<500-j-1;i++)
if (a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
//输出结果
ofstream outfile("ordered_salary.txt",ios::out);
if(!outfile) //测试文件打开操作是否成功,不成功则提示后退出。
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0;i<500;i++)
{
outfile<<a[i]<<endl;
if(i%5==0) cout<<endl;
cout<<a[i]<<"\t";
}
outfile.close(); //关闭文件。用完了必须关闭,否则会丢失数据
system("pause");
return 0;
}



【又一个参考】

来自tao6655306​的解答,我给的评论是:很好,面向对象的思维已经深入你心!面向过程中走出来的我却未这样想。老了,跟不上形势了。​


#include<iostream>    
#include<fstream>
using namespace std;
class Salary
{
public:
void ordered_salary_add();
void ordered_salary();
void input_salary();
  void ordered_salary_txt();
private:
double salary[500];
int number;
};
int main()
{
Salary s1;
//cout<<"500人的原始工资为:"<<endl;
s1.input_salary();
//cout<<endl;
cout<<"排序后工资为:";
cout<<endl;
s1.ordered_salary();
cout<<endl;
s1.ordered_salary_txt();
system("PAUSE");
return 0;
}
void Salary::input_salary()
{
int i=0;
ifstream infile("salary.txt",ios::in);
if (!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for (i=0;i<500;i++)
infile>>salary[i];
infile.close();
//for(i=0;i<500;i++)
//cout<<salary[i]<<" ";
//cout<<endl;
number=500;
}
void Salary::ordered_salary_add()
{
int i;
for (i=0;i<number;i++)
{
salary[i]=salary[i]+100;
//cout<<salary[i]<<" ";
}
return;
}
void Salary::ordered_salary()
{

int i,j;
double t;
for(i=0;i<number-1;i++)
{
for(j=0;j<number-i-1;j++)
{
if(salary[j]>salary[j+1])
{
t=salary[j];
salary[j]=salary[j+1];
salary[j+1]=t;
}
}
}
for (i=0;i<number;i++)
{
cout<<salary[i]<<" ";
}
return;
}

void Salary::ordered_salary_txt()
{
ofstream outfile("ordered_salary.txt",ios::out);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(int i=0;i<500;i++)
outfile<<salary[i]<<"\n";
outfile.close();
return ;
}





举报

相关推荐

0 条评论