ATM模拟

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函数

测试:

定义时间对象t14 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函数

增加交易一条记录addRecord r);

显示一条交易记录 dispRecord(int i);

显示所有交易记录 dispAllRecord();

查询指定时间段内的交易记录 queryByTimeTime t1t2);

查询指定类型的交易记录 queryByTypestring type);

测试:

输入账号、姓名、密码、余额;(2 ff 111111 1000)

利用输入信息定义用户对象u1

显示对象u1

设置密码为778899”;

显示用户对象u1

定义2条交易记录(账号均为对象u1的账号)r1r2

4 22 8 10 qq 200 2000

4 28 13 20 cq 400 2400

将它们追加到u1的交易记录中;

显示u1的第2条交易记录;

查询用户u1428日到429日的交易记录;

显示用户u1的所有交易记录;

显示用户u1的所有信息;

利用u1创建用户对象u2

显示用户u2存钱的所有交易记录;

显示u2的所有信息;

用户操作类UserOp:

数据成员:

User usr//用户对象

Time t;//时间对象,表示本次使用的时间;

成员函数:

带参(账号)构造函数(输入其他用户信息,创建用户对象并赋值给数据成员usr,输入时间值并赋值给数据成员 t);

带参(用户对象)构造函数(将形参赋值给数据成员usr,输入时间值并赋值给数据成员 t);

取钱withdraw();输入所要取钱数,判断用户余额是否大于所取钱数。是,则修改用户余额并生成交易记录对象,追加到交易记录中。否则,显示“所取钱数超过账号余额”;

存钱deposit();输入所要存钱数,修改用户余额并生成交易记录对象,追加到交易记录中;

查询指定时间段的交易记录queryByTime();输入要查询的起至时间并生成起至时间对象,调用用户成员的queryByTime函数;

查询指定交易类型的交易记录queryByType();输入要查询的交易类型,调用用户成员的queryByTypestring type)函数;

显示用户信息display();调用用户显示函数

测试:

输入账号,定义用户操作对象uop1(时间为423850分,用户姓名为“xxx”,.密码为“123”,账号余额是1000;);

存入300

显示用户信息;

取出100

查询“存钱”信息;

查询用户信息;

定义用户数据对象u12 wyy” “321”,2000)并以其为实参定义用户操作对象uop2(时间为 423913分);

取出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改写之后会再上传一次


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值