设为首页 加入收藏

TOP

1.6 C++程序
2013-10-07 00:30:02 来源: 作者: 【 】 浏览:58
Tags:1.6 程序

1.6  C++(www.cppentry.com)程序

现在我们已准备好解决最初的书店问题:我们需要读销售交易文件,并产生报告显示每本书的总销售收入、平均销售价格和销售册数。

假定给定ISBN的所有交易出现在一起。程序将把每个ISBN的数据组合至命名为total的Sales_item对象中。从标准输入中读取的每一笔交易将被存储到命名为trans的第二个Sales_item对象中。每读取一笔新的交易,就将它与total中的Sales_item对象相比较,如果对象含有相同的ISBN,就更新total。否则就输出total的值,并使用刚读入的交易重置total。

#include <iostream>
#include "Sales_item.h"
int main()
{
    //  declare variables to hold running sum and data for the next record
    Sales_item total, trans;
    //  is there data to process 
    if (std::cin >> total) {
       // if so, read the transaction records
       while (std::cin >> trans)
           if  (total.same_isbn(trans))
                //  match: update the running total
                total = total + trans;
           else {
                //  no match: print & assign to total
                std::cout << total << std::endl;
                total = trans;
           }
       //  remember to print last record
       std::cout << total << std::endl;
    } else {
       //  no input!, warn the user
       std::cout << "No data !" << std::endl;
       return -1;   // indicate failure
    }
    return 0;
}

这个程序是到目前我们见到的程序中最为复杂的一个,但它仅使用了我们已遇到过的工具。和平常一样,我们从包含所使用的头文件开始:标准库中的iostream和自定义的头文件Sales_item.h。

在main中我们定义了所需要的对象:total,用来计算给定的ISBN的交易的总数,trans用来存储读取的交易。我们首先将交易读入total并测试是否读取成功,如果读取失败,表示没有记录,程序进入最外层的else分支,输出信息警告用户没有输入。

假如我们成功读取了一个记录,则执行if分支里的代码。首先执行while语句,循环遍历剩余的所有记录。就像1.4.3小节的程序一样,while循环的条件从标准输入中读取值并测试实际读取的是否是合法数据。本例中,我们将一个Sales_item对象读至trans。只要读取成功,就执行while循环体。

while循环体只是一条if语句。我们测试ISBN是否相等。如果相等,我们将这两个对象相加并将结果存储到total中。否则,我们就输出存储在total中的值,并将trans赋值给total来重置total。执行完if语句之后,将返回到while语句中的条件,读入下一个交易,直到执行完所有记录。

一旦while完成,我们仍须写出与最后一个ISBN相关联的数据。当while语句结束时,total包含文件中最后一条ISBN数据,但是我们没有机会输出这条数据。我们在结束最外层if语句的语句块的最后一条语句中进行输出。

习题                                                                                   

习题1.25  使用源自网站上的Sales_item.h头文件,编译并执行本节给出的书店程序。

习题1.26  在书店程序中,我们使用了加法操作符而不是复合赋值操作符将trans加到total中,为什么我们不使用复合赋值操作符?< xml:namespace prefix = std />

【责任编辑:董书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.1 基本内置类型 下一篇2.2 字面值常量(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: