Java实现ATM银行模拟系统(含完整代码)

article/2025/8/20 16:38:29

目录

引言

功能简介

登录和注册

1、注册 

2、登录

具体功能实现 

1、存款功能 

2、取款功能 

3、转账功能 

4、查询功能 

 5、注销账号

 6、修改密码

 7、退出

完整代码 


引言

🏧🏧🏧本文主要介绍了如何通过Java实现ATM银行模拟系统,主要目的是为了能够对之前所学知识做一个简单的总结、更好的巩固一下。本次代码主要使用的是循环语句、方法、集合、类、API等知识。

🔥🔥🔥好了,废话不多说,直接开始看代码吧!

功能简介

😀😀😀首先是创建两个Java文件,一个文件用于各种功能的实现,另一个用于储存客户的信息类。该银行模拟系统首先能够实现的是登录注册的实现,随后在注册成功并实现登录以后,呈现出各个可实现的功能页面,这些功能主要分为七个,分别是:“存款、取款、转账、查询、注销账号、修改密码、退出”。接下来就对这些功能详略得当地进行讲解。 

登录和注册

 本块代码主要通过三个方法实现,分别是主菜单、登录、注册。

📖主菜单

通过简单的循环语句实现主菜单页面,各个功能实现过后重新返回主菜单页面

public static void main_menu(ArrayList<Account> b,Scanner sc){while (true){System.out.println("------------------------");System.out.println("1、登录账户");System.out.println("2、注册账号");System.out.println("------------------------");System.out.println("请选择你任意一个功能:");int choice = sc.nextInt();switch (choice) {case 1 -> login(b,sc);case 2 -> enroll(b,sc);}}}

1、注册 

🧧注册

在注册功能中,主要注册四个信息,分别是“账户、密码、可控制额度(在转账或者提现的最高限额)、银行卡号”,前面三个只需要为其赋值即可实现,银行卡号的随机生成才是重中之重,这里来着重讲解:首先进入while循环,定义字符串num用于获取卡号,通过一个简单的for循环获取六位随机生成的0到9的数字,生成号银行卡号之后,需要对银行卡号查重,首先判断集合中是否存有其他账户,若没有,则可以直接生成银行卡号,反之则需要将新生成的卡号与其他卡号一一比较,若出现重复,则重新随机生成银行卡号,反之则退出循环,将该账户的所有信息添加进集合中。

public static void enroll(ArrayList<Account> b,Scanner sc){                   //注册Account a = new Account();System.out.println("账户:");a.setName(sc.next());System.out.println("密码:");a.setPwd(sc.next());System.out.println("可控制额度:");a.setLine(sc.nextInt());Random r = new Random();boolean flag = true;while (flag) {String num = "";for (int i = 0; i < 6; i++) {int count = r.nextInt(0, 10);num += count;}if (b.size()>0) {for (int j = 0; j < b.size(); j++) {if (num.equals(b.get(j).getNum())) {flag = true;} else {flag = false;a.setNum(num);System.out.println("您的银行卡号是:" + num);}}}else {flag=false;a.setNum(num);System.out.println("您的银行卡号是:" + num);}}b.add(a);}

2、登录

🏝️登录

通过方法获取集合b,并在代码头部位置通过b.size()判断集合中是否存有数据(即有无账户),若有账户,则进入while循环,先进行账户名的判断,通过count与b.size()比较,判断是否还有可判断的账户名,若没有则显示“账户名错误!请重新输入:”(判断失败一次,count自增1,直到count与b.size()相等的情况下),若有账户名,则通过API中的equala()函数对字符串进行比较,用户名正确则进入while循环中判断密码是否正确,不正确则重新输入密码,正确则跳转至Menu()函数。

public static void login(ArrayList<Account> b, Scanner sc){                    //登录int count = 0;if(b.size()==0){System.out.println("Sry,该系统中还没有账户");}else {while (true) {while (count < b.size()) {System.out.println("账户名:");String name = sc.next();for (int i = 0; i < b.size(); i++) {Account a = b.get(i);if (a.getName().equals(name)) {while (true) {System.out.println("密码:");String pwd = sc.next();if (pwd.equals(a.getPwd())) {System.out.println("登录成功!");Menu(b,a,sc);} else {System.out.print("密码错误!请重新输入:");}}} else {count++;if (count == b.size()) {System.out.print("账户名错误!请重新输入:");}}}}}}}

具体功能实现 

✨功能展览页面 

public static void Menu(ArrayList<Account> b,Account a,Scanner sc){                            //菜单System.out.println("------------------------");System.out.println("1、存款");System.out.println("2、取款");System.out.println("3、转账");System.out.println("4、查询");System.out.println("5、注销账号");System.out.println("6、修改密码");System.out.println("7、退出");System.out.println("------------------------");int choice = sc.nextInt();switch (choice){case 1 ->savings(b,a,sc);case 2 ->withdrawal(b,a,sc);case 3 ->transfer(b,a,sc);case 4 ->view(b,a,sc);case 5 ->logout(b,a,sc);case 6 ->change(b,a,sc);case 7 -> exit(b,a,sc);}}

1、存款功能 

💰存款 

通过简单的输入语句即可实现

public static void savings(ArrayList<Account> b,Account a,Scanner sc){                  //存款System.out.println("请输入存款金额:");int count = sc.nextInt();a.setBalance(a.getBalance()+count);System.out.println("存款成功:"+count);System.out.println("该账户的余额为:"+a.getBalance());Menu(b,a,sc);}

2、取款功能 

🤑取款

在取款功能中主要通过两个if语句实现对“余额是否足够”、“是否超出可控制额度”判断,只有在二者均实现的情况下,才可以完成取款功能。

public static void withdrawal(ArrayList<Account> b,Account a,Scanner sc){               //取款boolean flag = true;while (flag) {System.out.println("请输入取款金额:");int count = sc.nextInt();if (count > a.getBalance()) {System.out.println("不好意思您没有这么多的钱");} else {if(count>a.getLine()){System.out.println("超出可控制余额!");}else {a.setBalance(a.getBalance() - count);System.out.println("取款成功:" + count);System.out.println("该账户的余额为:" + a.getBalance());Menu(b, a, sc);}}}}

3、转账功能 

🧧转账

首先通过一个if语句判断是否系统中有第二个账户可供转账,若没有则直接跳转至Menu()页面,进入转账页面之后,通过与输入的账户卡号比较,若未查询到,则重新跳转至Menu()页面,若查询到,则输出此账户的账户名(遮挡住姓氏),通过对姓氏的确认来判断转账目标是否正确,不正确则重新输入。之后的代码则与取款有异曲同工之妙。

public static void transfer(ArrayList<Account> b,Account a,Scanner sc) {                 //转账if (b.size() == 1) {System.out.println("该系统中没有可供转账的账户!");Menu(b, a, sc);}int count1 = 1;System.out.println("请输入要转账的账户:");String num = sc.next();boolean flag1 = true;boolean flag2 = true;for (int i = 0; i < b.size(); i++) {if (b.get(i).getNum().equals(num)) {Account c = b.get(i);String str1 ="*";str1 += c.getName().substring(1);System.out.println("查询到"+str1+"的客户");while (flag1) {System.out.println("输入该客户的姓氏以确定目标正确:");char str2 = sc.next().charAt(0);if (str2 == c.getName().charAt(0)) {System.out.println("客户目标正确!");flag1 = false;} else {System.out.println("客户目标错误!");}}while (flag2) {System.out.println("输入转账金额:");int count = sc.nextInt();if (count > a.getBalance()) {System.out.println("不好意思您没有这么多的钱");}else {if(count>a.getLine()){System.out.println("超出可控制余额!");}else {flag2 =false;c.setBalance(c.getBalance()+count);a.setBalance(a.getBalance()-count);System.out.println("转账成功:"+count);}}}}else {count1+=1;if(count1==b.size()){System.out.println("查无此人");}}}Menu(b, a, sc);}

4、查询功能 

ℹ️查询

public static void view(ArrayList<Account> b,Account a,Scanner sc){                     //查询System.out.println("账户:"+a.getName());System.out.println("余额:"+a.getBalance());System.out.println("可控制余额:"+a.getLine());System.out.println("卡号:"+a.getNum());Menu(b, a, sc);}

 5、注销账号

😐注销 

通过集合中remove函数实现对账户的删除

public static void logout(ArrayList<Account> b,Account a,Scanner sc){                   //注销账号b.remove(a);System.out.println("注销成功!");Menu(b, a, sc);}

 6、修改密码

😟修改密码 

修改密码的时候,通过比较两次密码是否一致来确定修改是否成功

public static void change(ArrayList<Account> b,Account a,Scanner sc){                   //修改密码System.out.println("输入要修改的密码:");String pwd1 = sc.next();boolean flag = true;while (flag){System.out.println("确认密码:");String pwd2 = sc.next();if (pwd1.equals(pwd2)){flag=false;System.out.println("修改成功!");}else{System.out.println("密码有误!");}}Menu(b, a, sc);}

 7、退出

😭退出 

无需多言,直接返回至菜单界面

public static void exit(ArrayList<Account> b,Account a,Scanner sc){                     //退出main_menu(b,sc);}
}

创作不易给个三连吧 

完整代码 

menu.java 

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class menu {public static void main(String[] args) {ArrayList<Account> Accounts = new ArrayList<>();Scanner sc = new Scanner(System.in);main_menu(Accounts,sc);}public static void main_menu(ArrayList<Account> b,Scanner sc){while (true){System.out.println("------------------------");System.out.println("1、登录账户");System.out.println("2、注册账号");System.out.println("------------------------");System.out.println("请选择你任意一个功能:");int choice = sc.nextInt();switch (choice) {case 1 -> login(b,sc);case 2 -> enroll(b,sc);}}}public static void Menu(ArrayList<Account> b,Account a,Scanner sc){                            //菜单System.out.println("------------------------");System.out.println("1、存款");System.out.println("2、取款");System.out.println("3、转账");System.out.println("4、查询");System.out.println("5、注销账号");System.out.println("6、修改密码");System.out.println("7、退出");System.out.println("------------------------");int choice = sc.nextInt();switch (choice){case 1 ->savings(b,a,sc);case 2 ->withdrawal(b,a,sc);case 3 ->transfer(b,a,sc);case 4 ->view(b,a,sc);case 5 ->logout(b,a,sc);case 6 ->change(b,a,sc);case 7 -> exit(b,a,sc);}}public static void login(ArrayList<Account> b, Scanner sc){                    //登录int count = 0;if(b.size()==0){System.out.println("Sry,该系统中还没有账户");}else {while (true) {while (count < b.size()) {System.out.println("账户名:");String name = sc.next();for (int i = 0; i < b.size(); i++) {Account a = b.get(i);if (a.getName().equals(name)) {while (true) {System.out.println("密码:");String pwd = sc.next();if (pwd.equals(a.getPwd())) {System.out.println("登录成功!");Menu(b,a,sc);} else {System.out.print("密码错误!请重新输入:");}}} else {count++;if (count == b.size()) {System.out.print("账户名错误!请重新输入");}}}}}}}public static void enroll(ArrayList<Account> b,Scanner sc){                   //注册Account a = new Account();System.out.println("账户:");a.setName(sc.next());System.out.println("密码:");a.setPwd(sc.next());System.out.println("可控制额度:");a.setLine(sc.nextInt());Random r = new Random();boolean flag = true;while (flag) {String num = "";for (int i = 0; i < 6; i++) {int count = r.nextInt(0, 10);num += count;}if (b.size()>0) {for (int j = 0; j < b.size(); j++) {if (num.equals(b.get(j).getNum())) {flag = true;} else {flag = false;a.setNum(num);System.out.println("您的银行卡号是:" + num);}}}else {flag=false;a.setNum(num);System.out.println("您的银行卡号是:" + num);}}b.add(a);}public static void savings(ArrayList<Account> b,Account a,Scanner sc){                  //存款System.out.println("请输入存款金额:");int count = sc.nextInt();a.setBalance(a.getBalance()+count);System.out.println("存款成功:"+count);System.out.println("该账户的余额为:"+a.getBalance());Menu(b,a,sc);}public static void withdrawal(ArrayList<Account> b,Account a,Scanner sc){               //取款boolean flag = true;while (flag) {System.out.println("请输入取款金额:");int count = sc.nextInt();if (count > a.getBalance()) {System.out.println("不好意思您没有这么多的钱");} else {if(count>a.getLine()){System.out.println("超出可控制余额!");}else {a.setBalance(a.getBalance() - count);System.out.println("取款成功:" + count);System.out.println("该账户的余额为:" + a.getBalance());Menu(b, a, sc);}}}}public static void transfer(ArrayList<Account> b,Account a,Scanner sc) {                 //转账if (b.size() == 1) {System.out.println("该系统中没有可供转账的账户!");Menu(b, a, sc);}int count1 = 1;System.out.println("请输入要转账的账户:");String num = sc.next();boolean flag1 = true;boolean flag2 = true;for (int i = 0; i < b.size(); i++) {if (b.get(i).getNum().equals(num)) {Account c = b.get(i);String str1 ="*";str1 += c.getName().substring(1);System.out.println("查询到"+str1+"的客户");while (flag1) {System.out.println("输入该客户的姓氏以确定目标正确:");char str2 = sc.next().charAt(0);if (str2 == c.getName().charAt(0)) {System.out.println("客户目标正确!");flag1 = false;} else {System.out.println("客户目标错误!");}}while (flag2) {System.out.println("输入转账金额:");int count = sc.nextInt();if (count > a.getBalance()) {System.out.println("不好意思您没有这么多的钱");}else {if(count>a.getLine()){System.out.println("超出可控制余额!");}else {flag2 =false;c.setBalance(c.getBalance()+count);a.setBalance(a.getBalance()-count);System.out.println("转账成功:"+count);}}}}else {count1+=1;if(count1==b.size()){System.out.println("查无此人");}}}Menu(b, a, sc);}public static void view(ArrayList<Account> b,Account a,Scanner sc){                     //查询System.out.println("账户:"+a.getName());System.out.println("余额:"+a.getBalance());System.out.println("可控制余额:"+a.getLine());System.out.println("卡号:"+a.getNum());Menu(b, a, sc);}public static void logout(ArrayList<Account> b,Account a,Scanner sc){                   //注销账号b.remove(a);System.out.println("注销成功!");Menu(b, a, sc);}public static void change(ArrayList<Account> b,Account a,Scanner sc){                   //修改密码System.out.println("输入要修改的密码:");String pwd1 = sc.next();boolean flag = true;while (flag){System.out.println("确认密码:");String pwd2 = sc.next();if (pwd1.equals(pwd2)){flag=false;System.out.println("修改成功!");}else{System.out.println("密码有误!");}}Menu(b, a, sc);}public static void exit(ArrayList<Account> b,Account a,Scanner sc){                     //退出main_menu(b,sc);}
}

Account.java 

public class Account {private String name;private String pwd;private int balance=0;//余额private int line;//可控制额度private String num;public Account() {}public Account(String name, String pwd, int balance, int line,String num) {this.name = name;this.pwd = pwd;this.balance = balance;this.line = line;this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public int getBalance() {return balance;}public void setBalance(int balance) {this.balance = balance;}public int getLine() {return line;}public void setLine(int line) { this.line = line; }public String getNum() { return num;}public void setNum(String num) { this.num = num; }
}


http://chatgpt.dhexx.cn/article/eojDIXjD.shtml

相关文章

ATM系统

ATM系统 1、简介 ATM系统包含两个菜单栏&#xff0c;一个是登录、注册菜单栏&#xff0c;一个时是功能菜单栏。 ATM系统共有四个功能&#xff1a;   充值功能&#xff1a;用户登录成功后可以为本账户充值&#xff08;存款&#xff09;。   转账功能&#xff1a;用户登录后可…

银行卡在哪个银行都能取款吗?

银行卡要想取款&#xff0c;分两种情况。 第一种情况是在银行窗口取款&#xff0c;你是哪个银行的银行卡&#xff0c;就得在哪个银行取款&#xff0c;在不同的银行窗口是办理不了的&#xff0c;比如你的卡是工商银行的&#xff0c;你去建设银行窗口是取不了现金的。 第二种情况…

ATM取款机系统

模拟银行实现ATM机取款系统 该系统使用( ( (SQLServer) ) )数据库 功能介绍&#xff1a; 开户&#xff08;到银行填写开户申请单&#xff09;取钱存钱查询余额转账 根据需求设计相对应的数据库概念模型 流程分步详解 1 创建数据库Bank_db --创建数据库 CREATE DATABASE B…

银行ATM活动图

一、 图形文档 1. 密码验证活动图 2. 取款活动图 3. 存款活动图 4. 转账活动图 5. 查询活动图 6. 改密活动图 7. ATM管理员操作活动图 二、 文字说明 1、密码验证活动图 描述银行主机密码验证的过程&#xff0c;包含的动作有&#xff1a;插卡、提示输入密码、输入密码、密…

银行ATM系统——分析类图及文档

一、图形文档 从不同角度出发&#xff0c;可以得出的分析类图有以下两种&#xff1a; 基于类的责任得出的分析类图 基于用况驱动得出的分析类图 二、 文字说明 1、 类图综述 银行ATM分析类类图主要包括实体类&#xff0c;描述了类与类之间的关系&#xff0c;以及说明类有何…

支付平台--清结算流程详解及对账详解

图为清算对账流程 在第三方支付平台拿到银行&#xff08;应该走专线&#xff09;给的对账文件后&#xff0c;会有手动对账和自动对账功能。 手动对账是对自动对账的补充&#xff0c;在自动对账出现问题或者出现差错时再人工介入进行重新对账的操作。 而在很多的情况下&#xf…

数商云采购管理系统支付结算功能详解,实现建筑工程企业采购业务智能化管理

建筑工程行业企业过去受技术、场地等限制&#xff0c;一直采用传统的采购方式&#xff0c;再加上整个行业内部信息相对割裂、采购面临层层传播、中间沟通亦面临多层税费等问题&#xff0c;为建筑工程采购工作增添了不少困难。随着互联网时代的发展&#xff0c;在大数据、云计算…

【支付架构】跨境支付

目录 1 业务介绍 1.1 什么是跨境支付 1.2 跨境支付发展历程 2 技术实现 2.1 业务流程 2.2 交互设计 简单地说&#xff0c;跨境支付指的是两个或两个以上的国家或地区因国际贸易所产生的债券&#xff0c;再借助一定的支付方式与结算工具&#xff0c;实现资金能够跨国…

国际业务结算

国际结算 国际结算(International Settlement)&#xff1a;指处于两个不同国家的当事人&#xff0c;&#xff08;因为商品买卖、服务供应、资金调拨、国际借贷&#xff09;通过银行办理的两国间货币收付业务。 信用证 信用证是一种有条件的银行付款承诺&#xff0c;是开证行…

支付清结算之账户和账务处理(详解)

本文重点介绍清结算中的账户和账务的处理。正文开始前可复习《支付清结算之基本概念和入门》和《支付清结算之渠道侧处理》&#xff0c;以便理解这里的流程。 目录 一、账户体系 1、资产类账户 2、负债类账户 3、所有者权益类账户 4、损益类账户 5、成本类账户 6、共同…

电商平台资金结算流程是什么样的?

&#xff08;图源&#xff1a;pexels网站&#xff09; 在疫情的影响下&#xff0c;越来越多的传统企业开始转向电商&#xff0c;希望通过互联网来拓展业务&#xff0c;开拓新市场。同时&#xff0c;也有越来越多的新兴企业从事电子商务&#xff0c;利用互联网的优势快速发展壮…

支付清结算之账户和账务处理

这是清结算系列的第四篇文章&#xff0c;本文重点介绍清结算中的账户和账务的处理。 请务必阅读这几篇文章以便理解这里的流程。 支付清结算之基本概念和入门支付清结算之渠道侧处理支付清结算之电商侧处理 一、账户体系 在设计清结算系统前&#xff0c;首先需要完成账户体系…

经济法基础(2020年)——第三章 支付结算法律制度

第一节 支付结算概述 支付结算概述 未经中国人民银行批准的非银行金融机构和其他单位不得作为中介机构办理支付结算业务 支付结算工具和原则 传统的人民币非现金支付工具 三票一卡 汇票、本票、支票和银行卡结算方式 汇兑、托收承付和委托收款 原则 恪守信用、履行付款原…

电子支付与结算总结

电子支付与结算总结 第一章 电子支付概述名词解释简答题选择判断题 第二章 支付工具与支付方式名词解释简答题 第三章 网上银行支付名词解释简答题 第四章 电话支付名词解释简答题 第五章 移动支付名词解释简答题讨论题视频 第六章 自助银行支付名词解释简答题讨论题 第七章 跨…

中国支付结算系统发展简史

中国支付结算系统发展史 1949年到今天&#xff0c;中国支付结算系统经历了3个重要的阶段&#xff0c;从无到有&#xff0c;从简单到完善。今天中国的现代支付系统加上各个商业银行内部系统作为基础设计&#xff0c;支撑着第三方支付系统&#xff0c;让我们享受着不需要现金以及…

一张美团外卖的小票看透支付清结算架构!

见字如面&#xff0c;我是军哥&#xff01; 我很少推荐别人的公众号&#xff0c;因为我能看上的原创公众号并不多&#xff0c;让我主动推荐就更难了。 今天这位朋友叫宇宙&#xff0c;认识有两年了&#xff0c;在支付行业里非常有名气&#xff0c;最近闲着无聊翻了他多篇原创文…

支付 VS 清算 VS 结算

概念 标准定义 支付&#xff1a; 完成付款人向收款人转移可以接受的货币债权的过程&#xff0c;包括交易过程、清算过程和结算过程等三个过程&#xff08;一个完整的支付过程&#xff0c;清算和结算都属于支付的某个环节&#xff09;&#xff1b;清算&#xff1a; 包含了在收…

第三方支付平台结算流程是什么样的?

在电商发展的初期曾遇到过一个瓶颈&#xff0c;那就是买卖双方对彼此互不信任&#xff0c;互联网市场中的交易是无形的&#xff0c;大家对对方的信息一无所知&#xff0c;买家害怕自己给了钱没收到货&#xff0c;卖家害怕自己给了货没收到钱&#xff0c;由于缺少这种信任&#…

支付结算系统

不同银行之间 以支付的手段达到结算的目的 所有银行在中国人民银行开 人民银行清算账户&#xff0c;在这个账户存款 用于资金清算通过 人民银行支付系统&#xff08;二代支付系统&#xff09; / 城商行支付系统 等在银行账户间转账结算 文章目录 清算账户管理系统大额支付系统…

支付清结算介绍

清结算定义 交易 - 交易过程包括了支付产生&#xff0c;确认和发送&#xff0c;特别是交易有关各方身份的确认以及支付工具能力的确认。 清算 - 是收付双方之间交换支付工具或相关支付信息&#xff0c;清讫债权债务关系的过程和方法。支付工具的交换包括了交易撮合&#xff0c;…