java基础:模拟ATM取款机

时间:2023-03-09 01:02:40
java基础:模拟ATM取款机
package com.atm;

import java.util.Scanner;

/**
* ATM类实现
*
* @author 向往的生活
*/
public class ATM { public static void main(String[] args) {
String[] user = new String[];
String[] password = new String[];
double[] amount = new double[]; loginSelect(user, password, amount); } /**
* 登录业务的菜单选择
*
* @param user
* @param password
*/
public static void loginSelect(String[] user, String[] password,
double[] amount) {
System.out.println("#####欢迎#####"); int n = ;
while (true) {
System.out.println("A.开户");
System.out.println("B.登录");
System.out.println("C.退出");
System.out.println("D.修改密码"); Scanner scanner = new Scanner(System.in);
System.out.println("选择菜单:");
String number = scanner.nextLine();
number = number.toUpperCase(); char[] chr = number.toCharArray();
switch (chr[]) {
case 'A':
openAnAccount(user, password);
loginSelect(user, password, amount);
break;
case 'B':
int index = login(user, password);// 记录登录人的下标
if (index != -) {
select(user, password, amount, index);
} else {
n++;// 登录3次失败,则退出
if (n == ) {
break;
}
}
break;
case 'C':
System.out.println("退出ATM");
System.exit(-);
break;
case 'D':
updatePassword(user, password);
System.out.println("修改密码");
break;
default:
System.out.println("录入的操作错误!");
break;
}
}
} /**
* 核心业务菜单选择
*
* @param user
* @param password
*/
public static void select(String[] user, String[] password,
double[] amount, int index) { while (true) {
System.out.println("###########您好:" + user[index] + "#########");
System.out.println("A.存款");
System.out.println("B.取款");
System.out.println("C.转账");
System.out.println("D.查询账户余额");
System.out.println("E.返回主菜单"); Scanner scanner = new Scanner(System.in);
System.out.println("选择菜单:");
String input = scanner.nextLine();
input = input.toUpperCase(); char chr = input.toCharArray()[]; switch (chr) {
case 'A':
saveMoney(user, amount, index);
break;
case 'B':
getMoney(user, amount, index);
break;
case 'C':
transferAccounts(user, amount, index);
break;
case 'D':
query(user, amount, index);
break;
case 'E':
loginSelect(user, password, amount);
break;
default:
System.out.println("操作错误请重新输入!");
break;
}
}
} /**
* 登录
*
* @return
*/
public static int login(String[] user, String[] password) { Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = input.nextLine(); System.out.println("请输入密码:");
String pwd = input.nextLine(); // 通过userName数据,找到user下标,
int index = -;
for (int i = ; i < user.length; i++) {
if (user[i] == null) {
System.out.println("请去开户,您没有注册卡号!");
loginSelect(user, password, null);
return -;
} else {
if (user[i].equals(userName)) {
index = i;
break;
}
}
}
// 然后通过user下标找到password中相应的密码。
if (password[index].equals(pwd)) {
return index;
} else {
System.out.println("用户名或者密码输入错误,请从新输入!");
}
return -;// 因为密码不匹配因此返回-1
} /**
* 开户
*
* @return
*/
public static void openAnAccount(String[] user, String[] password) {
int index = -;
// 搜索下标
for (int i = ; i < user.length; i++) {
if (user[i] == null) {
index = i;
break;
}
}
if (index == -) {// 如果存储空间满了,则提示联系管理员处理
System.out.println("系统存储已经满了,请联系管理员处理!");
return;
} // 新增用于与密码
Scanner scanner = new Scanner(System.in);
System.out.println("输入登录名:");
String loginName = scanner.nextLine(); user[index] = loginName;
System.out.println("输入密码:");
String pwdValue = scanner.nextLine(); password[index] = pwdValue;
} /***************************************************************************
* 查询账户余额
*
* @return
*/
public static void query(String[] user, double[] amount, int index) {
System.out.println(user[index] + "您的余额为:" + amount[index]);
} /**
* 取款
*
* @return
*/
public static void getMoney(String[] user, double[] amount, int index) { System.out.println("A 100 B 200 ");
System.out.println("C 300 D 500 ");
System.out.println("E 1000 F 2000 ");
System.out.println("G 其他金额 "); Scanner scanner = new Scanner(System.in);
System.out.println("选择取款金额:");
String money = scanner.nextLine();
money = money.toUpperCase(); double number = 0.0;
char chr = money.toCharArray()[];
switch (chr) {
case 'A':
number = ;
break;
case 'B':
number = ;
break;
case 'C':
number = ;
break;
case 'D':
number = ;
break;
case 'E':
number = ;
break;
case 'F':
number = ;
break;
case 'G':
Scanner input = new Scanner(System.in);
System.out.println("输入取款金额:");
number = input.nextDouble();
break;
default:
System.out.println("您输入的金额错误!");
break;
} // 检查存款的金额校验
if (!checkMoney(number)) {
return;
} if(amount[index] < number) {
System.out.println("您账户余额不足,不能取款!");
return;
}
amount[index] = amount[index] - number;
System.out.println("取款成功,余额为:" + amount[index]);// 显示余额
return;
} /**
* 检查存款的金额校验
*
* @param number
* @return
*/
public static boolean checkMoney(double number) {
if (number < ) {
System.out.println("取款失败:只能取出大于等100的金额!");
return false;
} // 只能存入100的整数
if (number % != ) {
System.out.println("取款失败:只能取出100的整数!");
return false;
}
return true;
} /**
* 存款
*/
public static void saveMoney(String[] user, double[] amount, int index) { Scanner scanner = new Scanner(System.in);
System.out.println("输入存款金额:");
double number = scanner.nextDouble(); // 检查存款的金额校验
if (!checkMoney(number)) {
return;
}
amount[index] = amount[index] + number;
System.out.println("存款成功,余额为:" + amount[index]);// 显示余额
return;
} /**
* 转账
*
* @return
*/
public static void transferAccounts(String[] user, double[] amount,
int index) {
int tragetIndex = -;
for (int i = ; i < ; i++) {
tragetIndex = ifHaveUser(user);
if (tragetIndex != -) {
break;
} else {// 没找到相应的用户
System.out.println("第" + (i + ) + "次,您输入的用户不存在!");
}
} if (tragetIndex == -) {
System.out.println("超过3次返回上级菜单!");
return;
} if (tragetIndex == index) {// 如果下标相等提示您不能给自己转账
System.out.println("您不能给自己转账");
} else {
for (int i = ; i < amount.length; i++) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入您的转账金额:");
double tranAmount = scanner.nextDouble(); // 检查存款的金额校验
if (!checkMoney(tranAmount)) {
return;
}
if (tranAmount > amount[index]) {// 如果转账金额大于,账户余额提示
System.out.println("您余额不足!");
break;
} else {
amount[index] = amount[index] - tranAmount;
amount[tragetIndex] = tranAmount;
break;
}
}
}
System.out.println("您的余额为:" + amount[index]);
} /***************************************************************************
*
* @return
*/
public static int ifHaveUser(String[] user) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入转账用户:");
String userName = scanner.nextLine();
int index = -;
for (int i = ; i < user.length; i++) {
if (userName.equals(user[i])) {
index = i;
}
}
return index;
} /***************************************************************************
* 修改密码
*
* @return
*/
public static void updatePassword(String[] user, String[] password) { Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = input.nextLine();
while (true) {
int index = -;
String oldPwd = null;
for (int i = ; i < user.length; i++) {//首先要找到当前用户
if (userName.equals(user[i])) {
index = i;
oldPwd = password[i];
}
}
if(index == -) {
System.out.println("还没有开户,请开户后再来修改密码!");
return ;
}
System.out.println("请输入旧密码:");
String inputOldPwd = input.nextLine(); System.out.println("请输入新密码:");
String newpwd = input.nextLine(); System.out.println("请输入确认密码:");
String confimpwd = input.nextLine(); if(!inputOldPwd.equals(oldPwd)) {//如果输入的旧密码不等于新密码,则重新输入
System.out.println("您输入的旧密码不正确!");
continue;
}
if(!newpwd.equals(confimpwd)) {//新密码与确认密码不匹配
System.out.println("新密码与确认密码不匹配!");
continue;
}
password[index] = newpwd;
System.out.println("密码修改成功!");
break;
} }
}