返回:贺老师课程教学链接

【项目5 - 数组作数据成员】阅读教材P255例8.4。注意到类中的数据成员能够是数组。设计一个工资类(Salary),当中类的数据成员例如以下:

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元工资,排序后工资数据,然后输出结果。
(2)用salary[50]有限制。实际人数少时,会浪费空间,人数多了。无法完毕任务。在main()中先输入职工人数,作为參数传递给输入职工工资的成员函数,然后利用动态分配内存的机制。开辟一个大小正好的连续空间,完毕上面的工作。
(3)手工输入工资?!太让人不能忍受了。现给出包括了不足500个职工工资的文件salary.txt(下载),从文件里读数据,完毕上面的工作。
(4)添加一个成员函数。将排序后结果保存到一个文件里。
(5)用多文件的方式组织最后的程序。

[參考解答]

(1)在main函数定义Salary类的对象。输入工资,再给每一个人涨500元工资,排序后工资数据。然后输出结果。

#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; //number是数据成员,记录下职工人数
} 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(500);
s.sort_salarys();
s.show_salarys( );
return 0;
}

(2)用salary[50]有限制,实际人数少时,会浪费空间,人数多了。无法完毕任务。在main()中先输入职工人数。作为參数传递给输入职工工资的成员函数。然后利用动态分配内存的机制。开辟一个大小正好的连续空间。完毕上面的工作。

#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; //工资,定义为指针。将来指向一个动态数组
int number; //实际人数
}; 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( )
{
int i;
for (i=0;i<number;i++)
cout<<salarys[i]<<" ";
} int main( )
{
Salary s;
s.set_salarys( );
s.add_salarys(500);
s.sort_salarys();
s.show_salarys( );
return 0;
}

(3)手工输入工资?!

太让人不能忍受了。

现给出包括了不足500个职工工资的文件salary.txt(下载),从文件里读数据,完毕上面的工作。

(4)添加一个成员函数,将排序后结果保存到一个文件里。

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
const int N=500;
class Salary
{
public:
void read_data( );
void write_data();
void add_salarys(int x);
void sort_salarys();
void show_salarys( );
private:
double salarys[N]; //工资, 用指针更好
int number; //人数
}; void Salary::read_data( )
{
int i;
ifstream infile("salary.txt",ios::in); //以输入的方式打开文件
if(!infile) //測试是否成功打开
{
cerr<<"open error!"<<endl;
exit(1);
}
i=0;
while(infile>>salarys[i])
i++;
number=i;
infile.close();
} void Salary::write_data( )
{
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::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]<<"\t";
} int main( )
{
Salary s;
s.read_data( );
s.add_salarys(500);
s.sort_salarys();
s.write_data( );
s.show_salarys( );
return 0;
}

(5)用多文件的方式组织最后的程序。

(參考解答略)

《C++语言基础》实践參考——数组作数据成员的更多相关文章

  1. 《C语言及程序设计》实践參考——分数的累加

    返回:贺老师课程教学链接  项目要求 [项目1:分数的累加]编程序.输出1/3-3/5+5/7-7/9-+19/21的结果提示:假设直接解决上面的问题有困难.能够设计一条"由易到难" ...

  2. [Coursera][计算导论与C语言基础][Week 10]对于“数组应用练习”课后习题的思考题的一些想法

    (首先,关于Honor Code,我咨询过了Help Center,分享课后练习的思考题的想法是可以的(注意不是代码),但要标明引用,引用格式来源于https://guides.lib.monash. ...

  3. C++实践參考——二进制文件浏览器

    [项目-二进制文件浏览器] (1)做一个相似BinaryViewer的查看二进制文件的程序.输入文件名称后,能够以16进制和ASCII对比的方式列出该文件的内容.能够參考下图: 提示:循环中,一次读入 ...

  4. C语言基础 (6) 类型转换,数组与随机数

    复习 1.隐式转换 Double a Int b = 1 A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换) 2.强制类型转换 (变量)类型名 Int a = 1 // ...

  5. go语言基础之二维数组

    1.二维数组 示例: package main //必须有个main包 import "fmt" func main() { //有多少个[]就是多少维 //有多少个[]就用多少个 ...

  6. 嵌入式-C语言基础:二维数组的地址写法

    二维数组a的有关指针: 表示形式                                含义                                                   ...

  7. 嵌入式-C语言基础:二维数组

    二维数组的每个元素都是一个一维数组,例如int arr[2][3]={{1,2,3},{4,5,6}}; 下面通过几个例子来对二维数组进行深入了解:二维数组可以看作是一个父数组,他的每个元素都是一个一 ...

  8. C++走向远洋——36(数组做数据成员,工资)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:salarly.cpp * 作者:常轩 * 微信公众号:Worl ...

  9. Java基础02 方法与数据成员

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...

随机推荐

  1. springmvc中使用response的out.print问题

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws E ...

  2. docker学习笔记:容器的网络设置

    创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...

  3. ubuntu学习: apt-get命令

    1.apt-get update 更新软件源本地缓存文件 2.apt-cache search 查找软件包,找到想要安装的包,如 sudo apt-cache search mysql-server ...

  4. 基于visual Studio2013解决算法导论之018栈实现(基于链表)

     题目 用链表实现栈 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...

  5. Install TightVNC Server in RHEL/CentOS and Fedora to Access Remote Desktops

    Virtual Networking Computing (VNC) is a Kind of remote sharing system that makes it possible to take ...

  6. muduo 与 libevent2 吞吐量对照

    libevent 是一款很好用的 C 语言网络库,它也採用 Reactor 模型,正好能够与 muduo 做一对照. 本文用 ping pong 測试来对照 muduo 和 libevent2 的吞吐 ...

  7. Adobe Acrobat Ⅺ Pro安装激活

    1.注意一定要断网安装,如果你有防火墙拦截亦可(注意:系统自带那防火墙不行). 2.将AcrobatPro_11_Web_WWMUI.exe解压到一个目录下,找到目录下的setup.exe安装,安装时 ...

  8. 小记:css特殊性

    今天早上遇到了个小bug,刚好用从css权威指南学到的知识解决了 html结构 <ul class="portlet-nav"> <li><a id= ...

  9. @(报错)could not find the main class, Program will exit(已解决)

    原文 @(报错)could not find the main class, Program will exit(已解决)      (很抱歉,如果你希望能更加清楚地看清图片或是图上的文字的话,你可以 ...

  10. HDU 4712Hamming Distance(随机函数运用)

    Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...