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