【日常收支账本】【Day01】用PySide6开发一个记账的小软件——初步构思
软件环境
- Python 3.10 超详细Python安装教程
- PyCharm Community Edition 2023.2.1
- PySide6 6.5.1.1
需求分析
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>
接下来正式开始编码啦!
【日常收支账本】【Day01】用PySide6开发一个记账的小软件——初步构思的更多相关文章
- Android | 教你如何用代码开发一个拍照翻译小程序
引子 想必有很多小伙伴喜欢外出旅游,能去海外玩一圈那是更好不过了,旅游前大家一定会对吃.穿.住.行.游玩路线做各种攻略,然后满怀期待的出发- 想象中的旅游 出发前,想象中的旅游目的地可能有漂亮 ...
- Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序
Android | 教你如何用华为HMS MLKit 图像分割 SDK开发一个证件照DIY小程序 引子 上期给大家介绍了如何使用如何用华为HMS MLKit SDK 三十分钟在安卓上开发一个微笑抓 ...
- 快速入门PaddleOCR,并试用其开发一个搜题小工具
介绍 PaddleOCR 是一个基于百度飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别.竖排文本识别.长文本识别.同时支持多种文本检测.文本识别的训练算法. ...
- 用Java开发一个本地服务管理软件
一.最终界面先贴上最终效果图,图1为初始化界面,图二为点击启动/停止之后的中间过渡状态,图三为启动成功后弹出的提示框 把动态gif图片嵌入到jpg背景图中?用Adobe ImageReady即可办到 ...
- 基于SOUI开发一个简单的小工具
基于DriectUI有很多库,比如 Duilib (免费) soui (免费) DuiVision (免费) 炫彩 (界面库免费,UI设计器付费,不提供源码) skinui (免费使用,但不开放源码, ...
- 「1.0」一个人开发一个App,小程序从0到1,起航了
古有,秦.齐.楚.赵.魏.韩.燕七国争雄:今有,微信.QQ.百度.支付宝.钉钉.头条.抖音七台争霸.古有,白起.李牧.王翦.孙膑.庞涓.赵奢.廉颇驰骋疆场:今有程序员1,程序员2,程序员3…编写代码. ...
- 「2.0」一个人开发一个App,小程序从0到1,文件剖析
不知你是不是见到“文件剖析”这4个大字,才点进来看一看的?如果真是的话,那我可以坦诚.真心.负责任地告诉你:你上当了,你上了贼船啦,如果你现在想跳的话,还来得及,反正茫茫大海中,鲨鱼正缺搞程序的人.说 ...
- [3.0] 一个人开发一个App,小程序从0到1,删减添加
在这个黄道吉日,咱们将要干一件,惊天地泣鬼神,妇孺皆知的大事,那就是删掉微信开发工具自动生成的源代码. 删掉pages下的index.logs目录,啥都不留: 删掉utils下的util.js,只流空 ...
- Python中如何开发一个注册接口小实例
import flask from flask import request #想获取到请求参数的话,就得用这个 server = flask.Flask(__name__) #吧这个python文件 ...
- 「4.0」一个人开发一个App,小程序从0到1,布局
一提到布局这个词,我总是索索发抖,不是因为天冷,而是因为布局的目标实在太宏大.古代想雄霸天下的王,就喜欢布局这个,布局那个,结果硬生生把自己的国家给布局没了.至于是哪个君王,我倒可以非常认真,非常坦诚 ...
随机推荐
- 飞桨paddlespeech语音唤醒推理C定点实现
前面的文章(飞桨paddlespeech语音唤醒推理C浮点实现)讲了飞桨paddlespeech语音唤醒推理的C浮点实现.但是嵌入式设备通常CPU频率低和memory小,在嵌入式设备上要想流畅的运行语 ...
- Anaconda 使用时,conda activate 失败
今天使用一台电脑上新安装的 anaconda 时,运行 conda activate, 出现如下报错: 错误提示中,说要把 . C:\ProgramData\Anaconda3\etc\profile ...
- vulnhub billu:b0x
知识点 SQLi.目录爆破.数据库操作.文件包含漏洞.提权.反弹shell 解题步骤 nmap扫描有80,22端口 nmap -sV -Pn -T 4 192.168.220.132 访问网页提示sq ...
- 图形视图体系结构——Graphics View
Graphics View框架结构的特点.主要包含元素及坐标系统. 1.特点 Graphics View框架结构的主要特点如下. (1) Graphics View框架结构中,系统可以利用Qt绘图系统 ...
- Crawpy - 一款python写的网站目录扫描工具
国外网站看到的. 简贴一下谷歌翻译的介绍 是什么让这个工具与其他工具不同: 它被写入异步工作,允许达到最大限制.所以它非常快. 校准模式,自行应用过滤器 有一堆标志可以帮助你详细地模糊 给定状态代码和 ...
- 【转自知乎】NLP算法面试必备!史上最全!PTMs:NLP预训练模型的全面总结
NLP算法面试必备!史上最全!PTMs:NLP预训练模型的全面总结 预训练模型(Pre-trained Models,PTMs)的出现将NLP带入了一个全新时代.2020年3月18日,邱锡鹏老师发表了 ...
- 【技术积累】Linux中的命令行【理论篇】【五】
arpd命令 命令介绍 arpd命令是Linux系统中的一个网络工具,用于管理和操作ARP(地址解析协议)缓存.ARP协议用于将IP地址映射到MAC地址,以便在局域网中进行通信. 命令说明 arpd命 ...
- centos7安装influxdb2
前言 InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读.高性能写.高效存储与实时分析等,广泛应用于DevOps监控.IoT监控.实时分析等场景. 服务器 ...
- Mybatis操作数据库流程源码
Java操作数据库需要经过3个大步骤: 获取数据库连接 执行SQL语句 关闭数据库连接 Mybatis将这几个步骤进行了封装,将获取数据库连接的给工作交给了SqlSessionFactory,将执行S ...
- 2023-08-20:用go语言写算法。给定一个由'W'、'A'、'S'、'D'四种字符组成的字符串,长度一定是4的倍数, 你可以把任意连续的一段子串,变成'W'、'A'、'S'、'D'组成的随意状
2023-08-20:用go语言写算法.给定一个由'W'.'A'.'S'.'D'四种字符组成的字符串,长度一定是4的倍数, 你可以把任意连续的一段子串,变成'W'.'A'.'S'.'D'组成的随意状态 ...