運用前文學習的 Sales_item 類,我們現在可以構建完整的書店銷售報表程序:讀取銷售記錄文件,按 ISBN 分組統計每本書的總銷量、總收入與平均售價。
假設輸入文件中相同 ISBN 的記錄連續出現。程序維護一個 total 對象累加當前 ISBN 的數據,每讀取一筆新記錄 trans:
total = total + trans 累加。total,將 trans 賦值給 total 開始新分組。循環結束後別忘記輸出最後一組數據。
#include <iostream>
#include "Sales_item.h"
int main() {
Sales_item total, trans; // total: 累加器,trans: 當前讀取記錄
// 嘗試讀取第一筆記錄
if (std::cin >> total) {
// 循環讀取後續記錄
while (std::cin >> trans) {
if (total.same_isbn(trans)) {
// 同一 ISBN:累加
total = total + trans;
} else {
// 不同 ISBN:輸出累計結果,啟動新累加
std::cout << total << std::endl;
total = trans;
}
}
// 輸出最後一組數據(循環結束時未輸出)
std::cout << total << std::endl;
} else {
// 無輸入數據
std::cout << "No data?!" << std::endl;
return -1;
}
return 0;
}
total 保存進行中的統計和,trans 保存新讀取的記錄。if (std::cin >> total) 同時完成讀取與有效性判斷。失敗則進入 else 分支提示無數據。while (std::cin >> trans) 讀取並判斷是否成功,自動處理文件結束。same_isbn() 判斷是否同組,total + trans 執行合併,賦值更新 total。total,並以 trans 重置 total。total 仍持有最後一組數據,必須額外輸出一次。Sales_item.h 編譯並測試程序。total += trans 而用 total = total + trans?
提示:Sales_item 類可能未定義 operator+=,或教學目的展示加法運算符創建新對象的語義。
std::map<string, Sales_item> 統計。這個程序展示了 C++ 面向對象設計的威力:Sales_item 封裝了複雜的數據與邏輯,主程序只需調用清晰的介面(>>、<<、+、same_isbn、=)即可實現完整業務流程,代碼簡潔且易維護。