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;//帐户余额
Record r[200];//交易记录
int num;//当前交易记录数
成员函数:
带参构造函数(不包括交易记录,交易记录数置为零);
复制构造函数;
显示函数(如果当前交易记录数为零,则不显示交易记录。以后重载输入输出运算符函数)
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 200 2000
4 28 13 20 cq 400 2400
将它们追加到u1的交易记录中;
显示u1的第2条交易记录;
查询用户u1从4月28日到4月29日的交易记录;
显示用户u1的所有交易记录;
显示用户u1的所有信息;
利用u1创建用户对象u2;
显示用户u2存钱的所有交易记录;
显示u2的所有信息;
用户操作类UserOp:
数据成员:
User usr;//用户对象
Time t;//时间对象,表示本次使用的时间;
成员函数:
带参(账号)构造函数(输入其他用户信息,创建用户对象并赋值给数据成员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
输出:
3 13 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 mo,int da,int ho,int mi):month(mo),day(da),hour(ho),minute(mi){}
Time(){
month=day=hour=minute=0;}
void display(){cout<<month<<" "<<day<<" "<<hour<<" "<<minute;}
int getMonth(){return month;}
int getDay(){return day;}
int getHour(){return hour;}
int getMinute(){return minute;}
void setMonth(int m){month=m;}
void setDay(int d){day=d;}
void setHour(int h){hour=h;}
void setMinute(int m){minute=m;}
};
/*int main()
{
freopen("in.dat","r",stdin);
freopen("out.dat","w",stdout);
int a,b,c,d,e,f,g,h;
cin>>a>>b>>c>>d>>e>>f>>g>>h;
Time t1(a,b,c,d);
t1.display();
cout<<endl;
Time t2;
t2.setMonth(5);
t2.setDay(23);
t2.setHour(9);
t2.setMinute(12);
t2.display();
}*/
class Record
{
int no;
Time date;
string type;
int jine;
double yue;
public:
Record(int f,Time da,string ty,int jin,double yu):no(f),date(da),type(ty),jine(jin),yue(yu){}
Record(){no=jine=yue=0;}
void display(){
cout<<no<<" ";
date.display();
cout<<" "<<type<<" "<<jine<<" "<<yue;
}
int getNo(){return no;}
Time getDate(){return date;}
string getType(){return type;}
int getJine(){return jine;}
double getYue(){return yue;}
void setNo(int g){no=g;}
Time setDate(Time h){date=h;}
void setType(string p){type=p;}
void setJine(int v){jine=v;}
void setYue(double r){yue=r;}
};
/*int main()
{
freopen("in.dat","r",stdin);
freopen("out.dat","w",stdout);
Time t1(4,23,8,5);
Time t2;
int a,j;
string t;
double y;
cin>>a>>t>>j>>y;
int i,q,w,e,r,y7,u;
string t7;
cin>>i>>q>>w>>e>>r>>t7>>y7>>u;
Record r1(a,t1,t,j,y);
Record r2;
r2.setNo(1);
Time t3(5,23,9,12);
r2.setDate(t3);
r2.setType("qq");
r2.setJine(200);
r2.setYue(1800);
r1.display();
cout<<endl;
r2.display();
}*/
class User
{
int n,a1,a2;
int no;
string name;
string mima;
double yue;
Record r[200];
int num;
public:
User(int n,string na,string mi,double yu,int nu):no(n),name(na),mima(mi),yue(yu),num(0){}
User(const User&f):no(f.no),name(f.name),mima(f.mima),yue(f.yue),num(f.num){
for(int i=1;i<=num;i++)
{
r[i]=f.r[i];
}
}
void display()
{cout<<no<<" "<<name<<" "<<mima<<" "<<yue<<endl;
if(num!=0)
for(int i=1;i<=num;i++)
r[i].display(),cout<<endl;
}
int getNo(){return no;}
string getName(){return name;}
string getMima(){return mima;}
double getYue(){return yue;}
int getNum(){return num;}
void setNo(int n){no=n;}
void setName(int na){name=na;}
void setMima(string mi){mima=mi;}
void setYue(int y){yue=y;}
void add(Record s);
void dispRecord(int i){r[i].display(),cout<<endl;}
void disAllRecord();
Record queryByTime(Time t3,Time t4);
Record queryByType(string type);
bool operator<(const User&other)
{if(a1<other.a1 || (a1==other.a1 && a2<other.a2))
return true;
return false;
}
};
void User::add(Record s)
{
r[++num]=s;
}
void User::disAllRecord()
{
for(int i=1;i<=num;i++)
{
r[i].display();
cout<<endl;
}
}
void User::queryByTime(Time t1,Time t2)
{
for(int i=1;i<=num;i++)
{
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().getMonth()<t2.getMonth()&&r[i].getDate().getDay()>=t1.getDay())
r[i].display();
else if(r[i].getDate().getMonth()>t1.getMonth()&&r[i].getDate().getMonth()==t2.getMonth()&&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].getDate().getDay()>=t1.getDay()&&r[i].getDate().getDay()<=t2.getDay())
r[i].display();}
}
void User::queryByType(string type)
{
for(int i=1;i<=num;i++)
{
if(r[i].getType()==type)
r[i].display();
}
}
/*int main()
{
freopen("in.dat","r",stdin);
freopen("out.dat","w",stdout);
int no;
string name,mima;
double yue;
cin>>no>>name>>mima>>yue;
User u1(no,name,mima,yue,0);
u1.display();
u1.setMima("778899");
u1.display();
Time t1(4,22,8,10);
Time t2(4,28,13,20);
Record s1(u1.getNo(),t1,"qq",200,2000);
Record s2(u1.getNo(),t2,"cq",400,2400);
u1.add(s1);
u1.add(s2);
u1.dispRecord(2);
Time t3(4,28,0,0);
Time t4(4,29,23,59);
u1.queryByTime(t3,t4);cout<<endl;
u1.disAllRecord();
u1.display();
User u2(u1);
u2.queryByType("cq");cout<<endl;
u2.display();
}*/
class UserOp
{
User usr;
Time t;
public:
UserOp(int no,string name,string mima,double yue,int month,int day,int hour,int minute):usr(no,name,mima,yue),t(month,day,hour,minute){};
UserOp(User usr1,Time t1):usr(usr1),t(t1){};
void withdraw(int n);
void deposit(int n);
void queryByTime(Time t1,Time t2);
void queryByType(string n);
void display();
friend ostream & operator<<(ostream &output,UserOp &U);
};
ostream & operator<<(ostream &output,UserOp &U)
{
U.usr.display();
}
void UserOp::withdraw(int n)
{
cin>>n;
if(n<=usr.getYue())
{
usr.setYue(usr.getYue()-n);
Record s(usr.getNo(),t,"qq",n,usr.getYue());
usr.add(s);
}
else
cout<<"所取钱数超过账户余额"<<endl;
}
void UserOp::deposit(int n)
{
cin>>n;
usr.setYue(usr.getYue()+n);
Record s(usr.getNo(),t,"cq",n,usr.getYue());
usr.add(s);
void UserOp::queryByTime(Time t1,Time t2)
{
int a,b,c,d,e,f,g,h;
cin>>a>>b>>c>>d>>e>>f>>g>>h;
Time t3(a,b,c,d);
Time t4(e,f,g,h);
usr.queryByTime(t1,t2);
}
void UserOp::queryByType(string n)
{
usr.queryByType(n);
}
void UserOp::display()
{
usr.display();
}
int main()
{
int no,a,b,c,d;
double y;
string na,mi;
cin>>no>>na>>mi>>y>>a>>b>>c>>d;
UserOp uop1(no,na,mi,y,a,b,c,d);
uop1.display();
uop1.deposit();
uop1.withdraw();
uop1.queryByType("cq");
uop1.display();
User usr1(2,"wyy","321",2000);
int n1,n2,n3,n4;
cin>>n1>>n2>>n3>>n4;
Time t(n1,n2,n3,n4);
UserOp uop2(usr1,t);
uop2.withdraw();
uop2.withdraw();
uop2.queryByType("qq");
uop2.deposit();
uop2.display();
return 0;
}
第四个类及测试数据可能还有一些问题,关于ATM模拟,等用STL改写之后会再上传一次