package edu.exam06.linkedlist01;
/*
 * 전화번호 관리 프로그램 구현 프로젝트
 * Version 0.2
 */

//1. PhoneBookVer02.java 프로그램을 배열을 사용하도록 수정해서

//프로그램 사용자가 입력하는 정보가 최대 100개까지 유지되도록 프로그램을 변경하세요
//그리고 기능은 
//데이터 저장
//데이터 검색
//데이터 삭제
//데이터 수정
//데이터 전체 출력
//를 선택하도록 하세요
//
//
//
//실행하면 이렇게 나타납니다
//
//
//--선택하세요--
//1. 데이터 입력
//2. 데이터 검색
//3. 데이터 삭제
//4. 데이터 수정
//5. 데이터 전체 출력
//6. 프로그램 종료
//선택 : 1
//데이터 입력을 시작합니다..
//이름: 홍길동
//전화번호 : 222-3333
//생년월일 : 99년 12월 25일생
//데이터 입력이 완료되었습니다.
//
//--선택하세요--
//1. 데이터 입력
//2. 데이터 검색
//3. 데이터 삭제
//4. 데이터 수정
//5. 데이터 전체 출력
//6. 프로그램 종료
//선택 :
//

import java.util.Scanner;


class PhoneInfo {
	String name;
	String phoneNumber;
	String birth;
	// 다음 객체위치를 가리키는 참조변수
	PhoneInfo next;

	public PhoneInfo() {

		this.name = null;
		this.phoneNumber = null;
		this.birth = null;
		this.next = null;
	}

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

	public void setPhoneInfo(String name, String num, String birth) {
		this.name = name;
		this.phoneNumber = num;
		this.birth = birth;

	}

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

		System.out.println(""); // 데이터 구분을 위해
	}
}

class LinkedList {

	static private PhoneInfo head; // 머리 노드
	private PhoneInfo crnt; // 현재 위치 노드

	public LinkedList() {
		// 아무 데이터도 없으므로 null
		head = new PhoneInfo();
		crnt = head;
	}



	// 꼬리에 노드 삽입
	public void addTail(PhoneInfo node) {
		PhoneInfo ptr = head;
		while (ptr.next != null)
			ptr = ptr.next;

		ptr.next = node;
		node.next = null;

		crnt = node;
	}


	// 3) 이름이 동일한 노드를 검색
	public PhoneInfo search(String pName) {
		PhoneInfo ptr = head;
		PhoneInfo pre = null;
		while (ptr.next != null) {
			pre = ptr;
			ptr = ptr.next;
			if (ptr.name.equals(pName)) {
				//System.out.println("찾음");
				crnt = ptr;
				return ptr;
			}
		}
		return ptr;
	}

	
	
	public void delete(String pName) {
		PhoneInfo ptr = head;
		PhoneInfo pre = null;
		
		while(ptr.next!=null) {
			pre = ptr;
			ptr = ptr.next;
			
			if(ptr.name.equals(pName)) {
				pre.next = ptr.next;
				crnt = ptr.next;
			}
			
		}
	}
	
	
	public PhoneInfo update(String pName) {
		PhoneInfo ptr = head;
		PhoneInfo pre = null;
		while (ptr.next != null) {
			pre = ptr;
			ptr = ptr.next;
			if (ptr.name.equals(pName)) {
				//System.out.println("찾음");
				crnt = ptr;
				return ptr;
			}
		}
		return ptr;
	}
	
	
	
	public void showAll() {
		System.out.println("--------------------");
		PhoneInfo ptr = head.next;

		System.out.println("#####################");
		while (ptr != null) {
			ptr.showPhoneInfo();
			ptr = ptr.next;
		}
	System.out.println("--------------------");

}
	
	
	
	
}

class PhoneBookVer02 {

	static LinkedList list = new LinkedList();
	static PhoneInfo info = new PhoneInfo();
	
	
	static Scanner keyboard = new Scanner(System.in);


	public static void showMenu() {
		System.out.println();
		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("6. 프로그램 종료");
		System.out.print("선택: ");
	}

	public static PhoneInfo readData() {
		
		System.out.println("데이터 입력을 시작합니다..");
		System.out.print("이름: ");
		String name = keyboard.next();
		System.out.print("전화번호: ");
		String phone = keyboard.next();
		System.out.print("생년월일: ");
		String birth = keyboard.next();

		PhoneInfo info = new PhoneInfo(name, phone, birth);
		return info;
	}




	

	public static void update(PhoneInfo ptr) {

		
		System.out.print("수정할 이름을 입력해주세요 : ");
		String name = keyboard.next();
		System.out.print("수정할 번호를 입력해주세요 : ");
		String num = keyboard.next();
		System.out.print("수정할 생년월일을 입력해주세요 : ");
		String birth = keyboard.next();
	
		
		ptr.setPhoneInfo(name, num, birth);
		
	}



	public static void programExit() {
		System.exit(0);
	}

	public static void main(String[] args) {
		int choice;

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

			switch (choice) {
			case 1:

				list.addTail(readData());
				break;
			case 2:
				System.out.println("검색하고 싶은 이름을 입력해주세요 : ");
				list.search(keyboard.nextLine()).showPhoneInfo();;
				break;
			case 3:
				System.out.println("삭제하고 싶은 이름을 입력해주세요 : ");	
				list.delete(keyboard.nextLine());
				break;
			case 4:
				System.out.println("수정하고 싶은 이름을 입력해주세요 : ");
				update(list.update(keyboard.nextLine()));
				break;
			case 5:
				list.showAll();
				break;
			case 6:
				System.out.println("프로그램을 종료합니다.");
				programExit();
			default:
				System.out.println("잘못 입력하셨습니다.");
				break;
			}
		}
	}
}

'JAVA > java 예제' 카테고리의 다른 글

얕은복사 깊은복사 예제  (0) 2020.01.28
링크드리스트 구현 예제  (0) 2020.01.20
선형 배열 리스트 예제  (0) 2020.01.16
사용자 정보 CRUD 예제  (0) 2020.01.15
회원정보입력 클래스 예제  (0) 2020.01.15

+ Recent posts