Archive

Java Day 17 회원관리 프로그램 구현

|

Java Day 17 회원관리 프로그램 구현


  1. 회원관리 프로그램

    • GUI 없이 DOS창 내에서 회원을 관리하는 프로그램을 구현해보자!

    • 기본적으로 이름, 나이, 전화번호, 주소의 데이터를 사용한다. 회원 가입, 정보 수정, 탈퇴, 전체 회원 보기 기능이 있는데 수정과 탈퇴를 위해서는 우선 회원 검색을 해야한다. 회원 정보 수정에서는 전화번호와 주소를 수정 할 수 있다.

    • 자 그럼 순서도를 만들자.

      1. 회원 객체 생성 (이름, 나이, 전화번호, 주소)

      2. 매니저 객체 생성

        • 입력은 BufferedReader와 InputStreamReader를 사용
        • 회원을 ArrayList에 넣어 관리
        • 시작 메소드로 프로그램 실행 - 메뉴 선택 받아 switch문으로 각 메소드 호출
        • 가입 메소드 구현
        • 검색 메소드 구현 - index값을 저장
        • 정보 수정 메소드 구현 - 메뉴 선택
        • 탈퇴 메소드 구현 - 정말 탈퇴? 묻기
        • 전체 보기 메소드 구현
        • 종료 메소드 구현 - 정말 종료? 묻기
      3. Test 클래스의 메인 메소드에서 실행


  2. 코딩

    1. 회원 객체

      package kg.eduone.co;
            
      public class Customer {
      	//멤버
      	private String name;
      	private String age;
      	private String tel;
      	private String address;
            	
      	//생성자
      	public Customer() {}
      	public Customer(String name, String age, String tel, String address) {
      		this.name = name;
      		this.age = age;
      		this.tel = tel;
      		this.address = address;
      	}
            	
      	//메소드
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public String getAge() {
      		return age;
      	}
      	public void setAge(String age) {
      		this.age = age;
      	}
      	public String getTel() {
      		return tel;
      	}
      	public void setTel(String tel) {
      		this.tel = tel;
      	}
      	public String getAddress() {
      		return address;
      	}
      	public void setAddress(String address) {
      		this.address = address;
      	}		
      }
      


    2. 매니저 객체

      package kg.eduone.manage;
            
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.util.ArrayList;
      import kg.eduone.co.Customer;
            
      public class CustomerManager {
      	// 멤버
      	private boolean isStop;
      	private BufferedReader br;
      	private ArrayList<Customer> member;
      	int index;
            
      	// 생성자
      	public CustomerManager() {
      		isStop = false;
      		br = new BufferedReader(new InputStreamReader(System.in));
      		member = new ArrayList<Customer>();
      		index = -1;
      	}
            
      	// 메소드
      	public void start() throws IOException {
      		while (!isStop) {
      			int menu = -1;
      			// 메뉴판
      			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("0. 종료 하기");
      			System.out.print("메뉴 선택 : ");
      			// 입력값이 숫자가 아닐시 리턴
      			try {
      				menu = Integer.parseInt(br.readLine());
      			} catch (NumberFormatException nfe) {
      				menu = -1;
      			}
      			System.out.println();
      			switch (menu) {
      			case 0:
      				stop();break;
      			case 1:
      				addMember();break;
      			case 2:
      				searchMember();break;
      			case 3:
      				updateMember();break;
      			case 4:
      				deleteMember();break;
      			case 5:
      				showAllMember();break;
      			default:
      				System.out.println("올바른 메뉴를 선택하세요");
      				System.out.println();
      				break;
      			}// end switch
      		} // end while
      	}// end start
            
      	public void addMember() throws IOException {
      		// 기본 정보 입력
      		System.out.print("이름 입력 : ");
      		String name = br.readLine();
      		System.out.print("나이 입력 : ");
      		String age = br.readLine();
      		System.out.print("전화 번호 : ");
      		String tel = br.readLine();
      		System.out.print("주소 입력 : ");
      		String address = br.readLine();
            
      		// 입력받은 기본 정보를 갖는 회원 객체 생성
      		Customer customer = new Customer(name, age, tel, address);
            
      		// 멤버 리스트에 객체 추가
      		member.add(customer);
      		System.out.println();
      		System.out.println("회원가입에 성공하였습니다");
      		System.out.println();
      	}
            
      	public void searchMember() throws IOException {
      		// 검색할 이름 입력
      		System.out.println("검색할 회원 이름을 입력하세요");
      		String findName = br.readLine();
      		index = -1;
              //리스트를 순회하며 입력값과 동일한 객체의 index를 저장
      		for (int i = 0; i < member.size(); i++) {
      			Customer customer = (Customer) member.get(i);
      			if (customer.getName().equals(findName)) {
      				index = i;
      				break;
      			}
      		} // end for
            
      		if (index < 0) {
      			System.out.println(findName + "님은 가입된 회원이 아닙니다");
      		} else {
      			System.out.println(findName + "님의 검색에 성공하였습니다");
      		}
      		System.out.println();
      	}
            
      	public void updateMember() throws IOException {
      		boolean isLoop = false;
      		int menu = -1;
      		if (index < 0) {
      			System.out.println("회원 검색을 먼저 실행해주세요");
      			return;
      		}
      		Customer customer = member.get(index);
      		while (!isLoop) {
      			// 메뉴 선택
      			System.out.println("수정할 메뉴 선택");
      			System.out.println("1. 전화번호 수정");
      			System.out.println("2. 주소 수정");
      			System.out.println("0. 수정 취소");
      			System.out.print("매뉴 선택 : ");
      			try {
      				menu = Integer.parseInt(br.readLine());
      			} catch (NumberFormatException e) {
      				menu = -1;
      			}
      			System.out.println();
      			// 메뉴 구현
      			switch (menu) {
      			case 1:
      				System.out.print("수정할 전화번호 입력 : ");
      				String tempTel = br.readLine();
      				customer.setTel(tempTel);
      				System.out.println("전화번호 수정 완료");
      				System.out.println();
      				isLoop = false;
      				break;
      			case 2:
      				System.out.print("수정할 주소 입력 : ");
      				String tempAddress = br.readLine();
      				customer.setAddress(tempAddress);
      				System.out.println("주소 수정 완료");
      				System.out.println();
      				isLoop = false;
      				break;
      			case 0:
      				System.out.println("수정을 취소합니다");
      				System.out.println();
      				isLoop = true;
      				break;
      			default:
      				System.out.println("올바른 메뉴를 선택하세요");
      				System.out.println();
      				isLoop = false;
      			}
      		} // end while
      	}
            
      	public void deleteMember() throws IOException {
      		if (index < 0) {
      			System.out.println("회원 검색을 먼저 실행해주세요");
      			return;
      		}
      		Customer customer = member.get(index);
      		System.out.println(customer.getName() + "님의 정보를 삭제하시겠습니까? (y/n)");
      		String menu = br.readLine();
      		if (menu.equals("y") || menu.equals("Y")) {
      			System.out.println(customer.getName() + "님의 정보를 성공적으로 삭제하였습니다");
      			System.out.println();
      			member.remove(index);
      			index = -1;
      		} else {
      			System.out.println(customer.getName() + "님의 정보 삭제를 취소합니다");
      			System.out.println();
      		}
      	}
            
      	public void showAllMember() {
      		// 멤버 리스트의 회원을 순회하면서 정보 출력
      		for (int i = 0; i < member.size(); i++) {
      			Customer customer = (Customer) member.get(i);
      			System.out.println((i + 1) + "번 회원");
      			System.out.println("이름 : " + customer.getName());
      			System.out.println("나이 : " + customer.getAge());
      			System.out.println("전화 : " + customer.getTel());
      			System.out.println("주소 : " + customer.getAddress());
      			System.out.println();
      		} // end for
      	}
            
      	public void stop() throws IOException {
      		System.out.print("정말로 종료하시겠습니까? (y/n)");
      		String menu = br.readLine();
      		if (menu.equals("Y") || menu.equals("y")) {
      			isStop = true;
      		} else {
      			System.out.println("종료를 취소합니다");
      			isStop = false;
      		}
      	}// end stop
      }
      


    3. Test 클래스

      package kg.eduone.manage;
            
      import java.io.IOException;
            
      public class CustomerTest {
      	public static void main(String[] args) throws IOException {
      		CustomerManager cm = new CustomerManager();
      		cm.start(); //실행
      	}
      }
      


  3. 실행 화면

    1. 회원 가입

      가입

    2. 전체 보기

      전체

    3. 회원 검색

      검색

    4. 정보 수정

      수정

      수정완료

    5. 회원 탈퇴

      탈퇴

    6. 종료 하기

      종료


  1. 마치며

    숙련자의 입장에서는 아주 간단한 프로그램이겠지만 처음 객체지향을 접하고서 마구잡이로(?) 처음 만들었을때는 모듈화도 전혀 안되어있었고 한 클래스에 모든 것을 다 때려넣을려고 했었다.ㅋㅋ

    어찌어찌 구동은 됐지만 아주 좋지 않은 코드라는 것을 스스로도 느꼈었다.

    수업을 듣고나서 아! 객체지향을 이렇게 사용하는구나 하고 조금은 감을 잡은 후에 다시 도전했다.

    다시 처음부터 코딩을 하면서 분리시킬 수 있는 것은 따로 모듈로 나눠서 한 곳에서 조립한다는 느낌이 뭔지 이해가 갔다. 😎




참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료