貨幣系統設計 c

2021-05-18 03:25:23 字數 4168 閱讀 5004

一、

需求分析

1)

系統描述:

該系統功能主要是可以為使用者提高快捷有效的服務,為使用者完成貨幣之間的一些基本運算(比如幣值統計,不同貨幣之間的等價兌換,還有貨幣的統計計算,便利於賬目管理),本系統為使用者設計了四種貨幣之間的轉換,人民幣、美元、英鎊、日元,使用者可以再這四種貨幣的範疇內進行一些基本的運算。 2)

需求描述: 1

、該系統設計了乙個貨幣類(

cmoney

),作為基類,用乙個類模板

currency

作為貨幣類的派生類,

cmoney

類中定義了兩個靜態資料成員:

rate(

匯率表)

匯聚了四種貨幣之間的匯率,

inter(

年利息表

)匯聚了各種貨幣的年利息,作為基類的保護成員,這樣在派生類中的例項化物件就可以直接訪問,在運算中利用到這些資料成員;

display()

定義為乙個純虛函式,為派生類提供乙個介面,它在派生類中得到實現,並顯示貨幣的面值及相應的標誌。 2

、該系統在定義

cmoney

類的派生類的時候運用到了泛型程式設計中模板功能

template class currency : public cmoney

,由於每種貨幣的演算法都一樣,只是幣種不同而已,這樣會造成**冗長,而且會造成程式效率低,利用了模板技術之後,**質量高,而且功能更廣泛;在這裡使用了模板的乙個特性,就是非型別的模板引數,也就是

int currtype

。模板引數通常都是乙個型別,比如

int

什麼的,但這也可以是乙個非型別的模板引數,傳統上,非型別模板引數用於傳遞乙個靜態的值,用來構造模板類,在該系統的程式中,這個模板引數並沒有被模板使用,使用了這個模板引數的作用就是「製造型別」。

typedef    currency

<

0>

rmb;    //

人民幣typedef    currency

<

1>

usd;    //

美元typedef    currency

<

2>

gbp;    //

英鎊typedef    currency

<

3>

jpd;    //日元

3、類模板中為各種貨幣型別都實現了建構函式和拷貝建構函式,還有前增量和後增量的過載操作;另外也過載「

+」操作符使得任意兩種貨幣之間都可以實現相加或相減運算,並且得到等值的相關貨幣面值,你想得到怎麼樣型別貨幣的面值都可以,只要客戶按照系統所提示的操作進行,就可以得到符合您需求的答案; 4

、該類模板中也編寫了乙個函式,就是求利息的問題,不同貨幣有不同的年利率,但演算法都一樣,所以又使用了乙個模板函式

currency& getinterest(int n),

使用者可以自己決定要求多少年後的年利息,為使用者得到的結果是若干年後的貨幣總額,也就是

m*(1+inter)^n,

並且可以由

display()

函式輸出結果。 5

、程式中以友元方式過載

」>>」

、」<<」

操作符,便於使用者可以直接輸入例項化物件的貨幣面值,程式設計師也可以在程式中直接輸出例項化物件,而且在螢幕上輸出的內容與

display()

一樣的內容。

6、鑑於物件導向程式設計思想,該程式中另外也設計了兩個類:

sysoperation

類和useroperation

類。sysoperation

類定義了一些系統函式,

menu()

選單函式和

gotointe***ce()

回到主介面的函式,使用者操作物件可以在程式深入的時候可以訪問這些成員函式,以回到主介面或選單欄中,就可以進行其他的操作。

useroperation

類是乙個使用者類,定義了三個模板函式:

template

void interestoper(currency & t);

//用於不同種類貨幣的利息計算

template

void convertoper(currency & t);

//用於任意兩種貨幣之間的等價兌換

template

void plusoper(currency & t);

//用於任意兩種貨幣之間的統計運算,相加或者相減

。。。。。。。。。

三、

模組的設計分析

首先與使用者互動的乙個類是

systemoperation

類,這個類的設計給使用者提供了三種功能,一種是回到主介面,第二是進入選單,然後進行相關的操作,在主選單中選定操作之後,

systemoperation

類,的模板函式

oper()

函式將根據使用者選擇執行;

useroperation

類的成員模板函式是以

currency &

為引數的,根據貨幣物件的不同將進行不同的操作,根據選擇,

useroperation

類將會有三種功能提供被執行,

convertoper()

函式、plusoper()

函式、interestoper()

函式,將會進行相應的操作。

程式中的幾種關鍵演算法: 1

、利息運算:

for(int i=0; i

2、貨幣等價兌換

int ifensum = static_cast((utemp.getyuan() * 100 + utemp.getfen()) * cmoney::rate[tp][currtype]);

yuan = int(ifensum / 100);

fen = ifensum - yuan*100 ; 3

、前增量和後增量演算法

currency & operator++() //

前增量的過載

currency operator++(int) //

後增量的過載4、「

+=」操作符的過載演算法

currency& operator+=( const currency& rhs)

四、

設計感想及存在問題

該貨幣系統中能夠操作的貨幣種類只有四種(人民幣、美元、英鎊、日元),

但是由於設計的改進,由開始的只能進行美元與人民幣之間的轉換計算,到現在可以應用到多種貨幣之間的運算,系統的適用性得到了很大的提公升,主要改進的地方時使用了泛型程式設計中的模板技術,使得**得到了很大的節省,**量減少的同時程式的執行效率得到了很大的提高。

在設計過程中,我也參考了很多資料書,一開始我只是簡單地研究兩種貨幣之間的聯絡,物件導向的程式設計思想很快地幫我解決了問題,之後,我一直在想能否改善**,使得程式的適用性更廣泛,適合更多種類的貨幣進行互動運算,因為以前拜讀過《設計模式可復用物件導向的軟體基礎》這本書,所以想到了用其中的工廠方法來設計,但是經過長時間的琢磨和分析,我還是沒有找到突破口,後來我就想用泛型程式設計中的模板技術來做,這樣的話我也不用寫那麼多的不同種類的貨幣類了,然後就開始著手寫,在寫的過程中也遇到了很多困難,這期間我也參考了《

c++template

》這本書,在裡面也學到了以前不曾深入學習的關於模板的更多知識,在我把模板類的程式執行成功之後,就開始著重於與使用者交匯的這一大塊,我發現我還可以用模板來做,所以又設計了兩個類,乙個類是為使用者提供介面,而另乙個類就執行一些計算操作,根據使用者的選擇來執行相應的演算法,雖然系統不能說做的怎麼樣,但從決定開始用模板來設計的那天起,到現在三天時間,我覺得自己學到了很多,這一段時間確實很充實!

如果要使該程式能夠適用更多的貨幣種類,只需在基類

cmoney

中把匯率表再填充,年利率表也要得到更新,只要對應補充資料,就

ok了,在這裡我就只用了四種貨幣,所以在這方面提高適用性問題不大,至於其他方面的提高,我想在以後的學習中我會慢慢體會到,我應該如何更好地設計了!

C 貨幣系統

問題描述 給你乙個n種面值的貨幣系統,求組成面值為m的貨幣有多少種方案。輸入 第一行輸入兩個正整數n和m,用空格隔開,分別表示貨幣系統的面值種數和要組成的總面值。以下n行,每行輸入乙個正整數,表示貨幣系統的面值。輸出 一行乙個數,表示組成目標面值的方案總數。輸入輸出樣例 money.in money...

貨幣系統問題

時間限制 1 sec 記憶體限制 64 mb 提交 85 解決 59 提交 狀態 討論版 命題人 admin 貨幣是在國家或經濟體內的物資與服務交換中充當等價物,或是償還債務的特殊商品,是用作交易媒介 儲藏價值和記賬單位的一種工具。魔法世界的貨幣的歷史,可以追溯至史前以物易物的階段,後來經過金屬貨幣...

1192 貨幣系統

給你乙個n種面值的貨幣系統,求組成面值為m的貨幣有多少種方案。樣例 設n 3,m 10,要求輸入和輸出的格式如下 第一行兩個整數n,m m 5000 以下n行,每行乙個整數,第i 1行為第i種貨幣的面值 乙個整數,為方案數 3 1012 510動態規劃 揹包問題 n,m map int,input ...