class Salary { private: double salarys[50]; //多人的工资 int number; //实际人数 };
要设计的成员函数有:
• void set_salarys( ):输入职工工资(输入-1标志着工资输入结束),工资保存到salary数组中,实际人数保存到number中;
• void add_salarys(int x):给每个人涨x元工资
• void sort_salarys():对工资排序
• void show_salarys( ):显示工资信息
(1)在main函数定义Salary类的对象,输入工资,再给每个人涨500元工资,排序后工资数据,然后输出结果。
/* *Copyright (c) 2015,烟台大学计算机学院 *All gight reserved. *文件名称:Demo.cpp *作者:邵帅 *完成时间:2015年03月25日 *版本号:v1.0 */ #include <iostream> using namespace std; class Salary { private: double salarys[50]; int number; public: void set_salarys( ); void add_salarys(int x); void sort_salarys(); void show_salarys( ); }; void Salary::set_salarys() { int i=0,sal; while(cin>>sal && sal!=-1) { salarys[i]=sal; i++; } number=i+1; } 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() { for (int i=0;i<number;i++) cout<<salarys[i]<<" "; } int main() { Salary a; a.set_salarys(); a.add_salarys(500); a.sort_salarys(); a.show_salarys(); return 0; }
(2)用salary[50]有限制,实际人数少时,会浪费空间,人数多了,无法完成任务。在main()中先输入职工人数,作为参数传递给输入职工工资的成员函数,然后利用动态分配内存的机制,开辟一个大小正好的连续空间,完成上面的工作。
/* *Copyright (c) 2015,烟台大学计算机学院 *All gight reserved. *文件名称:Demo.cpp *作者:邵帅 *完成时间:2015年03月25日 *版本号:v1.0 */ #include <iostream> using namespace std; class Salary { private: double *salarys; int number; public: void set_salarys( ); void add_salarys(int x); void sort_salarys(); void show_salarys( ); }; void Salary::set_salarys() { int x,i; cout<<"请输入职工的人数: "; cin>>number; salarys=new double[number]; cout<<"请输入职工的工资: "; for(i=0;i<number;++i) { cin>>x; salarys[i]=x; } } 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() { for (int i=0;i<number;i++) cout<<salarys[i]<<" "; } int main() { Salary a; a.set_salarys(); a.add_salarys(500); a.sort_salarys(); a.show_salarys(); return 0; }
(3)手工输入工资?!太让人不能忍受了。现给出包含了不足500个职工工资的文件salary.txt(下载),从文件中读数据,完成上面的工作。
/* *Copyright (c) 2015,烟台大学计算机学院 *All gight reserved. *文件名称:Demo.cpp *作者:邵帅 *完成时间:2015年03月25日 *版本号:v1.0 */ #include <iostream> #include <fstream> #include <cstdlib> using namespace std; class Salary { private: double salarys[500]; int number; public: void set_salarys( ); void add_salarys(int x); void sort_salarys(); void show_salarys( ); }; void Salary::set_salarys() { int i; ifstream infile("salarys.txt",ios::in); if(!infile) { cerr<<"打开文件失败!"<<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; 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() { for (int i=0; i<number; i++) cout<<salarys[i]<<endl; } int main() { Salary a; a.set_salarys(); a.add_salarys(500); a.sort_salarys(); a.show_salarys(); return 0; }
(4)增加一个成员函数,将排序后结果保存到一个文件中。
/* *Copyright (c) 2015,烟台大学计算机学院 *All gight reserved. *文件名称:Demo.cpp *作者:邵帅 *完成时间:2015年03月25日 *版本号:v1.0 */ #include <iostream> #include <fstream> #include <cstdlib> using namespace std; class Salary { private: double salarys[500]; int number; public: void set_salarys( ); void add_salarys(int x); void sort_salarys(); void show_salarys( ); void save_date(); }; void Salary::set_salarys() { int i; ifstream infile("salarys.txt",ios::in); if(!infile) { cerr<<"打开文件失败!"<<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; 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::save_date() { int i; ofstream outfile("salarys_sort.txt",ios::out); if(!outfile) { cerr<<"打开文件失败!"<<endl; exit(1); } for(i=0; i<number; ++i) { outfile<<salarys[i]<<endl; } outfile.close(); } void Salary::show_salarys() { for (int i=0; i<number; i++) cout<<salarys[i]<<endl; } int main() { Salary a; a.set_salarys(); a.add_salarys(500); a.sort_salarys(); a.show_salarys(); a.save_date(); return 0; }
@ Mayuko