티스토리 뷰

JAVA

[JavaProject] 나만의 가계부

LoveApple 2019. 3. 4. 21:11

출처:오마이뉴스

0. 머리말

 -자바 프로젝트를 어떤것을 해볼까 하다가 요즘 한참 가계부를 적는데 빠져서 이걸 프로그램으로 만들어서 더욱더 편하게 가계부를 만들면 어떨까??라는 생각으로 프로젝트를 진행하였습니다.      비교적 간단하게 생각을 하고 프로젝트를 진행하였지만 쉽지만은 않았습니다. 
그래도 하나의 프로젝트를 통해 자바에 대한 이해도가 많이 높아지기를...


1. 사용 프로그램

  - VScode, JAVA

2.  프로젝트 설명

본 프로젝트는 자바를 이용하여 나만의 가계부를 만드는것을 목표로 합니다. 데이터들을 최대한 클래스화 하여 보다 편하게 데이터를 유지보수하는데 힘을 실었으며, 추후에는 웹서버, PHP를 이용하여 실시간으로 데이터를 저장하고 불러 올 수 있도록 할 것이다. 

3. 프로젝트 기능

  •  가계부 작성

    - 카드 사용일자
    - 사용금액
    - 카드종류
    - 사용목적

  •  가계부 목록 확인

  •  가계부 삭제


4. 코드

ShowScript.java

public class ShowScript{
    
    public void ContinueMessage() {
        System.out.print("프로그램을 종료 하시겠습니까? : 0 = 계속 ,1 = 종료 ,2 = 데이터 삭제");
    }
public void StartMessage() {
    System.out.print("가계부를 작성할려면 0, 가계부 리스트를 확인 할려면 1 : ");
}
public void Date(){
System.out.print("카드 사용일자를 작성해주세요. \n숫자 0 을 작성하시면 현재 시각으로 작성 됩니다. :");
}
public void Price(){
System.out.print("사용 금액을 작성 해주세요. \n 숫자만 입력하시오. : ");
}
public void CardType(){
System.out.print("카드종류를 작성해주세요. ex)국민, 국민(체크), 국민(신용) : ");
}
public void explantion(){
System.out.print("사용 목적을 작성 해주세요. :");
}
public void BankAccountNumber(){
System.out.print("계좌번호를 입력해주시오. : ");
}
public void End(){
System.out.print("다른 내용을 작성 하시겠습니까? \n 내용을 더 작성 하실려면 숫자 1, 아니면 0");
}
public void EndMessage(){
System.out.println("***********가계부***********");
}
public void removeMessage(){
System.out.println("삭제할 데이터의 위치를 지정해주세요. 0번부터 시작 : ");
}
}

ShowScript.java 클래스에서는 콘솔창에 띄어줄 메세지들을 한곳에 모와놓아서 보다 어디서든지 원하는 메세지를 출력할 수 있도록 하였습니다.

(따로 알려줄 내용이 없다....)

BookItem.java

public class BookItem{
String date;
int money;
String CardType;
String explanation;

public String getDate() {
return this.date;
}

public void setDate(String date) {
this.date = date;
}

public int getMoney() {
return this.money;
}

public void setMoney(int money) {
this.money = money;
}

public String getCardType() {
return this.CardType;
}

public void setCardType(String CardType) {
this.CardType = CardType;
}

public String getExplanation() {
return this.explanation;
}

public void setExplanation(String explanation) {
this.explanation = explanation;
}

@Override
public String toString() {
return "{" +
" date='" + getDate() + "'" +
", money='" + getMoney() + "'" +
", CardType='" + getCardType() + "'" +
", explanation='" + getExplanation() + "'" +
"}";
}

}

BookItem.java 클래스는 데이터를 저장하고 불러올 수 있도록 Getter,Setter를 통해 만들어 주었으며, 저장된 데이터의 정보를 출력해 주기 위해 toString 메소드를 같이 사용하였습니다.


setData.java

import java.util.ArrayList;
import java.util.Scanner;
import java.util.*;

public class setData{
Scanner sc = new Scanner(System.in);
ArrayList<BookItem> arrayList = new ArrayList<>();
String date;
String CardType;
String explanation;
int money;
Date nowDate = new Date(); //현재시간

public void Dateset(){
date = nowDate.toString();
}
public void setMoney() {
while(true){
try{
money = sc.nextInt();
break;
}catch(InputMismatchException e){
System.out.print("잘못 입력하셨습니다. 숫자만 입력해주세요. : ");
sc = new Scanner(System.in);

}
}
}
public void removeItem(int removePosition){
arrayList.remove(removePosition);
}
public void setCardType() {
    CardType = sc.next();
    
}
public void setExplanation() {
    explanation = sc.next();
    
}
public void addItem() {
    BookItem bookItem = new BookItem();
    bookItem.setDate(date);
    bookItem.setMoney(money);
    bookItem.setCardType(CardType);
    bookItem.setExplanation(explanation);
    arrayList.add(bookItem);
}
public void showHouseKeepingBook(int positon) {
    arrayList.get(positon);
}
}

setData.java 파일은 자신이 작성한 데이터를 arrayList에 저장하였습니다. 

그다음 Scanner를 이용하여서 키보드 입력을 받아 마지막 addItem클래스에서 입력된 데이터를 저장해줍니다.

그리고 setMoney()클래스에서는 try~catch문을 이용하여 입력된 값이 정수가 아닌 문자가 들어갔을 경우 

Exception을 통해 잘못입력하였다는 메세지를 띄어주며 다시 작성할 수 있도록 해줍니다.

WriteStart.java

import java.util.Scanner;

public class WriteStart{

Scanner sc = new Scanner(System.in);
ShowScript showScript = new ShowScript();
setData setdata = new setData();
public void start(){
    
    boolean loop = true;
    while(loop) {
    showScript.StartMessage();
int input_Scanner = sc.nextInt();
switch(input_Scanner) {
    case 0:
        
     setdata.Dateset();
     //////////////////////////////
     showScript.Price();
     setdata.setMoney();
     /////////////////////////////
     showScript.CardType();
     setdata.setCardType();
     /////////////////////////////
     showScript.explantion();
     setdata.setExplanation();
     //////////////////////////////
                setdata.addItem();
                ShowList();
     break;
    case 1:
        
        ShowList();
                break;
            case 2:
                
                ShowList();
                showScript.removeMessage();
                int removePosition = sc.nextInt();
                setdata.removeItem(removePosition);
                break;
    }
    showScript.ContinueMessage();
    int question = sc.nextInt();
    if(question == 1) {
        loop = false;
    }
    }

    }
    public void ShowList(){
        showScript.EndMessage();
        for(int i=0;i<setdata.arrayList.size();i++){
            System.out.println(setdata.arrayList.get(i));
        }
    }
}

WriteStart.java 파일에서는 Switch~case문을 이용하여 처음 시작할때 가계부 목록을 확인 할지 가계부를 작성할지 그리고 저장된 데이터를 삭제할지 정하게 됩니다.

0. 가계부 작성

가계부 작성을 하게 되면 날짜, 돈, 카드종류, 사용목적을 작성하게 되고 작성된 데이터를 arrayList에 저장하게 됩니다. 그리고 가계부 목록을 보여줍니다.

1. 가계부 목록 보여주기

2. 가계부 목록 지우기

우선 저장된 가계부 목록을 보여준 후 몇번째 데이터를 삭제할 것인지 scanner를 통해 키보드 입력을 받습니다.

그리고 해당번째의 데이터를 삭제 해줍니다.

마지막으로는 계속해서 작성을 할것인지 아님 프로그램을 종료할 것 인지에 대한 메세지를 띄어줍니다.  프로그램을 종료하겠다 하면 while문을 빠져나와 프로그램이 종료 되게 됩니다.

Main.Java

public class Main {

public static void main(String[] args) {
WriteStart writeStart = new WriteStart();
writeStart.start();
}
}

5. 끝으로

 - 아직 수정해야할 부분이 많지만, 임시저장한다는 생각으로 지금까지 작성한 코드에 대해서 작성해보았습니다. 
   이 글을 보시고 이해가 안가시거나 추천해주시는 방법이 있으면 댓글로 남겨주세요.

그리고 다음 단계는 현재 작성된 코드를 좀 더 깔끔하게 정리하고, 에러를 줄이고 웹서버와 PHP를 이용하여 실시간으로 데이터를 저장하는 단계를 가지겠습니다.

(웹서버는 AWS를 이용하여 시도 해보겠습니다.)

감사합니다.



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함