package edu.exam.homework;
/*
 * 전화번호 관리 프로그램 구현 프로젝트
 * Version 0.3
 */


/*1. PhoneBookVer03.java를 구현하세요
PhoneInfo클래스를 상속받은
PhoneUnivInfo클래스(대학친구들의 전화번호 저장)
PhoneCompanyInfo클래스(회사동료들의 전화번호 저장)
를 추가하세요
<PhoneUnivInfo>
 이름 String name
 전화 String phoneNumber
 전공 String major
 학년 int year

<PhoneCompanyInfo>
 이름 String name
 전화 String phoneNumber
 회사 String company

저장하는 클래스가 추가되었다고 해서 
추가로 배열을 선언해서는 안됩니다
PhoneBookManager클래스의 
searchData메서드도 수정해서는 안됩니다
deleteData메서드도 수정해서는 안됩니다
inputData메서드는 변경하면 됩니다.
 

실행하면 이렇게 나타납니다


--선택하세요--
1. 데이터 입력
2. 데이터 검색
3. 데이터 삭제
4. 프로그램 종료
선택 : 1
데이터 입력을 시작합니다..
1. 일반, 2. 대학, 3.회사
선택 : 1
이름: 홍길동
전화번호 : 222-3333
생년월일 : 99년 12월 25일생
데이터 입력이 완료되었습니다.

--선택하세요--
1. 데이터 입력
2. 데이터 검색
3. 데이터 삭제
4. 프로그램 종료
선택 :*/


import java.util.Scanner;



class PhoneInfo {
	String name;
	String phoneNumber;
	String birth;

	public PhoneInfo(String name, String num, String birth) {
		this.name = name;
		phoneNumber = num;
		this.birth = birth;
	}

	public PhoneInfo(String name, String num) {
		this.name = name;
		phoneNumber = num;
		this.birth = null;
	}

	public void showPhoneInfo() {
		System.out.println("name: " + name);
		System.out.println("phone: " + phoneNumber);
		if (birth != null)
			System.out.println("birth: " + birth);
	}
}

class PhoneUnivInfo extends PhoneInfo  {
	//String name; // 이름
	//String phoneNumber; // 전화
	String major; // 전공
	int year; // 학년

	public PhoneUnivInfo(String name, String phoneNumber, String major, int year) {
		super(name,phoneNumber);
		this.major = major;
		this.year = year;
	}
}

class PhoneCompanyInfo extends PhoneInfo {
	//String name; // 이름
	//String phoneNumber; // 전화
	String company; // 회사

	PhoneCompanyInfo(String name, String phoneNumber, String company) {
		super(name,phoneNumber);
		this.company =company;
	}

}




class PhoneBookManager {
	final int MAX_CNT = 100;
	PhoneInfo[] infoStorage = new PhoneInfo[MAX_CNT];
	int curCnt = 0;

	public void inputData() {
		
		System.out.println("1. 일반, 2. 대학, 3.회사");
		int sel = MenuViewer.keyboard.nextInt();
		
		System.out.println("데이터 입력을 시작합니다..");

		

		System.out.println("이름: ");
		String name = MenuViewer.keyboard.next();
		System.out.print("전화번호: ");
		String phone = MenuViewer.keyboard.next();

		switch (sel) {

		case 1:
			System.out.print("생년월일: ");
			String birth = MenuViewer.keyboard.next();

			infoStorage[curCnt++] = new PhoneInfo(name, phone, birth);
			break;

		case 2:// 대학

			System.out.print("전공: ");
			String major = MenuViewer.keyboard.next();
			System.out.print("학년: ");
			int year = MenuViewer.keyboard.nextInt();

			infoStorage[curCnt++] = new PhoneUnivInfo(name, phone, major, year);
			break;
		case 3:// 회사
			System.out.print("회사: ");
			String company = MenuViewer.keyboard.next();
			infoStorage[curCnt++] = new PhoneCompanyInfo(name, phone, company);
			break;
		default:
			System.out.println("잘못입력하셨습니다.");
			break;
		}
		System.out.println("데이터 입력이 완료되었습니다. \n");
	}

	public void searchData() {
		System.out.println("데이터 검색을 시작합니다..");

		System.out.print("이름: ");
		String name = MenuViewer.keyboard.next();

		int dataIdx = search(name);
		if (dataIdx < 0) {
			System.out.println("해당하는 데이터가 존재하지 않습니다. \n");
		} else {
			infoStorage[dataIdx].showPhoneInfo();
			System.out.println("데이터 검색이 완료되었습니다. \n");
		}
	}

	public void deleteData() {
		System.out.println("데이터 삭제를 시작합니다..");

		System.out.print("이름: ");
		String name = MenuViewer.keyboard.next();

		int dataIdx = search(name);
		if (dataIdx < 0) {
			System.out.println("해당하는 데이터가 존재하지 않습니다. \n");
		} else {
			for (int idx = dataIdx; idx < (curCnt - 1); idx++)
				infoStorage[idx] = infoStorage[idx + 1];

			curCnt--;
			System.out.println("데이터 삭제가 완료되었습니다. \n");
		}
	}

	private int search(String name) {
		for (int idx = 0; idx < curCnt; idx++) {
			PhoneInfo curInfo = infoStorage[idx];
			if (name.compareTo(curInfo.name) == 0)
				return idx;
		}
		return -1;
	}
}

class MenuViewer {
	public static Scanner keyboard = new Scanner(System.in);

	public static void showMenu() {
		System.out.println("선택하세요...");
		System.out.println("1. 데이터 입력");
		System.out.println("2. 데이터 검색");
		System.out.println("3. 데이터 삭제");
		System.out.println("4. 프로그램 종료");
		System.out.print("선택: ");
	}
}

class PhoneBookVer03 {
	public static void main(String[] args) {
		PhoneBookManager manager = new PhoneBookManager();
		int choice;

		while (true) {
			MenuViewer.showMenu();
			choice = MenuViewer.keyboard.nextInt();
			//MenuViewer.keyboard.nextLine();

			switch (choice) {
			case 1:
				manager.inputData();
				break;
			case 2:
				manager.searchData();
				break;
			case 3:
				manager.deleteData();
				break;
			case 4:
				System.out.println("프로그램을 종료합니다.");
				MenuViewer.keyboard.close();
				return;
			}
		}
	}
}

'etc.. > 1' 카테고리의 다른 글

Postman  (0) 2022.04.29
200116_프린트 상속 예제  (0) 2020.01.16
200116_삼진아웃게임 예제  (0) 2020.01.16
생성자 클래스 예제  (0) 2020.01.15
static 메소드 예제 2 - 미완성  (0) 2020.01.15

+ Recent posts