c++实验报告(同名12568).doc_第1页
c++实验报告(同名12568).doc_第2页
c++实验报告(同名12568).doc_第3页
c++实验报告(同名12568).doc_第4页
c++实验报告(同名12568).doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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#includeaccount.h#includeusing namespace std;int main() /起始日期 Date date(2008,11,1);/建立几个帐户 SavingsAccount sa1(date,s3755217,0.015); SavingsAccount sa2(date,02342342,0.015); CreditAccount ca(date,c5392394,10000,0.0005,50); Account*accounts=&sa1,&sa2,&ca; /账户总数 const int n=sizeof(accounts)/sizeof(Account*); cout(d)deposit (w)withdraw (s)show (c)change day (n)next month (e)exitendl; char cmd; do /显示日期和总金额 date.show(); couttTotal:Account:getTotal(); int index,day; double amount; string desc; cincmd; switch(cmd) case d: /存入现金cinindexamount;getline(cin,desc);accountsindex-deposit(date,amount,desc);break;casew: /取出现金 cinindexamount;getline(cin,desc); accountsindex-withdraw(date,amount,desc);break;cases: /查询各帐户信息int i;for(i=0;in;i+)coutishow();coutday;if(daydate.getDay()coutdate.getMaxDay() coutInvalid day;else date=Date(date.getYear(),date.getMonth(),day);break;casen: /进入下个月if(date.getMonth()=12)date=Date(date.getYear()+1,1,1);else date=Date(date.getYear(),date.getMonth()+1,1);for(i=0;isettle(date);break; while(cmd!=e); return 0;account.cpp#includeaccount.h#include#includeusing namespace std;double Account:total=0; /Account类的实现Account:Account(const Date &date,const string &id):id(id),balance(0) date.show(); coutt#idcreatedendl;void Account:record(const Date &date,double amount,const string &desc) amount=floor(amount*100+0.5)/100; /保留小数点后面两位 balance+=amount; total+=amount; date.show(); coutt#idtamounttbalancetdescendl;void Account:error(const string &msg)const coutError(#id):msgendl;/void SavingsAccount:deposit(const Date &date,double amount,const string &desc)/ record(date,amount,desc); void Account:show()const coutidtBlancegetBalance() error(not enough money); else record(date,-amount,desc); acc.change(date,getBalance(); void SavingsAccount:settle(const Date &date) if (date.getMonth()=1)double interest=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(const Date &date,const string &id,double credit,double rate,double fee):Account(date,id),credit(credit),rate(rate),fee(fee),acc(date,0)void CreditAccount:deposit(const Date &date,double amount,const string &desc) record(date,amount,desc); acc.change(date,getDebt();void CreditAccount:withdraw(const Date &date,double amount,const string &desc)if(amount-getBalance()credit) error(not enough credit); else record(date,-amount,desc); acc.change(date,getDebt(); void CreditAccount:settle(const Date &date) double interest=acc.getSum(date)*rate; if(interest!=0) record(date,interest,interest); if(date.getMonth()=1) record(date,-fee,annual fee); acc.reset(date,getDebt();void CreditAccount:show()constAccount:show(); couttAvailable credit:getAvailableCredit(); account.h#ifndef _ACCOUNT_H_#define _ACCOUNT_H_#includedate.h#includeaccumulator.h#includeclass Account /账户类private: std:string id; /账号 double balance; /余额 static double total; /所有账户的总金额protected:/供派生类调用的构造函数,id为账户 Account(const Date &date,const std:string &id);/记录一笔账,date为日期,account为金额,desc为说明 void record(const Date &date, double amount,const std:string &desc);/报告错误信息 void error(const std:string &msg)const;public: const std:string &getId()constreturn id; double getBalance()constreturn balance; static double getTotal()return total;/显示账户信息 virtual void deposit(const Date &date,double amount,const std:string&desc)=0; virtual void withdraw(const Date &date,double amount,const std:string &desc)=0; virtual void settle(const Date &date)=0; virtual void show()const;class SavingsAccount:public Account /储蓄账户类private: Accumulator acc; /辅助计算利息的累加器 double rate; /存储的年利率public: /构造函数 SavingsAccount(const Date &date,const std:string &id,double rate); double getRate()constreturn rate;/存入现金 void deposit(const Date &date,double amount,const std:string &desc); /取出现金 void withdraw(const Date &date,double amount,const std:string &desc); void settle(const Date &date);/结算利息,每年1月1日调用一次该函数 ;class CreditAccount:public Account /信用账户类private: Accumulator acc; /辅助计算利息的累加器 double credit; /信用额度 double rate; /欠款的日利率 double fee; /信用卡年费 double getDebt()const /获得欠款额double balance=getBalance(); return (balance0) return credit+getBalance(); else return credit;/存入现金void deposit(const Date &date,double amount,const std:string &desc); /取出现金 void withdraw(const Date &date,double amount,const std:string &desc); void settle(const Date &date); /结算利息,每年1月1日调用一次该函数 void show()const;#endifaccumulator.h#ifndef _ACCUMULATOR_H_#define _ACCUMULATOR_H_#includedate.hclass Accumulator /将某个数值按日累加private:Date lastDate; /上次变更数值的日期double value; /数值的当前值double sum; /数值按日累加之和public:/构造函数,date为开始累加的日期,value为初始值 Accumulator(const Date &date,double value):lastDate(date),value(value),sum(0) /获得日期date的累加结果 double getSum(const Date &date)const return sum+value*(date-lastDate);/在date将数值变更为value void change(const Date &date,double value) sum=getSum(date); lastDate=date; this-value=value;/初始化,将日期变为date,数值变为value,累加器清零 void reset(const Date &date,double value) lastDate=date;this-value=value;sum=0;#endifdate.cpp#includedate.h#include#includeusing namespace std;namespace /namespace使下面的定义只在当前文件中有效/存储平年中的某个月1日之前有多少天,为便于getMaxDay函数的实现,该数组多出一项const int DAYS_BEFORE_MONTH=0,31,59,90,120,151,181,212,243,273,304,334,365;Date:Date(int year,int month,int day):year(year),month(month),day(day) if(daygetMaxDay() coutInvalid date:; show(); cout2) totalDays+;int Date:getMaxDay()constif(isLeapYear()&month=2)return 29;elsereturn DAYS_BEFORE_MONTHmonth-DAYS_BEFORE_MONTHmonth-1; void Date:show()const coutgetYear()-getMonth()-getDay();date.h#ifndef _DATE_H_#define _DATE_H_class Date /日期类private:int year; /年int month; /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论