[20220921] 과제 Test05_sungjuk

kangsun·2022년 9월 21일
0

Java

목록 보기
20/44

📌 java 성적 프로그램 메모장 입출력

  • 결과물
  • 먼저 파일 가져올 변수, 결과 파일 완성할 변수 설정

1. sungjuk.txt 데이터 저장 변수 선언

  • 데이터를 보고 분석하기
  • 이름 5개 / 국어점수 5개 / 수학 5개 ... 평균과 등수 5개씩 있으므로로 배열 변수 5개씩 생성하기

1) while문으로 데이터 입력파일 가져와서 내용을 읽도록 시키기

FileReader();
BufferedReader();

fr=new FileReader(inName);
br=new BufferedReader(fr);
	while(true) {
		String line=br.readLine(); //커서 불러오기. 메모장 커서로 텍스트 순차적으로 읽어주는 기능.
		if(line==null) { // line 커서가 null이면 마지막까지 값을 읽었다는 의미이다.
			break;		 //마지막까지 값을 읽었으면 if문을 빠져 나간다.
		}//if end
		//System.out.println(line); // 중간중간 값이 나왔는지 확인하는 작업.
  • String line=br.readLine();
    - 커서 불러오기. 메모장을 커서로 텍스트를 순차적으로 읽어주는 기능
  • if(line==null) break;
    - line 커서가 null 이면 마지막까지 값을 읽으면
  • break; if문을 빠져나간다.

  • FileReader 는 (File file) - 파일, (String fileName) - 파일명 두가지로 가져올 수 있다.
  • 왼쪽 FileNotFoundException은 파일이 존재하지 않을 때 뜨는 에러이므로, exception 예외처리로 파일이없다는 표시를 사용자에게 보여줘야한다. (try-catch 문이 필요한 이유)

2) , 콤마를 기준으로 문자열 분리한 후 1단계에서 선언한 변수에 저장하기 split()함수 사용 - while문 종료

	String[] word=line.split(",");	// 콤마를 기준으로 문자열 분리한 것 배열 word변수에 넣기
	name[i]=word[0].trim();
	kor[i]=Integer.parseInt(word[1].trim());	//입력데이터의 배열이 다르거나 하면 word[1]같은 인덱스 안의 값이 달라질 수가 있다
	eng[i]=Integer.parseInt(word[2].trim());
	mat[i]=Integer.parseInt(word[3].trim());
	i++; //다음사람
}//while end

3) 평균구하기

for(i=0; i<size; i++) {
		aver[i]=(kor[i]+eng[i]+mat[i])/3;
}//for end

4) 등수구하기 (평균을 기준으로)

for(int a=0; a<size; a++) {
	for(int b=0; b<size; b++) {
		if(aver[a]<aver[b]) {
			rank[i]=rank[i]+1;
		}//if end
	}//for end
}//for end

2. result.txt 결과 출력하기

1) 출력 변수 선언하기

2) 5명의 데이터 출력하기 -> 평균, 별찍기, 장학생 출력

for(i=0; i<size; i++) {
	out.printf("%-6s %5d %5d %5d %5d %3d" 
			   ,name[i], kor[i], eng[i], mat[i], aver[i], rank[i]);
					
	out.println(); //한사람 출력하고 줄바꿈
    
    //7) 결과 - 과락
	if(aver[i]>=70) {
		if(kor[i]<40 || eng[i]<40 || mat[i]<40) {
			out.printf("%-10s", "재시험"); //5칸 내에서 왼쪽정렬
		}else {
			out.printf("%-10s", "합 격");
		}//if end
	}else {
		out.printf("%-10s", "불합격");
	}//if end
					
					
					
	//8) 평균 10점당 별 * 한개씩
	for(int star=1; star<=aver[i]/10; star++) {
		out.printf("%c","*");
	}//for end
					
					
	//9) 평균 95점 이상이면 장학생
	if(aver[i]>=95) { 
		out.printf("%-12s","장학생");
	}//if end

	out.println(); //한사람 출력하고 줄바꿈
    
}//for end
				
				
				
System.out.println("result.txt 성적프로그램이 완성되었습니다.");

3. 예외처리

} catch (Exception e) {
	System.out.println("성적프로그램 읽고, 쓰기 실패 : " + e);
} finally {
	//자원반납
	//정상적으로 나와도 close, 비정상적으로 나와도 close 시켜줘야한다.
	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 

🖥 전체코드

코드를 입력하세요
profile
코딩 공부 💻

0개의 댓글