
C++启蒙之用C++制作程序
发布时间:2006-10-25 10:49:24 来源:天极开发 网友评论 0 条
现在我们已经解决了原始的书店问题了:我们必须读取销售记录文件并生成一个报告,显示出每本书的总共收入、平均售价和销售数量。
练习24:
编写一个程序来读取几个事务记录。对于每个新读取的事务记录,检测它的ISBN是否与前面的相同,计算每个ISBN有多少个事务记录。通过给出几条事务记录来测试这个程序。这些事务应该有多个ISBN,但是每个ISBN的记录应该集合在一起。
我们假设某个给定的ISBN的所有事务记录是在一起出现的。我们的程序将把每个ISBN的数据组合到Sales_item对象total中。我们从标准输入中读取的每个事务都被保存在第二个Sales_item对象trans中。每次读取新事务的时候,我们都会把它与total中的Sales_item对象比较。如果两个对象的ISBN相同,我们就更新total。否则我们就打印total中的值,并把它设置为刚才读取的事务记录的值。
这个程序是我们到目前为止见到的最复杂的一个,但是它只使用了我们已经遇到的一些工具。像通常一样,我们开始包含了标准类库中的iostream和自己的类中的Sales_item.h头文件。
在main中我们定义了所需要的对象:total用于统计给定ISBN的数据和,trans将保存我们读取的事务记录。我们先把一个事务读入total中并测试读取是否成功。如果读取失败了,那么就没有记录了,我们跳到最外面的else分支,打印一条消息警告用户没有输入信息。
假设成功地读取了一条记录,我们将执行if分支中的代码。第一个语句是while,它将在所有剩余的记录中进行循环。与前面的例子中的操作类似,我们的while条件从标准的输入中读取值并测试是否读取了有效的数据。在例子中,我们把Sales_item对象读入trans。只要读取成功,我们就执行while的主体。
While的主体是一个if语句。我们测试两个ISBN是否相同,如果相同,我们就把两个对象相加并把结果存储在total中。如果ISBN不同,我们就打印出total中存储的值并把trans赋给total。在执行if之后,我们返回while条件,读取下一个事务记录,直到读完记录。
一旦while完成了,我们仍然必须写出与最后的ISBN关联的数据。当while结束的时候,total包含了文件中最后的ISBN,但是我们没有机会打印它。我们在最后的语句代码块实现这个功能,它包含了最外面的if语句。
练习25:
使用Web站点中的Sales_item.h头文件,编译和执行这一部分中的书店程序。
练习26:
在书店程序中我们使用了加操作符而没有使用符合赋值操作符把trans加上total。为什么我们没有使用符合赋值操作符?
练习24:
编写一个程序来读取几个事务记录。对于每个新读取的事务记录,检测它的ISBN是否与前面的相同,计算每个ISBN有多少个事务记录。通过给出几条事务记录来测试这个程序。这些事务应该有多个ISBN,但是每个ISBN的记录应该集合在一起。
我们假设某个给定的ISBN的所有事务记录是在一起出现的。我们的程序将把每个ISBN的数据组合到Sales_item对象total中。我们从标准输入中读取的每个事务都被保存在第二个Sales_item对象trans中。每次读取新事务的时候,我们都会把它与total中的Sales_item对象比较。如果两个对象的ISBN相同,我们就更新total。否则我们就打印total中的值,并把它设置为刚才读取的事务记录的值。
#include <iostream>
#include "Sales_item.h"
int main()
{
// 定义变量来保存进行中的和与下一个记录
Sales_item total, trans;
// 需要处理数据吗?
if (std::cin >> total) {
// 是的,读取事务记录
while (std::cin >> trans)
if (total.same_isbn(trans))
// 匹配,更新total
total = total + trans;
else {
// 不匹配,打印和赋值
std::cout << total << std::endl;
total = trans;
}
// 记得打印最后的记录
std::cout << total << std::endl;
} else {
// 没有输入!提示用户
std::cout << "No data?!" << std::endl;
return -1; // 表示失败
}
return 0;
}这个程序是我们到目前为止见到的最复杂的一个,但是它只使用了我们已经遇到的一些工具。像通常一样,我们开始包含了标准类库中的iostream和自己的类中的Sales_item.h头文件。
在main中我们定义了所需要的对象:total用于统计给定ISBN的数据和,trans将保存我们读取的事务记录。我们先把一个事务读入total中并测试读取是否成功。如果读取失败了,那么就没有记录了,我们跳到最外面的else分支,打印一条消息警告用户没有输入信息。
假设成功地读取了一条记录,我们将执行if分支中的代码。第一个语句是while,它将在所有剩余的记录中进行循环。与前面的例子中的操作类似,我们的while条件从标准的输入中读取值并测试是否读取了有效的数据。在例子中,我们把Sales_item对象读入trans。只要读取成功,我们就执行while的主体。
While的主体是一个if语句。我们测试两个ISBN是否相同,如果相同,我们就把两个对象相加并把结果存储在total中。如果ISBN不同,我们就打印出total中存储的值并把trans赋给total。在执行if之后,我们返回while条件,读取下一个事务记录,直到读完记录。
一旦while完成了,我们仍然必须写出与最后的ISBN关联的数据。当while结束的时候,total包含了文件中最后的ISBN,但是我们没有机会打印它。我们在最后的语句代码块实现这个功能,它包含了最外面的if语句。
练习25:
使用Web站点中的Sales_item.h头文件,编译和执行这一部分中的书店程序。
练习26:
在书店程序中我们使用了加操作符而没有使用符合赋值操作符把trans加上total。为什么我们没有使用符合赋值操作符?
上一篇文章:C++启蒙之C++中的类
下一篇文章:C++中用赋值形式op=取代单独形式op
全站资源
- 微软官方入门教程19:轻松掌握Vista系统的快
- 微软2008大冲击,预借Vista SP1力促Vista市
- 在收件箱中获得 Windows Vista 的最新更新
- 微软官方Vista入门教程全集19篇(Vista学院
- Windows Vista 的成功将势不可挡
- 快快抛弃Vista,拥抱XP SP3!你觉得呢?
- 浅谈Vista系统关闭虚拟内存与使用内存盘加速
- 嘿嘿,按下键盘上面的三个键,马上让你的Vi
- Windows Vista的盗版率只有Windows XP的一半
- 3DMark和PCMark Vantage新版将只支持Vista系
阅读排行
- Borland 发布C++ Builder 2006 RAD 环境
- C/C++程序员应聘常见面试题深入剖析
- Visual C++常用数据类型转换详解
- C++中的 static 关键字
- 利用VC++实现局域网实时视频传输
- 浅谈C/C++内存泄漏及其检测工具
- 英国投票否决C++/CLI 微软强攻ISO标准受挫
- VC++下用MSComm控件实现串口通讯
- 伪随机数生成及在VC++中的实现
- VC++编程实现对波形数据的频谱分析
最新技术文档
- C++中用赋值形式op=取代单独形式op
- C++启蒙之用C++制作程序
- C++启蒙之C++中的类
- 解析C++/CLI之头文件、内联函数与数组
- C++启蒙之控制结构
- C++启蒙之注释符号
- 了解C++异常处理的系统开支
- C++语言学习之从结构到类
- C++中理解“传递参数”和异常之间的差异
- C++中禁止异常信息传递到析构函数外
专题教程
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
- Picasa中文版_Picasa教程 专题:清除流氓软件
- Firefox专题 seo搜索引擎优化专区
- 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
