当前位置: 首页 > news >正文

使用 Sales_data 类实现交易合并(三十)

1. Sales_data 类定义

假设 Sales_data 类定义在头文件 Sales_data.h 中,其基本定义如下:

// Sales_data.h
#ifndef SALES_DATA_H
#define SALES_DATA_H

#include <string>

struct Sales_data {
    std::string bookNo;      // ISBN 编号
    unsigned units_sold = 0; // 售出数量,默认初始化为 0
    double revenue = 0.0;    // 销售收入,默认初始化为 0.0
};

#endif // SALES_DATA_H

该结构体通过类内初始值确保每个 Sales_data 对象创建时各数据成员具有合理的默认值。

2. 使用 Sales_data 类实现交易合并

下面的示例程序展示了如何使用 Sales_data 类进行交易合并操作。程序主要分为以下几个部分:

  1. 包含必要的头文件;
  2. 声明 Sales_data 对象,用于分别存储两笔交易数据;
  3. 从标准输入中读入每笔交易的 ISBN、销售数量和单价,并计算销售收入;
  4. 检查两笔交易的 ISBN 是否一致;如果一致则计算合计销售量、总销售额和平均价格,并输出;否则输出错误提示。

2.1 示例代码

#include <iostream>
#include <string>
#include "Sales_data.h"

int main() {
    Sales_data data1, data2; // 用于存储两笔交易
    double price = 0.0;      // 用于临时存储单价

    // 读入第一笔交易:ISBN、销售数量、单价
    std::cin >> data1.bookNo >> data1.units_sold >> price;
    // 计算第一笔交易的销售收入
    data1.revenue = data1.units_sold * price;

    // 读入第二笔交易:ISBN、销售数量、单价
    std::cin >> data2.bookNo >> data2.units_sold >> price;
    // 计算第二笔交易的销售收入
    data2.revenue = data2.units_sold * price;

    // 检查两笔交易的 ISBN 是否相同
    if (data1.bookNo == data2.bookNo) {
        // 计算合计销售量和销售收入
        unsigned totalCnt = data1.units_sold + data2.units_sold;
        double totalRevenue = data1.revenue + data2.revenue;

        // 输出合并后的结果:ISBN、总销售量、总销售额
        std::cout << data1.bookNo << " " 
                  << totalCnt << " " 
                  << totalRevenue << " ";

        // 输出平均价格(若总销售量不为 0)
        if (totalCnt != 0)
            std::cout << totalRevenue / totalCnt << std::endl;
        else
            std::cout << "(no sales)" << std::endl;

        return 0; // 成功标志
    } else {
        // 两笔交易的 ISBN 不一致,输出错误信息
        std::cerr << "Data must refer to the same ISBN" << std::endl;
        return -1; // 失败标志
    }
}

2.2 程序说明

  1. 包含头文件
    程序首先包含了 <iostream><string>,以及自定义数据结构 Sales_data.h。由于 Sales_data 中使用了 string 类型,所以必须包含 <string>

  2. 读取数据
    程序定义了两个 Sales_data 对象 data1data2,用来存储两笔交易记录。通过 std::cin 分别读取每笔交易的 ISBN(存储到 bookNo)、销售数量(存储到 units_sold)和单价(存储到临时变量 price)。然后,程序通过乘法计算出每笔交易的销售收入,并存储到 revenue 成员中。

  3. 检查 ISBN 并求和
    程序比较 data1.bookNodata2.bookNo,如果两者相同,则计算两笔交易的总销售数量和总销售收入,并进一步计算平均价格。如果总销售量为零,则输出 “(no sales)”;否则输出平均价格。

  4. 错误处理
    如果两笔交易的 ISBN 不一致,则输出错误信息,并返回错误码 -1。

3. 小结

  • 数据结构定义
    使用 struct 定义 Sales_data 类型,将相关数据成员(ISBN、销售数量、销售收入)组合在一起,并利用类内初始值保证默认初始化。

  • 分步处理交易数据
    程序首先读取交易记录,再计算每笔交易的销售收入。然后检查 ISBN 是否一致,若一致则进行合并统计,否则输出错误信息。

  • 代码组织
    将 Sales_data 的定义放在单独的头文件中有助于代码模块化和维护,使用者只需包含头文件即可使用该数据结构。

这种简单的 Sales_data 使用示例为后续更复杂的类设计与操作打下基础。在后续章节中,我们将进一步探讨如何为自定义数据结构添加操作成员、运算符重载以及与模板相关的高级特性。

参考资料

  • 《C++ Primer》关于 struct 和类的基本概念
  • 各大 C++ 编码规范和示例程序

通过这篇示例,我们可以看到如何利用自定义数据结构处理实际问题,并为以后的 C++ 面向对象编程积累经验。

相关文章:

  • Clion刷题攻略-配置Cmake
  • TypeError: __init__() got an unexpected keyword argument ‘device_type‘
  • 模型部署与调用
  • OrbStack 作为 Mac 用户的 Docker 替代方案
  • 数据结构每日一题day9(顺序表)★★★★★
  • Thrust库中,host_vector和device_vector数据之间如何高效传输,有异步传输方式吗?
  • Linux 企业项目服务器组建(附脚本)
  • C++学习笔记(三十二)——priority_queue
  • Java基础 4.1
  • OpenLayers:海量图形渲染之矢量切片
  • 07-01-自考数据结构(20331)- 排序-内部排序知识点
  • 【14】Selenium的基本使用
  • 一道积分_4
  • DJI上云API使用与配置
  • spring打包,打包错误
  • 供应链管理-经济指数:GDP、GNP、NNP、NDP、PPI、CPI、DPI...
  • WordPress汉主题
  • 二、基本应用工具
  • 云原生周刊:Kubernetes v1.33 要来了
  • 针对单台浪潮服务器运行Windows Server 2019和SQL Server的MES系统场景、高效能监控策略(兼顾软硬件健康)
  • 泽连斯基:正在等待俄方确认参加会谈的代表团组成
  • 十年磨一剑!上海科学家首次揭示宿主识别肠道菌群调控免疫新机制
  • 金砖国家召开经贸联络组司局级特别会议,呼吁共同抵制单边主义和贸易保护主义
  • 男子不满和睦家医院手术效果还遇到了“冒牌医生”?院方回应
  • 沧州制造展现硬核实力:管道装备支撑大国基建,核电锚栓实现国产
  • 新疆交通运输厅厅长西尔艾力·外力履新吐鲁番市市长候选人