为自己做一个简单记账簿(1)
每个月收到信用卡账单时,我总会又惊又惑。上个月怎么又花了那么多钱?看着每一笔出帐流水,猛抓头皮却怎么也记不起来这钱是用在了哪儿。痛定思痛,采取行动,我要记账。作为一个信奉技术能改变世界的IT人,我理所当然的在网上搜索各种电子记账本。在线的记账功能不敢用怕被骚扰),一些单机记账软件提供的功能又不是我想要的。
与此同时,最近空下来的时候,我在看SQLite方面的资料。SQLite的简洁、小巧让我有些爱不释手。就此决定给自己做个记账本,用SQLite作为本地数据引擎。
功能概述
我需要的记账功能比较简单:
第一、记录每一笔消费,并可以添加需要的标签。当我查看明细时,能知道自己买了啥。
第二、对我来说,消费只需要分成两种:‘生活必需消费’和‘享受消费’。每周、每月可以看到这两种消费所占的比例、金额。
第三、能查看自己近6个月的消费走势。
根据这3点需求,我为自己度身定制了这款记账工具。
图1是记账本的启动框。
程序将启动一个工作线程来检查记账程序路径下是否已存在账本数据库,若没有则创建该数据库和所需的表结构。同时定时器将轮询检查结果。
图1)
图2是记账本的主界面。
很多其他记账软件把消费分成餐饮,交通,买衣服……或者更细。一笔账到底归为哪一类要想个半天,同时出的图表复杂但又意义不大。
为自己做的账本只有两种消费类别,对应两个大按钮,点击即可进入记账界面。这两种消费所占的比例和总额是我每月的关注点。
主界面的最下方还有3个按钮,分别对应‘返回主界面’、‘退出程序’、‘查看报表’。在任何其它界面中,这三个按钮的图案、功能都保持一致。
图2)
点击主界面上的绿色或红色按钮就会进入到记账界面。如图3所示
标题、图标、主色调区分了不同的消费。该界面的设计也是希望最简化,省去了消费时间选择框,默认为当前记录时间。
该界面的一个亮点是‘标签选择框’。框中的标签是动态生成的。系统会取近一个月时间,使用最频繁的10个标签来显示。代码分析部分还会展开)
这里记录的标签,会出现在后面的明细报表中,这是我用来对账的。
图3)
最后来看一下这个小工具能生成的图表与报表,如图4所示
该工具能输出3种报表,分别是消费比例图,近6月消费走势图,消费对账明细。对于图表,鼠标至于色块上方时将显示消费金额。
这3个报表也本着减少操作,降低复杂度,简洁好用为宗旨,所以只提供了最必要的功能。
图4)
程序结构
看了工具的界面设计后,让我们来看一下程序结构,如图5所示
图5)
整个Solution最主要由3个Project组成。
1. DataAccessLayer.SQLite包装了对SQLite访问的方法
2. ForSingle 主程序
3. UserControls 自定义用户控件
需要说明的是:
这个工具所有界面最下方的3个按钮保持统一,所以我在UserControls中画了一个BaseForm图中橙色框标出),让主界面继承自BaseForm。
其他的每一个界面都做成UserControl,在主程序中控制它们的创建与显示。如图中绿色框标出。
SQLite对于本地应用是个不错的选择,我使用的是一个包装成ADO.NET接口的SQLite引擎。以下链接供参考:
我使用的类库:http://sqlite.phxsoftware.com/
SQLite官方网站:http://www.sqlite.org/