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;
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • iview中 on-row-click 事件[通俗易懂]

    iview中 on-row-click 事件[通俗易懂]点击表格当前行 显示数据 <!– 给表格绑定on-row-click 事件 –> <Table :columns=”columns” :data=”list1″ @on-row-click=”showDetail”></Table>————————————————————————————————sho…

  • java filestream_java FileStream文件流操作

    java filestream_java FileStream文件流操作直接上代码,函数使用说明详见JavaAPI文档importjava.io.*;publicclassStreamDemo{publicstaticvoidmain(String[]args){Filef=newFile(“F:\\workspace\\JavaPrj\\test.txt”);FileOutputStreamout=null;try{out=newFileOu…

  • DFS(深度优先搜索算法)「建议收藏」

    DFS(深度优先搜索算法)「建议收藏」基本概念深度优先搜索算法(DepthFirstSearch,简称DFS):一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。算法思想回溯法(探索与回溯法…

  • es6数组的flat()方法

    es6数组的flat()方法Array.prototype.flat()flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。Array.prototype.flat()用于将嵌套的数组“扁平化”,将二维数组变成一维数组。该方法返回一个新数组,对原数据没有影响。语法:varnewArray=arr.flat([depth])参数:depth可选,指定要提取嵌套数组的结构深度,默认值为1。返回值:一个包含数组与子数组中所有元素的新数组。示例:var

  • 【☠️️社死现场の老板来了☠️️】小伙,搞C语言嵌入式开发这么久了,还不知道u8、u16、u32、s8、s16、s32是什么意思啊?

    【☠️️社死现场の老板来了☠️️】小伙,搞C语言嵌入式开发这么久了,还不知道u8、u16、u32、s8、s16、s32是什么意思啊?首先开门见山:u8是unsignedchar,u16是unsignedshort,u32是unsignedlong;s8是signedchar,s16是signedshort,s32是signedlong。然后娓娓道来:显而易见,u就是unsigned的缩写,s就是signed的缩写,8就表示8个二进制位(一个字节),16就表示16个二进制位(两个字节),32就表示32个二进制位(四个字节)。这样写的目的,是为了提高跨平台的移植性与兼容性。不同平台数据类型定义都不尽相同,一套代码要想.

    2022年10月16日
  • excel 同时冻结首列和首行_word怎么一列求平均值

    excel 同时冻结首列和首行_word怎么一列求平均值之前ytkah只知道excel可以冻结首行或首列,但还不清楚如何同时冻结excel首行和首列,后面看到小C的报表,问了他才明白怎么操作。首先,我们先把选中B2单元格,点击导航菜单的“视图”-“冻

发表回复

您的电子邮箱地址不会被公开。

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