본문 바로가기
JAVA/이재환의 자바 프로그래밍 입문

[Java] Ch.26 주소록 만들기

by ♡˖GYURI˖♡ 2023. 10. 27.
728x90

프로젝트 구상하기

전화번호를 저장하고 조회하는 기능을 가진 프로그램

데이터 기능
이름
전화번호
이메일
전화번호 입력
전화번호 조회
전화번호 삭제
전체 리스트 조회
프로그램 종료

데이터는 PhoneInfo 클래스를 생성하여 객체의 멤버 변수를 통해 저장하고 조회할 것

이 PhoneInfo 클래스를 이용하는 MyPhoneBook 클래스를 만들어 앞에서 말한 기능들을 구현할 것

 

PhoneInfo.java

package step07;

public class PhoneInfo implements java.io.Serializable 
{
    private static final long serialVersionUID = 1L;
    String name;
    String phoneNumber;
    String email;
    
    public PhoneInfo(String name, String phoneNumber) 
    {
        this.name = name;
        this.phoneNumber = phoneNumber;
    }

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

    public void showPhoneInfo() 
    {
        System.out.println("Name : " + name);
        System.out.println("PhoneNumber : " + phoneNumber);
        if (email != null)
            System.out.println("Email : " + email);
        System.out.println("-------------------------------------");
    }
}

 

MyPhoneBook.java

package step07;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class MyPhoneBook 
{
    static Scanner sc = new Scanner(System.in);
    static Map<String, PhoneInfo> map = new HashMap<>();
    
    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("선택 : ");
    }
    
    public static void addNumber() 
    {
        System.out.print("이름 : ");
        String name = sc.nextLine();
        System.out.print("전화번호 : ");
        String phoneNumber = sc.nextLine();
        System.out.print("이메일 : ");
        String email = sc.nextLine();
        
        PhoneInfo pInfo;
        if (email != null) {
            pInfo = new PhoneInfo(name, phoneNumber, email);
        } else {
            pInfo = new PhoneInfo(name, phoneNumber);
        }
        //pInfo.showPhoneInfo();
        map.put(name, pInfo);
        //System.out.println("맵의 크기 : " + map.size());
    }
    
    public static void selNumber() 
    {
        System.out.print("조회할 이름 : ");
        String name = sc.nextLine();

//        Set<String> ks = map.keySet();
//        for(String s : ks)
//            System.out.println(map.get(s).toString());
//        System.out.println("-------------------------------------");

        PhoneInfo pInfo = map.get(name);
        pInfo.showPhoneInfo();        
    }

    public static void delNumber() 
    {
        System.out.print("삭제할 이름 : ");
        String name = sc.nextLine();
        
        PhoneInfo pInfo = map.remove(name);
        if (pInfo != null) {
            System.out.println("삭제되었습니다.");
            //pInfo.showPhoneInfo();
        } else {
            System.out.println("해당 값이 없습니다.");
        }

//        Set<String> ks = map.keySet();
//        for(String s : ks)
//            map.get(s).showPhoneInfo();
//        System.out.println("-------------------------------------");        
    }

    public static void main(String[] args) 
    {
        readInfo();
        int choice;
        while (true) 
        {
            showMenu();
            choice = sc.nextInt();
            sc.nextLine();
            switch (choice) 
            {
            case 1:
                addNumber();
                break;
            case 2:
                selNumber();
                break;
            case 3:
                delNumber();
                break;
            case 4:
                saveInfo();
                System.out.println("프로그램을 종료합니다.");
                return;
            default:
                System.out.println("잘 못 입력하셨습니다.");
                break;
            }
        }
    }

    public static void saveInfo() 
    {
        try (ObjectOutputStream oo = 
                new ObjectOutputStream(new FileOutputStream("./bin/step07/Object.bin"))) 
        {
            Set<String> ks = map.keySet();
            for (String s : ks) 
            {
                PhoneInfo pInfo = map.get(s);
                oo.writeObject(pInfo);
            }
        }
        catch(IOException e) 
        {
            e.printStackTrace();       
        }
    }

    public static void readInfo() 
    {
        try (ObjectInputStream oi = 
                new ObjectInputStream(new FileInputStream("./bin/step07/Object.bin"))) 
        {
            while (true) 
            {
                PhoneInfo pInfo = (PhoneInfo) oi.readObject();
                if (pInfo == null)
                    break;
                map.put(pInfo.name, pInfo);
            }
        }
        catch(ClassNotFoundException e) 
        {
            e.printStackTrace();       
        }
        catch(IOException e) 
        {
            //e.printStackTrace();       
        }
    }
}