c++ATM自动取款机
发布时间:2010/5/25 10:31:22 来源:城市学习网 编辑:ziteng
#includeiostream.h#includestring.h#includestdlib.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 functionshow(); // 功能界面
void exitATM();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;}; [NextPage] consumer::consumer(char Name[],char Num[],float Money,char Password[]){strcpy(name,Name);strcpy(num,Num);money=Money;strcpy(passwd,Password);}
char* consumer::get_name(){return name;}
char* consumer::get_num(){return num;}
char* consumer::get_passwd(){return passwd;}
float consumer::get_money(){return money;}
void consumer::set_passwd(char pwd[]){strcpy(passwd,pwd);}
void consumer::set_money(float m){money-=m;}
void ATM::welcome(){times=0;cout"$欢迎使用若雪银行ATM自动取款机!~!"endl;char pwd[8],num[20],ch;int i=0;do{i=0;coutendl"请输入卡号:";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(times3);lock();}
bool ATM::check_passwd(char num[],char pwd[]){if(strcmp(num,cnsm.get_num())==0&&strcmp(pwd,cnsm.get_passwd())==0)return true;elsereturn false;}
void ATM::change_passwd(){char pwd[8],repwd[8];times=0;do{coutendl"请输入旧密码:";cinpwd;if(!check_passwd (cnsm.get_num(),pwd))times++;elsebreak;}while(times3);if(times==3)lock();int t=0;do{cout"请输入新密码:";cinpwd;cout"请再输入一次新密码:";cinrepwd;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{coutendl"你要取多少钱:""\n$\\"endl ;cinm;while(m=0){cout"请输入正确的数字!"endl;cout"$ \\ ";cinm;}
if(cnsm.get_money()-m0){cout"对不起,你的余额不足!"endl;}else
{coutendl"操作成功,请收好钱!"endl;cnsm.set_money(m);}cout"是否要继续该项操作:(Y/N) "endl;cout"$ \\ ";cinch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'){cout"$ \\";cinch;}}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::functionshow(){int n;do{coutendl"请你输入相应的操作序号进行操作:"endl;cout"1) 修改密码 "endl"2) 取款 "endl"3) 查询余额 "endl"4) 退出系统 "endl;cout"$ \\";cinn;while(n1||n4){cout"请输入正确的操作序号!"endl;cout"$ \\";cinn;}switch(n){case 1:change_passwd();break;case 2:fetchmoney();break;case 3:information();break;case 4:exitATM();break;}}while(true);}
void ATM::lock(){coutendl"对不起,由于你的操作有误,你的卡已经被没收! "endl;exit(1);}
void ATM::exitATM(){coutendl"感谢你对本银行的支持,欢迎下次光临!"endl;cout"请取卡……"endl;exit(0);}
void main(){consumer c1("jim","12345",5200.3f,"123");// 先构造一个用户ATM atm(c1);atm.welcome();}