IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++primer 练习8.7和8.8 -> 正文阅读

[C++知识库]C++primer 练习8.7和8.8

sale_item.h

#ifndef sale_item_H_
#define sale_item_H_
#include<iostream>
#include<fstream>
#include<string>
class sale_item;
std::istream& read(std::istream& is , sale_item& si1 );
std::ostream& print(std::ostream& os, const sale_item& si1);
sale_item add(sale_item& lhs, sale_item& rhs);
class sale_item {
	friend std::istream& read(std::istream& is, sale_item& si1);
	friend std::ostream& print(std::ostream& os, const sale_item& si1);
	friend sale_item add(sale_item& lhs, sale_item& rhs);
public:
//委任构造函数
	sale_item() = default;
	sale_item(const std::string& s1, const unsigned int i, double j) :bookNo(s1) , units_sold(i) , revence(i*j) {}

	sale_item(const std::string& s1) :sale_item(s1, 0, 0) { ; }
	sale_item(std::istream& is) :sale_item() { read(is , *this ); }
//成员函数
	std::string& isbn() { return bookNo; }
	sale_item& combin(sale_item&rhs) {
		revence += rhs.revence;
		units_sold += rhs.units_sold;
		return *this;
	};
private:
//数据成员
	std::string bookNo;
	unsigned int units_sold = 0;	
	double revence = 0.0;
};
inline std::istream& read(std::istream& is, sale_item& si1) {
	if (is) {
		double Rprice = 0;
		is >> si1.bookNo >> si1.units_sold >> Rprice;
		si1.revence = si1.units_sold * Rprice;
	}
	return is;
}
inline std::ostream& print(std::ostream& os, const sale_item& si1) {
	if (os) {

		os << si1.bookNo << si1.units_sold << si1.revence;
	}
	return os;
}
inline sale_item add(sale_item& lhs, sale_item& rhs) {
	sale_item sum = lhs;
	sum.combin(rhs);
	return sum;

}


#endif // !sale_item_H_

8,7.cpp

//8.6 重写7.1.1节的书店程序,从一个文件中读取交易记录。将文件名作为一个参数传递给main。
//8.7 修改上一节的书店程序,将结果保存到一个文件中。将输出文件名作为第二个参数传递给main函数。
//8.8 修改上一题的程序,将结果追加到给定的文件末尾。
//对同一个输出文件,运行程序至少两次,检验数据是否得以保留。(担心最开始是空文件的情况)
#include <iostream>
#include <fstream>
#include <string>
#include "sale_item.h"

int main(int argc, char** argv)
{
    //std::cout << argv[1] << std::endl;
    //std::cout << argv[2] << std::endl;
    int i = 0;
    std::ifstream ifs(argv[1]);
    std::ofstream ofs(argv[2],std::ofstream::app);//在这里对8.7节的程序进行了修改
    //运行成功

    sale_item total(ifs);
    if (ifs && ofs) {
        if (!total.isbn().empty())
        {
            sale_item trans;

            while (read(ifs, trans))
            {
                if (total.isbn() == trans.isbn())
                {
                    total.combin(trans);
                }
                else
                {
                    print(ofs, total);
                    ofs << std::endl;
                    total = trans;
                }
            }
            print(ofs, total);
            std::cout << std::endl;

            return 0;
        }
        else
        {
            std::cerr << "No data?!" << std::endl;
            return -1;  // indicate failure
        }
    }
}

终端运行命令

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-03 01:01:01  更:2022-02-03 01:02:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:50:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码