综合实例_个人银行账户管理程序
更新时间:2023-05-27 15:53:01 阅读量: 实用文档 文档下载
//date.h
#ifndef __DATE_H__
#define __DATE_H__
class Date
{ //日期类
private:
int year; // 年
int month; //月
int day; //日
int totalDays; //该日期是从公元年1月1日开始的第几天
public:
Date(int year,int minth,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() const; //输入当前日期
//计算两个日期之间差多少天
int operator- (const Date&date) const//计算两个日期之间差多少天
{
return totalDays-date.totalDays;
}
};
#endif //__DATE_H__
//date.cpp
#include"date.h"
#include<iostream>
#include<cstdlib>
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 (day<=0||day>getMaxDay())
{
cout<<"Invalid date:";
show();
cout<<endl;
exit(1);
}
int years=year-1;
totalDays=year*365+years/4-years/100+years/400+DAYS_BEFORE_MONTH[month-1]+day;
if(isLeapYear()&&month>2)
totalDays++;
}
int Date::getMaxDay() const
{
if (isLeapYear()&&month==2)
return 29;
else
return DAYS_BEFORE_MONTH[month]-DAYS_BEFORE_MONTH[month-1];
}
void Date::show() const
{
cout<<getYear()<<"-"<<getMonth()<<"-"<<getDay();
}
//accout.h
#ifndef __ACCOUNT_H__
#define __ACCOUNT_H__
#include"date.h"
#include"accumulator.h"
#include<string>
class Account //账户类
{
private:
std::string id; //帐号
double balance;//余额
static double total; //所有账户的总金额
protected:
//供派生类调用的构造函数,id为账户
Account(const Date &date,const std::string &id);
//记录一笔帐,date为日期,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;}
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 D
ate &date,double amount,const std::string &desc)=0;
//结算(计算利息、年费等),每月结算一次,date为结算日期
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() 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); //取出现金
void settle(const Date &date); //结算利息,每年1月1日调用一次该函数
void show() const; //显示账户信息
};
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 std::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 std::string &desc); //存入现金
void withdraw(const Date &date,double amount,const std::string &desc); //取出现金
void settle(const Date &date); //结算利息,每年1月1日调用一次该函数
void show() const; //显示账户信息
};
#endif//__ACOUNT_H__
//account.cpp
#include "account.h"
#include <cmath>
#include <iostream>
using namespace std;
double Account::total=0;
//Accout类的实现
Account::Account(const Date &date,const string &id):id(id),balance(0)
{
date.show();
cout<<"\t#"<<id<<"created"<<endl;
}
void Account::record(const Date &date,double amount,const string &desc)
{
amount=floor(amount*100+0.5)/100; //保留小数点后两位
balance+=amount;
total+=amount;
date.show ();
cout<<"\t#"<<id<<"\t"<<amount<<"\t"<<balance<<"\t"<<desc<<endl;
}
void Account::show() const
{
cout<<id<<"\tBalance:"<<balance;
}
void Account::error(const string &msg)const
{
cout<<"Error(#"<<id<<"):"<<msg<<endl;
}
//SavingsAccount类相关成员函数的实现
SavingsAccount::SavingsAccount(const Date &date,const string &id,double rate):Account(date,id),rate(rate),acc(date,0){}
void SavingsAccount::deposit(const Date &date,double amount,const string &desc)
{
record (date,amount,desc);
acc.change(date,getBalance());
}
void SavingsAccount::withdraw(const Date &date,double amount,const string &desc)
{
if(amount>getBalance())
error("not enough money");
else
record(date,-amount,desc);
acc.change(date,getBalance());
}
void
SavingsAccount::settle(const Date &date)
{
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 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() const
{
Account::show();
cout<<"\tAvailable credit:"<<getAvailableCredit();
}
//8_8.cpp
#include "account.h"
#include <iostream>
using namespace std;
void main()
{
Date date(2008,11,1); //起始日期
//建立几个账户
SavingsAccount sa1(date,"03755217",0.015);
SavingsAccount sa2(date,"02342342",0.015);
CreditAccount ca(date,"C5392394",1000,0.0005,50);
Account*accounts[]={&sa1,&sa2,&ca};
const int n=sizeof(accounts)/sizeof(Account*);//账户总数
cout<<"(d)desposit (w)withdraw (s)show (c)change day (n)next month (e)exit"<<endl;
char cmd;
do
{
date.show();//显示日期和总金额
cout<<"\tTotal:"<<Account::getTotal ()<<"\tcommand>";
int index,day;
double amount;
string desc;
cin>>cmd;
switch (cmd)
{
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 (int i=0; i<n; i++)
{
cout<<"["<<i<<"]";
accounts[i]->show ();
cout<<endl;
}
break;
case 'c'://改变日期
cin>>day;
if (day<date.getDay ())
cout<<"You cannot specify a previous day";
else if (day>date.getMaxDay ())
cout<<"Invalid day";
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(i=0;i<n;i++)
accounts[i]->settle(date);
break;
}
}
while (cmd!='e');
}
正在阅读:
综合实例_个人银行账户管理程序05-27
如何的快速的掌握议论文的写作技巧05-31
关于RSLogix5000+CPU+V20版加密的方法步骤05-29
Exelce使用说明06-20
妈妈,单亲不单06-26
论公共关系的功能09-18
渭南市企业招引人才公告07-25
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 账户
- 实例
- 银行
- 程序
- 综合
- 管理
- 个人
- 20XX年江苏两会代表团成员名单及提案,江苏两会人事大调整(图)
- 2012-2013年北师大版小学三年级上册数学期末测试题及答案
- 最新完整版高考英语完形填空考点归纳1
- 地球自转的地理意义教学设计
- 2012年医院感染年终总结
- 入楞伽经之成自性如来藏心
- 硫代硫酸钠标准液配制与标定
- 爱我家乡主题班会设计
- 啤酒污泥中重金属污染状况调查与评价
- 中国人民大学行政管理考研专业课参考书目郑杭生《社会学概论新修》重难点笔记(10)
- 一年级下册看拼音写汉字复习题
- 数字电子技术基础复习题
- 房地产合作开发4大模式学起
- 中学体育教学设计
- 《伟大的历程.复兴伟业》观后感
- 2021版农村房屋装修的合同范本
- 大学团日活动策划书精选
- 小学数学综合算式
- 终端店铺管理(6S管理办法)2011
- 1.2秘书资格证书考试概况