ATM类设计方案
每增加一个类生成一个包含主函数的程序(A,B,C,...)。提交时在主函数内增加以下两条语句:
freopen("in.dat","r",stdin);
freopen("out.dat","w",stdout);
时间类Time
数据成员:
int month;
int day;
int hour;
int minute;
成员函数:
带参构造函数
无参构造函数
显示函数(以后重载输入输出运算符函数)
get/set函数
测试:
输入 3 13 12 22
定义对象t1(…);
显示对象t1;
定义对象t2;
将t2的数据成员分别设置成 5 23 9 12;
显示对象t2;
交易记录类Record
数据成员:
int no;//账号
Time date;//交易日期
string type;//存钱、取钱
int jiner;//交易金额
double yue;//交易后的余额
成员函数:
带参构造函数
无参构造函数
显示函数(以后重载输入输出运算符函数)
get/set函数
测试:
定义时间对象t1(4 23 8 5);
输入账号、交易类型(存钱)、金额、余额;(1,cq,1000,1000)
利用输入信息定义记录对象r1;
显示对象r1;
定义无参记录对象r2;
将r2的数据成员分别设置成 1,(5 23 9 12),qq,200,1800;
显示对象r2;
用户数据类User:
数据成员:
int no;//账号
string name ;//姓名
string mima;//密码
double yue;//帐户余额
Recordr[200];//交易记录
intnum;//当前交易记录数
成员函数:
带参构造函数(不包括交易记录,交易记录数置为零);
复制构造函数;
显示函数(如果当前交易记录数为零,则不显示交易记录。以后重载输入输出运算符函数)
get/set函数
增加交易一条记录add(Record r);
显示一条交易记录 dispRecord(int i);
显示所有交易记录 dispAllRecord();
查询指定时间段内的交易记录 queryByTime(Time t1,t2);
查询指定类型的交易记录 queryByType(string type);
测试:
输入账号、姓名、密码、余额;(2 ff 111111 1000)
利用输入信息定义用户对象u1;
显示对象u1;
设置密码为“778899”;
显示用户对象u1;
定义2条交易记录(账号均为对象u1的账号)r1和r2:
4 22 8 10 qq 2002000
4 28 13 20 cq 4002400
将它们追加到u1的交易记录中;
显示u1的第2条交易记录;
查询用户u1从4月28日到4月29日的交易记录;
显示用户u1的所有交易记录;
显示用户u1的所有信息;
利用u1创建用户对象u2;
显示用户u2存钱的所有交易记录;
显示u2的所有信息;
用户操作类UserOp:
数据成员:
Userusr;//用户对象
Timet;//时间对象,表示本次使用的时间;
成员函数:
带参(账号)构造函数(输入其他用户信息,创建用户对象并赋值给数据成员usr,输入时间值并赋值给数据成员 t);
带参(用户对象)构造函数(将形参赋值给数据成员usr,输入时间值并赋值给数据成员 t);
取钱withdraw();输入所要取钱数,判断用户余额是否大于所取钱数。是,则修改用户余额并生成交易记录对象,追加到交易记录中。否则,显示“所取钱数超过账号余额”;
存钱deposit();输入所要存钱数,修改用户余额并生成交易记录对象,追加到交易记录中;
查询指定时间段的交易记录queryByTime();输入要查询的起至时间并生成起至时间对象,调用用户成员的queryByTime函数;
查询指定交易类型的交易记录queryByType();输入要查询的交易类型,调用用户成员的queryByType(string type)函数;
显示用户信息display();调用用户显示函数
测试:
输入账号,定义用户操作对象uop1(时间为4月23日8点50分,用户姓名为“xxx”,.密码为“123”,账号余额是1000;);
存入300;
显示用户信息;
取出100;
查询“存钱”信息;
查询用户信息;
定义用户数据对象u1(2 “wyy”“321”,2000)并以其为实参定义用户操作对象uop2(时间为 4月23日9点13分);
取出200;
取出300;
查询“取钱”交易记录;
存钱500;
显示用户信息;
A程序输入输出
输入:
3 13 12 22
5 23 9 12
输出:
313 12 22
5 23 9 12
B程序输入输出
输入:
1 cq 1000 1000
1 5 23 9 12 qq 200 1800
输出:
1 4 23 8 5 cq 1000 1000
1 5 23 9 12 qq 200 1800
C程序输入输出
输入:
2 ff 111111 1000
输出:
2 ff 111111 1000
2 ff 778899 1000
2 4 28 13 20 cq 400 2400
2 4 28 13 20 cq 400 2400
2 4 22 8 10 qq 200 2000
2 4 28 13 20 cq 400 2400
2 ff 778899 1000
2 4 22 8 10 qq 200 2000
2 4 28 13 20 cq 400 2400
2 4 28 13 20 cq 400 2400
2 ff 778899 1000
2 4 22 8 10 qq 200 2000
2 4 28 13 20 cq 400 2400
D程序输入输出
输入:
1
xxx 123 1000
4 23 8 50
300
100
4 23 9 13
200
300
500
输出:
1 xxx 123 10001 4 23 8 50 cq 300 1300
1 xxx 123 1200
1 4 23 8 50 cq 300 1300
1 4 23 8 50 qq 100 1200
2 4 23 9 13 qq 200 1800
2 4 23 9 13 qq 300 1500
2 wyy 321 2000
2 4 23 9 13 qq 200 1800
2 4 23 9 13 qq 300 1500
2 4 23 9 13 cq 500 2000
#include<bits/stdc++.h>
using namespace std;
class Time
{
int month;
int day;
int hour;
int minute;
public:
Time(int m,int d,int h,int min):month(m),day(d),hour(h),minute(min){}
Time()
{
month=1;
day=1;
hour=0;
minute=0;
}
friend ostream&operator<<(ostream&output,Time&);
void set(int m,int d,int h,int min)
{
month=m;
day=d;
hour=h;
minute=min;
}
int getMonth()
{
return month;
}
int getDay()
{
return day;
}
int getHour()
{
return hour;
}
int geMinute()
{
return minute;
}
void display();
bool operator<(Time);
};
bool Time::operator<(Time t)
{
if(month<t.month)
return 1;
else if(month==t.month)
if(day<=t.day)
return 1;
return 0;
}
ostream&operator<<(ostream&output,Time&t1)
{
output<<t1.month<<" "<<t1.day<<" "<<t1.hour<<" "<<t1.minute<<" ";
return output;
}
void Time::display()
{
cout<<month<<" "<<day<<" "<<hour<<" "<<minute;
}
class Record
{
int no;
Time date;
string type;
int jiner;
double yue;
public:
Record(int id,Time t1,string lx,int jin,double yu)
{
no=id;
date=t1;
type=lx;
jiner=jin;
yue=yu;
}
Record()
{
no=0;
Time t1(1,1,0,0);
date=t1;
jiner=0;
yue=0;
}
void display()
{
cout<<no<<" ";
date.display();
cout<<" ";
cout<<type<<" "<<jiner<<" "<<yue<<endl;
}
friend ostream&operator<<(ostream&output,Record&);
void setRecord(int id,Time t1,string lx,int jin,double yu)
{
no=id;
date=t1;
type=lx;
jiner=jin;
yue=yu;
}
int getNo()
{
return no;
}
string getType()
{
return type;
}
int getJin()
{
return jiner;
}
double getYue()
{
return yue;
}
Time getDate()
{
return date;
}
};
ostream&operator<<(ostream&output,Record&r)
{
output<<r.no;
output<<" ";
output<<r.date;
output<<r.type<<" ";
output<<r.jiner<<" ";
output<<r.yue<<endl;
return output;
}
class User
{
int no;
string name;
string mima;
double yue;
Record r[200];
int num;
public:
User(int id,string nam,string m,double yu):no(id),name(nam),mima(m),yue(yu)
{
num=0;
}
User():no(0)
{
num=0;
}
User(const User&u1):no(u1.no)
{
name=u1.name;
mima=u1.mima;
yue=u1.yue;
num=u1.num;
for(int i=1;i<=num;i++)
r[i]=u1.r[i];
}
int getNo()
{
return no;
}
void setName(string nam)
{
name=nam;
}
string getName()
{
return name;
}
void setMima(string m)
{mima=m;
}
string getMima()
{
return mima;
}
void setYu(double yu)
{
yue=yu;
}
double getYu()
{
return yue;
}
friend ostream&operator<<(ostream&output,User&);
void display()
{
cout<<no<<" "<<name<<" "<<mima<<" "<<yue;
if(num!=0)
{cout<<endl;
for(int i=1;i<=num;i++)
r[i].display();}
}
void add(Record r);
void dispRecord(int i);
void dispAllRecord();
void queryByTime(Time t1,Time t2);
void queryByType(string type);
};
ostream&operator<<(ostream&output,User&u1)
{
output<<u1.no<<" ";
output<<u1.name<<" ";
output<<u1.mima<<" ";
output<<u1.yue<<" ";
output<<endl;
if(u1.num!=0)
for(int i=1;i<=u1.num;i++)
output<<u1.r[i];
return output;
}
void User::add(Record r1)
{
r[++num]=r1;
}
void User::dispRecord(int i)
{
r[i].display();
}
void User::dispAllRecord()
{
for(int i=1;i<=num;i++)
r[i].display();
}
/*void User::queryByTime(Time t1,Time t2)
{for(int i=1;i<=num;i++)
{if(t1.getMonth()==t2.getMonth())
{
if(r[i].getDate().getDay()>=t1.getDay()&&r[i].getDate().getDay()<=t2.getDay())
r[i].display();
}
else if(r[i].getDate().getMonth()>t1.getMonth()&&r[i].getDate().getMonth()<t2.getMonth())
r[i].display();
else if(r[i].getDate().getMonth()==t1.getMonth()&&r[i].getDate().getDay()>=t1.getDay())
r[i].display();
else if(r[i].getDate().getMonth()==t2.getMonth()&&r[i].getDate().getDay()<=t2.getDay())
r[i].display();
}
}*/
void User::queryByTime(Time t1,Time t2)
{
for(int i=1;i<=num;i++)
if((t1<r[i].getDate())&&(r[i].getDate()<t2))
r[i].display();
}
void User::queryByType(string type)
{
for(int i=1;i<=num;i++)
if(r[i].getType()==type)
r[i].display();
}
class Client
{
User usr;
Time t;
public:
Client(int id1);
Client(User u1)
{
usr=u1;
int m2,d2,h2,min2;
cin>>m2>>d2>>h2>>min2;
t=Time(m2,d2,h2,min2);
}
void withdraw();
void deposite();
void querybyTime();
void queryCq();
void queryQq();
void display();
};
Client::Client(int id1)
{
string nam,mi;
double yu;
cin>>nam>>mi>>yu;
User u1(id1,nam,mi,yu);
usr=u1;
int m1,d1,h1,min1;
cin>>m1>>d1>>h1>>min1;
t=Time(m1,d1,h1,min1);
}
void Client:: withdraw()
{
int qk;
cin>>qk;
if(qk<=usr.getYu())
{
usr.setYu(usr.getYu()-qk);
Record r1(usr.getNo(),t,"qq",qk,usr.getYu());
usr.add(r1);
}
else
cout<<"ËùȡǮÊý³¬¹ýÕ˺ÅÓà¶î"<<endl;
}
void Client::deposite()
{int cq;
cin>>cq;
usr.setYu(cq+usr.getYu());
Record r2(usr.getNo(),t,"cq",cq,usr.getYu());
usr.add(r2);
}
void Client::querybyTime()
{
int m1,d1,h1,min1;
cin>>m1>>d1>>h1>>min1;
Time t1(m1,d1,h1,min1);
int m2,d2,h2,min2;
cin>>m2>>d2>>h2>>min2;
Time t2(m2,d2,h2,min2);
usr.queryByTime(t1,t2);
}
void Client::queryCq()
{
usr.queryByType("cq");
}
void Client::queryQq()
{
usr.queryByType("qq");
}
void Client::display()
{
usr.display();
}
int main()
{freopen("in.dat","r",stdin);
freopen("out.dat","w",stdout);
int id;
cin>>id;
Client uop1(id);
uop1.display();
uop1.deposite();
uop1.withdraw();
uop1.queryCq();
uop1.display();
User u1(2,"wyy","321",2000);
Client uop2(u1);
uop2.withdraw();
uop2.withdraw();
uop2.queryQq();
uop2.deposite();
uop2.display();
}