수업시간 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;
}
}
}