论坛: 编程破解 标题: ATM自动取款机模拟程序 复制本贴地址    
作者: pillow_911 [pillow_911]    论坛用户   登录
学习c++有半个学期了,前两天老师要我做个模拟ATM自动取款机的程序,其实这个程序也很简单,但是我觉得它对于刚学c++的人来说比较有用处,因为它可以帮助你更加深刻的理解面向对象程序设计的真谛-------以现实世界为模型编写程序。学习c++的真正目的也就在于此,真正的理解面向对象程序设计!

�� 设为首页 | 加入收藏 | 广告服务.
   
 

网站首页 C语言 C++语言 Windows编程 接口&驱动 汇编语言 编程资料 软 件 其它文章 等级考试辅导专栏



  当前位置:网站首页>>C++语言>>C++基础>>学习园地 双击自动滚屏 



ATM自动取款机模拟程序 



发表日期:2004年3月23日  出处:原创  作者:萧何  已经有1403位读者读过此文



  学习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();
}



  希望各位能提出宝贵意见







地主 发表时间: 04-05-11 14:14

回复: sniper167 [sniper167]   论坛用户   登录
收藏

B1层 发表时间: 04-05-11 18:21

回复: iamzhaokun [iamzhaokun]      登录
可要把自己的脚印擦干净了,要不然就惨了!

B2层 发表时间: 04-05-12 09:53

回复: yingzike [yingzike]   论坛用户   登录
还说得过去,不过比较简单了
结构还想得不错呢,呵呵


B3层 发表时间: 04-05-12 10:09

回复: heihei2004 [heihei2004]   论坛用户   登录
太好了
我正在学习C呢
你的程序很有用啊

B4层 发表时间: 04-05-12 15:13

回复: ziaichen [ziaichen]   论坛用户   登录
不错
顶!

B5层 发表时间: 04-05-13 19:35

回复: S_Admin [f_h]   论坛用户   登录
不知道我的要机子能不能吐出钱来啊?
唉, 吐吧,

B6层 发表时间: 04-05-13 20:24

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号