首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 實戰:構建書店銷售統計程序完整流程

     編輯:關於C++

運用前文學習的 Sales_item 類,我們現在可以構建完整的書店銷售報表程序:讀取銷售記錄文件,按 ISBN 分組統計每本書的總銷量、總收入與平均售價。

核心邏輯:分組累加

假設輸入文件中相同 ISBN 的記錄連續出現。程序維護一個 total 對象累加當前 ISBN 的數據,每讀取一筆新記錄 trans:

  • 若 ISBN 相同:total = total + trans 累加。
  • 若 ISBN 不同:輸出 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;
}

程式碼逐段解析

  1. 對象定義:total 保存進行中的統計和,trans 保存新讀取的記錄。
  2. 首次讀取檢查:if (std::cin >> total) 同時完成讀取與有效性判斷。失敗則進入 else 分支提示無數據。
  3. while 循環:while (std::cin >> trans) 讀取並判斷是否成功,自動處理文件結束。
  4. 分組邏輯:same_isbn() 判斷是否同組,total + trans 執行合併,賦值更新 total。
  5. 分組切換輸出:遇到新 ISBN 時輸出舊 total,並以 trans 重置 total。
  6. 尾部輸出:循環結束後 total 仍持有最後一組數據,必須額外輸出一次。

練習與思考

  1. 編譯運行:使用 Sales_item.h 編譯並測試程序。
  2. 複合賦值優化:為何不用 total += trans 而用 total = total + trans?

    提示:Sales_item 類可能未定義 operator+=,或教學目的展示加法運算符創建新對象的語義。

擴展思路

  • 若輸入文件 ISBN 不連續,需先排序或使用 std::map<string, Sales_item> 統計。
  • 可擴展輸出格式(CSV、JSON)或寫入文件而非標準輸出。
  • 添加異常處理增強健壯性(如格式錯誤、文件讀取失敗)。

這個程序展示了 C++ 面向對象設計的威力:Sales_item 封裝了複雜的數據與邏輯,主程序只需調用清晰的介面(>>、<<、+、same_isbn、=)即可實現完整業務流程,代碼簡潔且易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved