题目
在控制台编程中共设置了三个类,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; }