基于C# WinForm的收银管理系统实现,整合了商品管理、销售结算、库存跟踪等核心功能,并采用模块化设计和面向对象编程思想:
一、系统架构设计
1. 分层架构
csharp
// 数据访问层 (DAL)
public class ProductDAL {
public List<Product> GetProducts() { /* 数据库查询 */ }
public void UpdateStock(string barcode, int quantity) { /* 更新库存 */ }
}
// 业务逻辑层 (BLL)
public class SaleService {
private ProductDAL _productDAL;
public decimal CalculateTotal(List<CartItem> items) { /* 计算总价 */ }
}
// 表示层 (UI)
public partial class MainForm : Form {
private SaleService _saleService;
private BindingList<CartItem> _cart = new();
}
2. 技术选型
- 数据库:SQLite(轻量级)或 SQL Server(企业级)
- ORM框架:SqliteSugar(简化数据库操作)
- UI框架:SunnyUI(现代化控件库)
- 条码识别:ZBarNet(开源条码库)
二、核心功能模块
1. 商品管理模块
csharp
public class Product {
public string Barcode { get; set; } // 条码(唯一标识)
public string Name { get; set; } // 商品名称
public decimal Price { get; set; } // 售价
public int Stock { get; set; } // 库存数量
public DateTime ExpireDate { get; set; } // 保质期
}
// 商品服务类
public class ProductService {
public BindingList<Product> LoadProducts() {
// 从数据库加载商品列表
}
public void AddProduct(Product product) {
// 实现商品新增逻辑
}
}
2. 销售结算模块
csharp
// 购物车项
public class CartItem {
public Product Product { get; set; }
public int Quantity { get; set; }
public decimal Subtotal => Product.Price * Quantity;
}
// 收银服务类
public class CheckoutService {
private List<CartItem> _cart = new();
public void AddToCart(Product product, int quantity) {
// 添加商品到购物车
}
public decimal CalculateTotal() {
return _cart.Sum(item => item.Subtotal);
}
public void ApplyDiscount(decimal discountRate) {
// 应用折扣逻辑
}
}
3. 库存管理系统
csharp
public class InventoryManager {
public event EventHandler<StockChangedEventArgs> StockChanged;
public void UpdateStock(string barcode, int newQuantity) {
// 更新库存并触发事件
StockChanged?.Invoke(this, new StockChangedEventArgs(barcode, newQuantity));
}
}
public class StockChangedEventArgs : EventArgs {
public string Barcode { get; }
public int NewQuantity { get; }
public StockChangedEventArgs(string barcode, int newQuantity) {
Barcode = barcode;
NewQuantity = newQuantity;
}
}
三、界面设计实现
1. 主界面布局
csharp
<!-- 使用SunnyUI控件 -->
<Window x:Class="CashSystem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="收银系统" Height="600" Width="800">
<DockPanel>
<!-- 商品扫描区 -->
<Border DockPanel.Dock="Top" Height="150">
<zbar:BarcodeReader x:Name="scanner"
ScanMode="Continuous"
OnScan="Scanner_OnScan"/>
</Border>
<!-- 购物车展示 -->
<DataGrid x:Name="cartGrid"
ItemsSource="{Binding CartItems}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="商品" Binding="{Binding Product.Name}"/>
<DataGridTextColumn Header="数量" Binding="{Binding Quantity}"/>
<DataGridTextColumn Header="小计" Binding="{Binding Subtotal}"/>
</DataGrid.Columns>
</DataGrid>
<!-- 收银操作区 -->
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal">
<Button Content="结算" Command="{Binding CheckoutCommand}"/>
<Button Content="取消" Command="{Binding CancelCommand}"/>
</StackPanel>
</DockPanel>
</Window>
2. 打印小票功能
csharp
public class ReceiptPrinter {
public void PrintReceipt(List<CartItem> items, decimal total) {
var builder = new StringBuilder();
builder.AppendLine("===== 收据 =====");
foreach (var item in items) {
builder.AppendLine($"{item.Product.Name} x{item.Quantity} ¥{item.Subtotal:F2}");
}
builder.AppendLine($"总计:¥{total:F2}");
builder.AppendLine("谢谢惠顾!");
// 调用打印机API
RawPrinterHelper.SendStringToPrinter("POS_PRINTER", builder.ToString());
}
}
public static class RawPrinterHelper {
[DllImport("winspool.drv", CharSet = CharSet.Unicode)]
public static extern bool WritePrinter(
IntPtr hPrinter,
string pBuf,
int cdBuf,
out int pcWritten,
IntPtr pDefault);
public static void SendStringToPrinter(string printerName, string content) {
// 实现打印逻辑
}
}
四、关键技术实现
1. 条码扫描集成
csharp
// 初始化扫描设备
private void InitScanner() {
scanner.DeviceEnabled = true;
scanner.Decode += (s, e) => {
if (e.Barcode != null) {
var product = ProductService.FindByBarcode(e.Barcode);
if (product != null) {
AddToCart(product, 1);
}
}
};
}
2. 库存实时更新
csharp
// 使用观察者模式
public class InventoryService {
private InventoryManager _manager;
public InventoryService() {
_manager = new InventoryManager();
_manager.StockChanged += OnStockChanged;
}
private void OnStockChanged(object sender, StockChangedEventArgs e) {
// 更新UI库存显示
UpdateStockDisplay(e.Barcode, e.NewQuantity);
}
}
参考代码 C#Winfrom旺旺收银管理系统 www.youwenfan.com/contentcsn/92648.html
五、扩展功能建议
-
会员管理系统
- 积分累计与兑换
- 会员等级折扣
csharppublic class Member { public string Phone { get; set; } public int Points { get; set; } public decimal DiscountRate { get; set; } } -
支付接口扩展
- 微信/支付宝扫码支付
- 银联POS对接
csharppublic interface IPaymentGateway { bool ProcessPayment(decimal amount); } -
数据分析模块
- 销售统计报表
- 热销商品分析
csharppublic class SalesReport { public DateTime ReportDate { get; set; } public decimal TotalSales { get; set; } public List<Product> TopSellers { get; set; } }
六、部署与维护
-
安装包配置 包含.NET Framework运行时 集成SQLite数据库文件 自动更新机制
-
安全措施
- 数据加密存储
- 操作日志记录
csharppublic class AuditLog { public DateTime Timestamp { get; set; } public string Action { get; set; } public string User { get; set; } }
七、项目结构示例
CashSystem/
├── src/
│ ├── mainform.xaml # 主界面
│ ├── services/ # 业务逻辑层
│ ├── dal/ # 数据访问层
│ ├── models/ # 数据模型
│ └── utils/ # 工具类
├── tests/ # 单元测试
├── docs/ # 技术文档
└── installer/ # 安装包