cpp primer书店程序初探
在cpp primer(5th)中贯穿始终的是一个书店程序,先写一下最初的书店程序!
- Sales_data.h文件,定义最初的Sales_data类型
1 #include <iostream> 2 #include <string> 3 4 struct Sales_data 5 { 6 std::string bookNo; 7 unsigned units_sold = 0; 8 double revenue = 0.0; 9 10 void CalcRevenue(double price); 11 double CalcAveragePrice(); 12 void SetData(Sales_data data); 13 void AddData(Sales_data data); 14 void Print(); 15 }; 16 17 void Sales_data::CalcRevenue(double price) 18 { 19 revenue = units_sold * price; 20 } 21 22 void Sales_data::SetData(Sales_data data) 23 { 24 bookNo = data.bookNo; 25 units_sold = data.units_sold; 26 revenue = data.revenue; 27 } 28 29 void Sales_data::AddData(Sales_data data) 30 { 31 if (bookNo != data.bookNo) return; 32 units_sold += data.units_sold; 33 revenue += data.revenue; 34 } 35 36 double Sales_data::CalcAveragePrice() 37 { 38 if (units_sold != 0) 39 return revenue / units_sold; 40 else 41 return 0.0; 42 } 43 44 void Sales_data::Print() 45 { 46 std::cout << bookNo << " " << units_sold << " " revenue << " "; 47 double averagePrice = CalcAveragePrice(); 48 if (averagePrice != 0.0) 49 std::cout << averagePrice << std::endl; 50 else 51 std::cout << "(no seles)" << std::endl; 52 }
- 读入图书编号,数量,价格,输出平均售价
1 #include <iostream> 2 3 #include "sales_data.h" 4 5 int main() 6 { 7 Sales_data book; 8 double price; 9 std::cin >> book.bookNo >> book.units_sold >> price; 10 book.CalcRevenue(price); 11 book.Print(); 12 13 return 0; 14 }
- 读取多个具有相同ISBN的销售记录,输出所有记录的和
1 #include <iostream> 2 3 #include "sales_data.h" 4 5 int main() 6 { 7 Sales_data book1, book2; 8 double price1, price2; 9 std::cin >> book1.bookNo >> book1.units_sold >> price1; 10 std::cin >> book2.bookNo >> book2.units_sold >> price2; 11 book1.CalcRevenue(price1); 12 book2.CalcRevenue(price2); 13 14 if (book1.bookNo == book2.bookNo) { 15 book1.AddData(book2); 16 book1.Print(); 17 18 return 0; 19 } 20 else { 21 std::cerr << "Data must refer to same ISBN" << std::endl; 22 return -1; // indicate failure 23 } 24 }
- 每本书的销售报告,显示售出册数、总销售额和平均售价
1 #include <iostream> 2 3 #include "sales_data.h" 4 5 int main() 6 { 7 Sales_data total; 8 double totalPrice; 9 if (std::cin >> total.bookNo >> total.units_sold >> totalPrice) { 10 total.CalcRevenue(totalPrice); 11 12 Sales_data trans; 13 double transPrice; 14 while (std::cin >> trans.bookNo >> trans.units_sold >> transPrice) { 15 trans.CalcRevenue(transPrice); 16 17 if (total.bookNo == trans.bookNo) { 18 total.AddData(trans); 19 } 20 else { 21 total.Print(); 22 total.SetData(trans); 23 } 24 } 25 26 total.Print(); 27 28 return 0; 29 } 30 else { 31 std::cerr << "No data?!" << std::endl; 32 return -1; // indicate failure 33 } 34 }