2013-02-28 59 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(); 
    } 
} 

但是當我運行該程序,即使它們正確,它仍會報告錯誤的用戶名或密碼。如何解決這個問題?