从用户创建的帐户存储用户/通行证?

时间:2014-11-13 15:33:26

标签: java persistence

我正在制作一个空白程序,允许用户创建一个帐户,以便他们可以存储余额并提取/存款。用户输入用户名和密码后,如何存储此信息以便用户可以登录并查看其余额?我不一定要努力做到这一点,因此它非常安全,我只是希望能够存储帐户信息并能够在以后访问它。

这是他们将创建帐户的类(仍在进行中):

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;
    }

}

3 个答案:

答案 0 :(得分:2)

恕我直言,你应该使用一个数据库。对于简单的应用程序,您可以使用HSQL,H2或Derby等嵌入式数据库。如果您的需求在以后增长,您可以使用完全相同的API轻松迁移到MySQL,MariaDB或PostgreSQL。

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;
    }
}

我们假设现在用户只能拥有一个帐户,并且每个用户都已拥有现有帐户记录。成功登录后,我们将从属性文件中读取余额。

因此我们将预先创建文件:

  • c:\ bank-data \ users.txt

将有两行:

user1=password
user2=password

  • c:\ bank-data \ accounts \ user1.txt
  • C:\银行数据\占\ user2.txt

每一行都有一行:

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);
}

调用此方法后,您应该能够向用户显示其余额。一些提款/存款后保存是一个简单的案例,可以将资产写回来。

http://www.mkyong.com/java/java-properties-file-examples/