본문 바로가기
수업시간 JAVA/문제

연락처 FileOutputStream등등 써서 파일에 /등록/ 조회/ 수정/ 삭제

by SEOKIHOUSE 2023. 4. 11.
package practice0411;

import java.io.Serializable;

public class Person implements Serializable{
	private int num;
	private String name;
	private String phoneNum;
	private String email;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getPhoneNum() {
		return phoneNum;
	}

	public void setPhoneNum(String phoneNum) {
		this.phoneNum = phoneNum;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
	public void print() {
		System.out.println("Person [num=" + num + ", phoneNum=" + phoneNum + ", email=" + email + "]");
	}


}
package practice0411;

import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class ContactService {
	ArrayList<Person> p = new ArrayList<>();
	int pdex = 1;

	public void pdex() {
		pdex = p.size() + 1;
	}

	// 저장
	public void storeInfo(Person p1) {
		p.add(p1);
		fileStore();
	}

	// 파일에 저장해보자
	public void fileStore() {
		File f = new File("짱구의 휴대폰.txt");
		FileOutputStream osw = null;
		ObjectOutputStream oos = null;

		try {
			osw = new FileOutputStream(f);
			oos = new ObjectOutputStream(osw);
			oos.writeObject(p);
			oos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	// 파일보기
	@SuppressWarnings("unchecked")
	public void seeFile(int num) {
		FileInputStream fis = null;
		ObjectInputStream ois = null;

		try {
			fis = new FileInputStream("짱구의 휴대폰.txt");
			ois = new ObjectInputStream(fis);
			p = (ArrayList<Person>) ois.readObject();
			for (int i = 0; i < p.size(); i++) {
				if (p.get(i).getNum() == num) {
					p.get(i).print();
				} else if (num == 0) {
					p.get(i).print();
				}
			}

		} catch (EOFException e) { //등록할때 값이 없으면 오류발생하니 이걸로 오류처리
			System.out.println("정보가 없습니다 등록부터하세요");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}

	// 수정
	public Person repairAndDelete(int num) {
		for (int i = 0; i < p.size(); i++) {
			if (p.get(i).getNum() == num) {
				return p.get(i);
			}
		}
		return null;
	}

	// 삭제 시 등록된 사람들 등록번호 -1씩 시키기
	public void minusNum(int a) {
		if (a != p.size()) {
			for (int i = a-1; i < p.size(); i++) {
				int before = p.get(i).getNum() -1;
				p.get(i).setNum(before);
			}
		}
	}

}
package practice0411;

import java.util.Scanner;

public class ContactTestUi {
	Scanner sc = new Scanner(System.in);
	ContactService cs = new ContactService();
	String intro = "연락처 페이지입니다";

	public void intro() {
		System.out.println(intro);
	}

	public void must() {
		while (true) {
			System.out.print("1.개별조회 2.전체조회");
			int num = sc.nextInt();
			if (num == 1) {
				System.out.print("조회할 등록번호는?");
				num = sc.nextInt();
				cs.seeFile(num);
				break;
			} else if (num == 2) {
				cs.seeFile(0);
				break;
			} else {
				System.out.println("1 or 0 을 선택하세요");
			}

		}
	}

	String menu = "1.연락처등록 2.연락처조회 3.연락처수정 4.연락처삭제 0.종료";

	public void selectMenu() {
		while (true) {
			System.out.println(menu);
			int num = sc.nextInt();
			if (num == 1) {
				Person p = new Person();
				System.out.println("등록할 이름은?");
				String name = sc.next();
				p.setName(name);
				System.out.println("등록할 폰번은?");
				name = sc.next();
				p.setPhoneNum(name);
				System.out.println("등록할 이메일은?");
				name = sc.next();
				p.setEmail(name);
				cs.pdex();
				p.setNum(cs.pdex);
				System.out.println(cs.pdex);
				cs.storeInfo(p);
			} else if (num == 2) {
				System.out.print("1.개별조회 2.전체조회");
				num = sc.nextInt();
				if (num == 1) {
					System.out.print("조회할 등록번호는?");
					num = sc.nextInt();
					cs.seeFile(num);
				} else if (num == 2) {
					cs.seeFile(0);
				}
			} else if (num == 3) {
				System.out.print("수정할 등록번호는?");
				num = sc.nextInt();
				Person p = cs.repairAndDelete(num);
				System.out.println("수정할 항목을 고르세요");
				System.out.print("1.이름 2.폰번 3.이메일");
				num = sc.nextInt();
				if (num == 1) {
					System.out.print("수정할 이름을 적으세요");
					String name = sc.next();
					p.setName(name);
				} else if (num == 2) {
					System.out.print("수정할 폰번을 적으세요");
					String name = sc.next();
					p.setPhoneNum(name);
				} else if (num == 3) {
					System.out.print("수정할 이메일을 적으세요");
					String name = sc.next();
					p.setEmail(name);
				}
				cs.fileStore(); // 수정하고 다시 파일에 저장해줘야한다
			} else if (num == 4) {
				System.out.print("삭제할 등록번호는?");
				num = sc.nextInt();
				Person p1 = cs.repairAndDelete(num); // null한다고해서 안의 값이 삭제가 되지않음 remove하자
				int a = p1.getNum();
				cs.p.remove(p1.getNum() - 1);
				cs.minusNum(a); // 등록된 사람들 번호 -1씩하기
				cs.fileStore();
			} else if (num == 0) {
				System.out.println("종료");
				break;
			}

		}

	}
}
package practice0411;

public class ContactTest {

	public static void main(String[] args) {
		ContactTestUi ctu = new ContactTestUi();
		while (true) {
			ctu.intro();
			ctu.must();
			ctu.selectMenu();
			break;
		}
	}
}