AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

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

51自学网 http://www.wanshiok.com
  学习c++有一段时间了,前两天有个朋友要我帮她做个模拟ATM自动取款机的程序,于是花了一个晚上写了出来,其实这个程序也很简单,但是我觉得它对于刚学c++的人来说比较有用处,因为它可以帮助你更加深刻的理解面向对象程序设计的真谛-------以现实世界为模型编写程序。学习c++的真正目的也就在于此,真正的理解面向对象程序设计!

// ************************************// *                                  *// *          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$>//"<<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();}

 

 

 
上一篇:理解C++程序设计中的抽象理论  下一篇:C++箴言:争取异常安全的代码