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:
    #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;
    }