详细解析C++编写的ATM自动取款机模拟程序
学习c++有一段时间了,前两天有个朋友要我帮她做个模拟ATM自动取款机的程序,于是花了一个晚上写了出来,其实这个程序也很简单,但是我觉得它对于刚学c++的人来说比较有用处,因为它可以帮助你更加深刻的理解面向对象程序设计的真谛-------以现实世界为模型编写程序。学习c++的真正目的也就在于此,真正的理解面向对象程序设计!
// ************************************
// * *
// * function.h *
// * *
// ************************************
#include
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
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
#include
void ATM::welcome()
{
times=0;
cout<<"$
欢迎使用若雪银行ATM自动取款机!~!
"< 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]='\0'; i=0; cout<<"请输入密码:"; do { cin.get(ch); pwd[i++]=ch; }while(ch!=' '); pwd[i-1]='\0'; if(!check_passwd(num,pwd)) { cout<<"你输入的卡号或密码有误, 请重新输入"< 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< "< cout<<"1) 修改密码 "< <<"2) 取款 "< <<"3) 查询余额 "< <<"4) 退出系统 "< cout<>n; while(n4) { cout<<"请输入正确的操作序号!"< cout<>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< if(!check_passwd(cnsm.get_num(),pwd)) times++; else break; }while(times<3); if(times==3) lock(); int t=0; do { cout<>pwd; cout<>repwd; if((t=strcmp(pwd,repwd))!=0) cout<<"你输入的两次密码不一样, 请重新输入!"< }while(t!=0); cnsm.set_passwd(pwd); cout<<"密码修改成功,请牢记!"< } void ATM::fetchmoney() { float m; char ch; do { cout< <"<>m; while(m<=0) { cout<<"请输入正确的数字!"< cout<>m; } if(cnsm.get_money()-m<0) { cout<<"对不起,你的余额不足!" < } else { cout< < cnsm.set_money(m); } cout<<"是否要继续该项操作:(Y/N) " < cout<>ch; while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y') { cout<>ch; } }while(ch=='y'ch=='Y'); } void ATM::information() { cout<<"**********************************"< cout<<"*"< cout<<"* 用户姓名:"< cout<<"* 卡号: "< cout<<"* 余额: "< cout<<"**********************************"< } void ATM::lock() { cout< 你的卡已经被没收! "< exit(1); } void ATM::exitATM() { cout< 欢迎下次光临!"< cout<<"请取卡……"< exit(0); } // ************************************ // * * // * ATM.cpp * // * * // ************************************ #include #include"function.h" void main() { consumer c1("jim","12345",5200.3f,"123"); // 先构造一个用户 ATM atm(c1); atm.welcome(); }





