个人银行账户管理报告.doc_第1页
个人银行账户管理报告.doc_第2页
个人银行账户管理报告.doc_第3页
个人银行账户管理报告.doc_第4页
个人银行账户管理报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

实训项目:个人银行账户管理(C+课程设计)实训目的:1、 熟悉C+工程开发的过程、头文件和源文件之间的关系;2、 掌握类、继承及派生、虚函数、多态性在C+面向对象程序设计中的体现;3、 掌握一个类的对象作为另外一个类的成员的实现方法。4、 掌握子类对象与父类对象的关系。5、 熟悉C+中流的使用;6、 养成良好的编程习惯。实训任务及要求: 在掌握C+面向对象程序设计方法的基础上,使用VC+6.0结合课本内容完成以下内容的实现:1、 完成个人银行账户管理程序的编写、编译、调试、运行;2、 完成基类Account、子类SavingsAccount及CreditAccount的声明及定义。3、 实现Accumulator类及Date类。4、 利用C+中流的概念实现账户信息的存储。5、 在Account类中添加数据成员:Password,并对应编写该数据成员的get函数。6、 在主函数中实现账户对象创建时从键盘输入构造函数需要的信息。7、 在输出及需要用户输入的时候要给出相应的提示信息。8、 实现取款时先验证密码。实训内容、方法与步骤(流程):一、 实训内容 个人账户管理程序。二、 实训方法 个人独立完成。三、 实训步骤1、 初步完成SavingsAccount类的实现;2、 实现对象数组的创建。3、 创建Account基类和两个子类。4、 实现虚函数和运行时的多态性。5、 添加数据成员:Password。6、 实现流的使用。7、 调试、运行、总结。8、 书写实训报告。程序代码及运行结果:1.程序代码#include account.h#include using namespace std;int main()cout -个人银行账户管理系统!- endl;Date date(2011,6,1); /起始日期 /初始账户 SavingsAccount sa1(date,S3755271,0.015,123);SavingsAccount sa2(date,02342342,0.015,456);CreditAccount ca(date,C5392394,10000,0.0005,50,789);Account *accounts=&sa1,&sa2,&ca;const int n=sizeof(accounts)/sizeof(Account*);cout(d)存款 endl;cout(w) 取款endl;cout(s) 显示各账户信息 endl;cout(c)改变日期 endl;cout(n) 进入下个月 endl;cout(e)退出 endl;char cmd;do /显示日期和总金额coutendl;date.show();coutt账户总金额Account:getTotal()endl;coutendl;coutcmd;switch(cmd)cased: /存入现金coutindex;if(index=0|index=1|index=2)coutamount;accountsindex-deposit(date,amount,desc);elsecout账户号错误!;break;casew: /取出现金 coutindex;coutpwd;pass=accountsindex-getPassword();if(pare(pwd)=0)cout密码正确!endl; coutamount; accountsindex-withdraw(date,amount,desc); elsecout您输入的密码错误!endl;break;cases: /查询各账户信息for( i=0;in;i+)coutishow();coutendl;break;casec: /改变日期coutday;coutendl;if(daydate.getDay()coutdate.getMaxDay()coutInvalid day;elsedate=Date(date.getYear(),date.getMonth(),day);break;casen: /进入下个月if(date.getMonth()=12)date=Date(date.getYear()+1,1,1);elsedate=Date(date.getYear(),date.getMonth()+1,1);for(int k=0;ksettle(date);break;while(cmd!=e); return 0;#include account.h#include #include using namespace std;double Account:total=0;/Account类的实现Account:Account(const Date &date,const string &id,const string &pwd):id(id),balance(0),password(pwd)date.show();coutt#id createdendl;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:show() const coutidtBalance:balance;void Account:error(const string &msg)constcoutError(#id):msggetBalance()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,const std:string &password):Account(date,id,password),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,getBalance(); void CreditAccount:withdraw(const Date &date,double amount,const string &desc)if(amount-getBalance()credit)error(not enough money);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();#include date.h#include #include using 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+; /DATE:DATEint Date:getMaxDay() constif(isLeapYear() & month=2)return 29;elsereturn DAYS_BEFORE_MONTHmonth-DAYS_BEFORE_MONTHmonth-1;void Date:show() constcoutgetYear()-getMonth()-getDay();#ifndef _ACCOUNT_H_#define _ACCOUNT_H_#include date.h#include accumulator.h#include using namespace std;class Account /账户类private:std:string id; /账号 std:string password;double balance; /余额static double total; /所有账户的总金额protected:/供派生类调用的构造函数,id为账户Account(const Date &date,const std:string &id,const std:string &pwd);/记录一笔账,data为日期,amount为金额,desc为说明void record(const Date &date,double amount,const std:string &desc);/报告错误信息void error(const std:string &msg) const;public:const std:string &getId() const return id;const std:string getPassword() return password;double getBalance() const return balance;static double getTotal()return total;/存入现金,date为日期,amount为金额,desc为款项说明virtual void deposit(const Date &date,double amount,const std:string &desc)=0;/取出现金,date为日期,amount为金额,desc为款项说明virtual void withdraw(const Date &date,double amount,const std:string &desc)=0;/结算(计算利息、年费等),每月结算一次,date为结算日期virtual void settle(const Date &date)=0;/显示账户信息virtual void show() const;class SavingsAccount:public Accountprivate:Accumulator acc;double rate;public:/构造函数SavingsAccount(const Date &date,const std:string &id,double rate,const std:string &passwod);double getRate() const return rate;/存入现金void deposit(const Date &date,double amount,const std:string &desc);/取出现金void withdraw(const Date &date,double amount,const std:string &desc);/结算利息,每年1月1日调用一次该函数void settle(const Date &date);class CreditAccount:public Account /信用账户类private:Accumulator acc; /辅助计算利息的累加器double credit; /信用额度double rate; /欠款的日利率double fee; /信用卡年费double getDebt()const /获得欠款额double balance=getBalance();return(balance0?balance:0);public:/构造函数CreditAccount(const Date &date,const std:string &id,double credit,double rate,double fee,const std:string &passwod);double getCredit() const return credit;double getRate() const return rate;double getFee() const return fee;double getAvailableCredit() const /获得可用信用额度if(getBalance()value=value;/初始化,将日期变为date,数值变为value,累加器清零void reset(const Date &date,double value)lastDate=date;this-value=value;sum=0;#endif#ifndef _DATE_H_#define _DATE_H_class Date /日期类private:int year; /年int month; /月int day; /日int totalDays; /该日期是从公元元年1月1日开始的第几天public:Date(int year,int month,int day); /用年、月、日构造日期int getYear() const return year; int getMonth() const return month;int getDay() const return day; int getMaxDay() const; /获得当月有多少天bool isLeapYear() const /判断当年是否为闰年return year%4=0&year%100!=0|year%400=0;void show() cons

温馨提示

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

评论

0/150

提交评论