したがって、RegisterandLogin というプログラムを作成しています。このプログラムは、基本的に、新しいアカウントを作成するためにユーザー名、パスワードを入力し、パスワードを再入力する必要があります。ユーザーとパスワードの検証は、次を使用して実行できます。
1.登録時に入力したユーザー名は、username.txt の 5 つの名前のいずれとも同じであってはなりません。
2.また、ユーザー名は数字を含まない 5 ~ 8 文字である必要があります (つまり、ユーザー名は [AZ] または [az] のみで、[0-9] のような数字は使用できません)。
3. パスワードも 5 ~ 8 文字で、数字も使用できます (したがって、12345 と abcde はどちらも有効なパスワードです)。
4.再入力するパスワードは、パスワードと同じである必要があります。そうでない場合、登録ボタンを押した後にエラー メッセージが出力されます。
ユーザー名が 5 ~ 8 文字の有効性チェックに合格し、ユーザー名が username.txt に存在せず、パスワードが有効性チェックに合格すると、新しいユーザー名が username.txt に追加されます。
そのため、すでに 5 つの名前で username.txt を作成しています。ただし、私が抱えている問題は、ユーザー名が使用されているかどうかを確認できるように、username.txt ファイルを読み取る方法がわからないことです。
ここのコードは少し長いですが、助けていただければ幸いです。
import javax.swing.*;
import java.io.*;
import java.awt.event.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.*;
import java.util.Scanner;
public class RegisterandLogin extends JFrame {
// variables for Sign up screen
private JPanel suP;
private JLabel suName, suPW, suRetypePW;
private JTextField suNameText, suPWText, suRetypePWText;
private JButton suButton;
public RegisterandLogin ()
{
super ("Register and Login");
signupScreen();
}
public void signupScreen () {
suP = new JPanel ();
// suP.setSize(50, 60);
setLayout (new FlowLayout());
setContentPane (suP);
suName = new JLabel ("Name");
suNameText = new JTextField (10);
suPW = new JLabel ("Password");
suPWText = new JTextField (10);
suRetypePW = new JLabel ("Retype Password");
suRetypePWText = new JTextField (10);
suButton = new JButton ("Register");
suP.add (suName);
suP.add(suNameText);
suP.add(suPW);
suP.add (suPWText);
suP.add (suRetypePW);
suP.add (suRetypePWText);
suP.add(suButton);
suP.setVisible(true);
ButtonHandler handlersu = new ButtonHandler();
suButton.addActionListener(handlersu);
}
public void validatebyarray() {
String[] read1=null;
String[] read=null;
read1=files(read);
int minL = 5, maxL = 8;
String stName = suNameText.getText();//username
String stPW = suPWText.getText();//password
String stRePW = suRetypePWText.getText();//retype password
/******************************************************
* Validate user name *
******************************************************/
if(stName.length()< minL || stName.length() > maxL ) // Check username length
System.out.println ("User name must be between 5 and 8");
else
{
//check invalid characters in username
for (int i = 0 ; i < stName.length(); i ++) // Check for invalid character
if (!
((stName.charAt (i)>= 'A' && stName.charAt (i) <= 'Z') ||
(stName.charAt (i)>= 'a' && stName.charAt (i) <= 'z')))
{
System.out.println ("Username contains invalid character");
break;
}
// Match the names in the array (file or database)
// Note the logic below works but is NOT secure since it discloses
// information about user names.
boolean uNfound = false;
for (int j = 0; j < 4; j++)
if (read1[j].equals(stName))
{
System.out.println ("User name " + read1[j] + " already exits");
uNfound = true;
break;
}
//if (!uNfound)
// System.out.println ("User name " + stName + " created");
}
System.out.println ("After UN");
/******************************************************
* Validate password *
******************************************************/
if(stPW.length()< minL || stPW.length() > maxL ) // Check username length
System.out.println ("Password must be between 5 and 8");
else
{
//check invalid characters in username
for (int i = 0 ; i < stPW.length(); i ++) // Check for invalid character
if (!
((stPW.charAt (i)>= '0' && stPW.charAt (i) <= '9') ||
(stPW.charAt (i)>= 'A' && stPW.charAt (i) <= 'Z') ||
(stPW.charAt (i)>= 'a' && stPW.charAt (i) <= 'z')))
{
System.out.println ("Password contains invalid character");
break;
}
// Note stName replaced by stPW and stRePW;
// uN[] replaced by pN[]
boolean uNfound = false;
if (stPW.equals(stRePW))
{
System.out.println ("User name " + stName + " created");
uNfound = true;
}
if (!uNfound)
System.out.println ("Passwords does not match");
}
//System.out.println ("After UN again");
}
class ButtonHandler implements ActionListener
{
public void actionPerformed (ActionEvent event){
if (event.getSource () == suButton){
System.out.println ("SU button in register screen hit");
validatebyarray();
}
}
}
public String[] files(String [] read)
{
try {
BufferedReader file1 = new BufferedReader(new FileReader("usernames.txt"));
// Scanner fileReaderScan=new Scanner(readTextFile);
//only want first 5 lines
for(int count=0;count<5;count++)
{
read[count] = file1.readLine(); //use readLine method
System.out.println(read[count]);
}
file1.close(); //close file
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("OOps");
}
return read;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
RegisterandLogin rl = new RegisterandLogin ();
rl.setSize(200, 300);
rl.setVisible(true);
rl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}