gpt4 book ai didi

java - ATM机customers.txt文件

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:21 27 4
gpt4 key购买 nike

我是堆栈溢出的新用户..好吧,我正在做一个ATM Java程序..我的问题是,我很难弄清楚如何在我的ATMSimulator.java中创建一个文件阅读器(我的是customers.txt)..

这是我的ATM.java:

/*
An ATM that accesses a bank.
*/

public class ATM
{
public static final int CHECKING = 1;
public static final int SAVINGS = 2;

private int state;
private int customerNumber;
private Customer currentCustomer;
private BankAccount currentAccount;
private Bank theBank;

public static final int START = 1;
public static final int PIN = 2;
public static final int ACCOUNT = 3;
public static final int TRANSACT = 4;

/*
Construct an ATM for a given bank.
@param aBank the bank to which this ATM connects
*/

public ATM (Bank aBank)
{
theBank = aBank;
reset();
}

/*
Resets the ATM to the initial state
*/

public void reset()
{
customerNumber = -1;
currentAccount = null;
state = START;
}

/*
Sets the current customer number and sets state to PIN.
(Precondition: state is START)
@param number the customer number
*/

public void setCustomerNumber (int number)
{
assert state == START;
customerNumber = number;
state = PIN;
}

/*
Finds customer in bank. If found, sets state to ACCOUNT, else to START
(Precondition: state is PIN)
@param pin the PIN of the current customer
*/

public void selectCustomer (int pin)
{
assert state == PIN;
currentCustomer = theBank.findCustomer (customerNumber, pin);

if (currentCustomer == null)
state = START;
else
state = ACCOUNT;
}

/*
Sets current account to checking or savings. Sets state to TRANSACT.
(Precondition: state is ACCOUNT or TRANSACT)
@param account one of CHECKING or SAVINGS
*/

public void selectAccount (int account)
{
assert state == ACCOUNT || state == TRANSACT;

if (account == CHECKING )
currentAccount = currentCustomer.getCheckingAccount ();
else
currentAccount = currentCustomer.getSavingsAccount();
state = TRANSACT;
}

/*
Withdraws amount from current account.
(Precondition state is TRANSACT)
@param value the amount to withdraw
*/

public void withdraw (double value)
{
assert state == TRANSACT;
currentAccount.withdraw(value);
}

/*
Deposits amount to current account.
(Prcondition: state is TRANSACT)
@param value the amount to deposit
*/

public void deposit (double value)
{
assert state == TRANSACT;
currentAccount.deposit (value);
}

/*
Gets the balance of the current account.
(Precondition: state is TRANSACT)
@return the balance
*/

public double getBalance()
{
assert state == TRANSACT;
return currentAccount.getBalance();
}

/*
Moves back to previous state
*/

public void back ()
{
if (state == TRANSACT)
state = ACCOUNT;
else if (state == ACCOUNT)
state = PIN;
else if (state == PIN)
state = START;
}

/*
Gets the current state of this ATM.
@return the currnt state
*/

public int getState ()
{
return state;
}
}

这是我的Customer.java:

/*
A bank customer with a checking and a savings account.
*/

public class Customer
{
private int customerNumber;
private int pin;
private BankAccount checkingAccount;
private BankAccount savingsAccount;

/*
Construct a customer with a given number and PIN.
@param aNumber the customer number
@param aPin the personal identification number
*/

public Customer (int aNumber, int aPin)
{
customerNumber = aNumber;
pin = aPin;
checkingAccount = new BankAccount();
savingsAccount = new BankAccount();
}

/*
Test if this customer matches a customer number and PIN
@param aNumber a customer number
@param aPin a personal identification number
@return true if the customer number and PIN match
*/

public boolean match (int aNumber, int aPin)
{
return customerNumber == aNumber && pin == aPin;
}

/*
Gets the checking account of this customer
@return the checking account
*/

public BankAccount getCheckingAccount()
{
return checkingAccount;
}

/*
Get the savings account of this customer
@return checking account
*/

public BankAccount getSavingsAccount()
{
return savingsAccount;
}
}

这是我的Bank.java:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

/*
A bank contains customer with bank accounts
*/

public class Bank
{
private ArrayList<Customer> customers;

/*
Construct a bank with no customers
*/

public Bank()
{
customers = new ArrayList<Customer> ();
}

/*
Reads the customer numbers and pins
and initializes the bank accounts
@param filename the name of the customer file
*/

public void readCustomers(String filename)
throws IOException
{
Scanner in = new Scanner (new File(filename));

while (in.hasNext())
{
int number = in.nextInt();
int pin = in.nextInt();
Customer c = new Customer (number, pin);
addCustomer (c);
}
in.close();
}

/*
Adds a customer to the bank.
@param c the customer to add
*/

public void addCustomer (Customer c)
{
customers.add(c);
}

/*
Find a customer in the bank.
@param aNumber a customer number
@param aPin a personal identification number
@return the matching customer, or null if no customer matches
*/

public Customer findCustomer (int aNumber, int aPin)
{
for (Customer c : customers)
{
if (c.match(aNumber, aPin))
return c;
}
return null;
}
}

这是我的BankAccount.java:

/**
A bank account has a balance that can be changed by deposits and withdrawals
*/
public class BankAccount
{
private int accountNumber;
private double balance;

/**
Counstruct a bank account with a zero balance.
@param anAccountNumber the account number for this account
*/

public BankAccount(){}


public BankAccount(int anAccountNumber)
{
accountNumber = anAccountNumber;
balance = 0;
}

/**
Construct a bank account with a given balance.
@param anAccountNumber the account number for this account
@param initialBalance the initial balance
*/
public BankAccount(int anAccountNumber, double initialBalance)
{
accountNumber = anAccountNumber;
balance = initialBalance;
}

/**
Gets the account number of this bank account.
@return the account number
*/
public int getAccountNumber()
{
return accountNumber;
}

/**
Deposits money into bank account
@param amount the amount to deposit
*/
public void deposit (double amount)
{
double newBalance = balance + amount;
balance = newBalance;
}

/**
Withdraws money from the bank account.
@param amount the amount to withdraw
*/
public void withdraw(double amount)
{
double newBalance = balance - amount;
balance = newBalance;
}

/**
Gets the current balance of the bank account.
@return the current balance
*/
public double getBalance()
{
return balance;
}
}

我在 ATMSimulator.java 中的 customers.txt 遇到问题:

import java.io.IOException;
import java.util.Scanner;

/*
A text based simulation of an automatic teller machine.
*/

public class ATMSimulator
{
public static void main (String [] args)
{
ATM theATM;

try
{
Bank theBank = new Bank ();
theBank.readCustomers("customers.txt");
theATM = new ATM (theBank);
}

catch (IOException e)
{
System.out.println ("Error opening accounts file.");
return;
}

Scanner in= new Scanner (System.in);

while (true)
{
int state = theATM.getState();
if (state == ATM.START)
{
System.out.print ("Enter customer number: ");
int number = in.nextInt();
theATM.setCustomerNumber(number);
}

else if (state == ATM.PIN)
{
System.out.println ("Enter PIN: ");
int pin = in.nextInt();
theATM.setCustomerNumber (pin);
}

else if (state == ATM.ACCOUNT )
{
System.out.print ("A = Checking, B = Savings, C = Quit: ");
String command = in.next();

if (command.equalsIgnoreCase ("A"))
theATM.selectAccount (ATM.CHECKING);
else if (command.equalsIgnoreCase ("B"))
theATM.selectAccount (ATM.SAVINGS);
else if (command.equalsIgnoreCase ("C"))
theATM.reset();
else
System.out.println ("Illegal input!");
}

else if (state == ATM.TRANSACT)
{
System.out.println ("Balance = " + theATM.getBalance());
System.out.print ("A = Deposit, B = Withdrawal, C = Cancel: ");
String command = in.next();

if (command.equalsIgnoreCase ("A"))
{
System.out.print ("Amount: ");
double amount = in.nextDouble();
theATM.deposit (amount);
theATM.back();
}

else if (command.equalsIgnoreCase ("B"))
{
System.out.print ("Amount: ");
double amount = in.nextDouble();
theATM.withdraw (amount);
theATM.back();
}

else if (command.equalsIgnoreCase ("C"))
theATM.back();

else
System.out.println ("Illegal input!");
}
}
}
}

我已创建 customers.txt 文件,但输出错误..请帮助我

最佳答案

我会解决你的问题,而不是大量的代码。

您可以通过这种方式有效地读取文件。

try( BufferedReader br = new BufferedReader(new FileReader("filename.txt"))){  
String line;
while((line = br.readLine()) != null){

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

如果您想从控制台读取:

try( BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){  
String line;
while((line = br.readLine()) != null){

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

要在控制台中指示输入结束,请使用 ctrl + z

关于java - ATM机customers.txt文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33929274/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com