|
![]() | 作者: 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号