자바기초) 입출력 스트림 활용 퀴즈 : 성적 관리 프로그램 7

박대현·2023년 2월 9일
0

자바 기초 활용

목록 보기
18/22

입출력 스트림을 활용하여 성적 관리 프로그램을 만들어라.



조건
1. Student 클래스를 생성

  • 이름, 수학, 영어 변수 생성
  • 기본 생성자, 매개변수가 있는 생성자 생성
  • displayInfo() 함수 만들어서 위의 변수의 값을 출력
  • implements Serializable를 사용하여 파일 객체로 사용 가능한 상태로 만들기

  1. Main
  • 이름, 수학, 영어 데이터 Scanner로 입력 받아서 파일에 저장(데이터 5개 이상)
  • 저장된 데이터를 출력
  • 저장 및 출력 Main.java 파일에서 작성

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());
			}
		}

	}
}

0개의 댓글