C++控制台制作ATM机

简介: C++控制台制作ATM机

题目


在控制台编程中共设置了三个类,ATM类、Card类和Bankcard类,设计函数实现登录、查询、修改密码、取款、存款、转账以及退出系统等功能。程序分别从MFC控件和c++控制台实现。同时在要求的基础之上,进行了部分仿ATM的优化,例如在登陆界面输入错误三次就会冻结账号退出系统,在MFC对话框中加入图片更加真实等。


思路较为简单,这篇不做系统的分析了,话不多说直接上代码


代码实现


所需要头文件


#include<iostream> 
#include<string>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
using namespace std;


Card类


class Card    //声明卡类
{
public:
  friend ATM;//声明友元
  Card::Card(string Name, int Account)//构造函数
  {
    name = Name;
    account = Account;
  }
protected:
  string name;//持卡人姓名
  int account;//账号
};


Bankcard类


class BankCard:public Card {
public:
  friend ATM;//友元类ATM。使ATM类能够访问银行卡类私有成员
  BankCard(string Name, int Account, string Password, float Money)
    :Card(Name,Account)
  {
    password = Password;
    money = Money;
  };          //构造函数
private:
  string password;//密码
  float money;//总金额
};


ATM类


class ATM//ATM类,模拟自助取款机主系统
{
public:
  void Information();//
  int check_password(int Account, string Password);//验证账号密码函数
  void transfer_money();//转账函数
  void check_remain_money();//查询余额函数
  void deposit();//存钱函数
  void drawing();//取钱函数
  void change_password();//修改密码函数
  ATM(string Name, int Account, string Password, float Money)
  {
    name = Name;
    account = Account;
    password = Password;
    money = Money;
  }
private:
  string password;//密码
  float money;//总金额
  string name;//持卡人姓名
  int account;//账号
};


ATM类函数的声明


void ATM::Information()
{
  cout<<"你的名字:"<<name<<endl;
  cout<<"你的账号: " << account << endl;
  system("pause");//输出按任意键继续
  system("cls");//清屏函数
}
void ATM::deposit()        //存钱函数
 {
  float e_money;//定义变量 存储准备存的金额
  cout << "请输入您要存入的金额" << endl;
  cin >> e_money;
  money += e_money;//更改总金额
  cout << "您的余额为" << money << "元" << endl;
  system("pause");//输出按任意键继续
  system("cls");//清屏函数
}
void ATM::drawing()        //取钱函数
{
  float e_money;//定义变量 存储准备取的金额
  cout << "请输入您要取出的金额" << endl;
  cin >> e_money;
  if (e_money > money)//如果取的钱比总金额多
    cout << "账户余额不足" << endl;
  else        //如果取的钱比总金额少
  { 
    money -= e_money;
    cout << "您的余额为" << money << "元" << endl;
  }
  system("pause");//输出按任意键继续
  system("cls");//清屏函数
}
void ATM::change_password() //  //修改密码函数
{       
  string new_password1, new_password2, pwd;
  cout << "请输入原密码: ";
  cin >> pwd;
  cout << endl;
  if (pwd == password)
  {
    cout << "请输入新密码: ";
    cin >> new_password1;
    cout << endl;
    cout << endl;
    while (new_password1 == password)
    {
      cout << "与旧密码一致,请输入一个新密码: ";
      cin >> new_password1;
      cout << endl;
    }
    cout << "请再一次输入新密码: ";
    cin >> new_password2;
    cout << endl;
    while (new_password1 != new_password2)
    {
      cout << "与第一次输入的不同,请再次输入: ";
      cin >> new_password2;
      cout << endl;
    }
    password = new_password2;
    cout << "修改密码成功! " << endl;
    cout << endl;
  }
  else if (pwd != password) 
  {
    do {
      cout << "密码错误,请重新输入: ";
      cin >> pwd;
    } while (pwd != password);
    change_password();
  }
  system("pause");//输出按任意键继续
  system("cls");//清屏函数
}
void ATM::transfer_money() //转账函数
{
  float Transfer_money = 0.0;//定义变量 存储准备转出的金额
  cout << "请输入要转出的金额" << endl;
  cin >> Transfer_money;
  if (Transfer_money > money)//如果转出金额大于总金额
    cout << "账户余额不足" << endl;
  else            //转出金额小于总金额
  {
    money -= Transfer_money;
    cout << "操作成功,您的余额为" << money << "元" << endl;
  }
  system("pause");//输出按任意键继续
  system("cls");  //清屏函数
}
void ATM::check_remain_money() {      //查询余额
  cout << "您的余额为" << money << endl;
  system("pause");//输出按任意键继续
  system("cls");//清屏函数
}
int ATM::check_password(int Account, string Password)  //验证账号密码的函数
{
  int i = 0;
  cout << "请输入您的账号和密码" << endl;
  for (i = 0; i < 3; i++)
  {           //不能超过三次尝试次数
    cout << "账号:";
    cin >> Account;
    cout << "密码:";
    cin>>Password;
    if ((Account ==account)&&(Password == password))
    {
      cout << "登入中国民生银行成功!" << endl
        << "欢迎使用!" << endl;
      return 1;
    }
    else 
    {
      cout << "账号或密码错误,请重新输入" << endl;
      if (i >= 2)
      {
        cout << "您的尝试次数超过三次,已冻结" << endl;
        system("pause");//输出按任意键继续
      }
    }
  }
  return 0;
}


主函数


int main()
{
  ATM atm("赵四",198754, "311817", 1314);
  //定义类ATM的对象atm,调用构造函数给私有成员赋值
  int account;
  string password;
  int j = 0;
  int flag = 0;
  flag = atm.check_password(account, password);
  while (flag)
  {
    cout << "请选择您的需求:1.信息查询  2.存钱  3.取钱  4.修改密码  5.转账  6.查询余额 7.退出" << endl;
    cin >> j;
    switch (j)
    {
    case 1:{atm.Information();break;}
    case 2:{atm.deposit(); break;}
    case 3:{atm.drawing(); break;}
    case 4:{atm.change_password(); break;}
    case 5:{atm.transfer_money(); break;}
    case 6:{atm.check_remain_money();break;}
    case 7:{break;}
    default:break;
    }
    if (j==6)break;
    if(j != 1 && j != 2 && j != 3 && j != 4 &&j != 5&&j!=6){
      cout<<"请输入正确指令!"<<endl;
      system("pause");
      system("cls");
    }
  }
  return 0;
}
相关文章
|
5月前
|
定位技术 C++ Windows
第一人称射击游戏 C++控制台版(未完成)
第一人称射击游戏 C++控制台版(未完成)
第一人称射击游戏 C++控制台版(未完成)
|
5月前
|
C++
俄罗斯方块 C++控制台版
俄罗斯方块 C++控制台版
|
6月前
|
C++
c++实现通讯录管理系统(控制台版)
c++实现通讯录管理系统(控制台版)
|
存储 算法 安全
c++游戏制作指南(一):在冷峻的控制台上,种满缤纷
c++游戏制作指南(一):在冷峻的控制台上,种满缤纷
728 0
|
C语言 C++ Windows
【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
655 0
【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
|
C++
C++ 控制台窗口中MessageBox() 的用法
C++ 控制台窗口中MessageBox() 的用法
292 0
|
C++
C++ 设置控制台文本属性画一个DOS时代的字符窗口
C++ 设置控制台文本属性画一个DOS时代的字符窗口
78 0
|
API C语言 C++
C语言或者C++中隐藏控制台窗口
C语言或者C++中隐藏控制台窗口
517 0
|
API C++
C/C++ 改变控制台输文字颜色:SetConsoleTextAttribute()
C/C++ 改变控制台输文字颜色:SetConsoleTextAttribute()
553 0
C/C++ 改变控制台输文字颜色:SetConsoleTextAttribute()
C++控制台实现客户端与服务端即时通信(C/S)
C++控制台实现客户端与服务端即时通信(C/S)
342 0