详细解析C++编写的ATM自动取款机模拟程序

来源:互联网 发布:linux snmp yum 编辑:程序博客网 时间:2024/05/16 15:43
// ************************************
// *                                  *
// *          function.h              *
// *                                  *
// ************************************

#include<iostream.h>


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类的成员函数         *// *                                  *// ************************************ #include"function.h"#include<string.h>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);}


// ************************************// *                                  *// *          ATM类的成员函数         *// *                                  *// ************************************ #include "function.h"#include <string.h>#include<stdlib.h>void ATM::welcome(){ times=0; cout<<"$  欢迎使用若雪银行ATM自动取款机!~! "<<endl; char pwd[8],num[20],ch; int i=0; do {   i=0;   cout<<endl<<"请输入卡号:";    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<<"请你输入相应的操作序号进行操作: "<<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:   exitATM();    break;     }   }while(true); }void ATM::change_passwd(){ char pwd[8],repwd[8];  times=0; do { cout<<endl<<"请输入旧密码:"; 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(){   float m;   char ch;   do   {      cout<<endl<<"你要取多少钱:"  <<"/n___FCKpd___1gt;//"<<endl ;      cin>>m;      while(m<=0)   {    cout<<"请输入正确的数字!"<<endl;    cout<<"$ >// ";    cin>>m;   }      if(cnsm.get_money()-m<0)   {     cout<<"对不起,你的余额不足!" <<endl;   }   else   {   cout<<endl<<"操作成功,请收好钱!"   <<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<<"对不起,由于你的操作有误, 你的卡已经被没收! "<<endl; exit(1);}void ATM::exitATM(){ cout<<endl<<"感谢你对本银行的支持, 欢迎下次光临!"<<endl; cout<<"请取卡……"<<endl; exit(0);}


// ************************************// *                                  *// *          ATM.cpp                 *// *                                  *// ************************************ #include<iostream.h>#include"function.h"void main(){  consumer c1("jim","12345",5200.3f,"123");  // 先构造一个用户  ATM atm(c1);  atm.welcome();}