我正在使用java中的注册和登录程序。因为我是java的新手,所以我不确定注册部分要使用什么。他们是否有像C ++这样的结构来存储帐户的信息?或者类似而简单的方法可以做到这一点?
此外,我现在正在尝试使用数组方法,这意味着每次用户输入所需信息时,它都会将每个值存储到相应的数组中。例如
final Vector<String>[] usernameV = (Vector<String>[]) new Vector [100];
从用户名文本字段
读取输入后usernameIn = usernameField.getText();
该值将存储到向量
中usernameV[i].add(usernameIn);
但是,如果我有getPassword(),我可以使用什么;存储来自JPasswordField的输入密码?
提前致谢
答案 0 :(得分:1)
您可以使用字符串[] []和
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
答案 1 :(得分: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”表
良好的安全性实践会在username + salt上存储单向加密哈希函数的salt和值。但这是另一个故事 - 问题是在结构的位置使用什么。
答案 2 :(得分: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();
}
}
但是当我运行该程序时,它会报告错误的用户名或密码,即使它们是正确的。如何解决这个问题?