1월 입출금 내역 합계 계산하기

2024. 6. 25. 00:52WebBack/Software 코드 분석

입출금 내역 분석기 요구 사항  경로
CSV + 입출금 내역 분석기 요구 사항 https://ycraah.tistory.com/25
모든 거래 내역의 합 계산하기 https://ycraah.tistory.com/26

 

기능: 1월달의 모든 거래 내역의 합계 계산하기
클래스 이름: BankTransactionAnalyzerJanuary
구현 계획: 

1. CSV 파일이 존재하는 디렉터리 경로를 변수 RESOURCE에 저장한다. 
2. CSV 파일 이름을 사용자가 직접 입력한다. 
3. 파일의 내용을 한 줄 씩 읽어 변수 lines에 저장한다.
4. 파일에 저장된 날짜 패턴을 변수 formatted에 저장
5. 변수 lines를 반복문을 통해 ' , '을 기준으로  파싱한다. (반복문)
6. 파싱한 내용 중에 날짜를 패턴에 맞게 분석하여 변수 date에 저장한다. 
7. 만일, date에 저장된 날짜가 '1월'이라면 금액을 amount에 저장한다. 
8. total에 amount값을 계속 더한다. 
9. total에 저장된 값을 출력한다. 

 

'모든 거래 내역의 합 계산하기'에서 추가된 점만 다루겠다. 

final DateTimeFormatter formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd");

 

formatted에는 날짜 패턴이 저장되었다. 

CVS 파일에서 날짜를 yyyy-MM-dd 형식으로 표기해놓았기 때문에 이를 자바가 해석할 수 있도록 하기 위함이다.

2024-01-30, -10, 교통비
2024-01-30, -10, 교통비
2024-01-30, -20, 수리비
2024-02-01, 200, 봉급
2024-02-01, 50, 보너스
2024-02-02, -50, 월세
2024-02-03, -8, 도서비
2024-02-03, -60, 보험
LocalDate date = LocalDate.parse(columns[0], formatted);

 

columns[0]은 '2024-01-30'이라는 날짜 데이터가 이에 해당한다. 

이를 formatted 형식으로 읽어서 변수 date에 저장한다. 

참고로 yyyy-MM-dd가 기본값이라 columns[0]만 적어도 작동한다. 

if(date.getMonthValue() == 1){
  double amount = Double.parseDouble(columns[1]);
  total += amount;
}

 

그리고 date 객체에서 월에 대한 정보를 정수로 반환하는 getMonthValue를 사용해서 1월달인 경우에는 

columns[1] 즉 '-10'을 amount에 저장한다. 

그리고 이 값을 total에 다시 저장한다. 

이 과정이 반복되면서 total에는 1월달에 사용한 모든 입출금 내역이 저장된다. 

 

출력)

1월달의 은행 입출금 내역의 총합은 -30.0(만원)입니다.

 

더 알아보기 경로
Paths 사용법 https://ycraah.tistory.com/20
Files.readAllLines 사용법 https://ycraah.tistory.com/21
DateTimeFormatter.ofPattern 사용법 https://ycraah.tistory.com/22
LocaleDate.getMonthValue 사용법 https://ycraah.tistory.com/31

 

 

public class BankTransactionAnalyzerJanuary {
  private static final String RESOURCES = "src/main/resources/";
  public static void main(final String...args) throws IOException {
    final Path path = Paths.get(RESOURCES + args[0]);
    final List<String> lines = Files.readAllLines(path);
    double total = 0d;
    for(final String line: lines){ //예시 2024-01-30, -10, 교통비
      final String[] columns = line.split(",");
      final DateTimeFormatter formatted = DateTimeFormatter.ofPattern("yyyy-MM-dd");
      LocalDate date = LocalDate.parse(columns[0], formatted);
      if(date.getMonthValue() == 1){
        double amount = Double.parseDouble(columns[1]);
        total += amount;
      }
    }
    System.out.println("은행 입출금 내역의 총합은 " + total + "(만원)입니다.");
  }
}