2014-11-03 3 views
0

Я делаю программу atm, и мне трудно найти, как заставить ее фактически депонировать и уйти. Баланс начинается автоматически как $ 0, но я не могу получить что-либо, что я набираю, чтобы на самом деле добавить или вычесть его, что я делаю неправильно?Программа Java ATM

public class ATM { 
static Scanner keyboard = new Scanner(System.in); 
static String acctNum, pwd, result; 
static double oldBalance, newBalance, deposit, withdraw; 
static int choose; 

public static void main(String[] args) { 
    for (int run = 0; run < 3; run++) { 
     System.out.println("Enter your account number"); 
     acctNum = keyboard.nextLine(); 
     System.out.println("Enter your account password"); 
     pwd = keyboard.nextLine(); 

     result = checkID(acctNum, pwd); 
     if (!result.equals("ERROR")) { 
      break; 
     } else if (run == 2) {// you cannot try to log in anymore than 3 
           // times 
      System.out.println("MAXIMUM TRIES EXCEEDED"); 
      return; 
     } 

    } 
    menu(); 
} 

public static String checkID(String acctNum, Object pwd) { 
    String result = "ERROR"; 
    String a = "44567-5 mypassword 520.36"; 
    String b = "1234567-6 anotherpassword 48.20"; 
    String c = "4321-0 betterpassword 96.74"; 

    if (acctNum.equals("44567-5") && pwd.equals("mypassword")) { 
     result = "520.36"; 
    } else if (acctNum.equals("1234567-6") && pwd.equals("anotherpassword")) { 
     result = "48.20"; 
    } else if (acctNum.equals("4321-0") && pwd.equals("betterpassword")) { 
     result = "96.74"; 
    } 
    System.out.println(result); 
    return result; 
} 

public static int menu() { 
    System.out 
      .println("Choose one of the following: \n1.Display Balance\n2.Deposit\n3.Withdraw\n4.Log Out"); 
    choose = keyboard.nextInt(); 

    if (choose == 1) {// 1. Display Balance 
     displayBalance(); 
     menu(); 
     return 1; 

    } 
    if (choose == 2) {// 2. Deposit 
     deposit(); 
     menu(); 
     return 2; 

    } 
    if (choose == 3) {// 3. Withdraw 
     withdraw(); 
     menu(); 
     return 3; 

    } 
    if (choose == 4) {// 4. Log out 
     System.out.println("You are logged out."); 
     return 4; 

    } 
    if (choose <= 5) {// type in anything greater than 4 and you will get a 
         // system error 
     System.out.println("System Error"); 
     menu(); 
     return 5; 
    } 
    if (choose >= 1) {// type in anything less than 1 and you will get a 
         // system error 
     System.out.println("System Error"); 
     menu(); 
     return 6; 
    } 
    return choose; 

} 

public static double deposit() { 
    System.out.println("How much would you like to deposit?"); 
    deposit = keyboard.nextInt(); 
    System.out.println((deposit + oldBalance)==newBalance);// deposit money into balance 
    return 2; 
} 

public static double displayBalance() { 
    System.out.println("Total balance is: $" + oldBalance); 
    oldBalance = 0.00; 
    return 1; 
} 

public static double withdraw() { 
    System.out.println("How much would you like to withdraw?"); 
    withdraw = keyboard.nextInt(); 
    System.out.println(newBalance + withdraw);// withdraw money from balance 
    return 3; 
} 

}

+2

Вы не изменяя значения баланса ... Кроме того, не следует использовать рекурсивный метод требует этого, используйте 'сделай while' петлю вместо (в пределах вашего' menu' метода) – MadProgrammer

ответ

1

Несколько наблюдений:

  1. Ваш класс не должен объявлять oldBalance, депозит и вывод в качестве глобальных переменных. Метод отзыва не должен иметь доступ к переменной депозита и наоборот. Это хорошая практика программирования, которая ограничивает объем ваших переменных настолько, насколько это возможно. Поскольку переменная «депозит» на самом деле не требуется вне этого метода, нет никаких оснований делать ее глобальной. То же самое нельзя сказать о «текущем балансе». Эта переменная необходима всем методам класса: депозит, вывод, displayBalance и т. Д. Поэтому есть веская причина, почему глобальная (тем не менее, если вы можете решить проблему с меньшим объемом, вы должны это сделать).

  2. Я не понимаю, почему deposit() и withdrawal() необходимо что-либо вернуть.

Простейшая реализация deposit() и withdrawal(), чтобы просто добавить пользовательский ввод в currentBalance и сохранить его в currentBalance.

public void deposit() 
{ 
    Scanner input = new Scanner(System.in); 
    System.out.printn("Enter deposit amount:); 
    double amount = input.nextDouble(); 
    System.out.println("Your deposit amount: " + amount); 
    currentBalance += amount; 
    System.out.println("Your new balance is: + currentBalance); 
} 

public void withdrawal() 
{ 
    Scanner input = new Scanner(System.in); 
    System.out.printn("Enter withdrawal amount:); 
    double amount = input.nextDouble(); 
    System.out.println("Your withdrawal amount: " + amount); 
    currentBalance -= amount; 
    System.out.println("Your new balance is: + currentBalance); 
} 

Вы никогда не сохраняете текущий баланс. Оператор == является оператором сравнения, а не оператором присваивания. Когда вы делаете что-то вроде этого:

System.out.println((deposit + oldBalance)==newBalance); 

Или так:

System.out.println(newBalance + withdraw); 

Все, что вы делаете, чтобы передать значения методу println() и не обновляет переменную, которая должна удерживать равновесие , Фактически, первый должен напечатать false (если оба депозита и oldBalance не равны нулю). Если вы посмотрите на мой код, например, currentBalance += amount; представляет собой сокращенную currentBalance = currentBalance + amount;, что означает «добавить этот amount в currentBalance и хранить его в currentBalance. Потому что я повторно использовать currentBalance, я устранил необходимость oldBalance переменной.

0

Полный Running код

import java.awt.Container; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowEvent; 
import java.awt.event.WindowAdapter; 
import java.io.IOException; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 
import java.util.ArrayList; 
import java.util.Scanner; 

/** 
    A simulation of an automatic teller machine 
*/ 

public class ATM { 
static Scanner keyboard = new Scanner(System.in); 
static String acctNum, pwd, result; 
static double oldBalance, newBalance, deposit, withdraw,currentBalance; 
static int choose; 

public static void main(String[] args) { 
    for (int run = 0; run < 3; run++) { 
     System.out.println("Enter your account number"); 
     acctNum = keyboard.nextLine(); 
     System.out.println("Enter your account password"); 
     pwd = keyboard.nextLine(); 

     result = checkID(acctNum, pwd); 
     if (!result.equals("ERROR")) { 
      break; 
     } else if (run == 2) {// you cannot try to log in anymore than 3 
           // times 
      System.out.println("MAXIMUM TRIES EXCEEDED"); 
      return; 
     } 

    } 
    menu(); 
} 

public static String checkID(String acctNum, Object pwd) { 
    String result = "ERROR"; 
    String a = "44567-5 mypassword 520.36"; 
    String b = "1234567-6 anotherpassword 48.20"; 
    String c = "4321-0 betterpassword 96.74"; 

    if (acctNum.equals("2345") && pwd.equals("2345")) { 
     result = "520.36"; 
    } else if (acctNum.equals("1234567-6") && pwd.equals("anotherpassword")) { 
     result = "48.20"; 
    } else if (acctNum.equals("4321-0") && pwd.equals("betterpassword")) { 
     result = "96.74"; 
    } 
    System.out.println(result); 
    return result; 
} 

public static int menu() { 
    System.out.println("Choose one of the following: \n1.Display Balance\n2.Deposit\n3.Withdraw\n4.Log Out"); 
    choose = keyboard.nextInt(); 

    if (choose == 1) {// 1. Display Balance 
     displayBalance(); 
     menu(); 
     return 1; 

    } 
    if (choose == 2) {// 2. Deposit 
     deposit(); 
     menu(); 
     return 2; 

    } 
    if (choose == 3) {// 3. Withdraw 
     withdraw(); 
     menu(); 
     return 3; 

    } 
    if (choose == 4) {// 4. Log out 
     System.out.println("You are logged out."); 
     return 4; 

    } 
    if (choose <= 5) {// type in anything greater than 4 and you will get a 
         // system error 
     System.out.println("System Error"); 
     menu(); 
     return 5; 
    } 
    if (choose >= 1) {// type in anything less than 1 and you will get a 
         // system error 
     System.out.println("System Error"); 
     menu(); 
     return 6; 
    } 
    return choose; 

} 

public static void deposit() 
{ 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter deposit amount:"); 
    double amount = input.nextDouble(); 
    System.out.println("Your deposit amount: " + amount); 
    currentBalance += amount; 
    System.out.println("Your new balance is: " + currentBalance); 
} 

public static double displayBalance() { 
    System.out.println("Total balance is: $" + currentBalance); 
    oldBalance = 0.00; 
    return 1; 
} 

public static void withdraw() 
{ 
    Scanner input = new Scanner(System.in); 
    System.out.println("Enter withdrawal amount: "); 
    double amount = input.nextDouble(); 
    System.out.println("Your withdrawal amount: " + amount); 
    currentBalance -= amount; 
    System.out.println("Your new balance is: " + currentBalance); 
} 
} 
0
package shraam.bank.atm; 

    import java.util.HashMap; 
    import java.util.Map; 
    import java.util.Scanner; 
    import java.util.logging.Level; 


    public class CalculateMoneyAtm { 
     static Integer initialtwothousandrupees = 0; 
     static Integer initialhundressrupees = 0; 
     static Integer initialfiftyrupees = 0; 
     static Integer initialtenrupees = 0; 

     static Integer twothousandrupees = 0; 
     static Integer hundressrupees = 0; 
     static Integer fiftyrupees = 0; 
     static Integer tenrupees = 0; 
     static Integer totalAmount = 0; 

     public static void main(String[] args) { 

      ATMStatus atmStatus = new ATMStatus(); 
      getMoney(atmStatus); 

     }//end of psvm 

     public static void reRun(ATMStatus atmStatus) { 
      MyLog.logit().info("Would u like to credit more money ? y/n"); 
      System.out.println("Would u like to credit more money ? y/n "); 
      Scanner input = new Scanner(System.in); 
      String choice = input.nextLine(); 
      if (choice.equals("y") || choice.equals("Y")) { 
       getMoney(atmStatus); 
      } 
      if (choice.equals("n") || choice.equals("N")) { 
       System.exit(1); 
      } else { 
       MyLog.logit().log(Level.SEVERE, "Invalid Input :"+choice); 
       System.out.println("Invalid Input"); 
      } 
      reRun(atmStatus); 
     } 

     public static void getMoney(ATMStatus atmStatus) { 
      twothousandrupees = 0; 
      hundressrupees = 0; 
      fiftyrupees = 0; 
      tenrupees = 0; 
      totalAmount = 0; 
      Integer amountInt=0; 
      System.out.println("Currency Avaialbe in ATM"); 
      for (String key : atmStatus.getAvaialableMoney().keySet()) { 
       System.out.println(atmStatus.getAvaialableMoney().get(key) + ":" 
         + key + " Notes"); 
      } 

      for (String key : atmStatus.getAvaialableMoney().keySet()) { 
       if (key.equals("2000")) 
        initialtwothousandrupees = atmStatus.getAvaialableMoney().get(key); 
       if (key.equals("100")) 
        initialhundressrupees = atmStatus.getAvaialableMoney().get(key); 
       if (key.equals("50")) 
        initialfiftyrupees = atmStatus.getAvaialableMoney().get(key); 
       if (key.equals("10")) 
        initialtenrupees = atmStatus.getAvaialableMoney().get(key); 
      } 

      Scanner input = new Scanner(System.in); 
      System.out.print("Enter Money > "); 
      String amount = input.nextLine(); 
      try { 
       try{ 
       amountInt = Integer.parseInt(amount); 
       if(amountInt%10!=0) 
       { 
        System.out.println("Please enter amount in multiple of 10 "); 
        reRun(atmStatus); 
       } 
       }catch(NumberFormatException ne){ 
        MyLog.logit().log(Level.SEVERE, ne.getMessage()); 
       } 
       System.out.print("Required Amount : "); 
       System.out.println(amount); 

       totalAmount = ((initialtwothousandrupees * 2000) + (initialhundressrupees * 100) 
         + (initialfiftyrupees * 50) + (initialtenrupees * 10)); 
       System.out 
         .println("Total Available amount in ATM : " + totalAmount); 
       if (totalAmount < amountInt) { 
        System.out 
          .println("Total Avaialble amount is less in atm, Sorry for Inconvience"); 
        reRun(atmStatus); 
       } 


       while (amountInt >= 2000 && initialtwothousandrupees > 0) { 
        initialtwothousandrupees = initialtwothousandrupees - 1; 
        twothousandrupees++; 
        amountInt = amountInt - 2000; 
       } 

       while (amountInt >= 100 && initialhundressrupees > 0) { 
        initialhundressrupees = initialhundressrupees - 1; 
        hundressrupees++; 
        amountInt = amountInt - 100; 
       } 

       while (amountInt >= 50 && initialfiftyrupees > 0) { 
        initialfiftyrupees = initialfiftyrupees - 1; 
        fiftyrupees++; 
        amountInt = amountInt - 50; 
       } 
       while (amountInt >= 10 && initialtenrupees > 0) { 
        initialtenrupees = initialtenrupees - 1; 
        tenrupees++; 
        amountInt = amountInt - 10; 
       } 
       if (amountInt > 0) { 
        System.out.println("No avalable balance in this unit"); 
        reRun(atmStatus); 
       } else { 
        System.out.println("Plz take your money in currency"); 
        Map<String, Integer> avaialableMoney = new HashMap<String, Integer>(); 
        System.out.println("  No of 2000:"+ twothousandrupees); 
        System.out.println("  No of 100:"+ hundressrupees); 
        System.out.println("  No of 50:"+ fiftyrupees); 
        System.out.println("  No of 10:"+ tenrupees); 
        avaialableMoney.put("2000", (initialtwothousandrupees)); 
        avaialableMoney.put("100", (initialhundressrupees)); 
        avaialableMoney.put("50", (initialfiftyrupees)); 
        avaialableMoney.put("10", (initialtenrupees)); 
        atmStatus.setAvaialableMoney(avaialableMoney); 
       } 
       //return amountInt; 
      } catch (Exception e) { 
       MyLog.logit().log(Level.SEVERE, e.getMessage()); 
      } 
      System.out.println("Take your Amount = "+(2000*twothousandrupees+100*hundressrupees+50*fiftyrupees+10*tenrupees)); 
      reRun(atmStatus); 

     }//end of getMoney 
    } 

    package shraam.bank.atm; 

    import java.util.HashMap; 
    import java.util.Map; 
    import java.util.logging.Level; 

    public class ATMStatus { 
     public Map<String,Integer> avaialableMoney=new HashMap<String,Integer>(); 
     public ATMStatus(){ 
       MyLog.logit().log(Level.INFO, " ATMStatus Initialized"); 

     avaialableMoney.put("2000", 10); 
     avaialableMoney.put("100", 10); 
     avaialableMoney.put("50", 10); 
     avaialableMoney.put("10", 10); 
     } 
     public Map<String, Integer> getAvaialableMoney() { 
      return this.avaialableMoney; 
     } 
     public void setAvaialableMoney(Map<String, Integer> avaialableMoney) { 
      this.avaialableMoney = avaialableMoney; 
     } 

    } 

    package shraam.bank.atm; 

    import java.io.IOException; 
    import java.util.logging.FileHandler; 
    import java.util.logging.Logger; 
    import java.util.logging.SimpleFormatter; 

    public class MyLog { 

     public static Logger logit() 
     { 
      Logger logger = Logger.getLogger("MyLog"); 
      FileHandler fh; 

      try { 

       // This block configure the logger with handler and formatter 
       fh = new FileHandler("C:/ArunTest/temp/MyLogFile.log"); 
       logger.addHandler(fh); 
       SimpleFormatter formatter = new SimpleFormatter(); 
       fh.setFormatter(formatter); 

       // the following statement is used to log any messages 
       logger.info("My first log"); 

      } catch (SecurityException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return logger; 
     } 

    } 
// 
output: 
Nov 27, 2016 10:43:48 PM shraam.bank.atm.MyLog logit 
INFO: My first log 
Nov 27, 2016 10:43:48 PM shraam.bank.atm.ATMStatus <init> 
SEVERE: ATMStatus 
Currency Avaialbe in ATM 
10:100 Notes 
10:2000 Notes 
10:50 Notes 
10:10 Notes 
Enter Money > 540 
Required Amount : 540 
Total Available amount in ATM : 21600 
Plz take your money in currency 
    No of 2000:0 
    No of 100:5 
    No of 50:0 
    No of 10:4 
Take your Amount = 540 
Nov 27, 2016 10:43:52 PM shraam.bank.atm.MyLog logit 
INFO: My first log 
Nov 27, 2016 10:43:52 PM shraam.bank.atm.CalculateMoneyAtm reRun 
INFO: Would u like to credit more money ? y/n 
Would u like to credit more money ? y/n 
y 
Currency Avaialbe in ATM 
5:100 Notes 
10:2000 Notes 
10:50 Notes 
6:10 Notes 
Enter Money > 2060 
Required Amount : 2060 
Total Available amount in ATM : 21060 
Plz take your money in currency 
    No of 2000:1 
    No of 100:0 
    No of 50:1 
    No of 10:1 
Take your Amount = 2060 
Nov 27, 2016 10:44:04 PM shraam.bank.atm.MyLog logit 
INFO: My first log 
Nov 27, 2016 10:44:04 PM shraam.bank.atm.CalculateMoneyAtm reRun 
INFO: Would u like to credit more money ? y/n 
Would u like to credit more money ? y/n 
Смежные вопросы