|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
您现在的位置: ChinaBeta.cn 中文IT资讯 >> 网盟学院 >> 编程类 >> 其它编程程序 >> 网管技术正文
推荐网管技术让我穿过那道"墙"! 畅游网络应…推荐网管技术主动防御!瑞星杀毒2008抢先评…
推荐网管技术速度超快 Discuz! 6.0.0试用手…推荐网管技术奇虎举证:各杀毒软件均报CNNIC…
推荐网管技术Google Earth 4.2加入繁体中文…推荐网管技术专业防护!瑞星防火墙2008测试…
推荐网管技术挂载RAR文件 从认识到爱上WinM…推荐网管技术让你冲浪随心所欲 如何访问被封…
推荐网管技术轻装上阵!江民杀毒软件2008速…推荐网管技术VMware Fusion苹果版全程图解(…
推荐网管技术VMware Fusion苹果版全程图解(…推荐网管技术从菜鸟出发!征服高清详细评测全…
推荐网管技术VS2008和ASP.NET 3.5使用之初体…推荐网管技术[多图]Ubuntu 7.04 初体验
推荐网管技术东风吹战鼓擂 下载软件你选谁?推荐网管技术若隐若现 Windows XP DirectX …
推荐网管技术GPRS上网全攻略推荐网管技术主流杀毒软件Vista兼容性横评
推荐网管技术基于IRF的网络管理和业务管理解…推荐网管技术83个美丽的Wordpress主题
推荐网管技术软交换网络中的关键路由技术详…推荐网管技术不只是换肤?Windows Mobile 6 …
推荐网管技术css教程–十步学会用css建站(全…推荐网管技术巧妙设置路由 预防网络频繁掉线
推荐网管技术打造网络管理七大绝技推荐网管技术CorelDRAW X3 Service Pack 2 …
推荐网管技术重温经典:回归 Live Messenger…推荐网管技术Oracle数据库补丁分类、安装及…
详细解析C++编写的ATM自动取款机模拟程序
Www.ChinaBeta.Cn 更新时间:2008-1-2 阅读次数:

【ChinaBeta.Cn 网盟学院】
学习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();
}
Google

(责任编辑:hahack)

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
热门文章 相关报道
普通网管技术 [软件应用]凤凰涅槃 驱动精灵2008归来 (01-03)最新网管技术
普通网管技术 [ASP|ASP.NET]为ASP.NET MVC框架添加AJAX支持 (01-02)最新网管技术
普通网管技术 [JSP|JAVA]从Java到Ruby:献给引路人的策略 (01-02)最新网管技术
普通网管技术 [PHP]PHP多文件上传实例 (01-02)最新网管技术
普通网管技术 [其它编程程序]QQ 静态截图完善实现之改造 CRec… (01-02)最新网管技术
普通网管技术 [其它编程程序]C++运算符重载转换运算符 (01-02)最新网管技术
普通网管技术 [其它编程程序]详细解析C++编写的ATM自动取款机… (01-02)最新网管技术
普通网管技术 [其它编程程序]C++中用vectors改进内存的再分配 (01-02)最新网管技术
普通网管技术 [其它编程程序]C++中的虚函数((((virtual funct… (01-02)最新网管技术
普通网管技术 [其它编程程序]C++中用函数模板实现和优化抽象操… (01-02)最新网管技术
  • C++运算符重载转换运算符

  • C++中用vectors改进内存的再…

  • C++中的虚函数((((virtual …

  • C++中用函数模板实现和优化…

  • C++类对象的深拷贝、浅拷贝…

  • c/c++数组排序、计算平均值…

  • C/C++语言void及void指针深…

  • C++/VC++ 语言编程的疑难问…

  • C++ Virtual基础知识讲解

  • C++指针变量的用途

  •   网友评论内容:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    I D *
    邮 箱
    主 页
    评 分 1分 2分 3分 4分 5分
    评 论

    关于我们  中国·国家信息产业部{粤ICP备06006652号}{陇ICP备06002562号}
    版权所有:『AK网盟基地』站长:Hahack | QQ:80505955 | E-mail:Hahack@Gmail.com
    Copyright (C) 2005-2007  akhack.org|chinabeta.cn All Rights Reserved