模拟ATM机,实现用户登录、查询、取款、存款和退出。
假定一个银行卡账户,程序执行的时候提示用户输入账号,然后输入密码,如果输入内容不符合规范,则程序会给出相应提示,连续3次输入有误,则退出系统。登录成功后,系统会出现4个选项:1.查询余额 2.取款 3.存款 4.退出。
用户如果选择1,则屏幕显示用户的余额;
用户如果选择2,则需要输入取款的金额,该金额必须大于0,必须是100的整数倍,必须是小于用户余额的,必须是小于ATM机中剩余的钱,而且每次取款都要小于2000;
用户如果选择3,则需要输入存款的数量,该存款数必须大于0,必须是100的整数,金额存入ATM机中不能超过ATM机的上限,而且每次最多存10000;
用户如果输入4,则直接结束操作,退出该系统
代码:
Main:
package com.company;
public class Main {
public static void main(String[] args) {
// ATM上限
final int ATMMAXMONEY = 1000000;
String account = "wy";//账号信息
int password = 123456;//账户密码
int mymoney = 30000;//账户余额
int ATMKeepMoney = 900000;//当前ATM的余额
Bank.run(ATMMAXMONEY,account,password,mymoney,ATMKeepMoney);
}
}
Bank:
package com.company;
import java.util.Scanner;
public class Bank {
/**
* 启动方法
*/
public static void run(int ATMMAXMONEY,String account,int password,int mymoney,int ATMKeepMoney){
System.out.println("欢迎使用CWNU的ATM系统!");
System.out.println("请插入您的银行卡!");
Scanner scanner = new Scanner(System.in);
//登录方法
boolean status = login(account,password);
//登录成功
if(status){
while (true){
showMenu();
int in = scanner.nextInt();
switch (in){
case 1://查询余额
queryMoney(mymoney);
break;
case 2://取款
int balance = drawMoney(mymoney,ATMKeepMoney);//取钱并返回金额
mymoney -= balance;//从余额中扣除取钱的数目
ATMKeepMoney -= balance;//ATM的余额中,扣除取钱的数目
break;
case 3://存款
int saveMoney = saveMoney(ATMKeepMoney,ATMMAXMONEY);//存钱并返回金额
mymoney += saveMoney;//向账户余额中添加金额
ATMKeepMoney += saveMoney;//向ATM的余额中添加金额
break;
case 4://退出
System.out.println("欢迎下次使用!");
System.exit(1);//关闭JVM
break;
default:
System.out.println("你的输入有误,请重新输入!");
break;
}
}
}
}
/**
* 存钱
* @param ATMKeepMoney ATM的余额
* @param ATMMAXMONEY ATM的上限
* @return 存入的金额
*/
private static int saveMoney(int ATMKeepMoney, int ATMMAXMONEY) {
Scanner scanner = new Scanner(System.in);
int saveMoney = 0;//客户的输入
while (true){
System.out.println("请输入存款金额!");
saveMoney = scanner.nextInt();
if(saveMoney < 0 ){
System.out.println("请输入大于0的金额!");
}else if(saveMoney % 100 != 0){
System.out.println("请输入100的整数倍!");
}else if((saveMoney + ATMKeepMoney) > ATMMAXMONEY){
System.out.println("存款金额超出ATM上限!");
}else if(saveMoney > 10000){
System.out.println("每次最多存10000!");
}else{
System.out.println("存款成功");
break;
}
System.out.println("请重新输入!");
}
return saveMoney;
}
/**
* 取钱
* @param mymoney 卡中的余额
* @param ATMKeepMoney ATM中余额
* @return 客户的输入
*/
private static int drawMoney(int mymoney, int ATMKeepMoney) {
Scanner scanner = new Scanner(System.in);
int balance = 0;//客户的输入
while (true){
System.out.println("请输入取款金额");
balance = scanner.nextInt();
if(balance < 0){
System.out.println("请输入大于0的数字!");
}else if(balance % 100 != 0){
System.out.println("请输入100的整数倍!");
}else if(balance > mymoney){
System.out.println("余额不足!");
}else if(balance > ATMKeepMoney){
System.out.println("ATM机余额不足!");
}else if(balance > 2000){
System.out.println("每次最多取2000!");
}else{
System.out.println("取钱成功!");
break;
}
System.out.println("请重新输入取款金额!");
}
return balance;
}
/**
* 查询余额
* @param mymoney
*/
private static void queryMoney(int mymoney) {
System.out.println("你的余额是:" + mymoney);
}
/**
* 显示菜单
*/
private static void showMenu() {
System.out.println("请选择以下操作:");
System.out.println("1.查询余额 2.取款 3.存款 4.退出系统");
}
/**
* 登录方法
* 需求:可以实现登录3次 前2次可以提示密码不匹配,第3次直接退出系统
* @param account
* @param password
*/
private static boolean login(String account, int password) {
//控制台类
Scanner scanner = new Scanner(System.in);
boolean flag = false;
for(int i = 1; i <= 3; i ++){
System.out.println("请输入你的账号:");
String acc = scanner.next();
System.out.println("请输入你的密码:");
int pass = scanner.nextInt();
if(acc.equals(account) && pass == password){
System.out.println("登录成功!");
flag = true;
return flag;
}else{
if(i != 3){
System.out.println("你的输入有误,请重新输入,你还有" +
(3 - i) + "次机会!");
}
}
}
return flag;
}
}
网友评论