下面只是之前使用 file 當 db 的想法
如果要使用 SQLite
需要重新考量一番
SmartMoney UltraMoney
1.Account.db(記錄會計科目資訊)
 a.類型(A,L,Q,R,E)
 b.順序(會計科目設定畫面之顯示順序)
 c.編號(1000,2000,3000,4000,5000 以此做分類帳科目的依據)
 d.名稱(真正的名稱)
 e.母科目(沒有為0...有則為母科目的編號)
 f.層級(哪一層的科目...1(Root)...2(Sub)...應該為母科目加1)
 g.預算(以月為單位)
 原則上可以有無限層的子科目...但希望最好不要
 /*
 第一層科目假設叫 "食"
 第二層就叫    "食.早餐"
 第三層就叫                      "食.早餐.美而美"
 其他以此類推..總之在不超過999個下..要幾層就給他幾層
 */
 .db的第一個位移量會記錄各類型科目的最後一個索引...以加速新增科目
//Account科目索引
struct SAccountIndex
{
 int  iAssetIndex;
 int  iLiabilityIndex;
 int  iRevenueIndex;
 int  iExpenseIndex;
 //補齊用
 char szTmp[112];
};
#define NAMEMAX 100
struct SAccount
{
 //類型(A,L,Q,R,E)
 char chType;
 //順序(會計科目設定畫面之顯示順序)
 int  iOrder;
 //編號(1000,2000,3000,4000,5000 以此做分類帳科目的依據)
 int  iNumber;
 //名稱(真正的名稱)
 char szName[NAMEMAX+1];
 //母科目(沒有為0...有則為母科目的編號)
 int  iParent;
 //層級(哪一層的科目...1(Root)...2(Sub)...應該為母科目加1)
 int  iLayer;
 //預算
 int  iBudget;
};
2.PMT Account
 1-Cash
    Bank-台新
    Bank-臺企
    Bank-華南
    Bank-郵局
    投資
    暫付款
    零用金
    扣繳
 2-Card-華銀卡
    Card-台新卡
    暫收款
 4-Salary
    出差旅費
    信用卡紅利
    利息
    中獎
    二手
    投資收益
    其他收入
 51-食-早餐
      -午餐
      -晚餐
      -零食
      -其他食
 52-衣-衣服
     -褲子
     -鞋襪
     -配件
     -剪髮
     -其他衣
 53-住-水費
     -電費
     -瓦斯
     -電話
     -管理費
     -手機
     -網路
     -手續費
     -大賣場
     -其他住
 54-行-汽車-停車
          -洗車
          -加油
          -保養
          -修理
          -稅捐
          -汽保
          -回數票        
      -捷運
      -公車
      -計程車
      -火車
      -飛機
      -其他行
 55-育-書報
     -電腦-軟體
          -硬體
     -文具
     -補習
     -其他育
 56-樂-漫畫
     -唱歌
     -電影
     -其他樂
 57-醫藥(有憑證)
 58-醫藥(無憑證)
 59-家人借支
 60-紅白包
 61-投資手續
 62-投資損失
 63-綜所稅
 64-保險
 65-捐助
3.資料庫架構
 DataBase - 2007 - Account.db
                 - Journal.db
                 - Ledger     - 1000 - 1001.db
                                         |
                                       1xxx.db
                                   
                              - 2000 - 2001.db
                                         |
                                       2xxx.db
                                   
                              - 3000 - 3001.db
                                         |
                                       3xxx.db
                                   
                              - 4000 - 4001.db
                                         |
                                       4xxx.db
                                   
                              - 5000 - 5001.db
                                         |
                                       5xxx.db
                        
 .db的第一個位移量會擺各月份第一筆資料的索引...以加速查詢
4.Account資料結構
typedef unsigned int CASHUNIT;
#define NOTEMAX 100
struct SEntry
{
 //類型
 char      chType;
 //科目編號
 int       iNumber;
 //金額
 CASHUNIT  Price;
 //統一發票號碼
 int       iInvoice;
 //摘要針對各科目
 char      szNote[NOTEMAX+1];
};
5.Journal資料結構                          
6.Ledger資料結構
7.功能
 a.編製傳票(複合分錄)
 b.日記帳
 c.分類帳
 d.資產負債表
 e.損益表
 f.統一發票對獎
 g.餘額分析
 h.預算分析
8.UI介面
9.判斷複合分錄
  比較有可能為以下兩種:
  a.
      Debit       Asset
          Credit          Revenue     (收入發生)
          Credit          Liability   (借錢之類)
          Credit          Asset       (轉帳交易)
  b.
      Debit       Expense
          Credit          Asset       (以資產支付費用)
          Credit          Liability   (以負債支付費用)
       
  原則上以上述方法評斷各交易單科科目實際金額
  判斷後再跳出確認視窗讓使用者檢查
10.分錄之新增、刪除、修改
 新增:
 刪除:
 修改:
11.科目之新增、刪除、修改
 新增:
 刪除:
 修改:
 
沒有留言:
張貼留言