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

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)、算法等内容打下了基础。


http://www.kler.cn/a/597194.html

相关文章:

  • Redis 事件机制详解
  • Go语言反射机制在数据库同步中的实战应用 —— 动态赋值与类型转换详解
  • JVM 知识点梳理
  • Python Django入门(建立项目)
  • 【数据分享】我国乡镇(街道)行政区划数据(免费获取/Shp格式)
  • C语言入门教程100讲(8)算术运算符
  • 深度学习--概率
  • kind(Kubernetes IN Docker)
  • git的底层原理
  • 设计和布局硬件电路是嵌入式系统开发的重要环节
  • 学习记录-js进阶-性能优化
  • 安全守护:反光衣检测技术的革新之路
  • Python深度学习环境配置指南:PyTorch、CUDA、cuDNN详解
  • SSH密钥认证 + 文件系统权限控制 + Git仓库配置+封存与解封GIT仓库
  • Redis 全攻略:从基础操作到 Spring Boot 集成实战
  • uniapp可拖拽消息数徽标draggable-badge,仿手机qq聊天列表未读数徽标动效
  • 【第12节】windows sdk编程:动态链接库与静态库
  • AI代码编辑器:Cursor和Trae
  • git tag以及git
  • 有序数组双指针问题