课堂老师所写的ATM小程序
package ATM;
import javax.swing.JOptionPane;
import java.util.Scanner;
public class day7ATMBat {
public static void main(String[] args) {
String[] user = new String[2];//保存用户名
String[] password = new String[2];//保存密码
double[] amount = new double[2];//保存账户余额
loginSelect(user,password,amount);//选择菜单
}
static void loginSelect(String[] user,String[] password,double[] amount){
System.out.println("#####欢迎进入ATM取款机#####");
int n = 1;
while (true){
System.out.println("请选择菜单:\nA.开户\nB.登录\nC.退出\nD.修改密码");
Scanner sc = new Scanner(System.in);
String number = sc.next();
char opt = number.toCharArray()[0];
switch (opt){
case 'A':
openAnAccount(user,password);
loginSelect(user,password,amount);
break;
case 'B':
int index = login(user,password);
if (index != -1)
select(user,password,amount,index);
else{
n++;
if (n == 3)
break;
}
break;
case 'C':
System.out.println("退出系统");
System.exit(-1);
break;
case 'D':
updatePassword(user,password);
System.out.println("恭喜你修改密码成功!");
break;
default:
System.out.println("输入有误,请重新选择");
break;
}
}
}
static void select(String[] user,String[] password,double[] amount,int index){
while (true){
System.out.println("######您好:"+user[index]+"#######");
System.out.println("请选择菜单:\nA.存款\nB.取款\nC.转账\nD.查询账户余额\nE.返回主菜单");
Scanner sc = new Scanner(System.in);
char opt = sc.next().toCharArray()[0];
switch(opt){
case 'A':
saveMoney(user,amount,index);
break;
case 'B':
getMoney(user,amount,index);
break;
case 'C':
transferAccounts(user,amount,index);
break;
case 'D':
queryMoney(user,amount,index);
break;
case 'E':
loginSelect(user,password,amount);
break;
default:
System.out.println("操作有误重新输入");
break;
}
}
}
static int login(String[] user,String[] password){
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = sc.next();
System.out.println("请输入用户密码:");
String pwd = sc.next();
int index = -1;
for (int i=0; i<user.length; i++){
if (user[i] == null){
System.out.println("你还没有开户");
loginSelect(user,password,null);
return -1;
}else{
if (user[i].equals(userName)){
index = i;
break;
}
}
}
if (password[index].equals(pwd))
return index;
else
System.out.println("输入有误");
return -1;
}
static void openAnAccount(String[] user,String[] password){
int index = -1;
for (int i=0; i<user.length; i++){
if (user[i] == null){
index = i;
break;
}
}
if (index == -1){
System.out.println("用户已满,请清理");
return;
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String loginName = sc.next();
user[index] = loginName;
System.out.println("请输入用户密码:");
String pwd = sc.next();
password[index] = pwd;
}
static void getMoney(String[] user,double[] amount,int index){
System.out.println("请选择取款金额:\nA.100\nB.200\nC.300\nD.500\nE.1000\nF.2000\nG.其他金额");
Scanner sc = new Scanner(System.in);
String money = sc.next();
char opt = money.toCharArray()[0];
double number = 0.0;
switch(opt){
case 'A':number = 100;break;
case 'B':number = 200;break;
case 'C':number = 300;break;
case 'D':number = 500;break;
case 'E':number = 1000;break;
case 'F':number = 2000;break;
case 'G':
System.out.println("请输入其他取款金额:");
number = sc.nextDouble();
break;
default:
System.out.println("你输入的金额有误");
break;
}
if (!checkMoney(number)){return;}
if (amount[index] < number){System.out.println("账户余额不足");return;}
amount[index] -= number;
System.out.println("取款成功,余额为:"+amount[index]);
return;
}
static boolean checkMoney(double number){
if (number < 100){
System.out.println("取款失败");
return false;
}
if (number%100 != 0){
System.out.println("取款金额只能是一百的整数");
return false;
}
return true;
}
static void saveMoney(String[] user, double[] amount, int index) {
Scanner sc = new Scanner(System.in);
System.out.println("输入存款金额:");
double number = sc.nextDouble();
// 检查存款的金额校验
if (!checkMoney(number)) {
return;
}
amount[index] = amount[index] + number;
System.out.println("存款成功,余额为:" + amount[index]);// 显示余额
return;
}
static void queryMoney(String[] user, double[] amount, int index) {
System.out.println(user[index] + "您的余额为:" + amount[index]);
}
static void transferAccounts(String[] user, double[] amount,int index){
int targetIndex = -1;
for (int i=0; i<3; i++) {
targetIndex = ifHaveUser(user);
if (targetIndex != -1) {
break;
} else {// 没找到相应的用户
System.out.println("第" + (i + 1) + "次,您输入的用户不存在!");
}
}
if (targetIndex == -1) {
System.out.println("超过3次返回上级菜单!");
return;
}
if (targetIndex == index) {// 如果下标相等提示您不能给自己转账
System.out.println("您不能给自己转账");
} else {
for (int i=0; i<amount.length; i++) {
Scanner sc = new Scanner(System.in);
System.out.println("输入您的转账金额:");
double tranAmount = sc.nextDouble();
// 检查存款的金额校验
if (!checkMoney(tranAmount)) {
return;
}
if (tranAmount > amount[index]) {// 如果转账金额大于,账户余额提示
System.out.println("您余额不足!");
break;
} else {
amount[index] = amount[index] - tranAmount;
amount[targetIndex] = tranAmount;
break;
}
}
}
System.out.println("您的余额为:" + amount[index]);
}
static int ifHaveUser(String[] user) {
Scanner sc = new Scanner(System.in);
System.out.println("输入转账用户:");
String userName = sc.next();
int index = -1;
for (int i=0; i<user.length; i++) {
if (userName.equals(user[i])) {
index = i;
}
}
return index;
}
static void updatePassword(String[] user, String[] password) {
Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = input.nextLine();
while (true) {
int index = -1;
String oldPwd = null;
for (int i=0; i<user.length; i++) {//首先要找到当前用户
if (userName.equals(user[i])) {
index = i;
oldPwd = password[i];
}
}
if(index == -1) {
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;
}
}
}