【题目】阅读教材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平台下载)