综合实例_个人银行账户管理程序
发布时间:2021-06-08
发布时间:2021-06-08
//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;
//显示
上一篇:文明礼仪三字歌歌词