- 论坛徽章:
- 0
|
书中用了一个工资程序(我知道很俗,这一点不用提了)的成长演变,从面向结构的函数,到面向对象的类和对象,再到STL的容器和算法阿,展示了如何使用C++的各个部分来解决问题。
这是第一部分,数组
4.4.2 工资程序成长记:用数组处理批量数据
还记得在3.6小节中,我们的冒牌程序员小陈要解决的那个管理查询100 000个工资数据的艰巨任务吗?在继续学习了数组以及条件、循环控制结构等知识之后,在他看来,当初似乎不可能完成的艰巨任务,现在也不过是小菜一碟了。很快,他就利用数组和各种控制结构,将这个艰巨任务完成了:
// 工资程序
#include <iostream>
using namespace std;
int _tmain(int argc, TCHAR* argv[])
{
// 定义数组的最大数据元素量,
// 表示这个程序最多可以处理100 000个工资数据
const int MAX = 100000;
// 定义数组,这个数组可以包含100000个int数据
int nSalary[MAX];
// 定义记录工资总值、最小值和最大值的变量
// 因为min和max用于记录最小值和最大值,
// 所以我们将其初始化为int数据的最大值和最小值
int nTotal = 0;
int min = INT_MAX;
int max = INT_MIN;
// 利用for循环逐个输入工资数据
// 因为在for循环之外还需要用到i作为输入的数据个数,
// 所以这里将for循环的初始化语句放到for循环之前
int i = 0;
for(; i < MAX; ++i) // 初始化语句留空
{
// 提示用户输入
cout<<"请输入"<<i<<"号员工的工资(-1表示输入结束):"<<endl;
// 将输入的数据保存到数组的nSalary[i]数据元素
cin>>nSalary[i];
// 利用条件结构,检查是否输入结束
if(-1 == nSalary[i])
{
// 输出统计结果
cout<<"工资输入结束,一共输入了"<<i<<"个工资数据。"<<endl;
cout<<"其中,"<<endl;
cout<<"最大值是"<<max<<endl;
cout<<"最小值是"<<min<<endl;
// 计算平均工资
float fAver = 0.0;
if(0 != i)
fAver = (float)nTotal/i;
cout<<"平均工资是"<<fAver<<endl;
break;
}
// 累计工资总额,开始下一次输入
nTotal += nSalary[i];
// 判断本次输入是否是最大值或最小值
if(nSalary[i] < min)
min = nSalary[i];
if(nSalary[i] > max)
max = nSalary[i];
}
// 获得一共输入了多少个工资数据
int nCount = i-1;
// 构造无限循环进行工资查询
while(true)
{
int n = 0;
// 提示用户输入
cout<<"请输入要查询的员工序号(0-"<<nCount-1<<",-1表示结束查询):"<<endl;
// 获取用户输入的员工序号并保存到n
cin>>n;
// 对用户输入进行检查
if(-1 == n) // 是否结束
{
// 查询结束,用break结束循环
cout<<"查询完毕,感谢使用!"<<endl;
break;
}
else if(n<0||n>=nCount) // 是否超出序号范围
{
// 输入超出范围,用continue开始下一次循环
cout<<"输入的序号"<<n<<"超出了序号范围0-"
<<nCount-1<<",请重新输入。"<<endl;
continue;
}
// 输入合法,输出用户查询的员工工资
cout<<"员工序号:"<<n<<endl;
cout<<"员工工资:"<<nSalary[n]<<endl;
}
return 0;
}
利用C++中的条件和循环控制结构,这个工资程序不仅可以输入工资数据,还可以对工资数据进行查询。同时借助于数组保存和处理批量数据的强大威力,现在的工资程序,可以轻松处理成千上万的员工工资数据,小陈再也不用为如何处理更多的数据而发愁了。于是他赶紧把这个程序拿去让老板试试。老板试了试发现,这个工资程序不仅能够处理足够多的工资数据,能够对工资数据进行查询,同时还有非常好的用户操作提示,连三岁小孩子都会用。老板非常高兴,喜笑颜开地对小陈说:“干得不错,下个月,涨工资,啊哈哈哈…… ”听到这句话,小陈在心里偷着乐,心中暗想,能够处理大量数据,不过是数组的功劳,而统计与查询,也不过是条件和循环结构的综合运用。当初看似无法完成的艰难任务,现在利用C++几下就完成了,还得到了老板的夸奖。看来真是“学好C++,走遍天下都不怕”。
|
|