系统环境: windows 10 1703
编译环境:Visual studio 2017
2.39
2.40
struct Sales_data {
std::string bookID;
unsigned sum_sold;
float unit_price;
float revenue;
};
2.41
#include <iostream>
#include <string>
// 1.5.1节三个练习大同小异,故只编写了1.22的程序
//创建 Sales_data 类
struct Sales_data {
std::string bookID;
unsigned sum_sold = 0;
float price = 0.0;
float revenue = 0.0;
};
int main()
{
Sales_data sum, book;
while (std::cin >> book.bookID >> book.sum_sold >> book.price)
{
book.revenue = book.sum_sold * book.price;
if (empty(sum.bookID)) //检查此时输入的数据是否为第一个(通过检查 sum 中的 bookID 是否为空字符串)
{
//若 sum 中 bookID 为空字符串,则把第一个输入的数据赋给 sum
sum.bookID = book.bookID;
sum.price = book.price;
sum.sum_sold = book.sum_sold;
sum.revenue = book.revenue;
}
else
{
if (sum.bookID == book.bookID) //如果次数输入的数据不是第一个,继续检查输入数据的 ISBN 是否和之前输入的 ISBN 相同
{
// 若相同,则执行相加步骤
sum.sum_sold += book.sum_sold;
sum.revenue += book.revenue;
}
else
{
// 若不同,则输出错误
std::cerr << "You must enter same book ISBN !!!" << std::endl;
return -1;
}
}
}
std::cout << sum.bookID << " " << sum.sum_sold << " " << sum.revenue << std::endl;
return 0;
}
input:
0-201-88954-4 2 15.00
0-201-88954-4 5 12.00
0-201-88954-4 7 12.00
0-201-88954-4 2 12.00
output:
0-201-88954-4 16 198
#include <iostream>
#include <string>
// 1.5.2 (同时也是1.6,实现相同的功能)
//创建 Sales_data 类
struct Sales_data {
std::string bookID;
unsigned sum_sold = 0;
float price = 0.0;
float revenue = 0.0;
};
int main()
{
Sales_data trans, book;
int cnt = 1;
if (std::cin >> book.bookID >> book.sum_sold >> book.price) //读取第一条数据
{
book.revenue = book.sum_sold * book.price;
while (std::cin >> trans.bookID >> trans.sum_sold >> trans.price) //读取剩余的数据
{
trans.revenue = trans.sum_sold * trans.price;
if (trans.bookID == book.bookID) //判断此数据的 ISBN 和 book 保存的 ISBN 是否相同
{
cnt += 1;
book.sum_sold += trans.sum_sold;
book.revenue += trans.revenue;
}
else
{
std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;
book.bookID = trans.bookID;
book.sum_sold = trans.sum_sold;
book.revenue = trans.revenue;
cnt = 1;
}
}
std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;
}
return 0;
}
//程序运行过程如下
0-201-70353-X 4 24.99
0-201-82470-1 4 45.39
1 0-201-70353-X 4 99.96
0-201-88954-4 2 15.00
1 0-201-82470-1 4 181.56
0-201-88954-4 5 12.00
0-201-88954-4 7 12.00
0-201-88954-4 2 12.00
0-399-82477-1 2 45.39
4 0-201-88954-4 16 198
0-399-82477-1 3 45.39
0-201-78345-X 3 20.00
2 0-399-82477-1 5 226.95
0-201-78345-X 2 25.00
^Z
2 0-201-78345-X 5 110
2.42
//头文件
#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
struct Sales_data {
std::string bookID;
unsigned sum_sold = 0;
float price = 0.0;
float revenue = 0.0;
};
#endif // !SALES_DATA_H
//1.51节练习
#include <iostream>
#include <string>
#include "Sales_data .h"
int main()
{
Sales_data sum, book;
while (std::cin >> book.bookID >> book.sum_sold >> book.price)
{
book.revenue = book.sum_sold * book.price;
if (empty(sum.bookID)) //检查此时输入的数据是否为第一个(通过检查 sum 中的 bookID 是否为空字符串)
{
//若 sum 中 bookID 为空字符串,则把第一个输入的数据赋给 sum
sum.bookID = book.bookID;
sum.price = book.price;
sum.sum_sold = book.sum_sold;
sum.revenue = book.revenue;
}
else
{
if (sum.bookID == book.bookID) //如果次数输入的数据不是第一个,继续检查输入数据的 ISBN 是否和之前输入的 ISBN 相同
{
// 若相同,则执行相加步骤
sum.sum_sold += book.sum_sold;
sum.revenue += book.revenue;
}
else
{
// 若不同,则输出错误
std::cerr << "You must enter same book ISBN !!!" << std::endl;
return -1;
}
}
}
std::cout << sum.bookID << " " << sum.sum_sold << " " << sum.revenue << std::endl;
return 0;
}
//1.52节和1.6节练习
#include <iostream>
#include <string>
#include "Sales_data .h"
int main()
{
Sales_data trans, book;
int cnt = 1;
if (std::cin >> book.bookID >> book.sum_sold >> book.price) //读取第一条数据
{
book.revenue = book.sum_sold * book.price;
while (std::cin >> trans.bookID >> trans.sum_sold >> trans.price) //读取剩余的数据
{
trans.revenue = trans.sum_sold * trans.price;
if (trans.bookID == book.bookID) //判断此数据的 ISBN 和 book 保存的 ISBN 是否相同
{
cnt += 1;
book.sum_sold += trans.sum_sold;
book.revenue += trans.revenue;
}
else
{
std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;
book.bookID = trans.bookID;
book.sum_sold = trans.sum_sold;
book.revenue = trans.revenue;
cnt = 1;
}
}
std::cout << cnt << " " << book.bookID << " " << book.sum_sold << " " << book.revenue << std::endl;
}
return 0;
}