2013-02-28 95 views
-1

我正在使用java的注册和登录程序。由于我是java新手,我不确定注册部分使用什么。他们是否具有像C++一样的结构来存储帐户的信息?或者可以做到这一点的类似和简单的方法?Java中的建筑物注册功能

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

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

从用户名文本字段

usernameIn = usernameField.getText(); 

读取输入后的值将被存储到载体

usernameV[i].add(usernameIn); 

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

在此先感谢

+1

不,请不要这样做。 – duffymo 2013-02-28 00:07:43

+0

@duffymo并做什么呢? – OscarRyz 2013-02-28 00:09:48

+1

如果你熟悉C++,那么你知道它的类作为结构几乎是相同的。 Java只有类。 – 2013-02-28 00:17:51

回答

0

中类似的事情在Java中结构是类(通常是一个“豆腐”为价值对象)。所以你可以有

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或者你会写手动数据访问代码把上面分为“选择”和“INSERT “在你的用户表中。

良好的安全习惯会在用户名+盐上存储单向密码哈希函数的salt值。但是,这是另一个故事 - 问题就是在struct中使用什么。

1

您可以使用字符串[] []和做喜欢

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

你是新来的Java,但你可以尝试包含HashMap哪一个更容易这个问题,但更难首先执行。

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

+0

以明文存储密码。 ***极好的想法....此外,数组indeces以0开头。 – Doorknob 2013-02-28 00:16:44

+0

没有多少人会偷车而没有车轮,我相信他的测试是基于没有互联网接入的本地计划。当然,如果需要的话,您总是可以轻松地制作一个程序来加密所有密码并将它们移动到更安全的位置。我没有看到他想要做什么的问题。另外,你为什么会冷落他,他提出了一个解决方案和参考。 – Dmitry 2013-02-28 00:18:57

+0

@Dmitry编辑之前,他有从1开始的数组单元。 – Doorknob 2013-03-01 13:50:35

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

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