記帳軟件模型(一)


記帳軟件模型(一)
算法

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

本身想着將平常常見的生活問題,融入到軟件開發的需求中。因而就想到製做一個記帳軟件。這個是平常生活中最多見的計算程序。恰好利用軟件開發的方法,將需求轉換成具體的功能。數據結構

也是想將日常工做中使用的開發技巧融入其中。由於大多數教材都是概括的方式,列舉好多零散的例子,每一個例子不連貫,解釋每個知識點的時候,也僅限於告訴咱們這個能夠這樣用。我想着使用一個例子將全部的知識點所有串聯起來,學習起來更有規律性。框架

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

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

基本模型

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

數組也是一種數據結構,根據這個需求能夠定義個103列的數組,咱們給他取名叫Arraybox,表示出來就是Arraybox10][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

相關文章
相關標籤/搜索