
用c++编写一个ATM 柜员机系统
课程题目:模拟ATM柜员机程序内容要求:使用文本命令行窗口设计模拟ATM柜员机程序。要求使用文本命令行窗口界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:(1)查询余额:初始余额为10000元(2)ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。(3)ATM存款:不能出现负存款。(4)修改密码:
课程题目:模拟ATM柜员机程序
内容要求:使用文本命令行窗口设计模拟ATM柜员机程序。
要求使用文本命令行窗口界面。当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
(1)查询余额:初始余额为10000元
(2)ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
(3)ATM存款:不能出现负存款。
(4)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
首先根据题目分析实现一个系统所需要的一些操作,并将这些操作分类封装在不同的类中,按照我的理解,我大致分成了以下的类:
1.登陆类:实现对于与文件中的账号密码提取与输入的账号密码进行比对,若账号密码错误显示相应的结果,若登陆成功显示登陆界面。
2.修改密码类:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3.查询余额类:对余额进行查询。
4.取存款类:进行存取款操作。
5.主函数:先显示欢迎页面,提供登录的操作可以添加忘记密码等操作,登录成功后进入业务界面,输入不同的值进入不同的操作,提供一个退出操作,退出后显示退出界面
做完大致的分析后,即可进行初次的编写,在经过几次的修改。
以下是具体的代码展示:
#include <iostream>
#include <string>
#include <windows.h>
#include <fstream>
using namespace std;
class Pages{
public:
void Show_Start() {
cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
cout << "| | " << endl;
cout << "* 欢迎使用ATM柜员机系统 * " << endl;
cout << "| | " << endl;
cout << "*-*-*-*-*-*-*-*-*-*-选择您所需要的服务,并按回车确认!-*-*-*-*-*-*-*-*-*-*-*" << endl;
cout << "| 【1】进入登录界面 |" << endl;
cout << "* 【2】咨询相关信息请输入 * " << endl;
cout << "| 【0】退出系统 | " << endl;
cout << "*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*" << endl;
cout << "请输入【0-2】:" << endl;
cin >> a;
while (!(this->a == "1" || this->a == "2" || this->a == "0")) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "您输入的值有误!请重新输入: " << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN| FOREGROUND_BLUE | FOREGROUND_RED);
cin >> this->a;
}
}
void Show_End() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout << " 您已成功退出系统,欢迎下次使用!"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}
string a = "-1";
};
class Login {
public:
void Show_Page1() {
cout << "------------------------欢迎进入登陆界面----------------------------------" << endl;
cout << "| 【0】退出系统 |" << endl;
cout << "| 【1】进行账号密码登录 |" << endl;
cout << "| 【2】修改密码 |" << endl;
cout << "--------------------------------------------------------------------------" << endl;
cout << "请输入【0-2】:" << endl;
cin >> b;
while (!(this->b == "1" || this->b == "2" || this->b == "0")) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
cout << "您输入的值有误!请重新输入: " << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
cin >> this->b;
}
}
/*此函数来实现对输入的账号密码的比对,从而实现是否登陆成功*/
void Judge() {
cout << "请输入您的账号: " << endl;
cin >> USER_NAME;
cout << "请输入您的密码: " << endl;
cin >> PASSWORD;
while(USER_NAME != user_name){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED);
cout << "您的账号有误!" << endl;
cout << "请重新输入您的账号: " << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
cin >> USER_NAME;
}
while (PASSWORD != password) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout << "密码错误!" << endl;
cout << "请重新输入您的密码: " << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
cin >> PASSWORD;
}
if (USER_NAME == user_name && PASSWORD == password) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout << "登陆成功!请稍后 ......" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
Sleep(1000);
}
}
/*此函数实现修改登录密码*/
bool Exchange_Password() {
cout << "-----------------------------------修改密码--------------------------------" << endl;
cout << "| 注意: |" << endl;
cout << "| * 两次输入的密码必须相同|" << endl;
cout << "| * 新密码长度不小于6位 |" << endl;
cout << "| * 新密码不允许出现6位 |" << endl;
cout << "| 完全相同的情况 |" << endl;
cout << "---------------------------------------------------------------------------" << endl;
cout << "请输入当前密码:" << endl;
cin >> PASSWORD;
while (PASSWORD!=password) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
cout << "输入的当前密码错误!,请重新输入:" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
cin >> PASSWORD;
}
char repassword[20];
cout << "请您输入修改后的密码:" << endl;
cin >> repassword;
string t = repassword;//字符数组可以直接赋值给字符串,即可直接将字符数组转换为字符串,而不存在将字符串直接转换成字符数组的函数
cout << "请您再次输入修改后的密码:" << endl;
cin >> repassword;
for (int i = 0; i < strlen(repassword); i++) {
if (repassword[i] == repassword[0]) {
number += 1;
}
}
if (number==strlen(repassword)) {
flag = false;
}
else {
flag = true;
}
number = 0;
if (t==repassword&&strlen(repassword)>=6&&flag){//字符串长度函数
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout <<"修改秘密成功!修改后的密码为:"<<repassword<<endl;
cout << "即将跳转到上一界面......" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
password = repassword;
Sleep(2000);
system("cls");
return true;
}
else {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED);
cout << "输入的新密码不符合要求,修改失败,请重新再试!" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
return false;
}
}
string b = "-1";
private:
string USER_NAME;
string PASSWORD;
string user_name = "123456";
string password = "123456";
bool flag;
int number = 0;
};
class Access_Money {
public:
Access_Money() {
ifstream f1;//创建一个文件输入流对象
string a;
f1.open("a.txt",ios::in);//进行初始化
f1 >> a;//将a.txt文件中的数据读入到字符串a中
Money = atoi((a).c_str());//将字符串类型的数据转换为int类型
}
void Show_Page() {
cout << "------------------------进行存取款操作-----------------------------------" << endl;
cout << "| 【0】退出系统 |" << endl;
cout << "| 【1】进行存款 |" << endl;
cout << "| 【2】进行取款 |"<< endl;
cout << "| 【3】查询余额 |" << endl;
cout << "-------------------------------------------------------------------------" << endl;
cout << "请输入【0-3】:" << endl;
cin >> c;
while (!(this->c == "1" || this->c == "2" || this->c == "3"||this->c == "0")) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED);
cout << "您输入的值有误!请重新输入: " << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
cin >> c;
}
}
string c = "-1";
void Add_Money() {
ofstream f2;//创建一个文件输出流
f2.open("a.txt",ios::out);//初始化对象
cout<<"请您输入要存入的金额:"<<endl;
cin >> money;
Money += money;
f2 << Money;//将Money的值写入到文件a中
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout << "您已成功存入" << money << "元" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}
void Cut_Money() {
ofstream f2;
f2.open("a.txt", ios::out);
cout << "请您输入要取出的金额(取款的金额必须为100的整数倍):" << endl;
cin >> money;
while ((money%100)!=0||money>5000) {
if (((money % 100) != 0)&&(money<5000)) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED);
cout << "取款金额必须为100的整数倍!请重新输入取款金额:" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
cin >> money;
}
if (money > 5000) {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED);
cout << "单次取款金额必须小于5000元!请重新输入取款金额:" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
cin >> money;
}
}
count += money;
if (count<=5000&&Money>=0) {
Money -= money;
f2 << Money;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
cout << "您已成功取出:" << money << "元" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}
else {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY |FOREGROUND_RED);
cout << "取款总金额已超过5000元,取款失败!" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}
}
void Query_Money() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN );
cout << "您的银行账户余额为:"<<Money <<"元"<< endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED);
}
private:
int count = 0;
int money = 0;
int Money;
};
class Function {
public:
static void fac(Login& m, Pages& n) {
if (n.a == "1") {
if (m.b == "1") {
m.Judge();
}
if (m.b == "2") {
bool flag = false;
while (!flag) {
flag = m.Exchange_Password();
}
m.Show_Page1();
fac(m,n);
}
if (m.b == "0") {
n.Show_End();
}
}
}
static void func(Login& a, Access_Money& b,Pages& c) {
if (a.b == "1") {
b.Show_Page();
if (b.c == "1") {
b.Add_Money();//进行存款的操作
}
if (b.c == "2") {
b.Cut_Money();//进行取款操作
}
if (b.c == "3") {
b.Query_Money();//进行查询余额操作
}
if (b.c == "0") {
c.Show_End();
}
}
}
};
class ATM {
public:
ATM(Pages& page, Login login, Access_Money access) {
page.Show_Start();//先展示开始界面
if (page.a=="1") {
system("cls");//如果输入1则进行清屏操作
}
switch (atoi((page.a).c_str())) { //使用atoi函数将字符串类型的数据转换为int类型
case 0: page.Show_End(); break;
case 1: login.Show_Page1(); break;//如果输入的a的值为1,则展示登陆页面
case 2: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout << "制作人: 云中墨客" << endl; break;
}
Function::fac(login, page)
;//运用条件语句根据不同的值来进行不同的操作
if (page.a == "1") {
system("cls");
}
while (login.b == "1") {
if (access.c == "0")
break;
Function::func(login, access, page);
}
}
};
int main(){
Pages page;
Login login;
Access_Money access;
ATM atm(page,login, access);
return 0;
}
运行结果如下图:
写好的ATM 柜员机系统即可运行,因为是刚改几次的原因,一些细节方面的内容未考虑到,代码中修改秘密的部分存在一些问题,没来的及改正,但基本的功能都可以实现,由于是第一次写博客存在一些问题,欢迎大家前来指正与评论,一起交流学习!
更多推荐
所有评论(0)