2007. 2. 16. 05:02

번 학기때 모바일게임을 자바로 만들어야 하기에 빛쟁이가 되면서까지 학원을 끊었다.
다음 문제는 강사분이 내주는 과제중에 하나로 자바 I.O(입/출력)부분에서 나왔다.

▶ 키보드로 부터 이름, 국어, 영어, 수학, 과학 점수를 얻어와서 총점,평균,학점,순위를 저장하고 읽어서 출력해라.
※ 단, 키보드 입력은 StringTokenizer를 사용해서 한줄로 입력받게하라. 


 

 정상적인 출력된 화면♣
사용자 삽입 이미지


바로 소스가 보이면 재미없으니 눈요기용 그림 하나!

사용자 삽입 이미지
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.




자 그럼 소스를 보도록 하자

import java.io.*;
import java.util.*;
class Student implements Serializable{
  String name;
  int kor;
  int eng;
  int math;
  int sci;
  int total;
  float avg;
  String grade;
  void fgrade(){
    total = kor+eng+math+sci;
    avg=total/4.0f;
    if(avg>=90)grade="A";
    else if(avg>=80)grade="B";
    else if(avg>=70)grade="C";
    else if(avg>=60)grade="D";
    else grade="F";
  }
  float getAvg(){
    return avg;
  } 
  public String toString(){
   return name + "\t" + total +  "\t" + avg +  "\t" + grade;
  } 
}
class Problem13_1{
  public static void main(String[] args) throws Exception{
//입력  
    FileOutputStream fos=new FileOutputStream("c:\\student.dat");
    ObjectOutputStream oos=new ObjectOutputStream(fos);
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));   
    Student stu=new Student();
    String Tmp;
      
    while(true){
      System.out.println("이름,국어,영어,수학,과학 순으로 한줄로 입력해라(끝:eof)?"); Tmp=br.readLine();
      StringTokenizer st = new StringTokenizer(Tmp," ");
      if (Tmp.equals("eof") ) break;
      String a = st.nextToken();
      String b = st.nextToken();
      String c = st.nextToken();
      String d = st.nextToken();
      String e = st.nextToken();
     
      stu.name = a;    
      stu.kor = Integer.parseInt(b);
      stu.eng = Integer.parseInt(c);
      stu.math = Integer.parseInt(d);
      stu.sci = Integer.parseInt(e);
     
        /*
      System.out.print("국어?"); stu.kor = Integer.parseInt(br.readLine());
      System.out.print("영어?"); stu.eng = Integer.parseInt(br.readLine());
      System.out.print("수학?"); stu.math = Integer.parseInt(br.readLine());
      System.out.print("과학?"); stu.sci = Integer.parseInt(br.readLine());
      */// 토큰을 사용하지 않고 한 라인씩 입력받을때는 이 부분을 사용
     
   stu.fgrade();
   oos.writeObject(stu);
   oos.reset();
 }  
    oos.close();
   
//출력
   FileInputStream fis=new FileInputStream("c:\\student.dat");
    ObjectInputStream ois=new ObjectInputStream(fis);
 Student sti;  //읽기용 임시 객체
 Student[] sta = new Student[10]; //정렬용 배열 객체
 int cnt=0, t;
 //파일 읽기
 while(true){
  try{
   sti=(Student)ois.readObject();
   sta[cnt] = new Student();
   sta[cnt] = sti;
   cnt++;
  }catch(Exception e){ break;}
  
  }
    ois.close();
    //정렬(선택정렬)
  for(int i=0;i<cnt-1;i++){
   for(int j=i+1;j<cnt;j++){
    if (sta[i].getAvg() > sta[j].getAvg()){
     sti= sta[i];
     sta[i]=sta[j];
     sta[j]=sti;
    }   
   }
  }
  //화면 출력
  System.out.println("=============================");
  System.out.println("이름\t총점\t평균\t평가\t순위");
  System.out.println("=============================");
  //순위 처리
  int r;
 for(int i=0;i<cnt;i++){
  r=1;
  for(int j=0;j<cnt;j++){
   if(sta[i].getAvg()<sta[j].getAvg()) r++;
  }
  System.out.println(sta[i].toString() + "\t" + r);
 }
 //파일 출력
    FileOutputStream fos1=new FileOutputStream("c:\\orderByAvg.dat");
    OutputStreamWriter osw=new OutputStreamWriter(fos1);
    BufferedWriter bw=new BufferedWriter(osw);
    for(int i=0;i<cnt;i++){
     bw.write(sta[i].toString());
  bw.newLine();
 }
 bw.close();
 
  }
}
 

'주절주절 잡담' 카테고리의 다른 글

[K-1] 최홍만VS마이티모  (0) 2007.03.05
정대만에게 배우는 파견사원문제  (6) 2007.03.03
[프로그램] JAVA 공부  (0) 2007.02.16
애니 오타쿠 시험 결과  (4) 2007.02.05
추억의 외화 TOP10  (0) 2007.01.25
귀족노조  (0) 2007.01.18
Posted by 이오니아

댓글을 달아 주세요