首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 模擬超市收銀系統:WareHouse 類實例化與商品入庫邏輯修正

     編輯:程式設計綜合問答

原代碼錯誤

class SuperMarket {
    WareHouse CangKu = new WareHouse();
    // CangKu.GoodsIn("DreamCar", 100); // 編譯錯誤:類定義中不能直接執行語句
    public SuperMarket() {
        CangKu.GoodsIn("DreamCar", 100); // 正確:在構造函數中執行
        // ...
    }
}

錯誤原因

C# 類體內只能包含 **聲明**(字段、屬性、方法、構造函數等),**不能直接編寫可執行語句**(方法調用、賦值表達式、循環等)。

修正方案

  1. 將初始化邏輯移至 **構造函數** 或 **初始化方法** 中。
    public SuperMarket() {
        CangKu.GoodsIn("DreamCar", 100);
        CangKu.GoodsIn("Apple", 800);
        // ...
    }
    
  2. 或使用 **對象初始化器**(C# 3.0+)配合參數化構造函數:
    public class SuperMarket {
        public WareHouse CangKu { get; }
        public SuperMarket() {
            CangKu = new WareHouse();
            CangKu.GoodsIn("DreamCar", 100);
            // ...
        }
    }
    
  3. 若商品種類固定,可在 WareHouse 構造函數內直接初始化:
    public class WareHouse {
        public List> Storeroom { get; }
        public WareHouse() {
            Storeroom = new List>(4);
            for (int i = 0; i < 4; i++) Storeroom.Add(new List());
            GoodsIn("DreamCar", 100); // 內部調用
            // ...
        }
        public void GoodsIn(string type, int count) { /* ... */ }
    }
    

設計建議

  • 使用 **泛型集合** Dictionary> 替代 List>,按商品名稱索引更直觀。
  • Commodity 設計為基類,DreamCar、Apple 等繼承並重寫屬性,體現多態。
  • 分離 UI(WinForms/WPF/Console)與業務邏輯,便於測試與擴展。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved