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

構造体を模倣します。より一般的なのは Bean ですが、

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

通常、ユーザー データベースはアプリケーションの再起動後も保持する必要があるため、リレーショナル データベースと Hibernate などの ORM ライブラリを使用するか、ユーザー テーブルで上記を「SELECT」と「INSERT」に変換する手動のデータ アクセス コードを記述します。

また、適切なセキュリティ対策として、ソルトと一方向暗号化ハッシュ関数の値をユーザー名 + ソルトに格納します。しかし、それは別の話です。問題は、構造体の代わりに何を使用するかということでした。

于 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 に答える