記帳軟件模型(一)
算法
編制程序不是生活,而只是生活的一部分。在編寫程序的時候,總是關注編寫語言的細節,使用的算法和調用的函數。不多會重視系統科學的解決開發需求的問題。其實編制程序的主要目的就是解決遇到的實際應用問題,所以,好多方法不是侷限在已的算法和方法上,還有好可能是,平常生活中的基本引用。數組
本身想着將平常常見的生活問題,融入到軟件開發的需求中。因而就想到製做一個記帳軟件。這個是平常生活中最多見的計算程序。恰好利用軟件開發的方法,將需求轉換成具體的功能。數據結構
也是想將日常工做中使用的開發技巧融入其中。由於大多數教材都是概括的方式,列舉好多零散的例子,每一個例子不連貫,解釋每個知識點的時候,也僅限於告訴咱們這個能夠這樣用。我想着使用一個例子將全部的知識點所有串聯起來,學習起來更有規律性。框架
後期我仔細分析了一下開發需求,其實軟件功能實現的方法很是多,但其中都有一個基本方法。咱們主要是將基本給出分析和解釋。讀者隨着學識逐漸增多,本身就能夠逐漸替換或優化現有的基本方法。模塊化
記帳軟件,其實也有一個基本模型,和兩個主要操做收入支出。爲了保證這個模型正常運行,逐漸完善其功能。儘可能將經常使用的知識點灌溉其中。函數
記帳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