C++Primer第五版 练习8.6答案详解
重写7.1.1节书店程序(第299页),从文件中读取一个交易记录。将文件名作为一个参数传递给main。
本题所需源文件如下:
Sales_data.h文件:
#pragma once #include<iostream>
#include<string>
using namespace std; class Sales_data
{
friend std::istream & operator >>(std::istream&, Sales_data&);
friend std::ostream & operator <<(std::ostream&, const Sales_data&);
friend bool operator <(const Sales_data&, const Sales_data&);
friend bool operator ==(const Sales_data&, const Sales_data&); public:
Sales_data() = default;
Sales_data(const std::string &book) : bookNo(book) {};
Sales_data(std::istream &is) { is >> *this; }
// Sales_data();
// ~Sales_data();
public:
Sales_data&operator +=(const Sales_data&);
string isbn()const { return bookNo; }
private:
std::string bookNo;
unsigned units_sold = ;
double sellingprice = 0.0;
double saleprice = 0.0;
double discount = 0.0;
}; inline bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs)
{
return lhs.isbn() == rhs.isbn();
}
inline bool operator ==(const Sales_data &lhs, const Sales_data &rhs)
{
return lhs.units_sold == rhs.units_sold && lhs.sellingprice == rhs.sellingprice && lhs.saleprice == rhs.sellingprice && lhs.isbn() == rhs.isbn(); }
inline bool operator !=(const Sales_data &lhs, const Sales_data &rhs)
{
return !(lhs == rhs);
}
Sales_data.cpp文件:
#include "Sales_data.h" Sales_data operator+(const Sales_data&, const Sales_data&); Sales_data& Sales_data::operator+=(const Sales_data&rhs)
{
units_sold += rhs.units_sold;
saleprice = (rhs.saleprice*rhs.units_sold + saleprice*units_sold) / (rhs.units_sold + units_sold);
if (sellingprice != )
discount = saleprice / sellingprice;
return *this;
} Sales_data operator + (const Sales_data& lhs, const Sales_data& rhs)
{
Sales_data ret(lhs);
ret += rhs;
return ret;
} std::istream& operator >>(std::istream& in, Sales_data& s)
{
in >> s.bookNo >> s.units_sold >> s.sellingprice >> s.saleprice;
if (in&&s.saleprice != )
s.discount = s.saleprice / s.sellingprice;
else
s = Sales_data();
return in;
} std::ostream& operator << (std::ostream& out, const Sales_data& s)
{
out << s.isbn() << " " << s.units_sold << " " << s.sellingprice << " " << s.saleprice << " " << s.discount;
return out;
}
主函数文件:
#include<iostream>
#include<fstream>
#include"Sales_data.h" using namespace std; int main(int argc, char *argv[])
{ if (argc != )
{
cerr << "请给出文件名" << endl;
return -;
} ifstream in(argv[]);
if (!in)
{
cerr << "无法打开输入文件" << endl;
return -;
} cout << "请输入交易记录(ISBN、销售量、原价、实际售价):" << endl;
Sales_data total;
if (in>>total)
{
Sales_data trans;
while (in >> trans)
{
if (total.isbn() == trans.isbn())
total += trans;
else
{
cout << total << endl;
total = trans;
}
}
cout << total << endl;
}
else
{
cerr << "No data?!" << endl;
return -;
}
return ;
}
存放交易记录的文件设置:
将存放交易记录的文件放置于 .cpp同级目录下,如下图:
交易记录格式如下图所示:
基于VS从命令行获取参数的设置方法:
命令行参数的设置方式按照下图所示步骤进行:
(1)鼠标右键->属性
(2)参照下图设置命令行
程序运行结果如下:
C++Primer第五版 练习8.6答案详解的更多相关文章
- 【转】apue《UNIX环境高级编程第三版》第一章答案详解
原文网址:http://blog.csdn.net/hubbybob1/article/details/40859835 大家好,从这周开始学习apue<UNIX环境高级编程第三版>,在此 ...
- 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...
- C++ 11 从C++ primer第五版的学习笔记
1. auto (page107) auto 推断会忽略const const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...
- C++PRIMER第五版练习题答案第一章
C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...
- “全栈2019”Java第五十四章:多态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第五十章:继承与构造方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了!
大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis--不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的NoSQL数据库. ...
- C++Primer第五版学习笔记
<C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章 开始 ...
- C++学习书籍推荐《C++ Primer 第五版 (英文)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(英文版)(第5版)>是全球最畅销的C++图书.这本久负盛名的C++经典教程,时隔八年之久,终迎来的重大升级.除令全球无数程 ...
随机推荐
- python提取mysql中指定列参数,并循环打印
试验环境: Python 3.7.0 Mysql 5.0 实验目的: 使用python将数据库中指定的列中的数值取出来,并循环遍历,用以当成参数传递给需要它的方法. 本次实验取的是para列的数据 实 ...
- linux修改系统时间和时区
1.修改系统时间linux系统时钟有两个,一个是硬件时钟,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时钟,是linux系统Kernel时间.当Linux启动时,系统Kernel ...
- [LeetCode] 305. Number of Islands II 岛屿的数量 II
A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand oper ...
- java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式)
java:网络编程(UDP (DatagramSocket和DatagramPacket)正则表达式) * TCP* 特点:面向连接,点对点的通信,效率较低,但安全可靠* UDP:用户数据报协议,类似 ...
- Jenkins - 插件管理
1 - Jenkins插件 Jenkins通过插件来增强功能,可以集成不同的构建工具.云平台.分析和发布工具等,从而满足不同组织或用户的需求. Jenkins 提供了不同的的方法来安装插件(需要不同级 ...
- tablespace表空间
tablespace——表空间,便于理解,把oracle数据库看作一个实在房间,表空间可以看作这个房间的空间,是可以自由分配,在这空间里面可以堆放多个箱子(箱子可以看作数据库文件),箱子里面再装物件( ...
- 机试指南第二章-经典入门-Hash的应用自解
Hash的应用: Hash即散列,不像数据结构与算法中讲的各种Hash方法和冲突处理等过多的阐述,以下主要介绍Hash在机试试题解答中的作用. 例2.5 统计同成绩学生人数 Hash解法AC代码:(一 ...
- 四、Spring中使用@Conditional按照条件注册Bean
以前其实是写过@Condtional注解的笔记的,这里附上链接: Spring中的@conditional注解 但已经忘记的差不多了,所以今天再重新学习下,可以互补着学习 @Contional:按照一 ...
- iframe跨端口报错 Blocked a frame with origin from accessing a cross-origin frame
前言 在不同的端口号,甚至是不同的ip进行iframe嵌套的时候,在父页面调用子页面的方法的时候,报错 SecurityError: Blocked a frame with origin fr ...
- [转帖]FastDFS图片服务器单机安装步骤
FastDFS图片服务器单机安装步骤 https://www.cnblogs.com/yuesf/p/11847103.html 前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDF ...