记账软件模型(一)
编制程序不是生活,而只是生活的一部分。在编写程序的时候,老是关注编写语言的细节,使用的算法和调用的函数。很少会重视系统科学的解决开发需求的问题。其实编制程序的主要目的就是解决遇到的实际应用问题,因此,好多方法不是局限在已的算法和方法上,还有好多是,日常生活中的基本引用。
自己想着将日常常见的生活问题,融入到软件开发的需求中。于是就想到制作一个记账软件。这个是日常生活中最常见的计算程序。刚好利用软件开发的方法,将需求转换成具体的功能。
也是想将平常工作中使用的开发技巧融入其中。因为大多数教材都是归纳的方式,列举好多零散的例子,每个例子不连贯,解释每一个知识点的时候,也仅限于告诉我们这个可以这样用。我想着使用一个例子将所有的知识点全部串联起来,学习起来更有规律性。
后期我仔细分析了一下开发需求,其实软件功能实现的方法非常多,但其中都有一个基本方法。我们主要是将基本给出分析和解释。读者随着学识逐渐增多,自己就可以逐渐替换或优化现有的基本方法。
记账软件,其实也有一个基本模型,和两个主要操作收入支出。为了保证这个模型正常运行,逐渐完善其功能。尽量将常用的知识点灌溉其中。
基本模型
记账keep accounts软件的原理很简单,就是求当前的余额,那么余额是怎么得来的呢,是收入减去支出就等于余额。
余额 = 收入 – 支出
那么需要输入的内容,就是收入金额和支出金额,需要显示的内容就是余额。
问题到此,好像已经基本成型,那么首先我们需要处理的就是怎样表示这三个参数,假如我们将余额用balance,收入用Income 和支出用expenditure。就目前技术来看,函数变量使用字符比较合理。
那么我们需要将这个三个内容得依次显示出来
记账 Keep Accounts ----------------------------- 收入 支出 余额
Process returned 0 (0x0) execution time : 0.016 s Press any key to continue. |
这样显示,似乎好像有些太简单了,如果内容过多了,就很难看出来,数字的对关系。那么需要一种格式化输出的
记账 KEEP ACCOUNTS +------------------------------------------------------------------------------------------------------------------------+ | 收入 | 支出 | 余额 | +------------------------------------------------------------------------------------------------------------------------+
Process returned 0 (0x0) execution time : 0.062 s Press any key to continue. |
这样显示似乎有点感觉,下边的记录对应表头,显然就是一个简单的账单。
第一个收入处理
添加一笔记录,例如今天发工资3500元,那么这个就是一个收入。
Incom模块设计,需要用户输入收入的金额,例如,输入工资3500元。
看样子好像可以,进行记录金额数据,但是总觉得这个表格少点什么。其实从表格的结构来说,就是表格少了一个底边,需要将数据包裹到表框中。
可能有些读者,觉得只要功能在就可以了,还整些没用的框框干什么,随后我会告诉大家这个表框意义。(讲解“集中规律”)
那么这个底部边框和制作标题栏一样
这样再看,似乎看着好看一点了,边框看上去更完整一些。
关于边框,这个问题是一个很有意思的问题,不过我们先不要分清主次,主要还是处理记账的问题,边框的问题,后期会重新新讨论。可能有些读者认为,先将主题程序设计好,在说这些表格,其实记账的原理很简单,很容易通过字符显示去实现,所以我们一开始从格式化输出动手,这也是展示各种输出好方式。
第一个支出处理
接下来我们说说支出的问题
Expenditure模块设计,需要用户输入支出的金额,例如,取出150元用来交电话费。
可能用户会发现,怎么收入和支出分别,显示并不能,集中到一起。为了解决这个问题我们需要制作一个数组,其逻辑结构是:
收入 | 支出 | 余额 |
A1 | ||
B1 | C1 | |
B2 | C2 |
数组也是一种数据结构,根据这个需求可以定义个10行3列的数组,我们给他取名叫Arraybox,表示出来就是Arraybox[10][3]。
这样就可以将收入的结果和支出的结果放到一起,当然余额的计算结果也可以放入其中。从上边的逻辑关系来看,余额的计算等于收入减去支出,C1 = A1 – B1,此处可能有些人看不明白,我们将逻辑表从新更改一下
收入 | 支出 | 余额 |
A1 | 0 | A1 |
A1 | B1 | C1 |
A2=C1 | B2 | C2 |
在第一行的时候,没有支出,那么余额自然是A1,到第二行的时候,有了支出B1,那么余额的计算,先将第一行的余额A1写入第二行的收入,然后在用收入减去支出B1,这个样子这个公式的得来就是C1 = A1 –B1后边依次类推。
这种计算方式是类似日常做的丁字帐,在此简单的程序中,我们先已此方式计算,随着开发知识和财务的知识增长,我们会已另一种方式计算,后期在详细讨论。
经过一番改造后
现在再看这个程序显示的结果,是不是已经框架成型。其实这个模型已经完成,可能细心的读者,会发现两边的数字,好多都不对,只是拼凑的结果。
我们现在这版本成为1.0版本,它简单的模型。
真正的重头戏,还是在2.0版本之后。
代码点评
程序中需要评说的是两个内容,一个是表格的制作,另一个是模块化思路。
表格的制作可能早期多数是使用,边框符号和特殊字符组成,其主要的目的是想让信息显示标准化,完全模仿现实世界的账簿。
模块化制作,主要是尽量将独立的功能集中起来,编制成可调用的函数,在后期是使用的时候“组合调用”,编制程序中最主要的思路就是,模块化编写。
表格制作
表格的制作,其实在C语言中,方法非常丰富,但是这个模型的开发,我是故意倾向C++风格。主要是我为后期的类体的使用做准备。使用表格制作后,可以方便嵌入式开发,因为好多,只要不断的修改边框尺寸,就可以适用各种机型显示尺寸。
常用函数:
名称 | 实例 | 解释 |
setw() | Cont << setw(n ) | 设置输出字符显示宽度 |
Setfill() | Cout << setfill(‘-’) | 设置填充字符 |
表格一般由表头和底边组成,中间是表格。
记账软件的表头:
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | ///显示记账标题,依次显示收入,支出,余额 /** * 功能显示记账, * **/ ///设置边框长度 const int defwidth = 80; const int defa = 15; const int defb = 11;
void TitleTable() { ///标题居中显示 cout << endl << endl; cout << setw( defwidth / 2 + 8 ) << "记账 KEEP ACCOUNTS" << endl; cout << setfill('-'); cout << "+" << setw( defwidth - 2 ) << "+" << endl; cout << setfill(' '); cout << "|" << setw( defa ) << "收入" << setw(defb); cout << "|" << setw( defa ) << "支出" << setw(defb); cout << "|" << setw( defa ) << "余额" << setw(defb); cout << "|" <<endl; cout << setfill('-'); cout << "+" << setw( defwidth - 2 ) << "+" << endl; cout << setfill(' '); } |
记账软件的表格底边
70 71 72 73 74 75 76 77 78 79 80 81 82 | /** * 功能:表格的底部 **/ void BottomTable() { ///底部边框 cout << setfill('-'); cout << '+' << setw( defa + defb ) << '+' << setw( defa + defb ) << '+' << setw( defa + defb ) << '+' << endl; cout << setfill(' '); } |
资源下载:
http://vdisk.weibo.com/s/uJlEtfMbmmhs2