카테고리 없음

Java 입문 login처리 예제(2)

건강한너구리 2021. 11. 9. 11:28

 

저번 글에서 만든 회원가입 & 로그인에서 메모장을 활용해 저장이 가능하게 만들어 보려고 해요.

 

 

static ArrayList<String> Snig_id = new ArrayList<>(); // 회원가입 된 아이디
static ArrayList<String> Snig_pw = new ArrayList<>(); // 회원가입 된 비밀번호

메모장에서 불러온 아이디와 비밀번호를 나눠서 저장하기 위해 두 개의 배열을 만들었어요.

한 번에 비교해도 되지만 나눠서 비교하는 게 효과적이라 생각해서 두 개로 만들었습니다.

 

 static(정적)을 앞에 붙인 이유는 어디에서나 선언 없이 사용할 수 있도록 해주는 거라고 생각하면 됩니다.

 

 

 public static void Snig_up(){ // 저장된 아이디 & 비밀번호 불러오기
        File snig = new File("C:/Users/user/Desktop/js/snig.txt"); // 메모장 불러오기

        try{
            BufferedReader br = new BufferedReader(new FileReader(snig));
            String[] str = br.readLine().split(","); // "," 를 기준으로 나눈다.
            while(str != null){
                Snig_id.add(str[0]); // 아이디
                Snig_pw.add(str[1]); // 비밀번호
                str = br.readLine().split("=");
            }
            br.close();
        } catch (NullPointerException e){
            e.getStackTrace();
        } catch (FileNotFoundException e){
            e.getStackTrace();
        } catch (IOException e){
            e.getStackTrace();
        }
    }

메인 메소드 아래에 새로운 메소드를 만들었어요. while문이 시작할때 메소드를 선언해주면 회원 가입된 아이디와 비밀번호를 불러와서 배열에 저장하는 로직입니다.

 

여기서도 선언 없이 사용하기 위해 static을 붙여줬습니다.

 

 

public static String save(String id, String pw){ // 입력한 아이디와 비밀번호 저장 메소드
        File snig = new File("C:/Users/user/Desktop/js/snig.txt"); // 메모장 불러오기
        for(int i = 0; i < Snig_id.size(); i++ ){
            if(id.equals(Snig_id.get(i))){
                return "Fall"; // 아이디가 중복이면 fall 반환
            }
        }
        Snig_id.add(id); // 아이디 배열에 추가
        Snig_pw.add(pw); // 비밀번호 배열에 추가
        try{
            FileWriter fw = new FileWriter(snig, false); // false 메모장 초기화후 새로 저장
            for(int i = 0; i < Snig_id.size(); i++){
                fw.write(Snig_id.get(i)+","+Snig_pw.get(i)+"\n"); // 아이디 & 비밀번호를 같이 입력
            }
            fw.close();
        } catch (Exception e){
            e.getStackTrace();
        }
        return "success"; //성공적으로 저장되면 success 반환
    }

아이디가 저장된 배열의 크기만큼 루프를 돌아서 입력한 아이디와 배열에 저장된 아이디가 같으면 중복으로 나타냈어요.

 

중복되지 않았다면 새롭게 아이디와 비밀번호를 붙여서 저장하도록 만들었습니다.

 

else if("2".equals(Ch)){
                System.out.print("ID :");
                String ID_Ch = bf.readLine();

                System.out.print("PW :");
                String PW_Ch = bf.readLine();
                boolean YN = true; // 조건을 걸기위한 boolean
                for(int i = 0; i < Snig_id.size(); i++ ){
                    if(Snig_id.get(i).equals(ID_Ch) && Snig_pw.get(i).equals(PW_Ch)){ // 아이디와 비밀번호가 같으면 성공
                        System.out.println("login Success!");
                        YN = true;
                        break; // 다시 루프문 처음으로 돌아가기
                    }else{
                        YN = false;
                    }
                }
                if(YN == false){
                    System.out.println("Fall.."); // 하나라도 다르면 실패
                }

저번 글에서 만든 로그인 부분을 이렇게 바꿔주시면 끝입니다. 

파일 저장할 때 중복체크와 비슷한 형식으로 만들어주시면 돼요!

 

boolean 형은 true & false를 나타냅니다.

성공하면 true를 반환하고 실패하면 false를 반환해서 조건문에 걸리게 만들었습니다.

 

저번 글에서 말했지만 메모장만 컨트롤할 수 있어도 이렇게 다양하게 응용이 가능합니다.

 

마지막으로 전체 코드 보여드리고 마무리할게요.

 

 

import java.io.*;
import java.util.ArrayList;

public class login_note {
   static ArrayList<String> Snig_id = new ArrayList<>(); // 회원가입 된 아이디
   static ArrayList<String> Snig_pw = new ArrayList<>(); // 회원가입 된 비밀번호

    public static void main(String [] args) throws IOException {

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); // 회원가입 및 로그인 입력을 위한 입력문 선언
        String ID = ""; // 아이디
        String PW = ""; // 비밀번호
        while(true){
            Snig_id = new ArrayList<>(); // 초기화
            Snig_pw = new ArrayList<>();
            Snig_up(); // 회원가입 된 아이디 & 비밀번호 불러오기
            System.out.print("1.Sign Up\n2.Sign in\n3.Exit\nCh : ");
            String Ch = bf.readLine();


            if("1".equals(Ch)){
                System.out.print("ID :");
                String ID_Ch = bf.readLine(); // [회원가입] 아이디 입력

                System.out.print("PW :");
                String PW_Ch = bf.readLine(); // [회원가입] 비밀번호 입력

                ID = ID_Ch; //입력한 아이디 저장
                PW = PW_Ch; // 입력한 비빌번호 저장

                String result = save(ID , PW);
                if("Fall".equals(result)){ // 반환값이 fall과 success뿐이기때문에 fall이 아닌 다른값은 success만 넘어옵니다.
                    System.out.println("Fall..");
                }else{
                    System.out.println("Snig up Success!");
                }

            }else if("2".equals(Ch)){
                System.out.print("ID :");
                String ID_Ch = bf.readLine();

                System.out.print("PW :");
                String PW_Ch = bf.readLine();
                boolean YN = true; // 조건을 걸기위한 boolean
                for(int i = 0; i < Snig_id.size(); i++ ){
                    if(Snig_id.get(i).equals(ID_Ch) && Snig_pw.get(i).equals(PW_Ch)){ // 아이디와 비밀번호가 같으면 성공
                        System.out.println("login Success!");
                        YN = true;
                        break; // 다시 루프문 처음으로 돌아가기
                    }else{
                        YN = false;
                    }
                }
                if(YN == false){
                    System.out.println("Fall.."); // 하나라도 다르면 실패
                }

            }else if("3".equals(Ch)){
                return; // 종료
            }else{
                System.out.println("RE");
            }

        }


    }

    public static void Snig_up(){ // 저장된 아이디 & 비밀번호 불러오기
        File snig = new File("C:/Users/user/Desktop/js/snig.txt"); // 메모장 불러오기

        try{
            BufferedReader br = new BufferedReader(new FileReader(snig));
            String[] str = br.readLine().split(","); // "," 를 기준으로 나눈다.
            while(str != null){
                Snig_id.add(str[0]); // 아이디
                Snig_pw.add(str[1]); // 비밀번호
                str = br.readLine().split(",");
            }
            br.close();
        } catch (NullPointerException e){
            e.getStackTrace();
        } catch (FileNotFoundException e){
            e.getStackTrace();
        } catch (IOException e){
            e.getStackTrace();
        }
    }

    public static String save(String id, String pw){ // 입력한 아이디와 비밀번호 저장 메소드
        File snig = new File("C:/Users/user/Desktop/js/snig.txt"); // 메모장 불러오기
        for(int i = 0; i < Snig_id.size(); i++ ){
            if(id.equals(Snig_id.get(i))){
                return "Fall"; // 아이디가 중복이면 fall 반환
            }
        }
        Snig_id.add(id); // 아이디 배열에 추가
        Snig_pw.add(pw); // 비밀번호 배열에 추가
        try{
            FileWriter fw = new FileWriter(snig, false); // false 메모장 초기화후 새로 저장
            for(int i = 0; i < Snig_id.size(); i++){
                fw.write(Snig_id.get(i)+","+Snig_pw.get(i)+"\n"); // 아이디 & 비밀번호를 같이 입력
            }
            fw.close();
        } catch (Exception e){
            e.getStackTrace();
        }
        return "success"; //성공적으로 저장되면 success 반환
    }
}