ATM取款机模拟——数据结构课设

   今天帮人写的第二篇课设 。 ;-) 机智的窝

    要求:大概说一下吧,就是要创建一个用户(初化一账户),模拟ATM的业务(取款,100的整数倍,改密               码,查剩余金额。等等,各种简单繁琐的操作 ;-) 

   直接贴代码吧:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;

class consumer;
class ATM     // ATM取款机
{
public:
    ATM(consumer& cn):cnsm(cn){}
    void welcome();        // 登陆界面
    bool check_passwd(char n[],char pwd[]); // 核对password
    void change_passwd();     // 改动password
    void fetchmoney();        // 取款
    void information();            // 查询信息
    void exitATM();            // 退出系统
    void functionshow();      // 功能界面
    void lock();              // 锁机
private:
    int times;               // 记录password输入次数
    consumer& cnsm;
};
class consumer  // 用户
{
public:
    friend class ATM;
    consumer(char Name[],char Num[],float Money,char Password[]);
protected:
    char* get_name();              // 取得姓名
    char* get_num();               // 取得卡号
    char* get_passwd();            // 取得password
    float get_money();             // 取得剩余金额
    void set_passwd(char pwd[]);   // 设置password
    void set_money(float m);       // 取钱
private:
    char passwd[8];    // 用户password
    char name[20];     // 用户姓名
    char num[20];
    float money;
};


consumer::consumer(char Name[],char Num[],float Money,char Password[])
{
    strcpy(name,Name);
    strcpy(num,Num);
    money=Money;
    strcpy(passwd,Password);
}
float consumer::get_money()
{
    return money;
}
char* consumer::get_name()
{
    return name;
}
char* consumer::get_num()
{
    return num;
}
char* consumer::get_passwd()
{
    return passwd;
}
void consumer::set_money(float m)
{
    money-=m;
}
void consumer::set_passwd(char pwd[])
{
    strcpy(passwd,pwd);
}

void ATM::welcome()
{
    times=0;
    cout<<"  欢迎使用tdap银行ATM自己主动取款机 "<< endl;
    char pwd[8],num[20],ch;
    int i=0;
    do
    {
        i=0;
        cout<<"请输入卡号:";
        do
        {
            cin.get(ch);
            num[i++]=ch;
        }while(ch!='\n');
            num[i-1]='\0';
        i=0;
        cout<<"请输入password:";
        do
        {
            cin.get(ch);
            pwd[i++]=ch;
        }while(ch!='\n');
        pwd[i-1]='\0';
        if(!check_passwd(num,pwd))
        {
            cout<<"你输入的卡号或password有误。请又一次输入"<<endl;
            times++;
        }
        else
        {
            functionshow();
        }
    }while(times<3);
    lock();
}
bool ATM::check_passwd(char num[],char pwd[])
{
 if(strcmp(num,cnsm.get_num())==0&&strcmp(pwd,cnsm.get_passwd())==0)
    return true;
 else
    return false;
}
void ATM::functionshow(){
   int n;
   do{
        cout<<"请你输入对应的操作序号进行操作:"<<endl;
        cout<<"1) 改动password "<<endl<<"2) 取款     "<<endl<<"3) 查询剩余金额 "<<endl<<"4) 退出系统 "<<endl;
        cout<<"$ >";
        cin>>n;
        while(n<1||n>4){
            cout<<"请输入正确的操作序号!"<<endl;
            cout<<"$ >";
            cin>>n;
        }

        switch(n){
            case 1:   change_passwd();   break;
            case 2:   fetchmoney();      break;
            case 3:   information();     break;
            case 4:   exit(0);         break;
        }
    }while(true);
}
void ATM::change_passwd(){
    char pwd[8],repwd[8];
    times=0;
    do{
        cout<<"请输入旧password:";
        cin>>pwd;
        if(!check_passwd(cnsm.get_num(),pwd))
        times++;
        else
        break;
    }while(times<3);
    if(times==3)
    lock();

    int t=0;
    do{
        cout<<"请输入新password:";
        cin>>pwd;
        cout<<"请再输入一次新password:";
        cin>>repwd;
        if((t=strcmp(pwd,repwd))!=0)
        cout<<"你输入的两次password不一样,请从新输入!"<<endl;
    }while(t!=0);
    cnsm.set_passwd(pwd);
    cout<<"password改动成功,请牢记!"<< endl;
}
void ATM::fetchmoney(){
   int m;
   char ch;
   do{
        cout<<"你要取多少钱:"<<endl<<"$>";
        cin>>m;
        while(m<=0 || m%100 !=0 ){
            cout<<"请输入正确的数字!"<<endl;
            cout<<"$> ";
            cin>>m;
        }
        if(cnsm.get_money()-m<0){
            cout<<"对不起,你的剩余金额不足!"<<endl;
        }else{
            cout<<"操作成功,请收好钱!"<<endl;;
            cnsm.set_money(m);
        }
       cout<<"是否要继续该项操作:(Y/N) "<<endl;
       cout<<"$ > ";
       cin>>ch;
        while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'){
            cout<<"$ >\\";
            cin>>ch;
        }
   }while(ch=='y'||ch=='Y');
}
void ATM::information()
{
    cout<<"**********************************"<<endl;
    cout<<"*"<<endl;
    cout<<"*     用户姓名:" << cnsm.get_name()  <<endl;
    cout<<"*     卡号:    " << cnsm.get_num()   <<endl;
    cout<<"*     剩余金额:     " << cnsm.get_money() <<endl;
    cout<<"**********************************"<<endl;
}
void ATM::lock()
{
    cout<<"对不起,因为你的操作有误。你的卡已经被没收! ?

"<<endl; cout<<"请取卡……"<<endl; exit(0); } int main(){ consumer c1("jim","12345",10000.0f,"123"); // 先构造一个用户 ATM atm(c1); atm.welcome(); return 0; }




posted @ 2017-07-08 10:11  yfceshi  阅读(419)  评论(0编辑  收藏  举报