打印本文 打印本文  关闭窗口 关闭窗口  
详细解析C++编写的ATM自动取款机模拟程序
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:38:19  文章录入:杜斌  责任编辑:杜斌

  学习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();
            }
打印本文 打印本文  关闭窗口 关闭窗口