반응형
성적 입력 자료(sungjuk.txt)를 가져와서, 아래의 포멧으로 성적 결과 파일(result.txt) 완성하기
평균 : 소수점 없이 출력
등수 : 평균을 기준으로 출력
결과 : 평균기준 60점 이상일 시 "합격", 평균기준 60점 미만일 시 "불합격
(단, 한과목이라도 40점 이하라면 "재시험")
별 : 평균점수 10점당 1개씩 출력
장학생 : 평균기준 90점 이상일 시 "장학생" 출력
[sungjuk.txt 파일]
이름, 국어점수, 영어점수, 수학점수
[포멧]
성 / 적 / 결 /과
---------------------------------------------------------------
이름 국어 영어 수학 평균 등수 결과
---------------------------------------------------------------
라일락 100 100 100 100 1 합격 ********** 장학생
진달래 50 55 60 55 4 불합격 *****
개나리 95 95 35 75 3 재시험 *******
무궁화 80 85 90 85 2 합격 *******
[결과]
[코드]
import java.util.List;
public class Test06_sungjuk {
public static void main(String[] args) {
// 문제) 성적프로그램
// 성적 입력 자료(sungjuk.txt)를 가져와서, 성적 결과 파일 완성하기(result.txt)
String fileIn = "d:/java202301/sungjuk.txt";
String fileOut = "d:/java202301/result1.txt";
Sungjuk sungjuk = new Sungjuk();
List<Sungjuk> list1 = sungjuk.getGrades(fileIn);
sungjuk.makeRank(list1);
sungjuk.display(list1, fileOut);
}
}
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class Sungjuk {
private String name; //이름
private int kor; //국어점수
private int eng; //영어점수
private int mat; //수학점수
private int aver; //평균
private int rankNum; //등수
private String result; //결과
private String star = ""; //별 출력
private String scholar = ""; //장학생
public Sungjuk() {}
public Sungjuk(String name, int kor, int eng, int mat) { //초기값으로 aver 값 계산하여 초기화
this.name = name;
this.kor = kor;
this.eng = eng;
this.mat = mat;
this.aver = (kor+eng+mat)/3;
}
public List<Sungjuk> getGrades (String a) {
FileReader fr = null;
BufferedReader br = null;
List<Sungjuk> list1 = new ArrayList();
try {
fr = new FileReader(a);
br = new BufferedReader(fr);
List<String[]> list = new ArrayList<>(); //한줄의 이름, 국어, 영어, 수학 저장배열
while (true) { //파일의 읽을 라인이 없을때까지 루프
String line = br.readLine();
if (line != null) {
String[] stu = line.split(","); //","로 분리하여 stu 배열에 저장
list.add(stu); //stu 배열을 list배열에 저장
} else {
break;
}
}
for (int i = 0; i < list.size(); i++) { //list 배열 안의 stu배열들의 값을이용해 Sungjuk 객체생성
list1.add(new Sungjuk(list.get(i)[0], Integer.parseInt(list.get(i)[1]), Integer.parseInt(list.get(i)[2]), Integer.parseInt(list.get(i)[3])));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (br != null) {br.close();}
} catch (Exception e) {}
try {
if (fr != null) {fr.close();}
} catch (Exception e) {}
}
return list1; //객체들이 담긴 list1 리턴
}
public void makeRank(List<Sungjuk> a) {
for (int i = 0; i < a.size() - 1; i++) { //등수대로 정렬하기 : aver 값으로 객체 배열 내림차순 정렬
for (int j = i + 1; j < a.size(); j++) {
if (a.get(i).aver < a.get(j).aver) {
Sungjuk b = a.get(i);
a.set(i, a.get(j));
a.set(j, b);
}
}
}
for (int i = 0; i < a.size(); i++) {
Sungjuk stu = a.get(i);
stu.rankNum = i + 1; //등수 적용 : 정렬된 객체 배열의 인덱스번호+1 을 해당객체 rankNum에 넣음
if(stu.aver<60) { //합격여부
stu.result = "불합격";
} else if (stu.kor > 40 && stu.eng > 40 && stu.mat > 40) {
stu.result = " 합격";
if (stu.aver > 90) { //장학생 추출
stu.scholar = "장학생";
}
} else {
stu.result = "재시험";
}
for(int j=0; j<stu.aver/10; j++) { //별찍기
a.get(i).star += "*";
}
}
}
public void display(List<Sungjuk> b, String c){
FileWriter fw = null;
PrintWriter out = null;
try {
fw = new FileWriter(c, false);
out = new PrintWriter(fw, true);
out.println(" 성 / 적 / 결 / 과");
out.println("---------------------------------------------------------");
out.println(" 이름 국어 영어 수학 평균 등수 결과");
out.println("---------------------------------------------------------");
for (int i = 0; i < b.size(); i++) {
Sungjuk a = b.get(i);
out.printf("%3s %4d %4d %4d %4d %3d %5s %10s %3s\n", a.name, a.kor, a.eng, a.mat, a.aver, a.rankNum, a.result, a.star, a.scholar);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {out.close();}
} catch (Exception e) {}
try {
if (fw != null) {fw.close();}
} catch (Exception e) {}
}
}
}
반응형
'Back-End > Java' 카테고리의 다른 글
Java 복습, 예습 (0) | 2023.03.26 |
---|---|
Java(9) (0) | 2023.03.23 |
Java(8) (0) | 2023.03.22 |
댓글