//ATMUISupport.java
package atm.bank.ui;
import atm.bank.SystemEnter;
import atm.bank.controller.account.AccountInfoConntrol;
import atm.bank.controller.bank.ATMController;
import atm.bank.domain.ATM;
import atm.bank.domain.AccountInfo;
import atm.bank.util.tools.BasicTools;
import java.math.BigDecimal;
import java.util.Map;
import java.util.Scanner;
/**
* ATM 画系界面组件类
* @author Administrator
*
*/
public class ATMUISupport {
/**
* 输出系统欢迎界面
*/
public static void drawingWelcomeUI(){
System.out.println("**********************************************");
System.out.println("**********************************************");
System.out.println("*********** 欢迎使用 ["+SystemEnter.atmSys.getBank().getName()+"] ATM系统************");
System.out.println("*********** 此系统已经与报警中心联网 ***************");
System.out.println("*********** 如果你遇到危险时请按下报警按钮***********");
System.out.println("****************<<无卡 无存折>>*****************");
System.out.println("**********************************************");
if(SystemEnter.atmSys.getAccount() == null)
drawingInsertCardUI();
}
/**
* 输出插入银行卡界面
*/
public static void drawingInsertCardUI(){
System.out.println("//");
System.out.println("// 请插入银行卡 /");
System.out.println("//");
String cardNum = BasicTools.getScanner().next();
AccountInfoConntrol accountCtrl = new AccountInfoConntrol();
/* 调用方法实现验证卡号是否正确*/
AccountInfo account = accountCtrl.validdateAccountInfo(cardNum);
if(account == null){// 卡无效
System.out.println("您的银行卡是无效的");
drawingPullOutUI();// 退卡
}else{// 银行卡有效
if(account.getFrozen() == 1){// 如果卡被锁定
System.err.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.err.println("!!!!!!!!!!! 此卡处于锁定状态,请退卡 !!!!!!!!!!!!");
System.err.println("!!!! 如需解锁,请本人持有效证件到本行柜台办理 !!!!!!");
System.err.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
drawingPullOutUI();// 退卡,返回欢迎界面
}else{
SystemEnter.atmSys.setAccount(account);// 设置为ATM中正在操作的卡
drawingEnterPasswordUI();// 调用提示用户输入密码方法
}
}
}
/**
* 输出提示用户输入密码界面
*/
public static void drawingEnterPasswordUI(){
int flag = 0;// 标志
while(true){// 循环处理用户密码输入及选择退卡
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
System.out.println(">>>>>>>>> 继续请输入1 退卡请输入0 >>>>>>>>>>");
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
Scanner input = BasicTools.getScanner();
String action = input.next();
if(action.trim().equals("1")){// 用户选择继续,输入密码
System.out.println("************ 请输入6位数字密码 **************");
String password = input.next();
if(!BasicTools.validDig(password) || password.length() != 6){// 密码格式不正确
System.out.println("*********** 系统提示:密码必需是6位数字 *****************");
continue;// 结束本次循环
}else{// 输入密码合格
/* 执行数据库密码验证*/
AccountInfoConntrol controller = new AccountInfoConntrol();
int res = controller.validatePassword(SystemEnter.atmSys.getAccount().getAccount(),
Integer.parseInt(password));
if( res == 1){// 验证密码通过
break; // 跳出整个while循环
}else{// 如果密码验证失败
SystemEnter.atmSys.modifyPasswordInputErrorNum();
System.out.println("##########################################");
System.out.println("########## 系统提示 密码不正确 ###########");
System.out.println("##########################################");
if(SystemEnter.atmSys.getAccount().getPasswordEnterErrorNumber() == 2){
System.err.println("##########################################");
System.err.println("######### 您已经2次输入密码错误 ############");
System.err.println("######### 如果3次输入错误将锁定此卡 ##########");
System.err.println("##########################################");
continue;
}if(SystemEnter.atmSys.getAccount().getPasswordEnterErrorNumber() == 3){
System.err.println("##########################################");
System.err.println("######### 您已经3次输入密码不错误 ###########");
System.err.println("######### 此卡已被冻结 如果是您本人 ###########");
System.err.println("######## 请持有效证件到本行柜台办理 ###########");
System.err.println("##########################################");
/* 调用方法,锁定银行卡*/
controller.lockAccount(SystemEnter.atmSys.getAccount().getAccount());
flag = 1;
break;
}
continue;// 结束本次循环
}
}
}else{// 退卡
flag = 1;
break;
}
}
if(flag == 0)
drawingBizUI(); // 调用输出主菜单
else
drawingPullOutUI();// 返回欢迎界面
}
/**
* 打印主菜单的方法
*/
/**
* 退卡的方法
*
*/
public static void drawingPullOutUI(){
System.out.println("✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳");
System.out.println("✳✳✳✳✳✳✳✳✳✳✳请取出你的银行卡✳✳✳✳✳✳✳✳✳✳✳");
System.out.println("✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳");
System.out.println("✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳");
System.out.println("✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳✳");
SystemEnter.atmSys.setAccount(null);
drawingWelcomeUI();
}
/**
* 打印主菜单的方法
*/
private static void drawingBizUI() {
System.out.println("\n\n");
System.out.println("□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□");
if(SystemEnter.atmSys.getTotal().doubleValue()
>=SystemEnter.atmSys.getSingleWithdrawMin().doubleValue()){
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("□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□");
System.out.println("--------- 请按以上提示输入回车继续 ---------");
String action = BasicTools.getScanner().next();
confimOperation(action);//调用确认用户选择项方法
}
private static void confimOperation(String action){
switch(action){
case "1"://取款菜单
drawingWithMoneyUI();
break;
case "2"://存款菜单
drawingDepositUI();
break;
case "3"://修改密码菜单
drawingModifyPasswordyUI();
break;
case "4"://退卡
drawingPullOutUI();
break;
}
/**
* 取款菜单
*/
private static void drawingWithMoneyUI() {
Boolean bool=true;
System.out.println("1");
while (bool){
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
System.out.println("$$$$$$$$$$$$$$$ 请输入取款金额 $$$$$$$$$$$$$$$$");
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
String money=BasicTools.getScanner().next();
//验证是否是数字
if(!BasicTools.validDig(money)){
System.err.println("########## 系统提示 必需是数字 ###########");
System.err.println("##### 继续取款请输入1 返回主菜单请输入2 #####");
if("1".equals(BasicTools.getScanner().next())){
continue;//结束本次循环
}
break;
}else if(Integer.parseInt(money)%100!=0){ //验证取款金额是否大于余额
System.err.println("########## 系统提示 取款金额必需是整百数字 ###########");
System.err.println("##### 继续取款请输入1 返回主菜单请输入2 #####");
if("1".equals(BasicTools.getScanner().next())){
continue;//结束本次循环
}
break;
}else if (Double.parseDouble(money)>SystemEnter.atmSys.getTotal().doubleValue()){//验证金额大于等于金额
System.err.println("########## 系统提示 ATM 余额不足###########");
System.err.println("##### 继续取款请输入1 返回主菜单请输入2 #####");
if("1".equals(BasicTools.getScanner().next())){
continue;//结束本次循环
}
break;
}else if (Double.parseDouble(money)>
SystemEnter.atmSys.getAccount().
getBalance().doubleValue()){//验证取款金额大于等于卡余额
System.err.println("########## 系统提示 您的账号余额不足###########");
System.err.println("##### 继续取款请输入1 返回主菜单请输入2 #####");
if("1".equals(BasicTools.getScanner().next())){
continue;//结束本次循环
}
break;
}else if(Double.parseDouble(money)>SystemEnter.atmSys.getSingleDepositMax().doubleValue()){//验证取款金额大于ATM单次最高取款金额
System.err.println("########## 系统提示 单次取款金额大于ATM单次取款上限###########");
System.err.println("##### 继续取款请输入1 返回主菜单请输入2 #####");
if("1".equals(BasicTools.getScanner().next())){
continue;//结束本次循环
}
break;
}else {
//取款后修改ATM系统实例余额与ATM中银行卡余额
AccountInfoConntrol ctrl = new AccountInfoConntrol();
Map<String,Double> res = ctrl.withrawMoney(SystemEnter.atmSys.getAccount(), new BigDecimal(money));
if (res.get("res").intValue()==3){
System.out.println("☆☆☆☆☆☆☆☆ 恭喜您,本次业务交易成功! ☆☆☆☆☆☆☆☆");
System.out.println("☆☆☆☆☆☆☆ 本次取款 "+money+"元☆☆☆☆☆☆☆☆");
SystemEnter.atmSys.modifyATMBalance(new BigDecimal(money),-1);
SystemEnter.atmSys.modifyAccountBalance(new BigDecimal(money),-1);
System.out.println("ATM当前余额"+SystemEnter.atmSys.getTotal().doubleValue());
System.out.println("银行卡当前余额"+(SystemEnter.atmSys.getAccount().getBalance().doubleValue()-res.get("poundage")));
}else if (res.get("res").intValue()==-1){
System.out.println("☆☆☆☆☆☆☆☆ 本次操作时跨行取款,收取手续费后余额不足! ☆☆☆☆☆☆☆☆");
}else if (res.get("res").intValue()==-2){
System.out.println("☆☆☆☆☆☆☆☆ 每日累计取款总额已超出ATM最高上限 ☆☆☆☆☆☆☆☆");
}else if (res.get("res").intValue()==-3){
System.out.println("☆☆☆☆☆☆☆☆ 每日累计次数已超过ATM最高限制 ☆☆☆☆☆☆☆☆");
}else if (res.get("res").intValue()==-4){
System.out.println("☆☆☆☆☆☆☆☆ 每日累计取款总和超出最高限制 ☆☆☆☆☆☆☆☆");
}
break;
}
}
drawingBizUI();//返回主菜单
}
/**
* 存款菜单
*/
private static void drawingDepositUI() {
//System.out.println("存款");
while (true) {
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
System.out.println("$$$$$$$$$$$$$$$ 请输入存款金额 $$$$$$$$$$$$$$$$");
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
String money=BasicTools.getScanner().next();
if(!BasicTools.validDig(money)){
System.err.println("########## 系统提示 必需是数字 ###########");
System.err.println("##### 继续取款请输入1 返回主菜单请输入2 #####");
if("1".equals(BasicTools.getScanner())){
continue;
}
break;
}else if(Integer.parseInt(money)%100!=0){ //验证取款金额是否大于余额
System.err.println("########## 系统提示 取款金额必需是整百数字 ###########");
System.err.println("##### 继续取款请输入1 返回主菜单请输入2 #####");
if("1".equals(BasicTools.getScanner().next())){
continue;//结束本次循环
}
break;
}else {
AccountInfoConntrol ctrl=new AccountInfoConntrol();
Map<String,Double> res=ctrl.DepositMoney(SystemEnter.atmSys.getAccount(),new BigDecimal(money));
if (res.get("res").intValue()==3){
System.out.println("☆☆☆☆☆☆☆☆ 恭喜您,本次业务交易成功! ☆☆☆☆☆☆☆☆");
System.out.println("☆☆☆☆☆☆☆ 本次存款 "+money+"元☆☆☆☆☆☆☆☆");
SystemEnter.atmSys.modifyATMBalance(new BigDecimal(money),1);
SystemEnter.atmSys.modifyAccountBalance(new BigDecimal(money),1);
System.out.println("ATM当前余额"+SystemEnter.atmSys.getTotal().doubleValue());
System.out.println("银行卡当前余额"+SystemEnter.atmSys.getAccount().getBalance().doubleValue());
}else if(res.get("res").intValue() == -1){
System.out.println("☆☆☆☆☆☆☆☆ 银行卡不是所属银行,不可以进行存款 ☆☆☆☆☆☆☆☆");
}else if (res.get("res").intValue()==-2){
System.out.println("☆☆☆☆☆☆☆☆ 单次存款小于最低限额,不可以进行存款 ☆☆☆☆☆☆☆☆");
}else if (res.get("res").intValue()==-3){
System.out.println("☆☆☆☆☆☆☆☆ 单次存款大于最高限额,不可以进行存款 ☆☆☆☆☆☆☆☆");
}
break;
}
}
drawingBizUI();// 返回主菜单
}
/**
* 修改密码菜单
*/
private static void drawingModifyPasswordyUI() {
System.out.println("修改密码菜单");
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
System.out.println("$$$$$$$$$$$$$$$ 进入修改密码菜单 $$$$$$$$$$$$$$$$");
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
int flag = 0;// 标志
while(true){// 循环处理用户密码输入及选择退卡
/* 执行数据库密码验证*/
System.out.println("************ 请输入银行卡的6位数字密码 **************");
String password =BasicTools.getScanner().next();
if(!BasicTools.validDig(password) || password.length() != 6){// 密码格式不正确
System.out.println("*********** 系统提示:密码必需是6位数字 *****************");
continue;// 结束本次循环
}else {
AccountInfoConntrol controller = new AccountInfoConntrol();
int res = controller.validatePassword(SystemEnter.atmSys.getAccount().getAccount(),
Integer.parseInt(password));
if (res == 1) {// 验证密码通过
//输入密码
//再次输入密码
System.out.println("************ 请输入新的6位数字密码 **************");
String password1 =BasicTools.getScanner().next();
if(!BasicTools.validDig(password1) || password1.length() != 6){// 密码格式不正确
System.out.println("*********** 系统提示:密码必需是6位数字 *****************");
continue;// 结束本次循环
}else{
System.out.println("************ 请输入新的6位数字密码 **************");
String password2 =BasicTools.getScanner().next();
if(!BasicTools.validDig(password2) || password2.length() != 6){// 密码格式不正确
System.out.println("*********** 系统提示:密码必需是6位数字 *****************");
continue;// 结束本次循环
}else{
if(password1.equals(password2)){
int map =controller.ModifyPasswordy(SystemEnter.atmSys.getAccount().getAccount(),password1);
if(map==1){
System.out.println("☆☆☆☆☆☆☆☆ 恭喜您,本次密码修改成功! ☆☆☆☆☆☆☆☆");
}
}else {
System.out.println("*********** 系统提示:两次密码输入不一致 *****************");
continue;// 结束本次循环
}
}
}
break; // 跳出整个while循环
} else {// 如果密码验证失败
SystemEnter.atmSys.modifyPasswordInputErrorNum();
System.out.println("##########################################");
System.out.println("########## 系统提示 密码不正确 ###########");
System.out.println("##########################################");
if (SystemEnter.atmSys.getAccount().getPasswordEnterErrorNumber() == 2) {
System.err.println("##########################################");
System.err.println("######### 您已经2次输入密码错误 ############");
System.err.println("######### 如果3次输入错误将锁定此卡 ##########");
System.err.println("##########################################");
continue;
}
if (SystemEnter.atmSys.getAccount().getPasswordEnterErrorNumber() == 3) {
System.err.println("##########################################");
System.err.println("######### 您已经3次输入密码不错误 ###########");
System.err.println("######### 此卡已被冻结 如果是您本人 ###########");
System.err.println("######## 请持有效证件到本行柜台办理 ###########");
System.err.println("##########################################");
/* 调用方法,锁定银行卡*/
controller.lockAccount(SystemEnter.atmSys.getAccount().getAccount());
flag = 1;
break;
}
continue;// 结束本次循环
}
}
}
if(flag == 0)
drawingBizUI(); // 调用输出主菜单
else
drawingPullOutUI();// 返回欢迎界面
}
}
代码运行有问题,实现不了功能
【问题描述】
该设计模拟银行的自动取款机使用过程中的界面和用户交互过程。实现查询
余额,取款,存款,修改密码,退出系统等功能。
【任务要求】
菜单内容:
(1)锁卡功能:卡号密码最多输入 3 次,否则直接锁卡
(2)取款功能:取款金额受卡余额,机单笔最大取款金额及机当前剩余的余
额
(3)查询功能:查询余额
(4)修改密码:密码更改,有两次验证
(5)退出系统
【设计要求】
完成界面所要求的功能
功能方法设计
定义类,对成员方法的定义
简单的看了看, 有些烦躁, 看着太费劲了, 你把工程代码上传到gitee上,或者博客自营的gitcode上, 直接给你调试,写注释,可能比较快, 干看跑不通,太辛苦了
是哪里报错
是要修改代码还是重写
可参考
import java.util.Scanner;
public class BankATM {
private String cardNumber;
private String password;
private double balance;
private boolean cardLocked;
public BankATM(String cardNumber, String password, double balance) {
this.cardNumber = cardNumber;
this.password = password;
this.balance = balance;
this.cardLocked = false;
}
public void displayMenu() {
System.out.println("---------- 欢迎使用银行自动取款机 ----------");
System.out.println("请选择以下操作:");
System.out.println("1. 锁卡功能");
System.out.println("2. 取款功能");
System.out.println("3. 查询功能");
System.out.println("4. 修改密码");
System.out.println("5. 退出系统");
}
public void lockCard() {
if (cardLocked) {
System.out.println("卡已被锁定,请联系银行解锁!");
return;
}
String inputPassword;
int attempts = 0;
Scanner scanner = new Scanner(System.in);
while (attempts < 3) {
System.out.print("请输入密码:");
inputPassword = scanner.nextLine();
if (inputPassword.equals(password)) {
cardLocked = true;
System.out.println("卡已被锁定!");
return;
} else {
attempts++;
System.out.println("密码错误,请重试。");
}
}
cardLocked = true;
System.out.println("密码输入错误次数超过限制,卡已被锁定!");
}
public void withdrawMoney() {
if (cardLocked) {
System.out.println("卡已被锁定,请联系银行解锁!");
return;
}
// Check if any withdrawal limit applied here
Scanner scanner = new Scanner(System.in);
System.out.print("请输入取款金额:");
double amount = scanner.nextDouble();
if (amount <= balance) {
balance -= amount;
System.out.println("成功取出金额:" + amount);
System.out.println("当前余额:" + balance);
} else {
System.out.println("余额不足!");
}
}
public void checkBalance() {
if (cardLocked) {
System.out.println("卡已被锁定,请联系银行解锁!");
return;
}
System.out.println("当前余额:" + balance);
}
public void changePassword() {
if (cardLocked) {
System.out.println("卡已被锁定,请联系银行解锁!");
return;
}
String inputPassword;
Scanner scanner = new Scanner(System.in);
// First verification
System.out.print("请输入原密码:");
inputPassword = scanner.nextLine();
if (!inputPassword.equals(password)) {
System.out.println("原密码错误,无法修改密码!");
return;
}
// Second verification
System.out.print("请输入新密码:");
String newPassword = scanner.nextLine();
System.out.print("请再次输入新密码:");
String confirmPassword = scanner.nextLine();
if (!newPassword.equals(confirmPassword)) {
System.out.println("两次输入的新密码不一致!");
return;
}
password = newPassword;
System.out.println("密码修改成功!");
}
public void exitSystem() {
System.out.println("谢谢使用,再见!");
System.exit(0);
}
public static void main(String[] args) {
BankATM bankATM = new BankATM("1234567890", "123456", 1000.0);
while (true) {
bankATM.displayMenu();
Scanner scanner = new Scanner(System.in);
System.out.print("请输入操作编号:");
int choice = scanner.nextInt();
switch (choice) {
case 1:
bankATM.lockCard();
break;
case 2:
bankATM.withdrawMoney();
break;
case 3:
bankATM.checkBalance();
break;
case 4:
bankATM.changePassword();
break;
case 5:
bankATM.exitSystem();
break;
default:
System.out.println("无效的操作编号!");
}
System.out.println();
}
}
}
建议指出报错的内容,大家也方便定位问题,快速帮你解决
建议贴出报错内容,方便解决
java 模拟银行的自动取款机ATM 使用过程中的界面和用户交互过程
修改太麻烦了。有现成的
代码少的太多了,没法调试,报错有吗
程序运行不了,具体是指代码还没有运行就有红色的标注的语法错误嘛,还是说程序运行之后,输入一些操作之后,程序报错了呢。
单从代码上一下看不出有什么问题,有可能是代码中没有做特殊值的逻辑处理,比如要求输入的是整数,但你输入小数之后就会报错。具体的,还是你调试,一步步运行看,具体是什么错误,然后做针对性的修改。
在报错的地方打断点调试看看
小编在GitHub上搭建了一个仓库(主要是收集了最新的一些互联网大厂的面试真题。
主要涵盖以下内容,贪多嚼不烂:JVM、并发编程、Spring源码、分布式架构、设计模式、算法、数据结构等。
引用chatgpt内容作答:
这段代码存在一些问题,包括缺少结束大括号、缺少方法实现等。下面是修复后的代码:
package atm.bank.ui;
import atm.bank.SystemEnter;
import atm.bank.controller.account.AccountInfoConntrol;
import atm.bank.domain.AccountInfo;
import atm.bank.util.tools.BasicTools;
import java.util.Scanner;
public class ATMUISupport {
public static void drawingWelcomeUI() {
// 省略代码
}
public static void drawingInsertCardUI() {
// 省略代码
}
public static void drawingEnterPasswordUI() {
// 省略代码
}
public static void drawingPullOutUI() {
// 省略代码
}
private static void drawingBizUI() {
// 省略代码
}
private static void confimOperation(String action) {
// 省略代码
}
private static void drawingWithMoneyUI() {
// 省略代码
}
private static void drawingDepositUI() {
// 省略代码
}
private static void drawingModifyPasswordUI() {
// 省略代码
}
public static void main(String[] args) {
drawingWelcomeUI();
}
}
这样修复后的代码能够编译通过,但实际运行效果需要根据具体的业务逻辑进行调整。另外,你还需要补充一些方法的实现,比如drawingDepositUI()和drawingModifyPasswordUI()等。