代码改变世界

【日常收支账本】【Day01】用PySide6开发一个记账的小软件——初步构思

2023-09-13 22:11  林风冰翼  阅读(113)  评论(0编辑  收藏  举报

软件环境

需求分析

1. 基本要素

个人钱款一般存放于多个账户,常见的如微信零钱、中国银行储蓄卡、支付宝余额宝、羊城通、手机卡等。账本记录的动账可以分为三类:花销、收入、转移。

  • 花销:存款账户余额减少的动作
  • 收入:存款账户余额增加的动作
  • 转移:存款账户间资金转移的动作

2. 动账分类

对每笔动账分类可以更直观地展示个人支出去向,以及收入来源。简单地对花销与收入进行分类:
花销:

expense_category: {
        0: "吃食",
        1: "出行",
        2: "住房",             //房租、水电、物业管理费等
        3: "服饰",
        4: "日用品",
        5: "家居",
        6: "医疗",
        7: "固定消费",         //话费、宽带等
        8: "办公",
        9: "学习教育",
        10: "休闲娱乐",
        11: "往来",           //为他人的花销
        12: "金融理财",
        13: "动植物",         //宠物、植物
        14: "非本人相关",     //代管他人财物时,代管存款变动时的动账类型
        15: "慈善捐赠",
        16: "借贷"
        }

收入

income_category: {
        0: "工资",
        1: "储蓄利息",
        2: "投资理财",
        3: "额度券类",
        4: "杂活收入",
        5: "非本人相关",
        6: "慈善捐赠",
        7: "借贷"
        }

此外,还需设置自己的存款账户:
账户

funds: {
        0: "微信零钱",
        1: "中国银行卡",
        2: "羊城通",
        3: "支付宝余额宝",
        4: "代管存款"
        }

3. 记录构成

每一条动账记录都要记录一些具体的信息,以便统计。
花销

{"基本需求": "necessity",      //维持基本生活的花销,用于统计非必要支出
 "数值": "value",
 "类别": "category",
 "细则": "detail",            //二级分类
 "描述": "describe",          //可以对该项记录增加说明,以便后续查看
 "支出账户": "from",
 "关联账户": "associatedFund" //代管他人财物时,赋值此字段以同时记录代管存款的变动
 }

收入

{"数值": "value",
 "类别": "category",
 "细则": "detail",
 "描述": "describe",
 "收入账户": "to",
 "关联账户": "associatedFund"
 }

转移

{"数值": "value",
 "细则": "detail",
 "描述": "describe",
 "转出账户": "from",
 "转入账户": "to"
 }

记录存储方式设计

本项目选择用XML格式记录收支记录,格式如下。其中设定了文件读写规则。

点击查看XML文件结构组织方式
<DailyAccountBook>
    <balance>
        <fund>
            <value>5000.00</value>
            <category>0</category>
            <fundName>微信零钱</fundName>
        </fund>
        <fund>
            <value>999.00</value>
            <category>1</category>
            <fundName>中国银行卡</fundName>
        </fund>
        <fund>
            <value>90.00</value>
            <category>2</category>
            <fundName>羊城通</fundName>
        </fund>
        <fund>
            <value>1700.07</value>
            <category>3</category>
            <fundName>支付宝余额宝</fundName>
        </fund>
        <fund>
            <value>5000.00</value>
            <category>4</category>
            <fundName>代管存款</fundName>
        </fund>
    </balance>
    <year value="2023">
        <month value="09">
            <day value="11">
                <expenses>
                    <expense necessity="True" associatedFund="None">
                        <value>5.00</value>
                        <category>1</category>
                        <detail>地铁</detail>
                        <describe>早上上班。羊城通卡余额=100-5=95元</describe>
                        <from>2</from>
                    </expense>
                    <expense necessity="True" associatedFund="None">
                        <value>5.00</value>
                        <category>1</category>
                        <detail>地铁</detail>
                        <describe>晚上下班。羊城通卡余额=95-5=90元</describe>
                        <from>2</from>
                    </expense>
                    <expense necessity="False" associatedFund="None">
                        <value>1.00</value>
                        <category>12</category>
                        <detail>业务手续费</detail>
                        <describe>微信零钱提现1000的手续费</describe>
                        <from>0</from>
                    </expense>
                </expenses>
                <incomes>
                    <income associatedFund="4">
                        <value>3000.00</value>
                        <category>5</category>
                        <!-->代管存款的收支,应属于“非本人相关”类别<-->
                        <detail>转账</detail>
                        <describe>托管人转给本人3000,帮忙存放。本人微信零钱余额=3000+3000=6000元;同时代管存款余额=2000+3000=5000元</describe>
                        <to>0</to>
                    </income>
                    <income associatedFund="None">
                        <value>0.07</value>
                        <category>2</category>
                        <detail>理财</detail>
                        <describe>昨日余额宝收益。余额=1700+0.07=1700.07</describe>
                        <to>3</to>
                    </income>
                </incomes>
                <movements>
                    <!-->存款账户之间的资金转移不记录在收支变化量中,仅修改账户余额。由于两个账户余额一增一减,而总量不变,记录下来反而影响个人收支统计<-->
                    <movement>
                        <value>999.00</value>
                        <detail>提现</detail>
                        <describe>从微信零钱向中国银行卡提现1000元。完成后微信零钱余额=6000-999-1=5000;中国银行卡余额=0+999=999;被收取0.1%的手续费</describe>
                        <from>0</from>
                        <to>1</to>
                    </movement>
                </movements>
                <variation>
                    <fund>
                        <category>0</category>
                        <out>1.00</out>
                        <in>3000.00</in>
                    </fund>
                    <fund>
                        <category>1</category>
                        <out>0.00</out>
                        <in>0.00</in>
                    </fund>
                    <fund>
                        <category>2</category>
                        <out>10.00</out>
                        <in>0.00</in>
                    </fund>
                    <fund>
                        <category>3</category>
                        <out>0.00</out>
                        <in>0.07</in>
                    </fund>
                    <fund>
                        <category>4</category>
                        <out>0.00</out>
                        <in>3000.00</in>
                    </fund>
                </variation>
            </day>
        </month>
    </year>
</DailyAccountBook>

接下来正式开始编码啦!