更新文本文件中的double

时间:2014-01-17 23:00:15

标签: java file bufferedreader

我有ArrayList个用户帐户存储在文本文件中,每个帐户代表一个虚拟银行帐户。

在用户决定添加或提取资金后,更新帐户余额的最有效方法是什么?

我已经成功检索了余额,只需要保存它。

到目前为止,我所拥有的大部分魔力都发生在ATM和银行类

ATM CLASS

public class ATM {

public static void main(String[] args) throws IOException {

    Bank bank = new Bank();
    double balance = 0;

    // Welcome screen
    String dash = "-------------------\n";
    System.out.print(dash);
    System.out.print("Welcome to the Bank\n");
    System.out.print(dash);
    System.out.println("Do you have an account with us? (y/n) ");
    Scanner scanner = new Scanner(System.in);
    String answer = scanner.nextLine();

    while (true) {

    if (answer.equalsIgnoreCase("y")) {

        System.out.println("Username: ");
        String userName = scanner.next();
        System.out.println("PIN: ");
        int pin = scanner.nextInt();

        bank.hasUser(userName, pin);

        if (bank.hasUser(userName, pin)) {
            User.balance = bank.getBalance(userName, pin, balance);
            bank.menu();
            break;
        } else if (!bank.hasUser(userName, pin)) {
            System.out.println("\n** Incorrect username or password, please try again**\n");
        }

    } else if (answer.equalsIgnoreCase("n")) {

        Bank.newUser();
        break;

    } else {
        System.out.println("\nThat's not an option, do you have an account with us?");
    }

    }


}

}

银行类

public class Bank {

public static void newUser() {

    // new user is created
    String dash = "-------------------\n";
    Scanner scanner = new Scanner(System.in);

    System.out.println("Enter your full name below (e.g. John M Smith): ");
    String name = scanner.nextLine();
    System.out.println("Create a username: ");
    String userName = scanner.nextLine();
    System.out.println("Enter your starting deposit amount: ");
    double balance = scanner.nextDouble();

    System.out.print(dash);
    System.out.print("Generating your information...\n");
    System.out.print(dash);

    int pin = PIN();
    String accountNum = Bank.accountNum();

    User user = new User(name, userName, pin, accountNum, balance);

    // new user gets added to the array list
    Bank.users.add(user);

    try {

        File file = new File("users.text");
        if (!file.exists()) {
            file.createNewFile();
        }

        FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
        BufferedWriter bw = new BufferedWriter(fw);

        bw.append(String.valueOf(Bank.users + "\n"));
        bw.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void menu() {

    while (true) {

        System.out.print("\n1");
        System.out.print(" - Acount Summary     ");
        System.out.print("3");
        System.out.print(" - Deposit Money\n");
        System.out.print("2");
        System.out.print(" - Withdraw Money     ");
        System.out.print("4");
        System.out.print(" - Exit\n\n");
        System.out.print("I would like to: \n");

        Scanner bscanner = new Scanner(System.in);
        int mc = bscanner.nextInt();

        if (mc == 1) {
            System.out.print("Your current balance is: $"
                    + User.getBalance() + "\n");
        } else if (mc == 2) {
            System.out.print("Enter withdrawl amount: ");
            double wd = bscanner.nextDouble();
            User.balance -= wd;
            System.out.println("\n$" + User.getBalance()
                    + " is your new account balance.");
        } else if (mc == 3) {
            System.out.print("Enter deposit amount: ");
            double dp = bscanner.nextDouble();
            User.balance += dp;
            System.out.println("\n$" + User.getBalance()
                    + " is your new account balance.");
        } else if (mc == 4) {
            System.exit(0);
        } else {
            System.out
                    .print("\nThat's not an option, please select an option listed below!\n");
        }
    }
}

public boolean hasUser(String userName, int pin) {

    try {

        BufferedReader reader = new BufferedReader(new FileReader(
                "users.text"));
        String line;
        while ((line = reader.readLine()) != null) {
            line = line.replaceAll("[\\[\\]]", "");
            String[] tokens = line.split(",");
            if (userName.equals(tokens[1])
                    && pin == Integer.parseInt(tokens[3])) {
                return true;
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return false;
}

public double getBalance(String userName, int pin, double balance) {

    boolean r = false;

    try {
        BufferedReader br = new BufferedReader(new FileReader("users.text"));
        String line;
        while ((line = br.readLine())!= null) {
            line = line.replaceAll("[\\[\\]]", "");
            String[] num = line.split(",");
            if (userName.equals(num[1]) && pin == Integer.parseInt(num[3])) {
                r = true;
            }

            if (r) {
                balance = Double.parseDouble(num[4]);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return balance;
}

// array list for users
static ArrayList users = new ArrayList();
{

};
}

Screenshot of text file, description of each item below

2 个答案:

答案 0 :(得分:1)

执行此操作的一种好方法是将帐户保存在ArrayList中(正如您所做),然后再次保存整个文本文件。如果您处理的是少量数据,则不会花费很长时间。 (考虑优化的更好方法是不是每次需要访问数据时重新打开文件,只需将其保存在数组列表中。)

此外,您可能不需要在每次更改后保存文件。如果您是使用该文件的唯一应用程序,请尝试在关闭时保存它。

如果你想要真正好的表现,你需要一个数据库。

答案 1 :(得分:0)

你必须写信给我看不到的任何文件...

    File fileWriter = new File("user.txt"); //recall it or whatever
    PrintWriter writer = new PrintWriter(new FileWriter(fileWriter, true)); //APPEND

        writer.println(balance, name, eg...);

    writer.close();
}

Printwriter比文件编写者更有效,无论如何都需要文件编写器,但是如果你想做多个人然后只是为了循环它,它也会工作,并且不要忘记关闭!  for(int i = 0; i< users; i ++){// for for loop

如果你还有问题,那么再问我已经完成了dbms而另一个答案很简单。希望这有帮助!