회원관리 프로그램 작성하기

    회원 관리 프로그램 작성하기

    • 프로그램을 실행하면 /tmp/users.dat 파일에서 회원정보를 불러온다.
    • 해당 파일이 없으면 읽어오지 않는다.
    • 프로그램 종료 시 메모리에 있는 회원정보를 /tmp/users.dat에 저장한다.
    • 프로그램을 강제 종료 시 입력된 회원정보는 저장되지 않을 수 있다.

    기능 

    1. 회원 등록

    2. 회원목록 보기

    3. 회원정보 수정

    4. 회원정보 삭제

    5. 종료

     

    User

    package com.example.IO;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private String email;
        private String name;
        private int birthYear;
    
        public User(String email, String name, int birthYear) {
            this.email = email;
            this.name = name;
            this.birthYear = birthYear;
        }
    
        public String getEmail() {
            return email;
        }
    
        public String getName() {
            return name;
        }
    
        public int getBirthYear() {
            return birthYear;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "email='" + email + '\'' +
                    ", name='" + name + '\'' +
                    ", birthYear=" + birthYear +
                    '}';
        }
    }

    UserDao

    package com.example.IO;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    /**
    *파일에서 List<User> 정보를 저장하거나 읽어오는 기능
     */
    public class UserDao {
        private String fileName;
        public UserDao(String fileName){
            this.fileName = fileName;
        }
    
        public void saveUser(Iterator<User> iter){
            List<User> users = new ArrayList<>();
            while (iter.hasNext()){
                User user = iter.next();
                users.add(user);
            }
            try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName))) {
                out.writeObject(users);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    
        public List<User> getUsers(){
            File file = new File(fileName);
            if (!file.exists()){
                return new ArrayList<>();
            }
    
            List<User> list = null;
            try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName))) {
                list = (List<User>)in.readObject();
            }catch (Exception e){
                e.printStackTrace();
            }
            return list;
        }
    }

    UserUI

    package com.example.IO;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.Iterator;
    import java.util.List;
    
    public class UserUI {
        private BufferedReader br;
        public UserUI(){
            br = new BufferedReader(new InputStreamReader(System.in));
        }
    
        public int menu(){
            System.out.println("1. 회원등록");
            System.out.println("2. 회원목록 보기");
            System.out.println("3. 회원정보 수정하기");
            System.out.println("4. 회원정보 삭제하기");
            System.out.println("5. 종료");
            int menuId = -1;
            try {
                String line = br.readLine();
                menuId = Integer.parseInt(line); // 문자열을 정수로 변환
            }catch (Exception e){
                e.printStackTrace();
            }
            return menuId;
        }
    
        public String inputEmail(){
            System.out.println("수정할 회원의 email을 입력하세요");
            String email = "";
            try {
                email = br.readLine();
            }catch (Exception e){
                e.printStackTrace();
            }
            return email;
        }
    
        public User inputUser(String email){
            try {
                System.out.println(email+"회원의 정보를 수정합니다.");
                System.out.println("이름을 입력하세요.");
                String name = br.readLine();
                System.out.println("생년을 입력하세요.");
                String strBirthYear = br.readLine();
                int birthYear = Integer.parseInt(strBirthYear);
    
                User user = new User(email, name, birthYear);
                return user;
            }catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }
    
        public User regUser(){
            try {
                System.out.println("email을 입력하세요.");
                String email = br.readLine();
                System.out.println("이름을 입력하세요.");
                String name = br.readLine();
                System.out.println("생년을 입력하세요.");
                String strBirthYear = br.readLine();
                int birthYear = Integer.parseInt(strBirthYear);
    
                User user = new User(email, name, birthYear);
                return user;
            }catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }
    
        public void printUserList(Iterator<User> iter){
            System.out.println("email           이름              생년");
            System.out.println("====================================");
            while (iter.hasNext()) {
                User user = iter.next();
                System.out.println(user.getEmail());
                System.out.println("       ");
                System.out.println(user.getName());
                System.out.println("       ");
                System.out.println(user.getBirthYear());
                System.out.println();
            }
        }
    }

    UserMain

    package com.example.IO;
    
    import java.util.List;
    
    public class UserMain {
        public static void main(String[] args) {
            UserUI userUI = new UserUI();
            UserDao userDao = new UserDao("/tmp/users.dat");
            UserService userService = new UserServiceInMomory(userDao.getUsers());
            while (true) {
                int menuId = userUI.menu();
                if (menuId == 5) {
                    System.out.println("종료합니다.");
                    userDao.saveUser(userService.getUsers());
                    break;
                } else if (menuId == 1) {
                    User user = userUI.regUser();
                    userService.addUser(user);
                    System.out.println("등록되었습니다.");
                } else if (menuId == 2) {
                    userUI.printUserList(userService.getUsers());
                } else if (menuId == 3) {
                    String email = userUI.inputEmail();
                    boolean isFindEmail = userService.exists(email);
    
                    if (isFindEmail){
                        User updateUser = userUI.inputUser(email);
                        userService.updateUser(updateUser);
                        System.out.println("수정되었습니다.");
                    }else{
                        System.out.println("수정할 회원정보가 없습니다.");
                    }
    
                } else if (menuId == 4) {
                    String email = userUI.inputEmail();
                    boolean isFindEmail = userService.exists(email);
                        if (isFindEmail) {
                            userService.deleteUser(email);
                            System.out.println("회원정보가 삭제되었습니다.");
                        } else { // 찾지 못했을 때
                            System.out.println("삭제할 회원정보가 없습니다.");
                        }
                    }
                }
            }
        }

    UserService

    package com.example.IO;
    
    import java.util.Iterator;
    import java.util.List;
    
    public interface UserService {
        // 회원정보 등록
        public void addUser(User user);
        // 회원정보 수정. user.getEmail()에 해당하는 회원정보를 수정한다.
        public boolean updateUser(User user);
        // 회원정보 삭제
        public boolean deleteUser(String email);
        // 모든 회원정보 반환
        public Iterator<User> getUsers();
        // email에 해당하는 회원정보가 있을 경우 0보다 큰 값을 반환
        public boolean exists(String email);
    }

    UserServiceInMemory

    package com.example.IO;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    //메모리상에 User정보를 관리하는 클래스
    public class UserServiceInMomory implements UserService{
        private List<User> users;
    
        public UserServiceInMomory(){
            this.users = new ArrayList<>();
        }
    
        public UserServiceInMomory(List<User> users){
            this.users = users;
        }
    
        @Override
        public void addUser(User user) {
            users.add(user);
        }
    
        @Override
        public boolean updateUser(User user) {
            boolean deleteFlag = deleteUser(user.getEmail());
            if (deleteFlag){
                users.add(user);
                return true;
            }else {
                return false;
            }
        }
    
        private int findIndex(String email){
            int findIndex = -1;
            for (int i = 0; i < users.size(); i++){
                if (users.get(i).getEmail().equals(email)){
                    findIndex = i;
                    break;
                }
            }
                return findIndex;
        }
    
        @Override
        public boolean exists(String email) {
                if (findIndex(email) >= 0){
                    return true;
                }else {
                    return false;
                }
        }
    
        @Override
        public boolean deleteUser(String email) {
            int findIndex = findIndex(email);
            if (findIndex > -1){
                users.remove(findIndex);
                return true;
            }else {
                return false;
            }
        }
    
        // 필드 users정보를 그대로 리턴할 것이냐?
        // users정보를 복사한 후 리턴할 것이냐?
        @Override
        public Iterator<User> getUsers() {
            return users.iterator();
        }
    }

    'JAVA' 카테고리의 다른 글

    Record 클래스  (0) 2023.09.20
    채팅 프로그램 만들어보기  (0) 2023.09.07
    네트워크 프로그래밍 - 2  (0) 2023.09.07
    네트워크 프로그래밍 - 1  (0) 2023.09.05
    쓰레드(Thread) 개념, 실행방법  (0) 2023.09.05

    댓글