问题描述:

设计一个工资类(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)用多文件的方式组织最后的程序。



代码:

1.main.cpp


#include <iostream>
using namespace std;
#include"Salary.h"

int main()
{
    Salary s1;
    s1.read();
    s1.show();
    s1.add_salary(50);
    s1.sort_salary();
    s1.show();
    s1.write();
    return 0;
}



2.Salary.h


#ifndef SALARY_H_INCLUDED
#define SALARY_H_INCLUDED
class Salary
{
private:
    double salarys[500];
    int number;
public:
    void read();
    void write();
    void add_salary(double);
    void sort_salary();
    void show();
};


#endif // SALARY_H_INCLUDED



3.Salary.cpp


#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
#include"Salary.h"
void Salary::read()
{
    ifstream infile("salary.txt",ios::in);
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i=0;
    while(infile>>salarys[i])
        i++;
    number=i;
    infile.close();
}
void Salary::add_salary(double n)
{
    int i=0;
    for(;i<number;i++)
    {
        salarys[i]+=n;
    }
}
void Salary::sort_salary()
{
    int i,j;
    double n;
    for(i=0;i<number-1;i++)
    {
        for(j=0;j<number-i-1;j++)
        {
            if(salarys[j+1]>salarys[j])
            {
                n=salarys[j+1];
                salarys[j+1]=salarys[j];
                salarys[j]=n;
            }
        }
    }
}
void Salary::show()
{
    int i=0;
    for(;i<number;i++)
        cout<<salarys[i]<<"   ";
    cout<<endl<<endl;

}
void Salary::write()
{
    ofstream outfile("write.txt",ios::out);
    if(!outfile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
    }
    int i;
    for(i=0;i<number;i++)
    {
        outfile<<salarys[i]<<endl;
    }
    outfile.close();
}




运行结果:

第3周项目5-数组做数据成员(2)_#include

第3周项目5-数组做数据成员(2)_#include_02

第3周项目5-数组做数据成员(2)_#include_03

学习心得:

    文件读取于写入。