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();
}
}
}
'JAVA > 이재환의 자바 프로그래밍 입문' 카테고리의 다른 글
[Java] Ch.25 스레드 (1) | 2023.10.27 |
---|---|
[Java] Ch.24 입출력 스트림 (1) | 2023.10.26 |
[Java] Ch.23 스트림 (1) | 2023.10.26 |
[Java] Ch.22 내부 클래스, 람다식 (0) | 2023.10.25 |
[Java] Ch.21 컬렉션 프레임워크 (0) | 2023.10.25 |