C++实验报告12.docx
- 文档编号:11703302
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:13
- 大小:19.25KB
C++实验报告12.docx
《C++实验报告12.docx》由会员分享,可在线阅读,更多相关《C++实验报告12.docx(13页珍藏版)》请在冰豆网上搜索。
C++实验报告12
课程名称:
C++语言程序设计
专业:
网络工程
指导教师:
肖巍
一、实验项目:
个人银行账户管理(C++课程设计)
二、实验目的:
这次课程设计的目的是总结及运用一学期来所学的知识,训练我们灵活应用所学C++知识,独立完成问题分析、总结设计、详细设计和编程实现等软件开发全过程的综合实践能力。
巩固、深化理论知识,提高编程水平,并在此过程中培养我们严谨的科学态度和良好的工作作风。
1、熟悉C++工程开发的过程、头文件和源文件之间的关系;
2、掌握类、继承及派生、虚函数、多态性在C++面向对象程序设计中的体现;
3、掌握一个类的对象作为另外一个类的成员的实现方法。
4、掌握子类对象与父类对象的关系。
5、熟悉C++中流的使用;
6、养成良好的编程习惯。
三、需求与功能分析:
随着社会的发展,信息化程度的不断深入,银行的传统业务已经不能满足我们的需要。
银行每天都要处理大量的存取款事件,做好存取款是银行工作重要的环节,但是要有效处理必须要有良好的程序还有数据管理系统来建立一个良好的软件系统来实现快速、有效、准确、安全的处理银行事物。
主要用于银行的储蓄卡管理系统,可以有效、准确的帮助我们高效实现完成存取事件。
自动取款机是我们学生经常用的,我们应该很熟悉,,就是用的账户管理系统。
四、实验环境:
计算机操作系统:
WindowsXP
软件:
MicrosoftVisualC++6.0
五、实验要求:
在掌握C++面向对象程序设计方法的基础上,使用VC++6.0结合课本内容完成以下内容的实现:
1、完成个人银行账户管理程序的编写、编译、调试、运行;
2、完成基类Account、子类SavingsAccount及CreditAccount的声明及定义。
3、实现Accumulator类及Date类。
4、利用C++中流的概念实现账户信息的存储。
5、在主函数中实现账户对象创建时从键盘输入构造函数需要的信息。
6、在输出及需要用户输入的时候要给出相应的提示信息。
六、程序代码:
#ifndef__DATE_H__
#define__DATE_H__
classDate{
private:
intyear;
intmonth;
intday;
inttotalDays;
public:
Date(intyear=1,intmonth=1,intday=1);
staticDateread();
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;
}
booloperator<(constDate&date)const{
returntotalDays } }; #endif #include"date.h" #include #include usingnamespacestd; namespace{ constintDAYS_BEFORE_MONTH[]={0,31,59,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< DateDate: : read(){ intyear,month,day; charc1,c2; cin>>year>>c1>>month>>c2>>day; returnDate(year,month,day);} #ifndef__ACCUMULATOR_H__ #define__ACCUMULATOR_H__ #include"date.h" classAccumulator{ private: DatelastDate; doublevalue; doublesum; public: doublegetSum(constDate&date)const{ returnsum+value*(date-lastDate); } Accumulator(constDate&date,doublevalue): lastDate(date),value(value),sum(0){} voidchange(constDate&date,doublevalue){ sum=getSum(date); lastDate=date; this->value=value; } voidreset(constDate&date,doublevalue){ lastDate=date; this->value=value; sum=0;} }; #endif #ifndef__ACCOUNT_H__ #define__ACCOUNT_H__ #include"date.h" #include"accumulator.h" #include #include classAccount; classAccountRecord{ private: Datedate; constAccount*account; doubleamount; doublebalance; std: : stringdesc; public: AccountRecord(constDate&date,constAccount*account,doubleamount,doublebalance,conststd: : string&desc); voidshow()const; }; typedefstd: : multimap classAccount{ private: std: : stringid; doublebalance; staticdoubletotal; staticRecordMaprecordMap; protected: Account(constDate&date,conststd: : string&id); 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; staticvoidquery(constDate&begin,constDate&end); }; //savingAccount和creditAccount类 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); }; 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); voidshow()const; voidsettle(constDate&date); }; #endif #include"account.h" #include #include #include usingnamespacestd; usingnamespacestd: : rel_ops; AccountRecord: : AccountRecord(constDate&date,constAccount*account,doubleamount,doublebalance,conststd: : string&desc) : date(date),account(account),amount(amount),balance(balance),desc(desc){} voidAccountRecord: : show()const{ date.show(); cout<<"\t#"< } doubleAccount: : total=0; RecordMapAccount: : recordMap; voidAccount: : query(constDate&begin,constDate&end){ if(begin<=end){ RecordMap: : iteratoriter1=recordMap.lower_bound(begin); RecordMap: : iteratoriter2=recordMap.upper_bound(end); for(RecordMap: : iteratoriter=iter1;iter! =iter2;++iter) iter->second.show(); } } 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: : show()const{cout< "< voidAccount: : error(conststring&msg)const{ cout<<"Error(#"< "< } //SAVingAccount类的相关成员函数的实现 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: "< } #include"account.h" #include #include #include usingnamespacestd; structdeleter{ template }; intmain(){ Datedate(2008,11,1); vector cout<<"(a)addaccount(d)deposit(w)withdraw(s)show(c)changeday(n)nextmonth(q)query(e)exit"< charcmd; inti; vector : iteratoriter; do{ date.show(); cout<<"\tTotal: "< : getTotal()<<"\tcommand>"; chartype; intindex,day; doubleamount,credit,rate,fee; stringid,desc; Account*account; Datedate1,date2; cin>>cmd; switch(cmd){ case'a': cin>>type>>id; if(type=='s'){ cin>>rate; account=newSavingsAccount(date,id,rate); }else{ cin>>credit>>rate>>fee; account=newCreditAccount(date,id,credit,rate,fee); } accounts.push_back(account); break; 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': for(i=0;i cout<<"["< accounts[i]->show(); cout< } break; case'c': cin>>day; if(day cout<<"Youconnotspecifyapreviousday"; elseif(day>date.getMaxDay()) cout<<"Invalidday"; else date=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(it
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 实验 报告 12
![提示](https://static.bdocx.com/images/bang_tan.gif)