記賬軟件模型(一)

記賬軟件模型(一)

編制程序不是生活,而只是生活的一部分。在編寫程序的時候,老是關注編寫語言的細節,使用的算法和調用的函數。很少會重視系統科學的解決開發需求的問題。其實編制程序的主要目的就是解決遇到的實際應用問題,因此,好多方法不是侷限在已的算法和方法上,還有好多是,日常生活中的基本引用。

自己想着將日常常見的生活問題,融入到軟件開發的需求中。於是就想到製作一個記賬軟件。這個是日常生活中最常見的計算程序。剛好利用軟件開發的方法,將需求轉換成具體的功能。

也是想將平常工作中使用的開發技巧融入其中。因爲大多數教材都是歸納的方式,列舉好多零散的例子,每個例子不連貫,解釋每一個知識點的時候,也僅限於告訴我們這個可以這樣用。我想着使用一個例子將所有的知識點全部串聯起來,學習起來更有規律性。

後期我仔細分析了一下開發需求,其實軟件功能實現的方法非常多,但其中都有一個基本方法。我們主要是將基本給出分析和解釋。讀者隨着學識逐漸增多,自己就可以逐漸替換或優化現有的基本方法。

記賬軟件,其實也有一個基本模型,和兩個主要操作收入支出。爲了保證這個模型正常運行,逐漸完善其功能。儘量將常用的知識點灌溉其中。

基本模型

記賬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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章