C 語言程序設(shè)計第四版例7-10個人銀行賬戶管理程序_第1頁
C 語言程序設(shè)計第四版例7-10個人銀行賬戶管理程序_第2頁
C 語言程序設(shè)計第四版例7-10個人銀行賬戶管理程序_第3頁
C 語言程序設(shè)計第四版例7-10個人銀行賬戶管理程序_第4頁
C 語言程序設(shè)計第四版例7-10個人銀行賬戶管理程序_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

//Date,h

#ifndefDATEH_

^define_DATE_H_

classDate{

private:

intyear;

intmonth;

intday;

inttotalDays;

public:

Date(intyear,intmonth,intday);

intgetYear()const(

returnyear;

}

intgetMonth0const{

returnmonth;

}

intgetDay()const(

returnday;

}

intgetMaxDay()const;

boolisLeapYearOconst(

returnyeai'%4==C&&year%100!=0year%400==0;

}

voidshow()const;

〃計算兩個日期之間差多少天

intdistance(constDatc&date)const{

returntotalDays-date.totalDays;

}

};

#endif

“Accumulator,h

iiifndef_ACCUMULATOR」]

^define_ACCUMULATOR_H

^include"Date,h”

classAccumulator!

private:

DatelastDate;

doublevalue;

doublesum;

public:

〃構(gòu)造函數(shù),date開始累加的日期,value為初始值

Accumulator(constDaleSdate,doublevalue):lastDalc(date),value(value),sum(O){:

〃獲得U期date的累加結(jié)果

doublegctSum(constDate&datc)const{

returnsum+valu€*date.distance(lastDate);

}

〃在date將數(shù)值變更為value

voidchange(constDate&date,doublevalue){

sum=getSum(date);

lastDate=date;this->va1ue=va1ue;

}

voidreset(constDate&date,doublevalue){

lastDate=date;

this->va1ue=va1ue;

sum=0;

)

);

#endif

//Accout.h

#ifndef_ACC0UNT_H_

切efine_ACCOUNT_H_

#include"Date,h”

#include"Accumulator,h”

#include<string>

classAccount{

private:

std::stringid;

doublebalance;

staticdoubletotal;

protected:

〃供派生類調(diào)用的構(gòu)造函數(shù),id為賬戶

Account(constDate&date,conststd::string&id);

〃記錄一筆括賬,date為日期,amount為金額,desc為說明

voidrecord(constDate&date,doubleamount,conststd::string&desc);

〃報告錯誤信息

voiderror(conststd::string&msg)const;

public:

conststd::string&getld()const{returnid;}

doubIegetBalanceOconst{returnbalance:)

staticdoublegetTotal(){returntotal:)

〃顯示賬戶信息

voidshow()const:

};

classSavingsAccount:pub]icAccount{

private:

Accumulatoracc;

//doublecredit;

doublerate;

public:

〃構(gòu)造函數(shù)

SavingsAccount(constDate&date,conststd::string&id,doublerate);

doublegetRateOconst(returnrate;}

〃存入現(xiàn)金

voiddeposit(constDate&date,doubleamount,conststd::string&desc);

〃取出現(xiàn)金

voidwithdraw(constDate&date,doubleamount,conststd::string&desc);

voidsettle(constDace&date);

};

classCreditAccount:publicAccount{

private:

Accumulatoracc;

doublecredit;

doublerate;

doublefee;

doublegetDebt()const{

doublebalance=getBalance();

return(balance<O?balance:O);

}

public:

〃構(gòu)造函數(shù)

CreditAccount(constDate&date,conststd::string&id,doublecredit,doublerate,double

fee);

doublegetCredit()const{returncredit;}

doublegetRateOconst{returnrate;}

doublegetFeeO(returnfee;}

doublegetAvai1ableCredit()const{

if(getBalance()<0)

returncredit+getBalance();

else

returncredit;

}

〃存入現(xiàn)金

voiddeposit(constDate&datc,doubleamount,conststd::string&desc):

〃取出現(xiàn)金

voidwithdraw(constDate&datc,doubleamount,conststd::string&desc);

voidsettle(constDate&date);

voidshow()const;

}:

#endif

//Date.epp

#include"Date,h”

Sinclude<iostream>

^include<csidlib>

usingnamespacestd;

namespace{//namespace使卜面的定義只在當(dāng)前文件中有效

〃存儲半年中的某3個月1日之前有多少天,為便于getMaxDay函數(shù)的實現(xiàn),該數(shù)組多出一項

constintDAYS_BEF0R3_M0NTH[]=(0,31,59,90,120,15L181,212,243,273,304,334,365};

}

Date::Date(intyear,intnonth,intday):year(year),month(month),day(day){

if(day<=0day>geLMaxDay()){

cout?z,Invaliddate:";

show();

cout?endl;

exit(1);

}

intyears=year-l;

totalDays=ycars*365+ycars/4-ycars/l00+years/400+DAYS_BEFORE_MONTH[month-1]+day;

if(isLeapYeai'()&&month>2)

totalDays++;

}

intDate::getMaxDay()const{

if(isLeapYear()&&month==2)

return29;

else

returnDAYS_BEFORE_MONTH[month]-DAYS_BEFORE_MONTH[month-1];

}

voidDate::show()const{

cout?getYear()?z/*?getMonth0?*-z/?getDay0;

}

//Account.cpp

#include“Accout.h"

#include<cmalh>

#include<iostream>

usingnamespacestd;

doubleAccount::total=0;

〃Accounl類的實現(xiàn)

Account::Account(constDate&date,conststd:zstring&id):id(id),balance(0){

date,show();

cout"created”〈〈end1;

)

voidAccount::record(constDate&date,doubleamount,conststd::string&desc){

amount=floor(amount*100+0.5)/100;

balance+=amount;

total+=amount;

date.show();

cout?zz\t#/,?id?,,\t"?amount?,z\tz?balance<<"\tv?desc?endl;

)

voidAccount::show()const{cout?id<<~\tBalance:“〈〈balance;}

void?\ccount::error(conststring&msg)const{

cout<<MError(#",<<id<(//):*?msg?endl;

}

〃SavingsAccount類相關(guān)成員函數(shù)的實現(xiàn)

SavingsAccount::SavingsAccount(constDate&date,conststd:zstring&id,double

rate):Account(date,id),rate(rate),acc(date,0)(}

voidSavingsAccount::deposit(constDateftdate,doubleunount,conststring&dcsc){

record(date,amount,desc);

acc.change(date,gctBalanceO);

}

voidSavingsAccount::withdraw(constDate&date,doubleamount,conststring&desc)(

if(amount>getBalance()){

error(zznotenoughmoney");

}

else(

record(date,-ameunt,desc);

acc.change(date,getBalance());

}

voidSavingsAccount::settle(constDate&date){

doubleinterest=acc.getSum(dale)*rate/dalc.distance(Date(date.getYcar()-1,1,l)j;

if(interest!=0)

record(date,interest,"interest");

acc.reset(date,getBalanceO);

)

//CreditAccount類相關(guān)成員函數(shù)的實現(xiàn)

CreditAccount::CreditAccount(constDate&date,conststring&id,doublecredit,double

rate,doublefee):Account(date,id),credit(crcdit),rate(rate),fee(fec),acc(date,0){}

voidCreditAccount::deposit(constDatedelate,doubleamount,conststring&desc){

record(date,amount,desc);

acc.change(date,getDebt());

)

voidCreditAccount::withdraw(constDate&date,double£mount,conststring&desc){

if(amount-getBalanceO>credit)(

error(^notenoughcredit");

}

else{

record(date,-ameunt,desc);

acc.change(date,getDebt()):

}

)

voidCreditAccount::settle(constDate&date){

doubIeinterest=acc.getSum(date)*rate;

if(interest!=0)

record(date,interest,“interest");

if(date.getMonth()==l)

record(date,-fee,“annualfee");

acc.reset(date,getDebt()):

}

voidCreditAccount::show()const{

Account::show();

cout?w\tAvailablecredit:*?getAvailableCredit();

)

//Lab7_10

#include“Accout.h"

#include<iostream>

usingnamespacestd;

intmain(){

Datedate(2008,11,1);

〃建立幾個賬戶

SavingsAccountsal(date,*53755217",0.015):

SavingsAccountsa2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論