C++ Primer笔记(2.6.2)—— 使用Sales_data类

C++ Primer笔记(2.6.2)—— 使用Sales_data类

Sales_data.h头文件

#pragma once

/********************************************************************************************************/
/* 头文件通常包含那些只能被定义的实体,如类、const、constexpr变量等。头文件也经常用到其他头文件的功能。 */
/* 例如,我们的Sales_data类包含一个string成员,所以Sales_data.h必须包含string.h的头文件。同时,使用     */
/* Sales_data类的程序为了能操作bookNo成员需要再一次包含string.h头文件。                                 */
/********************************************************************************************************/

/*                                                                                                      */
/* 确保头文件多次包含仍能安全工作的常用技术是 预处理器,它由C++语言从C语言继承而来。预处理器是在编译之前*/
/* 执行的一段程序,可以部分地改变我们所写的程序。之前已经用到了一项预处理功能#include, 当预处理器看到  */
/* #include标记时就会用指定的头文件的内容代替#include。                                                 */
/*                                                                                                      */
/* C++程序还会用到的一项预处理功能是 头文件保护符(header guard),头文件保护符依赖于预处理变量。预处理 */
/* 变量有两种状态:   已定义和未定义。                                                                  */
/* #define指令把一个名字设定为预处理变量,另外两个指令则分别检查某个指定的预处理变量是否已经定义:      */
/* #ifdef当且仅当变量已定义时为真,#ifndef当且仅当变量未定义时为真。                                    */
/* 一旦检查结果为真,则执行后续操作直至遇到#endif指令为止。                                             */
/*                                                                                                      */

//使用这些功能就能有效地防止重复包含的发生
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include<iostream>
#include<string.h>
struct Sales_data {
	std::string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};

#endif

//第一次包含Sales_data.h时,#ifndef的检查结果为真,预处理器将顺序执行后面的操作直到遇到#endif为止


main.cpp文件

#include<iostream>
#include<string>
#include "Sales_data.h"
/****************************************************************/
/* 因为我们定义的Sales_data类没有提供任何操作,所以我们必须自己 */
/* 编码实现输入、输出和计算功能。                               */
/*                                                              */
/* 我们写一段程序实现求两次交易相加结果的功能。程序的输入是两条 */
/* 交易记录:                                                   */
/*        0-201-78345-X  3  20.00                               */
/*        0-201-78345-X  2  25.00                               */
/* 每笔交易记录着图书的ISBN编号、售出数量、售出单价             */


int main()
{
	//添加两个Sales_data对象
	Sales_data data1, data2;

	double price = 0;  //书的单价、用于计算销售收入
	//读入第一笔交易
	std::cout << "data1的ISBN编号为:";
	std::cin >> data1.bookNo ;
	std::cout << "data1的销售数量为:";
	std::cin >> data1.units_sold;
	std::cout << "data1的单价为:";
	std::cin >> price;
	//计算第一笔交易销售收入
	data1.revenue = data1.units_sold * price;
	std::cout << "data1的销售收入为:" << data1.revenue << std::endl;

	std::cout << std::endl;

	//读入第二笔交易
	std::cout << "data2的ISBN编号为:";
	std::cin >> data2.bookNo;
	std::cout << "data2的销售数量为:";
	std::cin >> data2.units_sold;
	std::cout << "data1的单价为:";
	std::cin >> price;
	//计算第一笔交易销售收入
	data2.revenue = data2.units_sold * price;
	std::cout << "data2的销售收入为:" << data2.revenue << std::endl;

	std::cout << std::endl;

	/* 剩下的工作就是检查两笔交易涉及的ISBN编号是否相同了。 */
	/* 如果相同输出它们的和,否则输出一条报错消息。         */
	if (data1.bookNo == data2.bookNo)
	{
		unsigned totalCnt = data1.units_sold + data2.units_sold;
		double totalRevenue = data1.revenue + data2.revenue;
		//输出:ISBN、总销售量、总销售额、平均价格
		std::cout << "ISBN:" << data1.bookNo << std::endl;
		std::cout << "总销售量:" << totalCnt << std::endl;
		std::cout << "总销售额:" << totalRevenue << std::endl;

		if(totalCnt != 0)
			std::cout << "平均价格:" << totalRevenue/ totalCnt << std::endl;
		else
			std::cout << "(no sales)" << std::endl;

		return 0;
	}
	else   //两笔交易的ISBN不一样
	{
		std::cerr << "ISBN要求一样" << std::endl;
		return -1;
	}

	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire丶Chicken

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值