C++ //练习 8.8 修改上一题的程序,将结果追加到给定的文件末尾。对同一个输出文件,运行程序至少两次,检验数据是否得以保留。

news2025/1/19 20:29:03

C++ Primer(第5版) 练习 8.8

练习 8.8 修改上一题的程序,将结果追加到给定的文件末尾。对同一个输出文件,运行程序至少两次,检验数据是否得以保留。

环境:Linux Ubuntu(云服务器)
工具:vim

 

代码块
*************************************************************************
	> File Name: ex8.8.cpp
	> Author: 
	> Mail: 
	> Created Time: Sun 25 Feb 2024 12:26:50 PM CST
 ************************************************************************/

#include<iostream>
#include<fstream>
using namespace std;

struct Sales_data{
    string isbn() const;
    Sales_data& combine(const Sales_data&);
    double avg_price() const;

    string bookNo;
    unsigned units_sold = 0;
    double price = 0.0;
    double revenue = 0.0;
};

string Sales_data::isbn() const{
    return this->bookNo;
}

Sales_data& Sales_data::combine(const Sales_data &rhs){
    units_sold += rhs.units_sold;
    revenue += rhs.revenue;
    return *this;
}

double Sales_data::avg_price() const{
    if(units_sold){
        return revenue / units_sold;
    }
    else{
        return 0;
    }
}

Sales_data add(const Sales_data &sd1, const Sales_data &sd2){
    Sales_data t = sd1;
    t.combine(sd2);
    return t;
}

ostream &print(ostream &output, const Sales_data &sd){
    output<<sd.bookNo<<" "<<sd.units_sold<<" "<<sd.price<<" "<<sd.revenue<<" "<<sd.avg_p
    return output;
}

istream &read(istream &input, Sales_data &sd){
    input>>sd.bookNo>>sd.units_sold>>sd.price;
    sd.revenue = sd.price * sd.units_sold;
    return input;
}

int main(int argc, char *argv[]){
    if(argc < 2){
        cerr<<"No File Name."<<endl;
        return -1;
    }

    ifstream in(argv[1]);
    ofstream out("8.7.txt", ofstream::app);
    if(!in){
        cerr<<"Cannot open file!"<<endl;
        return -1;
    }

    Sales_data total;
    if(read(in, total)){
        Sales_data trans;
        while(read(in, trans)){
            if(total.isbn() == trans.isbn()){
                total.combine(trans);
            }
            else{
                print(out, total)<<endl;
                total = trans;
            }
        }
        print(out, total)<<endl;
    }
    else{
        cout<<"No data?!"<<endl;
    }
    
    return 0;
}
运行结果显示如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469917.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

readproc.h

Ubuntu22.04系统中 编译自己写的程序的时候&#xff0c;报错&#xff0c;显示找不到readproc.h文件&#xff0c;通过安装libprocps-dev解决 sudo apt install libprocps-dev

5.1 Ajax数据爬取之初介绍

目录 1. Ajax 数据介绍 2. Ajax 分析 2.1 Ajax 例子 2.2 Ajax 分析方法 &#xff08;1&#xff09;在网页页面右键&#xff0c;检查 &#xff08;2&#xff09;找到network&#xff0c;ctrl R刷新 &#xff08;3&#xff09;找 Ajax 数据包 &#xff08;4&#xff09;…

美联储突然降息无望

作者&#xff1a;秦晋 我们知道&#xff0c;影响比特币未来1-2年市场走向的重要三因素是比特币ETF、比特币减半以及美联储降息。 如果说前两者是影响比特币市场比较紧密的微观因素。那么美联储降息就是影响比特币市场的重要宏观因素。如何看懂宏观因素&#xff1f;尽量倾听和观…

从源码学习static的使用

从源码学习static的使用 前言 ​ static意味静态的&#xff0c;在Java中&#xff0c;主要用来修饰类级别的变量或方法等&#xff0c;被修饰的内容&#xff0c;表示随着类的加载而加载&#xff0c;而不是具体的实例级别。 ​ 具体到static的使用场景&#xff0c;主要有以下用…

vue3(vite)+electron打包踩坑记录(1)

vue3(vite)electron打包踩坑记录 - 打包vue 第一步 编译vue 使用vite构建vue&#xff0c;package.json如下 {"name": "central-manager","private": true,"version": "0.0.0","type": "commonjs",&q…

第2.5章 StarRocks表设计——行列混存表

注&#xff1a;本篇文章阐述的是StarRocks- 3.2.3版本的行列混存表 一、概述 1.1 背景 StarRocks 基于列存格式引擎构建&#xff0c;在高并发场景&#xff0c;用户希望从系统中获取整行数据。当表宽时&#xff0c;列存格式将放大随机IO和读写。自3.2.3开始&#xff0c;StarRo…

让C语言代码变抽象(其三)

目录 前言&#xff1a; 我们直接看代码 前言&#xff1a; 今天我在写判断语句代码的时候&#xff0c;又想到一个更抽象的代码。 今天我将要将我之前写的抽象遍历代码变得更抽象。 我们直接看代码 这里我们用到的是布尔&#xff0c;当条件为假时值为0&#xff1b; 所以我们这…

力扣随笔之移除元素(简单27)

思路&#xff1a;定义一个指针left&#xff0c;使该指针及该指针左边的数全部都不等于val&#xff0c;定义一个遍历指针i&#xff0c;若nums[i] val&#xff0c;则i自加&#xff0c;若nums[i] ! val&#xff0c;则将left&#xff0c;并将nums[i]的值赋给nums[left]&#xff0c…

后端程序员入门react笔记——react的diff算法(三)

diffing算法 虚拟dom 我们知道&#xff0c;react里面操作的都是虚拟dom&#xff0c;最后经过render渲染为真正的dom&#xff0c;那么为什么要提出虚拟dom这个概念呢&#xff1f;其实就是将逻辑和视图区分开&#xff0c;react的虚拟dom&#xff0c;就相当于mvc的c&#xff0c;…

设计推特(Leetcode355)

例题&#xff1a; https://leetcode.cn/problems/design-twitter/ 分析&#xff1a; 推特其实类似于微博&#xff0c;在微博中可以发送文章。 求解这类题目&#xff0c;我们需要根据题目需求&#xff0c;利用面向对象的思想&#xff0c;先对需求做一个抽象&#xff0c;看看能…

自定义 Git Hook

前言 前端同学大概都熟悉 husky 这个工具&#xff0c;他可以直接在项目中添加 git hooks&#xff0c;主要解决了 git hooks 不会同步到 git 仓库的问题&#xff0c;保证了每个开发人员的本地仓库都能执行相同的 git hooks。 但是 husky 毕竟是一个 JS 生态的工具&#xff0c;…

ChatGPT助您提升求职技能

目录 ChatGPT可以作为求职技能的学习和提升平台 ChatGPT可以帮助求职者提升沟通和表达能力 ChatGPT还可以帮助求职者提升问题解决能力和创新能力 ChatGPT还可以帮助求职者建立自信心和自我推销能力 随着科技的迅速发展&#xff0c;人们的生活方式和工作方式也在不断地变革。…

移动端自动化常用的元素定位工具 介绍

在移动端自动化测试和开发中&#xff0c;元素定位是非常关键的一步。以下是一些常用的工具和技术来帮助开发者或测试工程师在移动设备上定位元素&#xff1a; 1. **UiAutomator**: - **UiAutomator** 是 Android 官方提供的自动化测试框架。它可以用来编写测试脚本&…

交易快讯:4拼域名以10,000元被秒

交易新闻 ——30万美元易手&#xff0c;60万美元易手&#xff0c;.au 10万美元易主。 近期&#xff0c;域名交易金额可能达到130万美元&#xff08;逾130万元人民币&#xff09;。 ——双拼在域名交易平台上以2万元的固定价格进行交易。 该域名直接对应了南瓜的含义。 另外&a…

CSRF靶场实战

DVWA靶场链接&#xff1a;https://pan.baidu.com/s/1eUlPyB-gjiZwI0wsNW_Vkw?pwd0b52 提取码&#xff1a;0b52 DVWA Low 级别打开靶场&#xff0c;修改密码 复制上面的 url&#xff0c;写个简单的 html 文件 <html <body> <a hrefhttp://127.0.0.1/DVWA/vulne…

常见的排序算法整理

1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始&#xff0c;然后依次和剩余的元素进行比较&#xff0c;若小于相邻元素&#xff0c;则交换两者位置&#xff0c;同时将较大元素作为下一个比较的基准元素&#xff0c;继续将该元素与其相邻的元素进行比…

企业型多域名SSL证书

多域名SSL证书是目前市场上用的比较多的一种&#xff0c;主要解决多个不同规则的域名申请&#xff0c;但不适合主域名&#xff08;根域名&#xff09;相同的域名&#xff0c;因为这种域名直接申请通配符。 企业型其实就是OV类型或者EV类型&#xff0c;由于在CA/B产品名称规范中…

day13_String字符串的使用-课后练习 - 参考答案

文章目录 day13_课后练习代码编程题第1题第2题第3题第4题第5题第6题第7题第8题第9题第10题第11题第12题第13题 代码阅读题第14题第15题第16题第17题第18题第19题第20题 day13_课后练习 代码编程题 第1题 反转键盘录入的字符串。代码实现&#xff0c;参考效果如图所示&#x…

孙艺洲驾考再传捷报,科目二通过。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 在《飞驰人生2》的首映礼盛大举行的日子里&#xff0c;猴哥意…

基于ZYNQ的PCIE高速数据采集卡的设计(五)上位机软件设计

4.4 上位机软件设计 上位机主要完成数据的接收和保存文件等功能。由于采集卡是一种 PCIE 设备&#xff0c; 需要一种 PCIE 设备的驱动程序为基础进行开发。本设计选择 WinDriver 开发工具来 生成 PCIE 设备驱动和函数库&#xff0c;并基于该驱动在 Visual Studio(…