我正在制作一个空白程序,允许用户创建一个帐户,以便他们可以存储余额并提取/存款。用户输入用户名和密码后,如何存储此信息以便用户可以登录并查看其余额?我不一定要努力做到这一点,因此它非常安全,我只是希望能够存储帐户信息并能够在以后访问它。
这是他们将创建帐户的类(仍在进行中):
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class CreateAccount extends JFrame implements ActionListener {
JLabel username = new JLabel("Enter your username");
JTextField enterUsername = new JTextField(null, 15);
JLabel password = new JLabel("Enter your password");
JPasswordField enterPassword = new JPasswordField(null, 15);
JLabel passwordConfirm = new JLabel("Confirm your password.");
JPasswordField enterConfirmPassword = new JPasswordField(null, 15);
JButton okButton = new JButton("OK");
public CreateAccount() {
add(username);
add(enterUsername);
add(password);
add(enterPassword);
add(passwordConfirm);
add(enterConfirmPassword);
add(okButton);
okButton.addActionListener(this);
setTitle("New Bank Account Creation");
setVisible(true);
setSize(270, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
}
@Override
public void actionPerformed(ActionEvent e) {
char[] pass = enterPassword.getPassword();
String passString = new String(pass);
char[] passConfirm = enterConfirmPassword.getPassword();
String passStringConfirm = new String(passConfirm);
String userName = enterUsername.getText();
if (e.getSource() == okButton) {
if (!passString.equals(passStringConfirm) || userName.equals(null) || passString.equals(null) || passStringConfirm.equals(null)) {
JOptionPane.showMessageDialog(null, "Entered an invalid username or password!");
enterUsername.setText("");
enterPassword.setText("");
enterConfirmPassword.setText("");
}
}
}
}
以下是我希望将这些帐户存储为的帐户类:
import javax.swing.JOptionPane;
public class Account {
private String name;
private double balance;
public Account(String name, double balance) {
getName();
getBalance();
this.name = name;
this.balance = balance;
}
String getName() {
return name = JOptionPane.showInputDialog("What is your name?");
}
double getBalance() {
String userBalance = JOptionPane.showInputDialog("How much money would you like to deposit?");
return balance = Double.parseDouble(userBalance);
}
public void setName() {
this.name = name;
}
public void setBalance() {
this.balance = balance;
}
}
答案 0 :(得分:2)
JDBC不是一个非常好的API,但是非常便携,但如果你想存储的不仅仅是使用信息,你可以考虑看看有一些很好实现的JPA,如Hibernate,EclipseLink或OpenJPA。
我几乎忘了,好的做法建议只存储密码的哈希值,而不是纯文本版本......
答案 1 :(得分:1)
使用包含用户信息的文件。对于包含用户多个属性的银行应用程序,我建议使用Excel工作表,因为您不关心安全性。
ApachePOI库可以很好地编辑Excel文档。
答案 2 :(得分:0)
我假设您是Java的新手,因此可能不希望在此阶段对数据库或第三方库感到烦恼。您可以使用简单的文本文件来完成此操作。
首先,让我们从Account类中删除任何UI代码。这是一个域对象,应该对从UI传递的数据进行操作。
public class Account {
private String userName;
private double balance;
public Account(String userName, double balance) {
this.userName = userName;
this.balance = balance;
}
public double getBalance() {
return balance;
}
public void withdraw(double amount){
//check balance >= amount
balance -= amount;
}
public void deposit(double amount){
balance += amount;
}
public void getUserName(){
return userName;
}
}
我们假设现在用户只能拥有一个帐户,并且每个用户都已拥有现有帐户记录。成功登录后,我们将从属性文件中读取余额。
因此我们将预先创建文件:
将有两行:
user1=password
user2=password
和
每一行都有一行:
balance=1000.00
要验证我们将使用输入的详细信息调用以下内容:
private boolean authenticate(String userName, String password) throws Exception{
File userFile = new File("c:/bank-data/users.txt");
FileInputStream in = new FileInputStream(userFile);
Properties properties = new Properties();
properties.load(in);
String storedPassword = properties.getProperty(userName));
in.close();
return password.equals(storedPassword);
}
成功登录后,我们将调用以下方法,该方法将加载给定用户名的相关文件,读取余额并返回使用余额初始化的新帐户。
private Account onLogin(String userName) throws Exception{
//base data directory
File database = new File("c:/bank-data");
//file per user under base data directory
File accountFile = new File(database, userName + ".txt");
if(accountFile.exists()){
FileInputStream in = new FileInputStream(accountFile);
Properties properties = new Properties();
properties.load(in);
double balance = Double.parseDouble(properties.getProperty("balance"));
in.close();
}else{
//handle new account
}
return new Account(userName, balance);
}
调用此方法后,您应该能够向用户显示其余额。一些提款/存款后保存是一个简单的案例,可以将资产写回来。