yoni

[25][IO] method 기반 refactoring, 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템 제작 ★ 본문

java of educational by contents

[25][IO] method 기반 refactoring, 데이터 파일을 읽어 성적, 연봉, 단풍 여행 처리 시스템 제작 ★

yoni-1117 2018. 12. 8. 18:36

[과제 1] 데이터 파일을 읽어 성적처리하는 클래스를 작성하세요.
- split(): String[] java.lang.String.split(String regex) 
  하나의 문자열을 주어진 문자열(regex)을 기준으로 분할하여 문자열 배열을 리턴합니다.
  예) String[] values = line.split(",");
- 문자열을 정수로 변환: int price = Integer.parseInt("2500");

1. 데이터 파일

[실행 화면]

왕눈이 학생의 성적을 처리했습니다.
아로미 학생의 성적을 처리했습니다.
홍길동 학생의 성적을 처리했습니다.
가길순 학생의 성적을 처리했습니다.
나길순 학생의 성적을 처리했습니다.
 


▷ C:/홈 폴더/io/data.csv(CSV: Comma Separated Value 파일)
     - split() 메소드 이용
     - 문자열뒤에 공백이 있으면 안됨.
-----------------------------------------------------------------------------------


왕눈이,80   ,90,100
아로미,75,89,88
홍길동,60,85,77
가길순,100,90,83
나길순,91,92,97   

 

-----------------------------------------------------------------------------------


2. 데이터 파일 처리 결과 파일, 자동 생성됨.

▷ C:/홈 폴더/io/data_proc2.txt
-----------------------------------------------------------------------------------

 
왕눈이  80    90  100  270   90
아로미  75    89   88   252   84
홍길동  60    85   77   222   74
가길순  100  90   83   273   91
나길순  91    92   97   280   93
 
-----------------------------------------------------------------------------------

  
  
3. 데이티 클래스
▷ oop4.Data.java
-----------------------------------------------------------------------------------

package oop4;
 
public class Data {
  // 왕눈이,80   ,90,100
  String name;
  int java;
  int html;
  int css3;
  int tot;
  int avg;
  
  public Data() {
  
  }
 
  public Data(String name, int java, int html, int css3, int tot, int avg) {
    this.name = name;
    this.java = java;
    this.html = html;
    this.css3 = css3;
    this.tot = tot;
    this.avg = avg;
  }
  
  
}
 
 
-----------------------------------------------------------------------------------
 
 

4. 처리 클래스

▷ oop4.DataDAO.java
-----------------------------------------------------------------------------------

package oop4;
 
import java.io.PrintWriter;
 
public class DataDAO {
  public Data calc(String line) {

    System.out.println(line);
 
    .....
 
  }
  
  public void print(Data data, PrintWriter pw) {
    pw.print(data.name);  // 파일 기록
    pw.print("\t\t"+ data.java);
    pw.print("\t\t"+ data.html);
    pw.print("\t\t"+ data.css3);
    pw.print("\t\t"+ data.tot);
    pw.print("\t\t"+ data.avg);
    pw.print("\n");
  }
  
}
 
   
-----------------------------------------------------------------------------------
  
  
5. 이용 클래스
▷ oop4.DataProc2.java
-----------------------------------------------------------------------------------

package oop4;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
 
public class DataProc2 {
 
  public static void main(String[] args) {
    File src = new File("C:/ai3/io/data.csv");
    File dest = new File("C:/ai3/io/data_proc2.txt");
    
    // File -> FileReader -> BufferedReader
    FileReader reader = null;   // 파일 읽기
    BufferedReader br = null; // 읽은 내용을 메모리에 저장
 
    // PrintWriter -> FileWriter -> File
    FileWriter writer = null;    // 파일에 기록
    PrintWriter pw = null;      // 메모리에 기록
    
    try {
      reader = new FileReader(src);      // Call By Reference, 해시코드 전달
      br = new BufferedReader(reader); // Call By Reference, 해시코드 전달
      
      // false: 기존 내용을 지우고 기록, true: 파일 하단에 추가
      writer = new FileWriter(dest, false);  
      pw = new PrintWriter(writer);
      
 
       .....
 
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { pw.close(); } catch (Exception e) {  }
      try { writer.close(); } catch (Exception e) { }
      try { br.close(); } catch (Exception e) { }
      try { reader.close(); } catch (Exception e) { }
    }
  }
 
}
 
 
 
  
-----------------------------------------------------------------------------------
 
  
   
[과제 2] 데이터 파일을 읽어 년봉을 출력하는 클래스를 작성하세요.

1. 데이터 파일
- 문자열뒤에 공백이 있으면 안됨.

▷ C:/작업 기준폴더/io/pay.csv(CSV 파일)
     - 데이터 구조: 성명, 월 급여, 경력 년수
-----------------------------------------------------------------------------------

왕눈이,1800000   ,1
아로미,2000000,2
홍길동,2500000,3   
가길순,3000000,5
나길순,3800000,9
-----------------------------------------------------------------------------------
  
 
2. 데이터 파일 처리 결과 파일, 자동 생성(DataProc.java를 복사하여 사용합니다.)
   - 기본급
   - 수당: 경력 년수 * 200000
   - 급여: 기본급 + 수당
   - 년봉 = 급여 * 13

▷ C:/작업 기준 폴더/io/pay_proc2.txt
-----------------------------------------------------------------------------------

성명: 왕눈이
기본급: 1800000 원
경력: 1 년
수당: 200000 원
급여: 2000000 원
년봉: 26000000 원
----------------------
성명: 아로미
기본급: 2,000,000 원
경력: 2 년
수당: 400,000 원
급여: 2,400,000 원
년봉: 31,200,000 원
----------------------
.....
 
-----------------------------------------------------------------------------------


3. 데이터 클래스
▷ oop4.Pay.java
-----------------------------------------------------------------------------------

package oop4;
 
public class Pay {
  String name;
  int basic;
  int year;
  int sudang;
  int salary;
  int total;
  
  public Pay() {
 
  }
 
  public Pay(String name, int basic, int year, int sudang, int salary, int total) {
    this.name = name;
    this.basic = basic;
    this.year = year;
    this.sudang = sudang;
    this.salary = salary;
    this.total = total;
  }
  
 
}
 
   
-----------------------------------------------------------------------------------
  
  
4. 처리 클래스

 
▷ oop4.PayDAO.java
-----------------------------------------------------------------------------------

package oop4;
 
import java.io.PrintWriter;
 
public class PayDAO {

  public Pay calc(String line) {

    System.out.println(line);
 
    .....

  }
  
  public void print(Pay pay, PrintWriter pw) {
    pw.println("성명: " + pay.name);  // 파일 기록
    pw.println("기본급: " + pay.basic + " 원");
    pw.println("경력: " + pay.year + " 년"); 
    pw.println("수당: " + pay.sudang + " 원");
    pw.println("급여: " + pay.salary + " 원");
    pw.println("연봉: " + pay.total + " 원");
    pw.println("----------------------");
  }
  
}
 
 
    
-----------------------------------------------------------------------------------
 
   
5. 이용 클래스
▷ oop4.PayProc2.java
-----------------------------------------------------------------------------------

package oop4;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
 
public class PayProc2 {
 
  public static void main(String[] args) {
    File src = new File("C:/201810_java/io/pay.csv");
    File dest = new File("C:/201810_java/io/pay_proc2.txt");
    
    // File -> FileReader -> BufferedReader
    FileReader reader = null;   // 파일 읽기
    BufferedReader br = null; // 읽은 내용을 메모리에 저장
 
    // PrintWriter -> FileWriter -> File
    FileWriter writer = null;    // 파일에 기록
    PrintWriter pw = null;      // 메모리에 기록
    
    try {
      reader = new FileReader(src);      // Call By Reference, 해시코드 전달
      br = new BufferedReader(reader); // Call By Reference, 해시코드 전달
      
      // false: 기존 내용을 지우고 기록, true: 파일 하단에 추가
      writer = new FileWriter(dest, false);  
      pw = new PrintWriter(writer);
      
 
      .....
 
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { pw.close(); } catch (Exception e) {  }
      try { writer.close(); } catch (Exception e) { }
      try { br.close(); } catch (Exception e) { }
      try { reader.close(); } catch (Exception e) { }
    }
  }
 
}
 
 
   
-----------------------------------------------------------------------------------



[과제 3] 단풍 여행 처리 시스템

1. 데이터 파일
- 문자열뒤에 공백이 있으면 안됨.
 
▷ C:/작업 기준폴더/io/maple.csv(CSV 파일)
     - 데이터 구조: 목적지, 날짜, 회비, 인원수, 케이블카
-----------------------------------------------------------------------------------

내장산,2016-11-10,50000   ,4,0   
설악산,2016-10-15,55000,2,2
덕유산,2016-10-20,60000,2,0
소백산,2016-11-10,40000,3,3
태백산,2016-11-25,35000,5,2
-----------------------------------------------------------------------------------


2. 데이터 파일 처리 결과 파일, 자동 생성
   - 케이블카 금액: 인원수 * 12,000 원
   - 총금액 = (회비 * 인원수) + 케이블카 금액

▷ C:/작업 기준 폴더/backup/maple_proc2.txt
-----------------------------------------------------------------------------------

목적지: 내장산
날짜: 11 월 10 일
회비: ₩ 50,000 원
인원수: 4 명
케이블카: 0 명
케이블카 금액: ₩ 0 원
총금액: ₩ 200,000 원
------------------------------------
.....

-----------------------------------------------------------------------------------
 
 
3. 데이터 클래스
▷ oop4.Maple.java
-----------------------------------------------------------------------------------

package oop4;
 
public class Maple {
  String mountain;
  String date;
  
  int price;
  int count;
  int cable;
  int cable_price; 
  int total;
  
  public Maple() {
   
  }
 
  public Maple(String mountain, String date, int price, int count, int cable, int cable_price, int total) {
    this.mountain = mountain;
    this.date = date;
    this.price = price;
    this.count = count;
    this.cable = cable;
    this.cable_price = cable_price;
    this.total = total;
  }
    
}
 
 
-----------------------------------------------------------------------------------
 
  
4. 처리 클래스

   - split() 메소드 이용
   - 천단위 구분기호 출력
     DecimalFormat df = new DecimalFormat("₩ #,###,### 원");
     String basic = df.format(1800000);
   - substring() 메소드 이용

 
▷ oop4.MapleDAO.java
-----------------------------------------------------------------------------------

package oop4;
 
import java.io.PrintWriter;
import java.text.DecimalFormat;
 
public class MapleDAO {
 
  public Maple calc(String line) {
    System.out.println(line);

    .....
  }
 
  public void print(Maple maple, PrintWriter pw) {
    DecimalFormat df = new DecimalFormat("₩ #,###,### 원");
    
    pw.println("목적지: " + maple.mountain);  // 파일 기록
    pw.println("날짜: " + maple.date);
    pw.println("회비: " + df.format(maple.price)); 
    pw.println("인원수: " + maple.count + " 명");
    pw.println("케이블카: " + maple.cable + " 명");
    pw.println("케이블카 금액: " + df.format(maple.cable_price));
    pw.println("총금액: " + df.format(maple.total));
    pw.println("-------------------------------");
 
  }
  
}
 
 
-----------------------------------------------------------------------------------
   
  
5. 이용 클래스

▷ oop4.MapleProc2.java
-----------------------------------------------------------------------------------

package oop4;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
 
public class MapleProc2 {
 
  public static void main(String[] args) {
    File src = new File("C:/ai3/io/maple.csv");
    File dest = new File("C:/ai3/io/maple_proc2.txt");
    
    // File -> FileReader -> BufferedReader
    FileReader reader = null;   // 파일 읽기
    BufferedReader br = null; // 읽은 내용을 메모리에 저장
 
    // PrintWriter -> FileWriter -> File
    FileWriter writer = null;    // 파일에 기록
    PrintWriter pw = null;      // 메모리에 기록
    
    try {
      reader = new FileReader(src);      // Call By Reference, 해시코드 전달
      br = new BufferedReader(reader); // Call By Reference, 해시코드 전달
      
      // false: 기존 내용을 지우고 기록, true: 파일 하단에 추가
      writer = new FileWriter(dest, false);  
      pw = new PrintWriter(writer);
      
 
      .....
 
      
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try { pw.close(); } catch (Exception e) {  }
      try { writer.close(); } catch (Exception e) { }
      try { br.close(); } catch (Exception e) { }
      try { reader.close(); } catch (Exception e) { }
    }
  }
 
}
 
 

 
-----------------------------------------------------------------------------------

Comments