Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104641921
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: C/C++

2008-04-16 22:44:32

作者:crazy57002   


 学习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!='\n'); 
       num[i-1]='%content%'

  i=0; 
  cout<<"请输入密码:"
   do 
   { 
         cin.get(ch); 
      pwd[i++]=ch; 
   }while(ch!='\n'); 
       pwd[i-1]='%content%'

   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<<"$ >\"
    cin>>n; 
    while(n<1||n>4) 
 { 
     cout<<"请输入正确的操作序号!"<     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<"请输入旧密码:"
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<<"你输入的两次密码不一样,请从新输入!"<}while(t!=0); 

cnsm.set_passwd(pwd); 
cout<<"密码修改成功,请牢记!"<


void ATM::fetchmoney() 

  float m; 
  char ch; 
  do 
  { 

     cout<"你要取多少钱:"<<"\n$>\"<     cin>>m; 
     while(m<=0) 
  { 
   cout<<"请输入正确的数字!"<   cout<<"$ >\ "
   cin>>m; 
  } 

     if(cnsm.get_money()-m<0) 
  { 
    cout<<"对不起,你的余额不足!"<  } 
  else 
  { 
  cout<"操作成功,请收好钱!"<        cnsm.set_money(m); 
  } 
  cout<<"是否要继续该项操作:(Y/N) "<  cout<<"$ >\ "
  cin>>ch; 
  while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'
 { 
    cout<<"$ >\"
    cin>>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(); 
}
阅读(187) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~