首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ATM程序

Java ATM程序
EN

Stack Overflow用户
提问于 2014-11-03 08:54:49
回答 3查看 35.6K关注 0票数 2

我正在做一个自动取款机程序,我很难弄清楚如何让它真正存取款。余额自动开始为$0,但是我不能得到我输入的任何东西来实际增加或减去它,我做错了什么?

代码语言:javascript
复制
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;
}

}

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-03 09:40:19

以下是一些观察结果:

  1. 您的类不应该将oldBalance、global和deposit声明为全局变量。取款方法不应该访问存款变量,反之亦然。尽可能地限制变量的作用域是一种很好的编程实践。因为在此方法之外并不真正需要“存款”变量,所以绝对没有理由将其设置为全局变量。但“当前余额”就不能这么说了。这个变量是这个类的所有方法都需要的:存款、提款、displayBalance等。因此,有一个很好的理由让它成为全局的(但是,如果你可以用较小的范围解决问题,你应该这样做)。
  2. 我不明白为什么deposit()withdrawal()需要返回任何东西。

deposit()withdrawal()最简单的实现是简单地将用户输入添加到currentBalance并将其保存在currentBalance中。

代码语言:javascript
复制
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);
}

您永远不会保存当前余额。==运算符是比较运算符,而不是赋值运算符。当你这样做的时候:

代码语言:javascript
复制
System.out.println((deposit + oldBalance)==newBalance);

或者像这样:

代码语言:javascript
复制
System.out.println(newBalance + withdraw);

您所要做的就是将值传递给println()方法,而不是更新应该保持余额的变量。实际上,第一个应该打印存款(除非false和oldBalance都为零)。在我的代码示例中,currentBalance += amount;currentBalance = currentBalance + amount;的缩写,意思是“将这个amount添加到currentBalance中并将其存储在currentBalance中。因为我重用了currentBalance,所以不再需要oldBalance变量。

票数 2
EN

Stack Overflow用户

发布于 2015-06-24 05:03:21

完全运行的代码

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-11-28 01:14:22

代码语言:javascript
复制
    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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26706313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档