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