2015-第3週目プロジェクト5-配列データメンバー(5)
【項目5−配列をデータメンバーとする】教材P 255例8.4を読み、クラス内のデータメンバーが配列であってもよいことに気づいた.給与クラス(Salary)を設計するメンバー関数は、次のとおりです. void set_salarys():従業員給与の入力(入力-1は給与入力の終了を示す)、給与はsalary配列に保存され、実際の人数はnumberに保存されます. void add_salarys(int x):一人一人にx元の給料を上げる void sort_salarys():給与のソート void show_salarys():給与情報を表示する (1)main関数でSalaryクラスのオブジェクトを定義し、給与を入力し、一人当たり500元の給与を上げ、ソートした給与データを出力します.(2)salary[50]で制限があり、実際の人数が少ないとスペースが浪費され、人数が多くなり、任務を遂行できなくなる.main()に従業員数を入力し、パラメータとして従業員給与を入力するメンバー関数に渡し、メモリを動的に割り当てるメカニズムを利用して、適切なサイズの連続空間を開き、上記の作業を完了します.(3)手作業で給与を入力?!とても我慢できません.500人未満の従業員の給料を含む書類salaryを提供します.txt(ダウンロード)、ファイルからデータを読み、上記の作業を完了します.(4)メンバー関数を追加し、ソート後の結果をファイルに保存します.(5)最後のプログラムをマルチファイルで整理する.
(5):
main:
salary.h:
salary:
(5):
main:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "salary.h"
using namespace std;
int main( )
{
Salary s;
s.set_salarys();
s.add_salarys(500);
s.sort_salarys();
s.write_salarys();
s.show_salarys();
return 0;
}
salary.h:
#ifndef SALARY_H_INCLUDED
#define SALARY_H_INCLUDED
class Salary
{
private:
double salarys[500]; //
int number; //
public:
void set_salarys();
void add_salarys(int x);
void sort_salarys();
void show_salarys();
void write_salarys();
};
#endif // SALARY_H_INCLUDED
salary:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include "salary.h"
using namespace std;
void Salary::write_salarys()
{
int i;
ofstream outfile("salary_ordered.txt",ios::out);
if(!outfile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(i=0; i<number; ++i)
{
outfile<<salarys[i]<<endl;
}
outfile.close();
}
void Salary::set_salarys()
{
int i=0;
ifstream infile("salary.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
i=0;
while(infile>>salarys[i])
i++;
infile.close();
number=i;
}
void Salary::add_salarys(int x)
{
int i;
for (i=0; i<=number-1; i++)
salarys[i]+=x;
}
void Salary::sort_salarys()
{
int i,j;
double n;
for (i=0; i<=number-2; i++)
for(j=0; j<=number-i-2; j++)
if (salarys[j]<salarys[j+1])
{
n=salarys[j];
salarys[j]=salarys[j+1];
salarys[j+1]=n;
}
}
void Salary::show_salarys()
{
int i;
for (i=0; i<=number-1; i++)
cout<<salarys[i]<<endl;
}