0
我在尝试弄清如何为我的银行程序编写存款和提款代码并保持运行总计时遇到问题。该计划应该在银行以$ 0开始,并且不能低于$ 0。您可以存入和退出此帐户,并可查看已存入和退出菜单的人员。Java - 在简单的GUI银行程序中运行总计
我需要帮助,试图编码的部分,保持帐户的总量,以便用户不能提取更多的东西在帐户。所以如果账户中有100美元,他们不能提取200美元。
注意:“创建帐户”操作仅用于在存款/提款时为您提供唯一的ID,并且完全不影响登录。
Login.java:
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Login {
private JFrame mainFrame;
private JLabel headerLabel;
private JLabel statusLabel;
private JPanel controlPanel;
int cid;
public Login() {
prepareGUI();
}
public static void main(String[] args) {
Login login = new Login();
login.showTextField();
}
private void prepareGUI() {
mainFrame = new JFrame("Login");
mainFrame.setSize(400, 400);
mainFrame.setLayout(new GridLayout(3, 1));
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent wE) {
System.exit(0);
}
});
headerLabel = new JLabel("", JLabel.CENTER);
statusLabel = new JLabel("", JLabel.CENTER);
statusLabel.setSize(350, 100);
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
mainFrame.add(statusLabel);
mainFrame.setVisible(true);
}
private void showTextField() {
headerLabel.setText("Account Access");
JLabel namelabel = new JLabel("User ID: ", JLabel.RIGHT);
JLabel passwordLabel = new JLabel("Password: ", JLabel.CENTER);
final JTextField userText = new JTextField(6);
final JPasswordField passwordText = new JPasswordField(6);
JButton loginButton = new JButton("Login");
JButton createAccountButton = new JButton("Create Account?");
loginButton.addActionListener(new ActionListener() {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
/*
* check for correct password/usernameinclude a desired
* 'hardcoded' username /password to verify againstuser input
* values for both username & password fieldsgive popup message
* if either username or password is incorrect
*/
if (userText.getText().equals("mister")
&& passwordText.getText().equals("jim")) {
// close of Login window
mainFrame.dispose();
// open up MainWindow
new MainWindow(userText.getText(), cid);
}
else {
String message = "Incorrect username and/or password!\nTry again!";
JOptionPane.showMessageDialog(null, message);
}
}
});
createAccountButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String name = JOptionPane.showInputDialog(null,
"Enter your name");
// generate client id
Random r = new Random();
cid = r.nextInt(100000);
}
});
controlPanel.add(namelabel);
controlPanel.add(userText);
controlPanel.add(passwordLabel);
controlPanel.add(passwordText);
controlPanel.add(loginButton);
controlPanel.add(createAccountButton);
mainFrame.setVisible(true);
}
}
MainWindow.java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class MainWindow extends JFrame {
private JFrame mainFrame;
private JLabel statusLabel;
private JMenu file = new JMenu("File");
private JMenu Account = new JMenu("Account");
int cid;
public MainWindow(String name, final int cid) {
this.cid = cid;
file.setMnemonic('F');
JMenuItem ItemNew = new JMenuItem("New");
ItemNew.setMnemonic('N');
file.add(ItemNew);
JMenuItem ItemExit = new JMenuItem("Exit");
ItemExit.setMnemonic('x');
file.add(ItemExit);
ItemExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
Account.setMnemonic('A');
JMenuItem ItemDeposits = new JMenuItem("Deposits");
ItemDeposits.setMnemonic('D');
Account.add(ItemDeposits);
JMenuItem ItemWithdraws = new JMenuItem("Withdrawals");
ItemWithdraws.setMnemonic('W');
Account.add(ItemWithdraws);
JMenuItem ItemView = new JMenuItem("View Account");
ItemView.setMnemonic('W');
Account.add(ItemView);
ItemDeposits.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {// add a deposit
Double sBal = Double.parseDouble(JOptionPane.showInputDialog(
null, "Enter deposit amount"));
// create Account object
Account accountObj = new Account();
accountObj.setBal(sBal);
// show result
System.out.println(accountObj.getCID() + accountObj.getBal());
File f = new File("account.dat");
try {
FileWriter fw = new FileWriter(f, true);
fw.write(cid + " " + accountObj.getBal() + "\n");
fw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
ItemWithdraws.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {// add a deposit
Double sBal = Double.parseDouble(JOptionPane.showInputDialog(
null, "Enter withdrawal amount"));
// create Account object
Account accountObj = new Account();
accountObj.setBal(sBal);
// show result
System.out.println(accountObj.getBal());
File f = new File("account.dat");
try {
FileWriter fw = new FileWriter(f, true);
fw.write(cid + " " + accountObj.getBal() + "\n");
fw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
ItemView.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
statusLabel.setVisible(false); // make status label invisible
// set up JTable logic
Vector<Vector<String>> myVector = new Vector<Vector<String>>(); // multidim
// vector
// (vector
// of
// vectors)
try {
BufferedReader file = new BufferedReader(new FileReader(
"account.dat"));
String input;
while ((input = file.readLine()) != null) {
String[] temp = input.split(" "); // grab row (record)
// data parsed by a
// space
Vector<String> v = new Vector<String>(); // single dim
// vector to
// get
// fields in
// each
// record
for (int i = 0; i < temp.length; i++) {
v.add(temp[i]); // add each field to vector
}
myVector.add(v); // add all field data as a new vector
// row (represents a record of data
// each dynamically!!!)
}
file.close();
} catch (IOException e1) {
e1.printStackTrace(System.err);
}
Vector<String> columnData = new Vector<String>();
columnData.addElement("ID");
columnData.addElement("D/W");
try {
JTable jt;
jt = new JTable(myVector, columnData);
jt.setBounds(30, 40, 200, 300);
JScrollPane sp = new JScrollPane(jt);
mainFrame.add(sp);
} catch (Exception ex) {
System.out.println("There was a problem: " + ex);
ex.printStackTrace();
}
}
});
ItemNew.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
statusLabel = new JLabel();
statusLabel.setText("Currently Logged In: " + name + " #" + cid);
statusLabel.setHorizontalAlignment(JLabel.RIGHT);
statusLabel.setVerticalAlignment(JLabel.TOP);
prepareGUI();
}
private void prepareGUI() {
mainFrame = new JFrame("Main");
// adjust label position to sit in the upper right corner of window
mainFrame.add(statusLabel);
// add menu bar component to frame
JMenuBar bar = new JMenuBar();
bar.add(file); // set menu orders
bar.add(Account);
mainFrame.setJMenuBar(bar);
mainFrame.setSize(400, 400);
mainFrame.setVisible(true);
}
}
Account.java:
public class Account {
// data members
double bal;
static double intRate;
int cid;
String name;
public Account() {
}
// getters
double getBal() {
return bal;
}
int getCID() {
return cid;
}
// setters
void setBal(double bal) {
// update balance
this.bal += bal;
}
void setCID(int cid) {
this.cid = cid;
}
static void adjustIntRate(double r) {
intRate = r;
}
}
我认为你需要提供更具体的问题描述。你究竟有什么问题? – mattias
好吧抱歉,我会尽力解释更好。 我有这个银行帐户$ 0和程序应该保持在后台运行总计,以便当我试图退出帐户,它不会低于$ 0。 – Alternate
那么目前来看,似乎没有办法减少'Account'中的余额。您的撤销代码似乎称为只能添加到余额的方法。 –