【题目】阅读教材P255例8.4,注意到类中的数据成员可以是数组。设计一个工资类(Salary),其中的数据成员有:double型数组salary[50](实际人数可以少于50,固定取50可能造成空间浪费),整型值number表示的职工人数。在main函数中调用你自己设计好的成员函数完成下面的功能:(1)输入职工工资,工资保存到salary数组中,实际人数保存到number中(输入-1标志着工资输入结束);(2)给每个人涨100元工资;(3)对涨后的工资进行排序;(4)输出排序后的工资。
【题目说明】本题体会类的数据成员可以是数组,实际上,我们很快要实践到,用类类型作类的数据成员。本题没有给出现成的程序段,包括类的设计等工作均需要独立完成。记住,沉下心来,领会你所看过的程序,通过模仿,这个工作还是容易完成的。完成一个项目,尤其是有一定规模的项目时,设计类结构是一个非常关键的环节,今后几年的专业学习中,将逐步涉及到。
【参考解答】
#include <iostream>
using namespace std;
class Salary
{
public:
void set_salarys( );
void add_salarys(int x);
void sort_salarys();
void show_salarys( );
private:
double salarys[50]; //工资
int number; //实际人数
};
void Salary::set_salarys( )
{
int x,i=0;
cin>>x; //注意这儿输入工资使用的技巧
while(x>0)
{
salarys[i]=x;
++i;
cin>>x;
}
number=i;
}
void Salary::add_salarys(int x)
{
int i;
for (i=0;i<number;i++)
salarys[i]+=x;
}
void Salary::sort_salarys()
{
int i,j;
double t;
for (i=0;i<number-1;i++)
for(j=0;j<number-i-1;j++)
if (salarys[j]<salarys[j+1])
{
t=salarys[j];
salarys[j]=salarys[j+1];
salarys[j+1]=t;
}
}
void Salary::show_salarys( )
{
int i;
for (i=0;i<number;i++)
cout<<salarys[i]<<" ";
}
int main( )
{
Salary s;
s.set_salarys( ); //输入值
s.add_salarys(100); //涨工资
s.sort_salarys(); //排序
s.show_salarys( ); //输出结果
system("PAUSE");
return 0;
}
试一下解决下面的拓展吧:
【拓展1】使用salary[50]有限制,实际人数少浪费空间,人数多时无法完成任务。程序执行中先输入职工人数,然后利用教材P217所讲的动态分配内存的运算符new,开辟一个大小正好的连续空间,完成上面的工作(排序需要采用指针完成)。
【拓展2】手工输入工资?!太让人不能忍受了。现给出包含了500个职工工资的文件salary.txt,从文件中读数据,完成上面的工作。此任务可参照上一学期第15周任务3完成。还可以将排序后结果保存到一个文件中。(salary.txt可以从BB平台下载)