본문 바로가기

프로젝트

[JAVA] 파일 입, 출력을 이용한 회원 관리 프로그램

 

 

 

 

[JAVA] 파일 입, 출력을 이용한 회원 관리 프로그램

1. 회원을 생성할때 회원의 정보(아이디, 비밀번호, 닉네임)를 객체화하여 파일 출력 스트림을 사용해 파일로 저장한다.

2. 회원 생성 / 로그인 / 비밀번호 초기화 / 회원 삭제 기능을 구현한다.

3. 아이디에 공백이 존재할 수 없게 구현한다.

4. 메인 클래스 / 서비스 구현 클래스 / DTO 클래스 / DAO 클래스 를 각각 구현하여 클래스별로 기능을 나누어 구현한다.

 

package loginMain;

import loginDTO.LoginDTO;
import loginService.LoginServiceImpl;

public class Main {
    public static void main(String[] args) {
        LoginServiceImpl service = new LoginServiceImpl();
        while(true){
            int choice = service.MainDisplay();
            if(choice == 5){
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            switch(choice) {
                case 1:
                    service.CreateUser();
                    break;
                case 2:
                    service.logIn();
                    break;
                case 3:
                    service.reset();
                    break;
                case 4:
                    service.remove();
                    break;
                default:
                    System.out.println("잘못 입력하셨습니다.");
                    break;
            }
        }
    }
}

Main 클래스

 

package loginService;

import loginDTO.LoginDTO;

public interface LoginService {
    public int MainDisplay();
    public void CreateUser();
}

LoginService 인터페이스

 

package loginService;

import loginDAO.LoginDAO;
import loginDTO.LoginDTO;

import java.io.File;
import java.util.Objects;
import java.util.Scanner;

public class LoginServiceImpl implements LoginService{
    static Scanner sc;

    @Override
    public int MainDisplay() {
        sc = new Scanner(System.in);
        System.out.println("=================");
        System.out.println("1. 회원가입");
        System.out.println("2. 로 그 인");
        System.out.println("3. 비밀번호 초기화");
        System.out.println("4. 회원 삭제");
        System.out.println("5. 종 료");
        System.out.println("=================");
        System.out.print(">>> : ");
        int choice = sc.nextInt();
        return choice;
    }

    @Override
    public void CreateUser() {
        sc = new Scanner(System.in);
        LoginDAO DAO = new LoginDAO();
        boolean bool = false;
        System.out.print("아이디를 입력하세요 : ");
        String id = sc.nextLine();
        if(id.contains(" ")){
            System.out.println("아이디는 공백을 포함할 수 없습니다!!!");
            return;
        }
        if(DAO.duplicationCheck(id)){
            System.out.print("이름을 입력하세요 : ");
            String name = sc.next();
            System.out.print("비밀번호를 입력하세요 : ");
            String pwd = sc.next();
            LoginDTO DTO = new LoginDTO(id, name, pwd);
            bool = DAO.createId(DTO);
            if(bool){
                System.out.println(name + " 님 계정생성 완료!!!");
            }else {
                System.out.println("계정 생성 실패!!!");
            }
        }else {
            System.out.println("이미 존재하는 아이디입니다!!!");
        }
    }

    public void logIn(){
        sc = new Scanner(System.in);
        LoginDAO DAO = new LoginDAO();
        String id, pwd;
        System.out.print("아이디를 입력하세요 : ");
        id = sc.nextLine();
        if(DAO.duplicationCheck(id)){
            System.out.println("존재하지 않는 아이디 입니다.");
        }else{
            System.out.print("비밀번호를 입력하세요 : ");
            pwd = sc.next();

            String result = DAO.logIn(id, pwd);
            if(result != null) System.out.println("\"" + result + "\" 님 로그인 완료!!!");
            else System.out.println("비밀번호를 확인해주세요.");
        }
    }

    public void reset(){
        sc = new Scanner(System.in);
        LoginDAO dao = new LoginDAO();
        String id, name, pwd;
        System.out.print("비밀번호를 초기화할 아이디를 입력하세요 : ");
        id = sc.next();
        if(dao.duplicationCheck(id)) {
            System.out.println("해당 아이디는 존재하지 않습니다.");
            return;
        }
        System.out.print("닉네임을 입력하세요 : ");
        name = sc.next();
        String result = dao.resetCheck(id, name);
        if(result==null){
            System.out.println("닉네임을 다시 확인하세요.");
        }else {
            System.out.println("비밀번호가 {" + result + "} 로 초기화되었습니다.");
        }

    }


    public void remove() {
        sc = new Scanner(System.in);
        LoginDAO DAO = new LoginDAO();
        String id, pwd;
        System.out.print("아이디를 입력하세요 : ");
        id = sc.nextLine();
        if(DAO.duplicationCheck(id)) {
            System.out.println("존재하지 않는 아이디 입니다.");
            return;
        }
        System.out.print("비밀번호를 입력하세요 : ");
        pwd = sc.next();
        String removeCheck = DAO.logIn(id, pwd);
        if(removeCheck==null){
            System.out.println("비밀번호가 일치하지 않습니다!!");
            return;
        }
        boolean result = DAO.removeId(id);
        if(!result){
            System.out.println("삭제 실패!!!");
        }else {
            System.out.println("회원 삭제 성공!!!");
        }
    }
}

LoginServiceImpl 클래스

 

package loginDTO;

import java.io.Serializable;

public class LoginDTO implements Serializable {
    private String id, name, pwd;

    public LoginDTO() {
    }

    public LoginDTO(String id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

LoginDTO 클래스

 

package loginDAO;

import loginDTO.LoginDTO;

import java.io.*;
import java.util.Random;

public class LoginDAO {
    public boolean duplicationCheck(String id) {
        // 아이디가 존재하면 false, 존재하지 않으면 true
        File path;
        path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
        return !path.exists();
    }

    public boolean createId(LoginDTO DTO) {
        File path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + DTO.getId());
        try {
            FileOutputStream fos = new FileOutputStream(path);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(DTO);

            oos.close(); bos.close(); fos.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public String logIn(String id, String pwd){
        File path;
        path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
        String name = null;

        try {
            FileInputStream fis = new FileInputStream(path);
            ObjectInputStream ois = new ObjectInputStream(fis);
            LoginDTO dto = (LoginDTO) ois.readObject();

            if(pwd.equals(dto.getPwd())){
                name = dto.getName();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return name;
    }


    public String resetCheck(String id, String name) {
        File path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
        Random random = new Random();
        String pwd = null;
        try {
            FileInputStream fis = new FileInputStream(path);
            BufferedInputStream bis = new BufferedInputStream(fis);
            ObjectInputStream ois = new ObjectInputStream(bis);
            LoginDTO dto = (LoginDTO) ois.readObject();

            if(name.equals(dto.getName())){
                pwd = Integer.toString(random.nextInt(100000));
                dto.setPwd(pwd);

                FileOutputStream fos = new FileOutputStream(path);
                BufferedOutputStream bos = new BufferedOutputStream(fos);
                ObjectOutputStream oos = new ObjectOutputStream(bos);
                oos.writeObject(dto);

                oos.close(); bos.close(); fos.close();
            }
            ois.close(); bis.close(); fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return pwd;
    }

    public boolean removeId(String id) {
        File path = new File("/Users/jyh/Desktop/be/java/java-start/회원정보/" + id);
        boolean result = path.delete();
        return result;
    }
}

LoginDAO 클래스

 

 

 

 

- 메모 -

1. 작성한 코드 중 중복하여 작성한 코드가 있는가 확인

2. 예외 처리를 구조화하여 발생할 수 있는 예외를 모두 생각해보기

3. 맥북에 DB를 설치하여 파일 입, 출력이 아닌 실제 데이터 베이스에 접근하여 쿼리문으로 데이터를 처리해보기

 

 

 

 

 

코드 동작

728x90