记帐软件模型(一)
算法
编制程序不是生活,而只是生活的一部分。在编写程序的时候,总是关注编写语言的细节,使用的算法和调用的函数。不多会重视系统科学的解决开发需求的问题。其实编制程序的主要目的就是解决遇到的实际应用问题,所以,好多方法不是局限在已的算法和方法上,还有好可能是,平常生活中的基本引用。数组
本身想着将平常常见的生活问题,融入到软件开发的需求中。因而就想到制做一个记帐软件。这个是平常生活中最多见的计算程序。恰好利用软件开发的方法,将需求转换成具体的功能。数据结构
也是想将日常工做中使用的开发技巧融入其中。由于大多数教材都是概括的方式,列举好多零散的例子,每一个例子不连贯,解释每个知识点的时候,也仅限于告诉咱们这个能够这样用。我想着使用一个例子将全部的知识点所有串联起来,学习起来更有规律性。框架
后期我仔细分析了一下开发需求,其实软件功能实现的方法很是多,但其中都有一个基本方法。咱们主要是将基本给出分析和解释。读者随着学识逐渐增多,本身就能够逐渐替换或优化现有的基本方法。模块化
记帐软件,其实也有一个基本模型,和两个主要操做收入支出。为了保证这个模型正常运行,逐渐完善其功能。尽可能将经常使用的知识点灌溉其中。函数
记帐keep accounts软件的原理很简单,就是求当前的余额,那么余额是怎么得来的呢,是收入减去支出就等于余额。学习
余额 = 收入 – 支出优化
那么须要输入的内容,就是收入金额和支出金额,须要显示的内容就是余额。spa
问题到此,好像已经基本成型,那么首先咱们须要处理的就是怎样表示这三个参数,假如咱们将余额用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