• 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!='
    ');
                num[i-1]='';
            i=0;
            cout<<"请输入password:";
            do
            {
                cin.get(ch);
                pwd[i++]=ch;
            }while(ch!='
    ');
            pwd[i-1]='';
            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; }




  • 相关阅读:
    input 正则
    .net ashx Session 未将对象引用到实例
    js 时间和时间对比
    c# Repeater 和 AspNetPager
    c#后台 极光推送到Android 和IOS客户端
    select scope_identity()
    redhat7.4安装git(按照官网从源码安装)
    redhat7.4安装gitlab
    ES6模板字符串
    初次接触webpack
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7135979.html
Copyright © 2020-2023  润新知