用c++语言编写银行系统,c++ 写一个银行管理系统-Go语言中文社区

代码实现:

// Accumulator类

#ifndef ACCUMULATOR_H_INCLUDED

#define ACCUMULATOR_H_INCLUDED

#include "date.h"

class Accumulator

{

private:

Date lastDate;

double value;

double sum;

public:

Accumulator(const Date &date1,double value)

:lastDate(date1),value(value),sum(0) {}

double getsum(const Date &date)

{

return sum+(value*date.distance(lastDate));

}

void change(const Date &date,double value)

{

sum=getsum(date);

lastDate = date;

this->value = value;

sum=0;

}

void reset(const Date &date,double value)

{

lastDate=date;

this->value=value;

sum=0;

}

};

#endif // ACCUMULATOR_H_INCLUDED

// Date类

#ifndef DATE_H_INCLUDED

#define DATE_H_INCLUDED

#include

#include

#include

using namespace std;

int dayofmon[20]={0,31,59,90,120,151,181,212,243,273,304,334,365};

class Date{

private:

int year,month,day;

int totaldays;

public:

Date(int y,int m,int d);

int getyear()const

{

return year;

}

int getmon()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()const;

int distance(const Date &date)const

{

return abs(totaldays-date.totaldays);

}

};

int Date::getmaxday()const

{

if(isleapyear()&&month==2)

{

return 29;

}

else

{

return dayofmon[month]-dayofmon[month-1];

}

}

Date::Date(int year,int month,int day):year(year),month(month),day(day)

{

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

{

cout<

show();

cout<

exit(1);

}

int years=year-1;

totaldays=years*365+years/4-years/100+years/400+dayofmon[month-1]+day;

if(isleapyear()&&month>2)totaldays++;

}

void Date::show()const

{

cout<

}

#endif // DATE_H_INCLUDED

// Account类

#ifndef ACCOUNT_H_INCLUDED

#define ACCOUNT_H_INCLUDED

#include "date.h"

#include "accumulator.h"

#include

#include

#include

#include

using namespace std;

string to_string(int x)

{

string s;

if(x == 0) s += '0';

while(x)

{

s += (x%10)+'0';

x /= 10;

}

reverse(s.begin(),s.end());

return s;

}

class Account

{

private:

string id;

double balance;

static double total1,total2;

vectorrec;

protected:

Account(const Date &date,const string &id);

void record(const Date &date,double amount,const string &desc);

void error(const string &msg)const;

public:

const string &getid()

{

return id;

}

void changetotal1(double amount)

{

total1+=amount;

}

void changetotal2(double amount)

{

total2+=amount;

}

double getbalance()const

{

return balance;

}

static double gettotal1()

{

return total1;

}

static double gettotal2()

{

return total2;

}

void show()const;

};

class SavingAccount:public Account

{

private:

Accumulator acc;

double rate[5]={0,0.35*0.01/365,1.5*0.01/365,2.10*0.01/365,2.75*0.01/365};

int index;

public:

SavingAccount(const Date&date,const string &id,int index);

double getrate(int i)

{

return rate[i];

}

void changerate(double rate1,int i)

{

rate[i]=rate1;

}

void changekind(int i)

{

index=i;

}

void deposit(const Date &date,double amount,const string &desc);

void withdraw(const Date&date,double amount,const string &desc);

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 (balance<0?balance:0);

}

public:

CreditAccount(const Date&date,const string &id,double credit,double rate,double fee);

double getcredit()const

{

return credit;

}

double getrate()const

{

return rate;

}

double getfee()const

{

return fee;

}

double getAvailableCredit()const

{

if(getbalance()<0)

{

return credit+getbalance();

}

else return credit;

}

void deposit(const Date &date,double amount,const string &desc);

void withdraw(const Date &date,double amount,const string &desc);

void settle(const Date &date);

void show()const;

};

double Account::total1=0;

double Account::total2=0;

Account::Account(const Date &date,const string &id):id(id),balance(0)

{

date.show();

cout<

}

void Account::record(const Date &date,double amount,const string &desc)

{

amount=floor(amount*100+0.5)/100;

balance+=amount;

//total1+=amount;

date.show();

cout<

string t;

t=t+to_string(date.getyear())+"-"+to_string(date.getmon())+"-"+to_string(date.getday())+": ";

t=t+" #"+id+" "+to_string(amount)+" "+to_string(balance)+" "+desc;

rec.push_back(t);

}

void Account::show()const

{

cout<

for(int i=0;i

{

cout<

}

}

void Account::error(const string &msg)const

{

cout<

}

SavingAccount::SavingAccount(const Date &date,const string &id,int index)

:Account(date,id),index(index),acc(date,0) {}

void SavingAccount::deposit(const Date&date,double amount,const string &desc)

{

changetotal1(amount);

record(date,amount,desc);

acc.change(date,getbalance());

}

void SavingAccount::withdraw(const Date&date,double amount,const string &desc)

{

if(amount>getbalance())

{

error("not enough money");

}

else

{

changetotal1(-amount);

record(date,-amount,desc);

acc.change(date,getbalance());

}

}

void SavingAccount::settle(const Date &date)

{

double interest=acc.getsum(date)*rate[index];

// cout<

if(interest!=0)

{

record(date,interest,"interest");

changetotal1(interest);

}

acc.reset(date,getbalance());

}

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)

{

changetotal2(-amount);

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

{

changetotal2(amount);

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");

changetotal2(interest);

}

if(date.getmon()==1)

{

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

changetotal2(fee);

}

acc.reset(date,getDebt());

}

void CreditAccount::show()const

{

Account::show();

cout<

}

#endif // ACCOUNT_H_INCLUDED

//主程序

#include

#include "date.h"

#include "accumulator.h"

#include "account.h"

using namespace std;

vectorst;

int main()

{

Date day1(2016,1,1);

printf("Choose your deposit method:n");

printf("1-Demand deposit 2-Fixed deposit for one yearn");

printf("3-Fixed deposit for two yearsn");

printf("4-Fixed deposit for three yearsn");

int n;

cin>>n;

SavingAccount a(day1,"1001",n);

cout<

Date day2(2018,3,5);

Date day3(2018,4,5);

a.deposit(day2,1000,"saving 1000 yuan");

a.withdraw(day3,20,"get 20 yuan");

Date day8(2019,5,6);

a.deposit(day8,8000,"salary");

a.settle(day8);

printf("This is the Student Credit accountn");

CreditAccount b(day2,"1006",50000,0.006/365,20);

Date day4(2019,9,1);

b.withdraw(day4,5000,"tuition");

b.getAvailableCredit();

Date day5(2020,10,5);

b.withdraw(day5,20000,"buy a cell");

Date day6(2035,10,9);

Date day7(2021,10,5);

b.deposit(day7,1000,"get salary");

b.settle(day6);

printf("show the details of student A:n");

st.push_back(a);

a.show();

printf("Total deposit:n");

cout<

printf("Total loans:n");

cout<

return 0;

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值