简单的银行存款取款业务模拟程序

实验三静态成员和友元函数

一、实验目的和任务

1)熟练掌握友元函数设计的方法

2)掌握友元函数的含义,友元函数和成员函数的区别。

二、实验原理介绍

根据要求正确定义静态成员和友元函数。将别的模块声明为友元,使类中本隐藏的信息如私有和保护成员就可以被友元访问。

三、实验内容和步骤

【实验3-1】静态成员

为账户类ACCOUNT增加静态成员count和InterestRate表示账户数量和利率,

增加静态成员函数GetCount返回账户数目GetInterestRate返回银行利率

classACCOUNT{

public:

ACCOUNT(stringaccno,stringname,floatbalance);

~ACCOUNT();

voidDeposit(floatamount);

voidWithdraw(floatamount);

floatGetBalance();

voidShow(void);

staticintGetCount();

staticfloatGetInterestRate();

private:

staticintcount;

staticfloatInterestRate;

string_accno,_accname;

float_balance;

};

【实验3-2】友元函数

为账户类ACCOUNT增加一个友元函数,实现账户结息,要求输出结息后的余额(不计算利息税),并在main函数中调用进行测试。

friendvoidUpdate(ACCOUNT&a);

【实验3-3】(加分题)

在main函数中,设计一个ACCOUNT类型的数组,为数组中的10个对象初始化,并调用成员函数测试存款、取款、显示等函数,再调用友元函数测试进行结息。

nACCOUNTaccArray[10];//静态数组的方法

nACCOUNT*accArray=newACCOUNT[10];//动态数组的方法

cout<<"帐户数目:"<<ACCOUNT::GetCount()<<endl;

注:

1.用以上方法时,会调用缺省构造函数,此时应将构造函数修改成缺省构造函数,例如:

ACCOUNT::ACCOUNT(stringaccno="0000",stringaccname="bank",floatbalance=0.0f)

2.对各对象再进行设置时,可增加一个setData函数,用于设置账号、姓名和余额。

 

【Account.h】

#include<iostream> #include<cmath> #include<string> using namespace std; class Limited_Account; class Free_Account; struct Date { double year; double month; double day; }; class Account { public: Account(){} ~Account(){} void inputData(); void input_Endingtime(); double GetBalance(); double Gettime(); void Show(); void Deposit(); void Withdraw(double,double); private: string _accno; string _accname; double _balance; Date Beginning; Date Ending; friend Limited_Account; friend Free_Account; }; void Account::Deposit() { double Deposit; cout<<"请输入存款金额:"; for(;;) { cin>>Deposit; if(Deposit>=0) break; else cout<<"输入错误。\n请重新输入:\n"; } _balance+=Deposit; cout<<"\n当前账户余额为:"<<_balance<<"元。\n"; system("pause"); } void Account::Withdraw(double x,double y) { double withdraw; cout<<"\n请输入取款金额:"; for(;;) { cin>>withdraw; if(withdraw<=(x-y)) break; else cout<<"\n无法透支。\n请重新输入:"; } _balance=x-withdraw; cout<<"\n当前金额为:"<<_balance<<"元。\n"; system("pause"); } void Account::inputData() { cout<<"\n开户时间\n年:"; cin>>Beginning.year; cout<<"月:"; cin>>Beginning.month; cout<<"日:"; cin>>Beginning.day; cout<<"\n账号:"; cin>>_accno; cout<<"姓名:"; cin>>_accname; cout<<"账户余额(元):"; cin>>_balance; } void Account::input_Endingtime() { cout<<"\n取款时间\n年:"; cin>>Ending.year; cout<<"月:"; cin>>Ending.month; cout<<"日:"; cin>>Ending.day; } double Account::GetBalance() { return _balance; } double Account::Gettime() { double Time=0,a=0,b=0; if(Ending.month<Beginning.month && (Ending.year-Beginning.year)>=1) { a=Ending.year-Beginning.year-1; b=(Ending.month+12-Beginning.month)/12; Time=a+b; } else if(Ending.month>=Beginning.month) { a=Ending.year-Beginning.year; b=(Ending.month-Beginning.month)/12; Time=a+b; } return Time; } void Account::Show() { cout<<"\n帐号: "<<_accno<<endl <<"姓名: "<<_accname<<endl <<"余额: "<<_balance<<endl <<"开户时间:"<<Beginning.year <<"年"<<Beginning.month <<"月"<<Beginning.day<<"日"<<endl; }
【Free_Account.h】

#ifndef ACCOUNT #define ACCOUNT #include"Account.h" #endif class FreeAccount:public Account { private: double FInterestRate; double ManagingFee; double Interest; public: FreeAccount(){} ~FreeAccount(){} void FinputData(); void Fshow(); void Deposit(); void Withdraw(); double GetInterest(); friend int main(); }; void FreeAccount::FinputData() { cout<<"\n请输入账户信息:\n"; Account::inputData(); cout<<"年管理费(元):"; cin>>ManagingFee; } void FreeAccount::Fshow() { cout<<"\n账户信息:\n" <<"活期账户\n"; Account::Show(); FInterestRate=0.50; cout<<"\n年利率(%):"<<FInterestRate <<"\n年管理费(元):"<<ManagingFee<<endl; system("pause"); } void FreeAccount::Deposit() { Account::Deposit(); } void FreeAccount::Withdraw() { //Account::input_Endingtime(); double t=Account::Gettime(); double x=Account::GetBalance(); double I=1+FInterestRate/100; x=x*pow(I,t); Account::Withdraw(x,ManagingFee); } double FreeAccount::GetInterest() { double a=Account::GetBalance(); Interest=a*FInterestRate; return Interest; }

 

【Limited_Account.h】

#ifndef ACCOUNT #define ACCOUNT #include"Account.h" #endif class LimitedAccount:public Account { private: double LInterestRate; double ManagingFee; double Interest; double Ltime; public: LimitedAccount(){} ~LimitedAccount(){} void LinputData(); void Lshow(); void Deposit(); void Withdraw(); double GetInterest(); friend int main(); }; void LimitedAccount::LinputData() { cout<<"\n请输入账户信息\n"; Account::inputData(); cout<<"存储年限:"; cin>>Ltime; cout<<"年管理费:"; cin>>ManagingFee; } void LimitedAccount::Lshow() { cout<<"账户信息:\n" <<"\n定期账户\n"; Account::Show(); if (Ltime<=0.25) LInterestRate=0; else if (Ltime<=0.5) LInterestRate=2.85; else if (Ltime<=1) LInterestRate=3.05; else if (Ltime<=2) LInterestRate=3.25; else if (Ltime<=3) LInterestRate=4.15; else if (Ltime<=5) LInterestRate=4.75; else LInterestRate=5.25; cout<<"存储年限:"<<Ltime <<"\n年利率(%):"<<LInterestRate <<"\n年管理费(元):"<<ManagingFee<<endl; system("pause"); } void LimitedAccount::Deposit() { Account::Deposit(); } void LimitedAccount::Withdraw() { Account::input_Endingtime(); double t=Account::Gettime(); cout<<"已存时间为:"<<t<<"年"<<endl; double x=Account::GetBalance(); if(t<Ltime) { char a; cout<<"存储时间不足"<<Ltime<<"年。\n若仍要取款将按活期利率进行结息!\n是否继续取款(y/n):"; cin>>a; if(a=='y') { LInterestRate=0.5; double I=1+LInterestRate/100; x=x*pow(I,t); Account::Withdraw(x,ManagingFee); } } else if(t>=Ltime) { double I=1+LInterestRate/100; x=x*pow(I,Ltime); LInterestRate=0.5; I=1+LInterestRate/100; x=x*pow(I,t-Ltime); Account::Withdraw(x,ManagingFee); } } double LimitedAccount::GetInterest() { double a=Account::GetBalance(); Interest=a*LInterestRate; return Interest; }
【main.cpp】
#include"Limited_Account.h" #include"Free_Account.h" int main() { FreeAccount F; LimitedAccount L; int a=3; while(1) { cout<<"主菜单\n" <<"(1)活期账户\n" <<"(2)定期账户\n" <<"(3)查询账户信息\n" <<"(4)存款\n" <<"(5)取款\n" <<"(6)退出系统\n"; int userChoice; for(;;) { cin>>userChoice; if (a!=1 && a!=0 && userChoice!=1 && userChoice!=2 && userChoice!=6) { system("cls"); cout<<"未创建帐户,请选择:\n(1)创建活期帐户\n(2)创建定期帐户。\n(6)退出程序。"<<endl; } else break; } system("cls"); switch(userChoice) { case 1:F.FinputData();a=1;break; case 2:L.LinputData();a=0;break; case 3: { if(a==1) F.Fshow(); else L.Lshow(); } break; case 4: { if(a==1) F.Deposit(); else L.Deposit(); } break; case 5: { if(a==1) F.Withdraw(); else L.Withdraw(); } break; case 6:return 0; default:return 0; } system("cls"); } }

 

已标记关键词 清除标记
相关推荐
要求编写程序模拟银行账户的存、取款操作。按要求完成以下步骤: 步骤1:编写程序Account.java,其中定义银行账户类Account。该类中有账号、姓名、 存款余额等数据域,余额默认是0;有存款、取款、获取当前余额等方法。其中账号为长度 为12位数字的字符串,姓名为字符串,存款余额为double。 步骤2:编写名为CreditAccount类的信用卡账户类。该类继承自Account类,增加一 个透支限额(double)数据域,透支限额默认为1000。同时该类账户取款时允许透支,但不 能超过透支限额。 步骤3:编写名为SavingAccount的储蓄账户类SavingAccount。该类继承自Account 类。该类账户取款时不允许透支。 步骤4:编写名为Bank的模拟银行类,其中可以存储多个类型可能是信用卡账户或储 蓄账户的对象(可以用数组或ArrayList实现)。该类包含以下方法: <1>开户:即增加一个新的账户,注意:不允许两个账户的账号相同 <2>销户:即删除一个已有的账户 <3>查询账户:根据一个账号,查询有无该账号的账户 <4>统计目前银行的存款总余额的方法。 <5>统计目前银行的信用卡账户总透支金额的方法。 <6>统计目前总账户数。 <7>统计目前信用卡账户数 <8>统计目前储蓄卡账户数 步骤5:编写客户端类Client.java完成以下功能: <1> 编写一个静态方法,创建一个银行对象,并随机生成10个账号从1000 0000 0000 0000到1000 0000 0000 0009,类型不同的账户。 <2> main方法中模拟几次开户操作。 <3> main方法中模拟几次销户操作。 <4> 模拟几个对指定账号的存款和取款操作。 <5> 输出银行的总账户数、总余额、总透支数、各类具体账户数。
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页