728x90

 

☕ 회원 관리 프로그램 만들기

1. 회원 등록

2. 회원 목록 보기

3. 종료

- 프로그램을 실행하면 /tmp/users.dat 파일에서 회원정보를 읽어온다

- 해당 파일이 없을 경우 읽어오지 않는다

- 프로그램 종료시, 메모리에 있는 회원정보를 /tmp/users.dat에 저장한다

- 프로그램을 강제 종료하면 입력된 회원 정보는 저장이 안될 수도 있다. 

 

☕ 회원 등록 구현

- 회원의 email을 입력하세요: urstory@gmail.com

- 회원의 이름을 입력하세요: 홍길동

- 회원의 생년을 입력하세요: 1980

- 등록되었습니다.

 

☕  회원 등록 구현 예제 파일

UserMain.java

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");

        List<User> users = userDao.getUsers();
        
        while(true){
            int menuId = userUI.menu();
            if(menuId == 5) {
                System.out.println("종료합니다");
                userDao.saveUser(users);
                break;
            } else if (menuId == 1) {
                User user = userUI.regMenu();
                users.add(user);
                System.out.println("등록되었습니다");
            } else if(menuId == 2){
                userUI.printUserList(users);
            }
        }
    }
}

 

UserUI

package com.example.io;

import java.io.BufferedReader;
import java.io.InputStreamReader;
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("5. 종료");

        int menuId = -1;
        try {
            String line = br.readLine();
            menuId = Integer.parseInt(line); // 문자열을 정수로 변환
        }catch (Exception ex){
            ex.printStackTrace();
        }
        return menuId;
    }

    public User regMenu(){
        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 ex){
            ex.printStackTrace();
            return null;
        }
    }

        public void printUserList(List<User> users){
            System.out.println("email         이름         생년");
            System.out.println("==============================");
            for(int i=0; i<users.size(); i++){
                User user = users.get(i);
                System.out.println(user.getEmail());
                System.out.println("          ");
                System.out.println(user.getName());
                System.out.println("           ");
                System.out.println(user.getbirthYear());
                System.out.println("            ");
            }
        }

}

 

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;
    }
}

 

UserDao

package com.example.io;

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

/**
 * 파일에서 List<User>정보를 저장하거나 읽어오는 기능
 */

public class UserDao {
    private String filename;
    public UserDao(String filename){
        this.filename = filename;
    }

    public void saveUser(List<User> list){
        try(ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename))){
            out.writeObject(list);
        }catch(Exception ex){
            ex.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 ex){
            ex.printStackTrace();
        }

        return list;
    }
}

 

 

☕ 회원 등록 최종 구현(등록/목록/정보수정/삭제)

User.java

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;
    }
}

 

UserDao.java

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 ex){
            ex.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 ex){
            ex.printStackTrace();
        }

        return list;
    }
}

UserMain.java

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 UserServiceInMemory(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.java

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.java

package com.example.io;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

// 메모리상에 User 정보를 관리하는 클래스
public class UserServiceInMemory implements UserService {
    private List<User> users;

    public UserServiceInMemory() {
        this.users = new ArrayList<>();
    }

    public UserServiceInMemory(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;
             }
             }

    @Override
    public boolean exists(String email) {
        if(findIndex(email) >= 0)
            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 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();
    }
}

UserUI.java

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 ex){
            ex.printStackTrace();
        }
        return menuId;
    }

    public String inputEmail(){
        System.out.println("수정할 회원의 email을 입력해주세요");
        String email = "";
        try {
            email = br.readLine();
        }catch (Exception ex){
            ex.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 ex){
            ex.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 ex){
            ex.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("            ");
            }
        }
        }

 

 

728x90

'개발&etc > JAVA' 카테고리의 다른 글

[Java] 이것이 자바다 - #변수  (0) 2023.04.10
[Java] 이것이 자바다 - #자바 시작하기  (0) 2023.04.10
[JAVA] Java IO 2편  (0) 2023.04.07
[JAVA] Java IO 1편  (0) 2023.04.07
[JAVA] 익명클래스와 처음 만나는 람다  (0) 2023.04.06