码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-06-12 10:08:51      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:c++

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

    要求:大概说一下吧,就是要创建一个用户(初化一账户),模拟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[]); // 核对密码
    void change_passwd();     // 修改密码
    void fetchmoney();        // 取款
    void information();            // 查询信息
    void exitATM();            // 退出系统
    void functionshow();      // 功能界面
    void lock();              // 锁机
private:
    int times;               // 记录密码输入次数
    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();            // 取得密码
    float get_money();             // 取得余额
    void set_passwd(char pwd[]);   // 设置密码
    void set_money(float m);       // 取钱
private:
    char passwd[8];    // 用户密码
    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<<"请输入密码:";
        do
        {
            cin.get(ch);
            pwd[i++]=ch;
        }while(ch!='\n');
        pwd[i-1]='\0';
        if(!check_passwd(num,pwd))
        {
            cout<<"你输入的卡号或密码有误,请重新输入"<<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) 修改密码 "<<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<<"请输入旧密码:";
        cin>>pwd;
        if(!check_passwd(cnsm.get_num(),pwd))
        times++;
        else
        break;
    }while(times<3);
    if(times==3)
    lock();

    int t=0;
    do{
        cout<<"请输入新密码:";
        cin>>pwd;
        cout<<"请再输入一次新密码:";
        cin>>repwd;
        if((t=strcmp(pwd,repwd))!=0)
        cout<<"你输入的两次密码不一样,请从新输入!"<<endl;
    }while(t!=0);
    cnsm.set_passwd(pwd);
    cout<<"密码修改成功,请牢记!"<< 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;
}



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

标签:c++

原文地址:http://blog.csdn.net/tdap_algorithm_learn/article/details/46467789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!