编写头文件,命名为Sales_data.h,并且编译
#pragma once
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
struct Sales_data {
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
#endif
练习1.21
与2.6.2不同的是没有在文件内定义类,而是在头文件中定义了,其他代码一样
#include <iostream>
using namespace std;
#include "Sales_data.h"
int main() {
Sales_data data1, data2;
//读入data1和data2的代码
double price = 0.0; //书的单价
//读入第一本交易:ISBN,销售数量,单价
cin >> data1.bookNo >> data1.units_sold >> price;
//计算销售收入
data1.revenue = data1.units_sold * price;
//读入第二本交易:ISBN,销售数量,单价
cin >> data2.bookNo >> data2.units_sold >> price;
//计算销售收入
data2.revenue = data2.units_sold * price;
//检查两笔交易涉及的ISBN号是否相同
if (data1.bookNo == data2.bookNo) {
unsigned totalCnt = data1.units_sold + data2.units_sold;
double totalRevenue = data1.revenue + data2.revenue;
//输出 ISBN,总销售量,总销售额,平均价格
cout << data1.bookNo << " " << totalCnt << " " << totalRevenue << " ";
if (totalCnt != 0) {
cout << totalRevenue / totalCnt << endl;
}
else {
cout << "No sales" << endl;
}
}
else { //两笔交易的ISBN 不一样
cerr << "Data must refer to the same ISBN" << endl;
return -1;
}
return 0;
}
练习1.22
#include <iostream>
using namespace std;
#include "Sales_data.h"
int main() {
Sales_data data1;
double price = 0.0;
cin >> data1.bookNo >> data1.units_sold >> price;
data1.revenue = data1.units_sold * price;
Sales_data data2;
while (cin >> data2.bookNo >> data2.units_sold >> price) {
data2.revenue = data2.units_sold * price;
if (data1.bookNo == data2.bookNo) {
unsigned totalCnt = data1.units_sold + data2.units_sold;
double totalRevenue = data1.revenue + data2.revenue;
cout << "Result " << data1.bookNo << " " << totalCnt << " " << totalRevenue << " ";
data1.revenue = totalRevenue; //把总收入和总销售数量重新赋值给data1,用于累加
data1.units_sold = totalCnt;
if (totalCnt != 0) {
cout << totalRevenue / totalCnt << endl;
}
else {
cout << "No sales" << endl;
}
}
else {
cerr << "Data must refer to the same ISBN" << endl;
return -1;
}
}
}
#include <iostream>
using namespace std;
#include "Sales_data.h"
int main() {
Sales_data data1;//保存下一条交易记录的变量
double price = 0.0;
//读入第一条交易记录,并确保有数据可以处理
if (cin >> data1.bookNo >> data1.units_sold >> price)
{
data1.revenue = data1.units_sold * price;
int a = 1; //保存次数的变量
Sales_data data2;
while (cin >> data2.bookNo >> data2.units_sold >> price) {
//如果我们在处理相同的书
data1.revenue = data1.units_sold * price;
if (data1.bookNo == data2.bookNo)
a = a + 1; //更新总次数
else {
//打印前一笔交易的次数
cout << a << endl;
data1 = data2; //data1现在表示下一本书
a = 1; //开始计算下一笔交易的次数
}
}
cout << a << endl; //打印最后一笔交易的结果
}
else {
//没有输入
cerr << "No data?" << endl;
return -1;
}
return 0;
}
#include <iostream>
using namespace std;
#include "Sales_data.h"
int main() {
Sales_data total;//保存下一条交易记录的变量
double price = 0.0;
//读入第一条交易记录,并确保有数据可以处理
if (cin >> total.bookNo >> total.units_sold >> price)
{
total.revenue = total.units_sold * price;
Sales_data trans;
while (cin >> trans.bookNo >> trans.units_sold >> price) {
//如果我们在处理相同的书
trans.revenue = trans.units_sold * price;
if (total.bookNo == trans.bookNo) {
total.revenue = total.revenue + trans.revenue;
total.units_sold = total.units_sold + trans.units_sold;
}
else {
//打印前一笔交易的次数
cout << "Result is " << total.bookNo << " " << total.units_sold << " " << total.revenue << endl;
total = trans;
}
}
cout << "Result is " << total.bookNo << " " << total.units_sold << " " << total.revenue << endl; //打印最后一笔交易的结果
}
else {
//没有输入
cerr << "No data?" << endl;
return -1;
}
return 0;
}