首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>cc++>正文

详细解析C 编写的ATM自动取款机模拟程序

http://www.oklinux.cn  2008-03-07  来源: C语言之家 萧何  会员收藏  游客收藏  【 】 

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

共2页: 上一页 1 [2] 下一页
// ************************************
// *                                  *
// *          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;
    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;

 

}

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;

 if
  lock();
    
 int t=0;
    do
 {
  cout<<"请输入新密码:";
  cin>>pwd;
  cout<<"请再输入一次新密码:";
  cin>>repwd;
  if()!=0)
   cout<<"你输入的两次密码不一样,
   请重新输入!"<<endl;
 }while;

 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);
}

上一篇:编程初级班:C语言程序设计入门系列之一   下一篇:C 编程中的四个调试小技巧


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·C 编程中的四个调试小技巧
·编程初级班:C语言程序设计入门系列之一
·教您在C/C 中如何构造通用的对象
·编程初级班:C语言程序设计入门系列之二
·Windows下C语言网络编程快速入门
·专家教您如何在C语言中巧用正则表达式
·浅议C语言中数组和指针的互操作
·如何在Linux桌面上搭建C/C IDE开发环境
·移形幻影大法 C 程序员快速学习C#之二
·与C/C 指针相似的C#代表元及事件触发
·初学者必备:教你理解复杂的C/C 声明
·移形幻影大法 C 程序员快速学习C#之一
·移形幻影大法 C 程序员快速学习C#
·编程秘籍篇:C语言高效编程的四大绝招
·细述C/C 字符指针数组及指向指针的含义
·初学者编程入门:学习C 的最大难度
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·用Eclipse平台进行C/C 开发
·在 Linux 中使用共享对象
·VS:针对Java开发人员的C#编程语言
·使用智能设备扩展在C#中开发自定义控件
·Visual C# 常见问题
·二级C语言实例解答
·一种被忽视的构造和整数溢出重现
·轻轻松松C to C
·与用于 C 的ISO标准保持一致
·用C 的托管扩展针对Windows编程
·运行时和编译时的安全性检查
·轻轻松松C to C (二)
  阅读排行
·c/c++ 学习-read 函数和 write 函数
·程序员眼中的qmail(qmail源代码分析)
·Awk 基础入门:Awk 实例编程
·autoconf 和automake生成Makefile文件
·Linux下的多进程编程
·入门文章:教你学会编写Linux设备驱动
·C++自动化(模板元)编程基础与应用
·使用 GDB 调试多进程程序
·Qt 不规则窗体的实现
·嵌入式程序员应知道的几个基本问题
·Linux操作系统中GCC的应用介绍
·C语言中的指针和内存泄漏
·用GNU profiler提高代码运行速度
·vi 中的正则表达式 (Regular Expressio
·Linux 套接字编程中的 5 个隐患
网摘收藏: