c++实验报告同名12568.docx

上传人:b****8 文档编号:10102516 上传时间:2023-02-08 格式:DOCX 页数:17 大小:144.09KB
下载 相关 举报
c++实验报告同名12568.docx_第1页
第1页 / 共17页
c++实验报告同名12568.docx_第2页
第2页 / 共17页
c++实验报告同名12568.docx_第3页
第3页 / 共17页
c++实验报告同名12568.docx_第4页
第4页 / 共17页
c++实验报告同名12568.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

c++实验报告同名12568.docx

《c++实验报告同名12568.docx》由会员分享,可在线阅读,更多相关《c++实验报告同名12568.docx(17页珍藏版)》请在冰豆网上搜索。

c++实验报告同名12568.docx

c++实验报告同名12568

c++实验报告(同名12568)

C++课程设计报告

 

 

学号:

班级:

13级计科二班

姓名:

指导教师:

王定成

 

个人银行综合实例

 

一.设计目的

将理论教学中涉及到的知识点贯穿起来,对不同的数据类型,程序控制结构,数据结构做一比较和总结,结合设计题目进行综合性应用,对所学知识打到融会贯通的程度。

通过课程设计,学生在下述方面的能力应该得到提升:

1)进一步巩固加深学生所学专业课程,理论联系实际,进一步培养学生综合分析能力,解决问题的能力。

2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。

3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。

4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。

5)掌握面向对象程序设计的方法。

6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。

7)进一步掌握在集成环境下如何调试程序和修改程序。

二.设计说明:

一个人可以有多个活期储蓄账户,一个活期储蓄账户包括账号(id),余额(balance),年利率(rate)等信息,还包括显示账户信息(show),存款(deposit),取款(withdraw),结算利息(settle)等操作。

设计一个类SavingsAccount,将id,balance,rate均作为其成员数据,将show,deposit,withdraw,settle均作为其成员函数。

无论存款,取款还是结算利息,都需要修改当前的余额并且将余额的变动输出,这些公共操作由私有成员函数record来执行。

实现该类的难点在于利息的计算。

由于账户的月是不断变化的,因此不能通过余额与年利率相乘的办法来计算年利,而是需要将一年当中每天的余额累积起来再除以一年的总天数,得到一个日均余额,再乘以年利率。

为了计算余额的按日累积值,SavingsAccount引入了私有数据成员lastDate,accumulation和私有成员函数accumulate。

lastDate用来存储上一次余额变动的日期,accumulation用来存储上次计算利息以后直到最近一次余额变动时余额按日累加的值,accumulate成员函数用来计算截至指定日期的账户余额按日累积值。

 

三.源代码

8-8.cpp

#include"account.h"

#include

usingnamespacestd;

intmain()//起始日期

{Datedate(2008,11,1);

//建立几个帐户

SavingsAccountsa1(date,"s3755217",0.015);

SavingsAccountsa2(date,"02342342",0.015);

CreditAccountca(date,"c5392394",10000,0.0005,50);

Account*accounts[]={&sa1,&sa2,&ca};//账户总数

constintn=sizeof(accounts)/sizeof(Account*);

cout<<"(d)deposit(w)withdraw(s)show(c)changeday(n)nextmonth(e)exit"<

charcmd;

do{//显示日期和总金额

date.show();

cout<<"\tTotal:

"<

:

getTotal()<<"\tcommand>";

intindex,day;

doubleamount;

stringdesc;

cin>>cmd;

switch(cmd){

case'd':

//存入现金

cin>>index>>amount;

getline(cin,desc);

accounts[index]->deposit(date,amount,desc);

break;

case'w':

//取出现金

cin>>index>>amount;

getline(cin,desc);

accounts[index]->withdraw(date,amount,desc);

break;

case's':

//查询各帐户信息

inti;

for(i=0;i

cout<<"["<

accounts[i]->show();

cout<

}

break;

case'c':

//改变日期

cin>>day;

if(day

cout<<"Youcannotspecifyapreviousday";

elseif(day>date.getMaxDay())

cout<<"Invalidday";

elsedate=Date(date.getYear(),date.getMonth(),day);

break;

case'n':

//进入下个月

if(date.getMonth()==12)

date=Date(date.getYear()+1,1,1);

else

date=Date(date.getYear(),date.getMonth()+1,1);

for(i=0;i

accounts[i]->settle(date);

break;

}

}while(cmd!

='e');

return0;

}

account.cpp

#include"account.h"

#include

#include

usingnamespacestd;

doubleAccount:

:

total=0;//Account类的实现

Account:

:

Account(constDate&date,conststring&id)

:

id(id),balance(0)

{date.show();

cout<<"\t#"<

}

voidAccount:

:

record(constDate&date,doubleamount,conststring&desc){

amount=floor(amount*100+0.5)/100;//保留小数点后面两位

balance+=amount;

total+=amount;

date.show();

cout<<"\t#"<

}

voidAccount:

:

error(conststring&msg)const

{cout<<"Error(#"<

"<

//voidSavingsAccount:

:

deposit(constDate&date,doubleamount,conststring&desc)

//{record(date,amount,desc);}

voidAccount:

:

show()const{

cout<

}

//SavingsAccount类相关成员函数的实现

SavingsAccount:

:

SavingsAccount(constDate&date,conststring&id,doublerate):

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

voidSavingsAccount:

:

deposit(constDate&date,doubleamount,conststring&desc){

record(date,amount,desc);

acc.change(date,getBalance());}

voidSavingsAccount:

:

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

{

if(amount>getBalance())

error("notenoughmoney");

else

{record(date,-amount,desc);

acc.change(date,getBalance());

}

}

voidSavingsAccount:

:

settle(constDate&date)

{if(date.getMonth()==1){

doubleinterest=acc.getSum(date)*rate/(date-Date(date.getYear()-1,1,1));

//计算年息

if(interest!

=0)

record(date,interest,"interest");

acc.reset(date,getBalance());

}

}

//CreditAccount类相关成员函数的实现

CreditAccount:

:

CreditAccount(constDate&date,conststring&id,doublecredit,doublerate,doublefee)

:

Account(date,id),credit(credit),rate(rate),fee(fee),acc(date,0){}

voidCreditAccount:

:

deposit(constDate&date,doubleamount,conststring&desc)

{record(date,amount,desc);

acc.change(date,getDebt());}

voidCreditAccount:

:

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

{

if(amount-getBalance()>credit)

error("notenoughcredit");

else

{record(date,-amount,desc);

acc.change(date,getDebt());

}

}

voidCreditAccount:

:

settle(constDate&date)

{

doubleinterest=acc.getSum(date)*rate;

if(interest!

=0)

record(date,interest,"interest");

if(date.getMonth()==1)

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

acc.reset(date,getDebt());

}

voidCreditAccount:

:

show()const{

Account:

:

show();

cout<<"\tAvailablecredit:

"<

}

account.h

#ifndef_ACCOUNT_H_

#define_ACCOUNT_H_

#include"date.h"

#include"accumulator.h"

#include

classAccount{//账户类

private:

std:

:

stringid;//账号

doublebalance;//余额

staticdoubletotal;//所有账户的总金额

protected:

//供派生类调用的构造函数,id为账户

Account(constDate&date,conststd:

:

string&id);

//记录一笔账,date为日期,account为金额,desc为说明

voidrecord(constDate&date,doubleamount,conststd:

:

string&desc);

//报告错误信息

voiderror(conststd:

:

string&msg)const;

public:

conststd:

:

string&getId()const{returnid;}

doublegetBalance()const{returnbalance;}

staticdoublegetTotal(){returntotal;}

//显示账户信息

virtualvoiddeposit(constDate&date,doubleamount,conststd:

:

string&desc)=0;

virtualvoidwithdraw(constDate&date,doubleamount,conststd:

:

string&desc)=0;

virtualvoidsettle(constDate&date)=0;

virtualvoidshow()const;

};

classSavingsAccount:

publicAccount

{//储蓄账户类

private:

Accumulatoracc;//辅助计算利息的累加器

doublerate;//存储的年利率

public:

//构造函数

SavingsAccount(constDate&date,conststd:

:

string&id,doublerate);

doublegetRate()const{returnrate;}

//存入现金

voiddeposit(constDate&date,doubleamount,conststd:

:

string&desc);

//取出现金

voidwithdraw(constDate&date,doubleamount,conststd:

:

string&desc);

voidsettle(constDate&date);//结算利息,每年1月1日调用一次该函数

};

classCreditAccount:

publicAccount{//信用账户类

private:

Accumulatoracc;//辅助计算利息的累加器

doublecredit;//信用额度

doublerate;//欠款的日利率

doublefee;//信用卡年费

doublegetDebt()const{//获得欠款额

doublebalance=getBalance();

return(balance<0?

balance:

0);}

public:

//构造函数

CreditAccount(constDate&date,conststd:

:

string&id,doublecredit,doublerate,doublefee);

doublegetCredit()const{returncredit;}

doublegetRate()const{returnrate;}

doublegetFee()const{returnfee;}

doublegetAvailableCredit()const{//获得可用信用额度

if(getBalance()>0)

returncredit+getBalance();

else

returncredit;}

//存入现金

voiddeposit(constDate&date,doubleamount,conststd:

:

string&desc);

//取出现金

voidwithdraw(constDate&date,doubleamount,conststd:

:

string&desc);

voidsettle(constDate&date);//结算利息,每年1月1日调用一次该函数

voidshow()const;

};

#endif

accumulator.h

#ifndef_ACCUMULATOR_H_

#define_ACCUMULATOR_H_

#include"date.h"

classAccumulator{//将某个数值按日累加

private:

DatelastDate;//上次变更数值的日期

doublevalue;//数值的当前值

doublesum;//数值按日累加之和

public:

//构造函数,date为开始累加的日期,value为初始值

Accumulator(constDate&date,doublevalue):

lastDate(date),value(value),sum(0){}

//获得日期date的累加结果

doublegetSum(constDate&date)const{returnsum+value*(date-lastDate);}

//在date将数值变更为value

voidchange(constDate&date,doublevalue)

{

sum=getSum(date);

lastDate=date;

this->value=value;

}

//初始化,将日期变为date,数值变为value,累加器清零

voidreset(constDate&date,doublevalue){

lastDate=date;this->value=value;sum=0;}

};

#endif

date.cpp

#include"date.h"

#include

#include

usingnamespacestd;

namespace{//namespace使下面的定义只在当前文件中有效

//存储平年中的某个月1日之前有多少天,为便于getMaxDay函数的实现,该数组多出一项

constintDAYS_BEFORE_MONTH[]={0,31,59,90,120,151,181,212,

243,273,304,334,365};}

Date:

:

Date(intyear,intmonth,intday):

year(year),month(month),day(day)

{

if(day<=0||day>getMaxDay())

{

cout<<"Invaliddate:

";

show();

cout<

exit

(1);

}

intyears=year-1;

totalDays=years*365+years/4-years/100+years/400+

DAYS_BEFORE_MONTH[month-1]+day;

if(isLeapYear()&&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<

}

date.h

#ifndef_DATE_H_

#define_DATE_H_

classDate{//日期类

private:

intyear;//年

intmonth;//月

intday;//日

inttotalDays;//该日期是从公元元年1月1日开始的第几天

public:

Date(intyear,intmonth,intday);//用年,月,日构造日期

intgetYear()const{returnyear;}

intgetMonth()const{returnmonth;}

intgetDay()const{returnday;}

intgetMaxDay()const;//获得当月有多少天

boolisLeapYear()const{//判断当年是否为闰年

returnyear%4==0&&year%100!

=0||year%400==0;}

voidshow()const;//输出当前日期

intoperator-(constDate&date)const{//计算两个日期之间差多少天

returntotalDays-date.totalDays;}

};

#endif

 

四.实验结果

 

五.实验总结

通过这次对C++课程设计的学习,我了解到了软件编程的基本操作,并感受到了学习编程的乐趣。

在此次学习中,我在老师的帮助下完成了对银行管理系统的编写,并成功运行。

尽管我的程序还很简单,也有很多漏洞,但是却是我尽心尽力编写完成的。

我的水平可能还不足以完成更加复杂和困难的程序,但是我会再接再厉,一直认真学习下去的。

 

六.参考资料

1.《C++程序设计课程设计》,机械工业出版社,刘振安,刘燕君,孙忱,2004

2.《Visual C++课程设计案例精编(第二版)》,中国水利水电出版社,严华峰,2002.

3.《Visual C++课程设计语系统开发案例》,清华大学出版社,伍俊良,2002.

4.《面向对象程序设计与VC++实践》,西安电子科技大学出版社,揣锦华,2005.

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1