首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

1.6  C++程序

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

假定给定ISBN的所有交易出现在一起。程序将把每个ISBN的数据组合至命名为totalSales_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中,为什么我们不使用复合赋值操作符?

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论