C++控制台制作ATM机[通俗易懂]

C++控制台制作ATM机[通俗易懂]文章目录题目代码实现所需要头文件Card类Bankcard类ATM类ATM类函数的声明主函数题目在控制台编程中共设置了三个类,ATM类、Card类和Bankcard类,设计函数实现登录、查询、修改密码、取款、存款、转账以及退出系统等功能。程序分别从MFC控件和c++控制台实现。同时在要求的基础之上,进行了部分仿ATM的优化,例如在登陆界面输入错误三次就会冻结账号退出系统,在MFC对话框中加入图…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

题目

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

最近比较忙,结果我也就不在这展示了
整个项目可以自行整合,也可以在我下载我上传的

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170913.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 134. 加油站(前缀和+单调队列|贪心)「建议收藏」

    134. 加油站(前缀和+单调队列|贪心)「建议收藏」在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入: gas = [1,2,3,4,5]cost = [3,4,5,1,2]输

    2022年8月8日
    7
  • Python使用pandas读取excel表格数据

    Python使用pandas读取excel表格数据导入importpandasaspd若使用的是Anaconda集成包则可直接使用,否则可能需要下载:pipinstallpandas读取表格并得到表格行列信息df=pd.read_excel(‘test.xlsx’)height,width=df.shapeprint(height,width,type(df))表格如下:得到如下输出,为一个4行5列的数据块:…

    2022年6月28日
    56
  • Pytest(1)安装与入门「建议收藏」

    Pytest(1)安装与入门「建议收藏」pytest介绍pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。根据pytest的官方网站介绍,它

    2022年7月29日
    5
  • 搭建nginx rtmp流媒体服务器(超详细)_nginx rtmp 集群

    搭建nginx rtmp流媒体服务器(超详细)_nginx rtmp 集群简单的直播搭建流程本微博在借鉴其他大牛之后,觉得应该写一个直播的完整流程,虽然简单,但是会有一个宏观感受:搭建nginx服务器工具:nginx下载地址:https://nginx.org/download/nginx-1.13.6.zipnginx-rtmp-module-master.zip下载地址:https://github.com/arut/nginx-rtmp-mo

    2022年9月2日
    5
  • mysql查找最后一条记录_mysql查询记录总数

    mysql查找最后一条记录_mysql查询记录总数首先要确定什么是最后一条。是编辑时间最新的为最后一条,还是某个字段数字最大的未最后一条。比如以时间最大为最后一条,则将符合条件的资料都筛选出来,再按时间排序,再取一笔资料。SQL如下:selecta,bfromtablewherea&gt;’某个时间’orderbyadesclimit1(上面SQL中a为时间)。用max(time)查询方可!!…

    2025年10月2日
    3
  • Python递归详解

    Python递归详解递归的依据在数学中,其实就是数学中的数学归纳法。一、数学归纳法什么是数学归纳法?最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步:证明当n=1时命题成立。假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。(m代表任意自然数)这种方法的原理在于:首先证明在某个起点值时命题成立,然后证明从一个值到下一个值的过程有效。当这两点都已经证明…

    2022年6月17日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号