입출력 스트림을 활용하여 성적 관리 프로그램을 만들어라.
조건
1. Student 클래스를 생성
Student 클래스
import java.io.Serializable;
//implements Serializable를 사용하여 파일 객체로 사용 가능한 상태로 만들기
public class Student implements Serializable {
//메개 변수 이름, 수학, 영어 생성
private String name;
private int math;
private int eng;
//기본 생성자, 매개변수가 있는 생성자 생성
public Student() {
}
public Student(String name, int math, int eng) {
this.name = name;
this.math = math;
this.eng = eng;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
//displayInfo() 함수 만들어서 위의 변수의 값을 출력
public void displayInfo() {
System.out.println("이름 : " + name + " 수학 : " + math + " 영어 : " + eng);
}
}
Main
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
OutputStream out = null;
BufferedOutputStream bout = null;
ObjectOutputStream oout = null;
Scanner sc = null;
//이름, 수학, 영어 데이터 Scanner로 입력 받아서 파일에 저장(데이터 5개 이상)
try {
out = new FileOutputStream("studentscore.txt"); //데이터를 쓸 파일 설정 (없을 시 생성된다).
bout = new BufferedOutputStream(out); // 효율 상승을 위해 사용
oout = new ObjectOutputStream(bout); //객체를 쓰기 위해 사용
sc = new Scanner(System.in);
List<Student> list = new LinkedList<>();
System.out.println("성적을 입력할 학생 수 : (5명 이상 입력 부탁)");
int n = sc.nextInt();
while (n < 5) {
System.out.println("성적을 입력할 학생 수 : (5명 이상 입력 부탁)");
n = sc.nextInt();
}
for (int i = 0; i < n; i++) {
System.out.println("이름 : ");
String name = sc.next();
System.out.println("수학 : ");
int math = sc.nextInt();
System.out.println("영어 : ");
int eng = sc.nextInt();
list.add(new Student(name, math, eng));
}
oout.writeObject(list); // 객체가 파일에 저장된다.
} catch (FileNotFoundException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
} finally { //리소스 해제
try {
oout.close(); //최종적으로 생성된 리소스만 해제하면 다른 리소스도 순차적으로 해제 된다.
sc.close();
} catch (IOException e) {
System.out.println(e.toString());
}
}
InputStream in = null;
BufferedInputStream bin = null;
ObjectInputStream oin = null;
try {
in = new FileInputStream("studentscore.txt"); //데이터를 읽어올 파일 설정 (없을 시 생성된다).
bin = new BufferedInputStream(in); // 효율 상승을 위해 사용
oin = new ObjectInputStream(bin); //객체를 읽기 위해 사용
LinkedList<Student> list = (LinkedList<Student>) oin.readObject(); //객체를 읽어 리스트에 저장한다.
// 저장된 데이터를 출력
for (Student s : list) {
s.displayInfo(); 학생 성적 정보 출력
}
} catch (FileNotFoundException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
} catch (ClassNotFoundException e) {
System.out.println(e.toString());
} finally { // 리소스 해제
try {
oin.close(); //최종적으로 생성된 리소스만 해제하면 다른 리소스도 순차적으로 해제된다.
} catch (IOException e) {
System.out.println(e.toString());
}
}
}
}