目录
引言
功能简介
登录和注册
1、注册
2、登录
具体功能实现
1、存款功能
2、取款功能
3、转账功能
4、查询功能
5、注销账号
6、修改密码
7、退出
完整代码
引言
本文主要介绍了如何通过Java实现ATM银行模拟系统,主要目的是为了能够对之前所学知识做一个简单的总结、更好的巩固一下。本次代码主要使用的是循环语句、方法、集合、类、API等知识。
好了,废话不多说,直接开始看代码吧!
功能简介
首先是创建两个Java文件,一个文件用于各种功能的实现,另一个用于储存客户的信息类。该银行模拟系统首先能够实现的是登录和注册的实现,随后在注册成功并实现登录以后,呈现出各个可实现的功能页面,这些功能主要分为七个,分别是:“存款、取款、转账、查询、注销账号、修改密码、退出”。接下来就对这些功能详略得当地进行讲解。
登录和注册
本块代码主要通过三个方法实现,分别是主菜单、登录、注册。
主菜单
通过简单的循环语句实现主菜单页面,各个功能实现过后重新返回主菜单页面
public static void main_menu(ArrayList 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 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 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 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 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 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 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 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 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 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 b,Account a,Scanner sc){ //注销账号 b.remove(a); System.out.println("注销成功!"); Menu(b, a, sc); }
6、修改密码
修改密码
修改密码的时候,通过比较两次密码是否一致来确定修改是否成功
public static void change(ArrayList 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 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 Accounts = new ArrayList(); Scanner sc = new Scanner(System.in); main_menu(Accounts,sc); } public static void main_menu(ArrayList 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 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 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 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 0) { for (int j = 0; j 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 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 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 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 b,Account a,Scanner sc){ //注销账号 b.remove(a); System.out.println("注销成功!"); Menu(b, a, sc); } public static void change(ArrayList 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 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; }}