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

C++ 项目实战书店销售记录统计程序(十)

一、问题描述

我们希望实现一个程序:

从文件中读取若干条销售记录,按照 ISBN 归类,统计每本书的总销量、总销售额以及平均售价。

数据要求:

  • 每条销售记录包括:ISBN 售出册数 单价
  • 同一个 ISBN 的记录 在输入中是连续出现的

二、设计思路

程序中我们使用两个 Sales_item 类型的变量:

变量名作用
total保存当前 ISBN 的累计数据
trans用于读取每一条新的销售记录

程序逻辑:

  1. 尝试读取第一条记录并存入 total
  2. 如果读取成功,进入循环读取剩余数据;
  3. 每读取一条记录:
    • trans.isbn() 等于 total.isbn(),合并记录;
    • 否则,输出当前 total,并将其更新为 trans
  4. 所有数据读取完后,输出最后一条 total

三、程序源码

#include <iostream>
#include "Sales_item.h"

int main() {
    Sales_item total;  // 保存当前 ISBN 的累计销售数据

    // 1. 读取第一条记录,并检查输入是否成功
    if (std::cin >> total) {
        Sales_item trans;  // 保存当前读取的销售记录

        // 2. 读取剩余记录
        while (std::cin >> trans) {
            if (total.isbn() == trans.isbn()) {
                total += trans;  // 合并数据
            } else {
                std::cout << total << std::endl;  // 输出上一 ISBN 的结果
                total = trans;  // 开始统计新的 ISBN
            }
        }

        // 3. 输出最后一本书的统计结果
        std::cout << total << std::endl;
    } else {
        // 4. 无输入数据,打印错误信息
        std::cerr << "No data?!" << std::endl;
        return -1;
    }

    return 0;
}

四、输入示例

0-201-70353-X 2 24.99
0-201-70353-X 3 24.99
0-201-88954-X 1 30.00

五、输出结果

0-201-70353-X 5 124.95 24.99
0-201-88954-X 1 30.00 30.00

六、关键知识点回顾

输入流控制循环

while (std::cin >> trans)

这是 C++ 中读取不定数量输入的标准方式。

成员函数调用

total.isbn()

通过成员函数访问 Sales_item 对象的 ISBN,而不直接访问内部数据。

运算符重载:+=

total += trans;

用于将两条销售记录合并(前提是 ISBN 相同)。

七、总结

这个程序是对 C++ 基础语法的综合应用:

  • ✔️ 类的使用与封装
  • ✔️ 成员函数的调用
  • ✔️ 输入输出流处理
  • ✔️ 条件语句和循环
  • ✔️ 运算符重载应用

它是一个很适合入门 C++ 项目实战的案例,也为后续学习文件流、容器(如 map)、算法等内容打下了基础。

相关文章:

  • 论文阅读:2023 arxiv Provable Robust Watermarking for AI-Generated Text
  • tryhackme——The Lay of the Land
  • Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.3~2.6)
  • 大数据学习栈记——HBase操作(shell java)
  • 信奥赛CSP-J复赛集训(模拟算法专题)(25):P3955 [NOIP 2017 普及组] 图书管理员
  • 计算机网络基础之三种交换技术及其性能分析
  • 六十天前端强化训练之第二十四天之Vue 模板语法与 v-for 指令大师级详解
  • 【Linux之Shell脚本实战】Linux服务器输出美观漂亮的html巡检报告
  • 使用Docker部署RabbitMQ
  • 电子学会—2023年12月青少年软件编程(图形化)三级等级考试真题——打砖块游戏
  • 【SpringCloud】OpenFeign
  • 腾讯云宝塔安装ffmpeg
  • vue 对接 paypal 订阅和支付
  • Android10 系统截屏功能异常的处理
  • DeepSeek算力服务器的选型--青岛佰优联创新科技有限公司
  • OpenGL ES ->乒乓缓冲,计算只用两个帧缓冲对象(Frame Buffer Object)+叠加多个滤镜作用后的Bitmap
  • SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)
  • Linux系统中关闭Docker服务并禁止其开机自启 、docker 安装目录结构分析 | 【du -sh *】
  • 2025年- G24-Lc98-217.包含重复(使用hashSet解决)-java版
  • 数据库相关(AI回答)
  • 重温经典|开播20周年,仙剑的那些幕后你知道吗?
  • 法治日报:商品明细是隐私,外卖员快递员不应知晓
  • 圆桌丨权威专家解读中俄关系:在新形势下共同应对挑战、共创发展机遇
  • 安徽安庆市委书记张祥安调研假日经济和旅游安全工作
  • 人民日报和音:汇聚和平与发展的全球南方力量
  • 人民日报头版头条:青春为中国式现代化挺膺担当