dew's CSE Studying

[JAVA]로그인 프로그램 구현 본문

카테고리 없음

[JAVA]로그인 프로그램 구현

dew₍ᐢ.ˬ.⑅ᐢ₎ 2023. 12. 14. 04:57
package sec01;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

//클래스 정의 : 
class UserManager{
	//해시맵객체생성:멤버변수를 만들어준다
	HashMap<String, String> user;
	
	//생성자 정의
	UserManager(String filename){
		user=new HashMap<>();
		//파일처리
		FileReader fin;
		BufferedReader br=null;
		try {
			fin=new FileReader(filename);
			br=new BufferedReader(fin);
		}catch (FileNotFoundException e1) {
			e1.printStackTrace();
		}
		
		String str,id,pw;
        try {
			while((str=br.readLine())!=null) {
				String arr[]=str.split(" ");
				id=arr[0];pw=arr[1];
				user.put(id, pw); //실수나 정수형으로 바꾸기 위해서는 Integer.passInt 같이 데이터에 대한 형변환이 필요하다!! 정수형으로/실수형으로 두가지 모두 정리하고 관련예제 풀어볼 것!!!
			}
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
	void authenticateUser(String username, String password)
	{
		 if (user.containsKey(username)) { //containsKey, constainsValue: key와 value를 ~하는 함수. 두 가지 함수 잘 알기!!!!
	            if(user.get(username).equals(password))//조건식은 빈칸으로 나옴. try catch는 안 나옴
	            	JOptionPane.showMessageDialog(null, "로그인 성공!");
	            else 
	                JOptionPane.showMessageDialog(null, "로그인 실패. 비밀번호 확인");
	        }else
	        	 JOptionPane.showMessageDialog(null, "로그인 실패. 사용자 이름 확인");
	}
}

// GUI 및 이벤트 처리 클래스
public class Login3 extends JFrame{
    JLabel nameLabel,pwLabel;
	JTextField nameField;
    JPasswordField pwField;
    JButton loginButton,cancelButton;

    public Login3() {
        setTitle("로그인");
        setSize(300, 200);
        Font f=new Font("",Font.BOLD,20);
        setLayout(new GridLayout(3,3));

        
        nameField = new JTextField();
        pwField = new JPasswordField();
        loginButton = new JButton("로그인");
        cancelButton = new JButton("취소");
        nameLabel=new JLabel("사용자 이름:");
        pwLabel=new JLabel("비밀번호:");	
        //글꼴 변경
        nameLabel.setFont(f);
        nameField.setFont(f);
        pwLabel.setFont(f);
        nameField.setFont(f);
        loginButton.setFont(f);
        cancelButton.setFont(f);
        //컴포넌트 부착
        add(nameLabel);        
        add(nameField);       
        add(pwLabel);
        add(pwField);        
        add(loginButton);
        add(cancelButton);
        
        //리스너 등록
        loginButton.addActionListener(new LoginActionListener());
        cancelButton.addActionListener(new CancelActionListener());    
        
        setVisible(true);
    }
    
    //리스너 구현
    class LoginActionListener implements ActionListener{
    @Override
	    public void actionPerformed(ActionEvent e) {
	        String username = nameField.getText();
	        String password = pwField.getText();
	        String filename="user_data.txt";
	        
	        //객체생성
	        UserManager user1=new UserManager(filename);
	        
	        //로그인인증처리
	        user1.authenticateUser(username,password);         
	   }
    }
    
    //여기까지를 사용자정의클래스로 빠지면 Object로 불러오는 과정이 필요하다. 이부분도 염두해둘것 ver3로 만들어보자!!!
    //알고리즘 문제도 나온다. ArrayList나 HashMap을 사용하는 다양한 예제들을 찾아보고 풀어보자
    //앗 로그인은 반드시 나온다!! 로그인 화면/Swing component 활용에서 처음버튼 마지막버튼 다음버튼 이전버튼 gui 이거 두문제내셨다고함. 이벤트처리랑 스레드는 기조
    
    class CancelActionListener implements ActionListener{
        @Override
    	    public void actionPerformed(ActionEvent e) {
    	        nameField.setText("");
    	        pwField.setText("");
    	        nameField.requestFocus();    	                
    	   }
        }

    public static void main(String[] args) {
        new Login3();
    }
}