-1

我正在用java开发一个注册和登录程序。由于我是 java 新手,我不确定注册部分使用什么。他们有像 C++ 这样的结构来存储帐户信息吗?还是可以做到这一点的类似且简单的方法?

另外,现在我正在尝试数组方法,这意味着每次用户输入所需的信息时,它都会将每个值存储到适当的数组中。例如一个

final Vector<String>[] usernameV = (Vector<String>[]) new Vector [100];

从用户名文本字段读取输入后

usernameIn = usernameField.getText();

该值将存储到向量中

usernameV[i].add(usernameIn);

但是,如果我有 getPassword(); 我可以使用什么?存储来自 JPasswordField 的输入密码?

提前致谢

4

3 回答 3

1

您可以使用 string[][] 并且喜欢

string[0][0] = "user1"
string[0][1] = "password1"
string[1][0] = "user2"
string[1][1] = "password2"

您是 java 新手,但您可以尝试 HashMaps,它更容易解决这个问题,但一开始更难实现。

看这里http://www.java-tips.org/java-se-tips/java.util/how-to-use-of-hashmap.html

于 2013-02-28T00:15:41.550 回答
0

与 Java 中的 struct 类似的是类(通常是值对象的“bean”)。所以你可以有

class User {
    public String username;
    public String password;
}

模仿一个结构。虽然更常见的是豆

class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    // getPassword and setPassword similar
}

这很冗长,但提供了一些额外的封装,因为类外的世界取决于方法,而不是它们作为私有变量的实现。

那么您的用户“数据库”可能是一个地图。

HashMap<String,User> allUsersByName = new HashMap<String,User>();

// store a new user or update
allUsersByName.put(username, user);

// look up a user
allUsersByName.get(user);

通常用户数据库需要在应用程序重新启动时保持不变,因此您将使用关系数据库和一些 ORM 库(如 Hibernate),或者您将编写手动数据访问代码以将上述内容转换为用户表中的“SELECT”和“INSERT”。

良好的安全实践将在用户名+盐上存储盐和单向加密哈希函数的值。但那是另一回事了——问题是用什么来代替 struct。

于 2013-02-28T00:23:57.633 回答
0

好的,我做了一个更简单的方法来存储用户名和密码数据。当用户提交注册表单时,它会输出到一个文本文件中

private class submitListener implements ActionListener {
    public void actionPerformed(ActionEvent e){
        try {
            String newEmail, newUser, systemMsg;
            char[] newPass;
            char[] confirmNewPass;

            newEmail = emailField.getText();
            newUser = usernameField.getText();
            newPass = passwordField.getPassword();
            confirmNewPass = confirmPassField.getPassword();

            String strPass = new String(newPass);
            String strConfPass = new String(confirmNewPass);
            if(strPass.equals(strConfPass) && !newEmail.isEmpty() && !newUser.isEmpty() && 
                    !strPass.isEmpty()){
                BufferedWriter out = new BufferedWriter(new FileWriter("Data.txt", true));
                BufferedWriter emailOut = new BufferedWriter(new FileWriter("email.txt", true));
                out.write(newUser);
                out.write("\t\t");
                out.write(newPass);
                out.write(System.getProperty("line.separator"));
                emailOut.write(newEmail);
                emailOut.write(System.getProperty("line.separator"));
                systemMsg = "New account created, please log in.";
                JOptionPane.showMessageDialog(null, systemMsg);
                ((CardLayout)cardPanel.getLayout()).show(cardPanel, "login");
                emailField.setText(null);
                usernameField.setText(null);
                passwordField.setText(null);
                confirmPassField.setText(null);
                out.close();
                emailOut.close();
            }
            else{
                systemMsg = "Please enter the missing information.";
                JOptionPane.showMessageDialog(null, systemMsg);
            }
        }catch(IOException E){}
    }
}

然后它将登录信息与这些现有的文本文件进行比较,如下所示:

private class LoginListener implements ActionListener {
    public void actionPerformed(ActionEvent e){
        String username, inUsername, inPass, str = "Incorrect username or password.";
        char[] password;

        username = usernameField.getText();
        password = passwordField.getPassword();
        //Convert char to str
        String convertPass = new String(password);

        try {
            fileScan = new Scanner(new File("Data.txt"));
        }catch(Exception err){}

        while(fileScan.hasNext()){
            inUsername = fileScan.next();
            inPass = fileScan.next();
            if(username.equals(inUsername) && convertPass.equals(inPass)){
                ((CardLayout)cardPanel.getLayout()).show(cardPanel, "main");
                counter++;
            }
        }
        if(counter == 0){
            JOptionPane.showMessageDialog(null, str);   
            usernameField.setText(null);
            passwordField.setText(null);
        }
        fileScan.close();
    }
}

但是当我运行该程序时,即使它们是正确的,它也会不断报告错误的用户名或密码。如何解决这个问题?

于 2013-02-28T12:28:57.523 回答