我的目标是使用Java技术(例如封装,继承,多态)创建一个atm程序,而我使用的是最后一个抽象。当我在提款或存款值中输入一个值时,它就可以完成工作,但是当我单击主菜单上的余额查询按钮时,余额不会更新。
/*
* abstraction
*/
package atm;
import java.util.Scanner;
public class atm {
int[] an = {201511032,201563244,201410230,201596427,201456329};
int[] pin = {8888,1234,5432,9876,6543};
int[] ac = {80500,3000,27450,6500,13200};
public static void main(String args[]){
atm obj = new atm();
Scanner sc = new Scanner(System.in);
System.out.print("Welcome!");
System.out.println("\n[0] To end Transaction\n");
System.out.print("ENTER accOUNT NUMber: ");
int acc = sc.nextInt();
if (acc == 0){system.exit(acc);}
System.out.print("ENTER PIN NUMber: ");
int pass = sc.nextInt();
obj.accVer(pass,acc);
}
void accVer(int pass,int acc){
atm obj = new atm();
if (acc == an[0] && pass==pin[0]){
System.out.println("");
obj.mMenu(an[0],pin[0],0);
}else if (acc == an[1] && pass==pin[1]){
System.out.println("");
obj.mMenu(an[1],pin[1],1);
}else if (acc == an[2] && pass==pin[2]){
System.out.println("");
obj.mMenu(an[2],pin[2],2);
}else if (acc == an[3] && pass==pin[3]){
System.out.println("");
obj.mMenu(an[3],pin[3],3);
}else if (acc == an[4] && pass==pin[4]){
System.out.println("");
obj.mMenu(an[4],pin[4],4);
}else{
System.out.println("Error account Number or Pin. \nPlease Try Again\n");
atm.main(null);
}
}
void mMenu(int pass,int acc,int num1){
Scanner sc = new Scanner(System.in);
System.out.println("Main Menu: ");
System.out.println("[1] for Balance Inquiry");
System.out.println("[2] for Withdraw");
System.out.println("[3] for Deposit");
System.out.println("[4] for End Transaction");
System.out.print("Choice: ");
int s = sc.nextInt();
methods obj = new execute();
if (s == 1){obj.balanceInquiry(pass,acc,num1);}
else if(s == 2){obj.withdrawal(pass,num1);}
else if(s == 3){obj.deposit(pass,num1);}
else{System.out.println("Thank You!");System.out.println("");System.out.println("");atm.main(null);}
}
void withprod(int with,int pass,int num1){
Scanner sc = new Scanner(System.in);
methods obj1 = new execute();
atm obj = new atm();
System.out.println("");
System.out.println("Do you wish to Withdraw this amount?: $ "+with);
System.out.println("[1] for Yes");
System.out.println("[2] for No");
System.out.print("Choice: ");
int ans = sc.nextInt();
if (ans == 1){
int num4 = ac[num1]-with;
ac[num1] = num4;
System.out.println("The Transaction has been made. \nPlease get the money on the dispenser window.");
System.out.println("");
obj.mMenu(pass,num1);
}else if(ans == 2){
obj1.withdrawal(pass,num1);
}
}
abstract class methods{
abstract void balanceInquiry(int pass,int num1);
abstract void withdrawal(int pass,int num1);
abstract void deposit(int pass,int num1);
}
class execute extends methods{
@Override
void balanceInquiry(int pass,int num1) {
Scanner sc = new Scanner(System.in);
atm obj = new atm();
System.out.println("Current Balance: $" +ac[num1]);
System.out.print("press any number to return: ");
int ans = sc.nextInt();
if (ans < 10){System.out.println("");obj.mMenu(pass,num1);}
else{obj.mMenu(pass,num1);}
System.out.println("");
System.out.println("");
}
@Override
void withdrawal(int pass,int num1) {
Scanner sc = new Scanner(System.in);
methods obj1 = new execute();
atm obj = new atm();
System.out.println("");
System.out.println("MENU FOR WITHDRAWAL");
System.out.println("[0] to Return");
System.out.println("[2] to $ 20");
System.out.println("[2] to $ 40");
System.out.println("[3] to $ 60");
System.out.println("[4] to $ 100");
System.out.println("[5] to $ 200");
System.out.println("[6] to Other Amount");
System.out.print("Please choose your desire answer: ");
int ans = sc.nextInt();
if (ans == 0){obj.mMenu(pass,num1);}
else if (ans == 1){int with = 20;obj.withprod(with,pass,num1);}
else if (ans == 2){int with = 40;obj.withprod(with,num1);}
else if (ans == 3){int with = 60;obj.withprod(with,num1);}
else if (ans == 4){int with = 100;obj.withprod(with,num1);}
else if (ans == 5){int with = 200;obj.withprod(with,num1);}
else if (ans == 6){System.out.print("Please enter the amount you wish to Withdraw: $ ");int with = sc.nextInt(); obj.withprod(with,num1);}
else{System.out.println("ERROR: Invalid Input.\n Please Try Again");obj1.withdrawal(pass,num1);}
}
@Override
void deposit(int pass,int num1) {
Scanner sc = new Scanner(System.in);
methods obj1 = new execute();
atm obj = new atm();
System.out.println("");
System.out.println("MENU FOR DEPOSIT");
System.out.println("[0] to Return");
System.out.print("Please enter the amount you wish to deposit: $ ");
int dep = sc.nextInt();
if (dep == 0){obj.mMenu(pass,num1);}
else{
System.out.println("");
System.out.println("Do you wish to deposit this amount?: $ "+dep);
System.out.println("[1] for Yes");
System.out.println("[2] for No");
System.out.print("Choice: ");
int ans = sc.nextInt();
if (ans == 1){
System.out.println("Please use the envelope given,insert the amount and place it in the deposit bin.");
System.out.println("Have you placed the envelope on the deposit bin?: ");
System.out.println("[1] for Yes");
System.out.println("[2] for No");
int ans2 = sc.nextInt();
if (ans2 == 1){
System.out.println("We recieved your deposit. Please check your balance for updates.");
float num2 = ac[num1]+dep;
ac[num1] = (int) num2;
System.out.println("");
obj.mMenu(pass,num1);
}else{obj1.deposit(pass,num1);}
}else if(ans == 2){
obj1.deposit(pass,num1);
}
}
}
}
}