웹개발 교육/Java

[39일] Java (52) - 성적 프로그램(파일 입출력)

ewok 2022. 9. 21. 11:06

성적 입력 자료를 가져와서 성적 결과 파일을 완성해보자

입력 자료

 

내 풀이

package oop0920;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Vector;

public class Test05_sungjuk {

	public static void main(String[] args) {
		// 문제) 성적 프로그램
		// 성적입력자료(sungjuk.txt)를 가져와서, 성적 결과 파일 완성하기(result.txt)
		/*
			1) 입력 데이터 파일 : sungjuk.txt
			
			2) 결과 파일 : result.txt
			
							성 / 적 / 결 /과
              -------------------------------------------------------
              이름     국어   영어  수학   평균  등수   결과
              -------------------------------------------------------
			  라일락    100  100  100   100   1    합격 ********** 장학생
              진달래     50   55   60    55   4    불합격 *****
              개나리     95   95   35    75   3    재시험 *******
			  무궁화     80   85   90    85   2    합격 ********
              홍길동     60   40   30    43   5    불합격 ****
              ------------------------------------------------------			
		*/
		
		
		String inName = "I:/java202207/sungjuk.txt";
		String outName = "I:/java202207/result.txt";
		
		FileReader fr = null;
		BufferedReader br = null;
		
		FileWriter fw = null;
		PrintWriter out = null;
		
		try {
			fr = new FileReader(inName);
			br = new BufferedReader(fr);
			
			fw = new FileWriter(outName, false);
			out = new PrintWriter(fw, true);

			Vector<String> vec = new Vector<>();			
			
			
			while(true) {
				String line = br.readLine();			
				vec.add(line);								
				if(line==null) {
					break;
				}//if end				
			}//while end
			//System.out.println(vec.get(0));  //무궁화,95,90,100  홍길동,100,100,100  라일락,90,95,35  개나리,85,70,75 진달래,35,40,60  null
			
			Vector<String[]> vect = new Vector<>();
			for (int i=0; i<vec.size()-1; i++) {
				String a = (String) vec.get(i);			
				String[] sarr = a.split(",");
				vect.add(sarr);;
			}//for end
									
			Vector<String> name = new Vector<>();
			Vector<String> kor = new Vector<>();
			Vector<String> eng = new Vector<>();
			Vector<String> mat = new Vector<>();					
						
			String[] b = {};
			for (int i=0; i<vect.size(); i++) {
				b = (String[]) vect.get(i);  //무궁화, 95, 90, 100
				name.add(b[0]);              //무궁화, 홍길동, 라일락, 개나리, 진달래
				kor.add(b[1]);               //95,    100,  90,   85,   35
				eng.add(b[2]);               //90     100   95    70    40
				mat.add(b[3]);               //100    100   35    75    60
			}
			//System.out.println(name.get(1));			
			
			//평균
			Vector<Integer> avg = new Vector<>();
			for (int i=0; i<kor.size(); i++) {
				int a = (Integer.parseInt((String) kor.get(i)) + Integer.parseInt((String) eng.get(i)) + Integer.parseInt((String) mat.get(i)))/3;
				avg.add(a);
			}
						
			//System.out.println(avg.get(4)); //95, 100, 73, 76, 45
									
			//등수
			int rank = 1;
			Vector<Integer> vrank = new Vector<>();
			
			for (int i=0; i<avg.size(); i++) {
				for (int j=0; j<avg.size(); j++) {
					if ((int)avg.get(i)<(int)avg.get(j)) {
						rank += 1;
					}//if end
				}//for end
				vrank.add(rank);
				rank = 1;
			}//for end
			//System.out.println(vrank.get(4));  //2 1 4 3 5			
			
			//결과
			//합불
			Vector<String> pass = new Vector<>();
			for (int i=0; i<name.size(); i++) {
				if ((int)avg.get(i)>=70) {
					if (Integer.parseInt((String) kor.get(i))<40 || Integer.parseInt((String) eng.get(i)) <40 ||Integer.parseInt((String) mat.get(i)) <40) {
						pass.add("재시험");
					} else {
						pass.add("합격");
					}//if end
				} else {
					pass.add("불합격");
				}//if end
			}//for end
			//System.out.println(pass.get(4));  //합격 합격 재시험 합격 불합격
			
			//별표
			Vector<String> vstar = new Vector<>();
			String star = "";
			for (int i=0; i<avg.size(); i++) {
				for (int j=0; j<(int)avg.get(i)/10; j++) {
					star = star + "*";
				}//for end
				vstar.add(star);
				star = "";				
			}//for end
			//System.out.println(vstar.get(0));
			
			//장학생 여부
			Vector<String> scholar = new Vector<>();
			for (int i=0; i<avg.size(); i++) {
				if (avg.get(i)>=95) {
					scholar.add("장학생");
				} else {
					scholar.add("");
				}//if end
			}//for end
			//System.out.println(scholar.get(2)); //장학생 장학생 "" "" ""
			
			
			//출력	
			out.println("			성 / 적 / 결 / 과");
			out.println("--------------------------------------------------------------------------------------------");
			out.println("이름       국어       영어       수학       평균     등수        결과");
			out.println("--------------------------------------------------------------------------------------------");
			for (int i=0; i<name.size(); i++) {
				out.printf("%s\t %3s\t %3s\t %3s\t %3s\t %s\t %-3s\t %-10s %s", name.get(i), kor.get(i), eng.get(i), mat.get(i), avg.get(i), vrank.get(i), pass.get(i), vstar.get(i), scholar.get(i));
				out.println();
			}//for end
			System.out.println("result.txt 데이터 파일 완성!!");

		} catch (Exception e) {
			System.out.println("성적 프로그램 읽고, 쓰기 실패 : " + e);
		} finally {
			try {
				if(br!=null) { br.close(); }
			} catch (Exception e) {}
			try {
				if(fr!=null) { fr.close(); }
			} catch (Exception e) {}
			try {
				if(out!=null) { out.close(); }
			} catch (Exception e) {}
			try {
				if(fw!=null) { fw.close(); }
			} catch (Exception e) {}
		}//end

	}//main() end
}//class end

 

다른 풀이

package oop0920;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.StreamCorruptedException;
import java.util.Vector;

public class Test05_sungjuk2 {

	public static void main(String[] args) {
		
		String inName = "I:/java202207/sungjuk.txt";
		String outName = "I:/java202207/result.txt";
		
		FileReader fr = null;
		BufferedReader br = null;
		
		FileWriter fw = null;
		PrintWriter out = null;
		
		try {
			
			//1)단계 : 데이터 저장 변수 선언
			String[] name = new String[5];
			int[] kor = new int[5];
			int[] eng = new int[5];
			int[] mat = new int[5];
			int[] aver = new int[5];
			int[] rank = {1, 1, 1, 1, 1};
			
			int size = name.length;  //5
			int i = 0;
			
			//2)단계 : 데이터 입력 파일(sungjuk.txt) 가져와서 내용을 읽기
			fr = new FileReader(inName);
			br = new BufferedReader(fr);
			
			while(true) {
				String line = br.readLine();  //무궁화,95,90,100
				if(line==null) {
					break;
				}//if end
				//System.out.println(line);
				
				// , 기준으로 문자열 분리한 후 1)단계에서 선언한 변수에 저장하기
				String[] word = line.split(",");
				name[i] = word[0].trim();
				kor[i] = Integer.parseInt(word[1].trim());
				eng[i] = Integer.parseInt(word[2].trim());
				mat[i] = Integer.parseInt(word[3].trim());
				i++;  //다음사람
			}//while end
			
			//3)단계 : 평균 구하기	        
	        for (int a=0; a<size; a=a+1) {
	            aver[a] = ((kor[a]+eng[a]+mat[a])/3);
	        }//for end
	        
			//4)단계 : 등수 구하기(평균을 기준으로)
	        for (int a=0; a<size; a=a+1) {
	            for (int b=0; b<size; b=b+1) {
	                if (aver[a]<aver[b]) {
	                    rank[a] = rank[a] + 1;
	                }//if end
	            }//for end
	        }//for end
	        
	        //5)단계 : result.txt 결과 출력하기
	        fw = new FileWriter(outName, false);
	        out = new PrintWriter(fw, true);  //true로 해야 쓰레기 정보가 들어가지 않는다
	        
	        out.println("성/적/결/과");
	        out.println("--------------------------------");
	        out.println("이름  국어  영어  수학  평균  등수  결과");
	        out.println("--------------------------------");
	        
	        //5명의 데이터 출력하기
	        for (i=0; i<size; i++) {
	        	out.printf("%-6s %5d %5d %5d %5d %5d", name[i], kor[i], eng[i], mat[i], aver[i], rank[i]);
	        	
	        	//과락
	            if (aver[i]>=70) {
	                if (kor[i]<40 || eng[i]<40 || mat[i]<40) {
	                    out.printf("%-10s", " 재시험");
	                } else {
	                	out.printf("%-10s", " 합  격");
	                }//if end
	            } else {
	            	out.printf("%-10s", " 불합격");
	            }//if end 
	            
	            //평균 10점당 * 한개씩
	            for(int star=1; star<aver[i]/10; star++) {
	            	out.printf("%c", '*');
	            }//for end
	            
	            //평균 95점 이상 장학생
	            if(aver[i]>=95) {
	            	out.printf("%-12s", "장학생");
	            }//if end
	        	
	        	out.println();  //한 사람 출력하고 줄바꿈
	        }//for end
	        
	        System.out.println("result.txt 성적 프로그램이 완성되었습니다");

		} catch (Exception e) {
			System.out.println("성적 프로그램 읽고, 쓰기 실패 : " + e);
		} finally {
			try {
				if(br!=null) { br.close(); }
			} catch (Exception e) {}
			try {
				if(fr!=null) { fr.close(); }
			} catch (Exception e) {}
			try {
				if(out!=null) { out.close(); }
			} catch (Exception e) {}
			try {
				if(fw!=null) { fw.close(); }
			} catch (Exception e) {}
		}//end

	}//main() end
}//class end

 

결과