
1. 項目概述個人記賬小系統的核心價值這個個人記賬小系統是我在業余時間開發的一個輕量級財務管理工具主要解決日常收支記錄的痛點。相比市面上復雜的記賬軟件它去除了所有冗余功能保留了最核心的記賬、統計和報表功能。整個系統采用WPF框架開發界面簡潔直觀數據存儲在本地SQLite數據庫中既保證了隱私性又免去了網絡依賴。提示系統源碼完全開放特別適合.NET開發者學習WPF數據綁定、LINQ查詢和圖表繪制的實戰應用我最初開發這個系統的動機很簡單市面上的記賬App要么功能太臃腫要么充斥著廣告。作為一個程序員我更想要一個能完全掌控的、可以隨時自定義功能的解決方案。現在這個版本已經穩定運行了兩年多期間根據實際使用反饋迭代了十幾個小版本。2. 系統架構與技術選型2.1 前端界面設計系統采用WPF的MVVM模式開發主要使用了以下布局控件DockPanel主窗口的基礎布局Grid數據表格的精確排版StackPanel工具欄的垂直/水平排列TabControl不同功能模塊的切換!-- 典型布局示例 -- DockPanel Menu DockPanel.DockTop.../Menu StatusBar DockPanel.DockBottom.../StatusBar TabControl TabItem Header記賬 Grid Grid.RowDefinitions.../Grid.RowDefinitions StackPanel OrientationHorizontal.../StackPanel /Grid /TabItem /TabControl /DockPanel2.2 后端數據處理數據層采用Entity Framework Core操作SQLite主要實體包括Transaction記錄每筆交易的金額、類型、分類、時間等Category收支分類體系可自定義Budget預算設置Account多賬戶管理// 典型數據模型 public class Transaction { public int Id { get; set; } public decimal Amount { get; set; } public DateTime Date { get; set; } public string Description { get; set; } public TransactionType Type { get; set; } public int CategoryId { get; set; } public Category Category { get; set; } }2.3 圖表可視化使用LiveCharts庫實現動態圖表支持月度收支趨勢折線圖分類占比餅圖年度對比柱狀圖預算完成度儀表盤3. 核心功能實現詳解3.1 交易記錄的CRUD操作記賬系統的核心是交易記錄的增刪改查。我采用了Repository模式進行封裝主要技術點包括異步數據加載使用async/await避免UI卡頓數據驗證在ViewModel層實現IDataErrorInfo批量操作支持CSV導入導出// 典型ViewModel代碼 public class TransactionViewModel : INotifyPropertyChanged, IDataErrorInfo { private readonly ITransactionRepository _repository; public async Task LoadDataAsync() { Transactions new ObservableCollectionTransaction( await _repository.GetByDateRangeAsync(StartDate, EndDate)); } public string Error null; public string this[string columnName] { get { if (columnName nameof(Amount) Amount 0) return 金額必須大于0; return null; } } }3.2 統計報表生成報表系統采用策略模式支持多種統計維度按日/周/月/年的收支匯總分類對比分析預算執行情況賬戶余額變動統計引擎的核心是LINQ查詢例如// 月度統計示例 var monthlyStats transactions .GroupBy(t new { t.Date.Year, t.Date.Month }) .Select(g new { Year g.Key.Year, Month g.Key.Month, Income g.Where(t t.Type TransactionType.Income).Sum(t t.Amount), Expense g.Where(t t.Type TransactionType.Expense).Sum(t t.Amount) }) .OrderBy(x x.Year) .ThenBy(x x.Month);3.3 數據備份與恢復考慮到數據安全性實現了以下機制自動備份每天首次啟動時自動備份數據庫手動導出支持導出為JSON/CSV格式云同步可選通過Web API與自建服務器同步備份核心代碼public async Task BackupDatabaseAsync(string backupPath) { var dbPath GetDatabasePath(); using (var source File.OpenRead(dbPath)) using (var dest File.Create(backupPath)) { await source.CopyToAsync(dest); } }4. 開發中的關鍵問題與解決方案4.1 數據綁定性能優化初期當交易記錄超過5000條時界面會出現明顯卡頓。通過以下措施優化虛擬化容器使用VirtualizingStackPanel分頁加載每次只加載當前月的記錄延遲渲染對圖表數據采用按需加載!-- ListView虛擬化示例 -- ListView VirtualizingStackPanel.IsVirtualizingTrue VirtualizingStackPanel.VirtualizationModeRecycling ListView.ItemTemplate.../ListView.ItemTemplate /ListView4.2 多主題切換實現為滿足不同用戶的視覺偏好實現了動態換膚功能定義資源字典存儲不同主題的顏色和樣式使用ResourceDictionary.MergedDictionaries動態切換配合MahApps.Metro等UI庫增強效果public void ApplyTheme(string themeName) { var themeDict new ResourceDictionary { Source new Uri($Themes/{themeName}.xaml, UriKind.Relative) }; Application.Current.Resources.MergedDictionaries[0] themeDict; }4.3 跨平臺兼容性處理雖然主要面向Windows但通過以下方式提升了兼容性使用.NET Core 3.1/NET 5而非傳統.NET Framework避免調用Windows特有API數據庫層使用跨平臺的SQLite5. 項目部署與使用指南5.1 開發環境搭建安裝Visual Studio 2019/2022社區版即可確保勾選.NET桌面開發工作負載克隆源碼倉庫git clone https://example.com/accounting-system.git還原NuGet包dotnet restore5.2 數據庫初始化系統首次運行時會自動創建數據庫結構如需手動初始化dotnet ef database update5.3 自定義配置通過修改appsettings.json可以調整默認貨幣符號日期顯示格式備份保留天數主題顏色{ AppSettings: { CurrencySymbol: ¥, DateFormat: yyyy-MM-dd, BackupRetentionDays: 7, DefaultTheme: Light } }6. 擴展開發建議基于現有系統可以進一步擴展多用戶支持添加登錄系統和數據隔離智能分類利用機器學習自動識別交易類型賬單提醒集成系統通知功能投資跟蹤添加股票、基金等投資記錄移動端適配通過MAUI實現跨平臺對于想學習WPF的開發者這個項目提供了很好的起點。我在代碼中刻意保持了簡潔性每個核心功能模塊都控制在300行以內方便理解。特別推薦重點研究MainWindowViewModel.csMVVM模式的典型實現TransactionRepository.csEF Core的最佳實踐ChartHelper.cs動態圖表的數據綁定技巧實際開發中最大的教訓是不要過早優化。初期我花了太多時間設計完美架構后來發現對于個人項目快速迭代才是關鍵。現在這個版本已經是第三次重構后的結果每次重構都讓代碼更簡潔、更易維護。