자바 가계부 프로그램입니다.

lfs의 이미지

import java.lang.*;
import java.io.*;
import java.util.*;
import java.time.*;
import java.time.temporal.ChronoUnit;
 
public class account{
    public static void main(String[] args) throws Exception{
        Count count=new Count();
 
        while(true){
            count.menu();
 
            InputStream is=System.in;
            Reader reader=new InputStreamReader(is);
            BufferedReader br=new BufferedReader(reader);
            char No=(char)br.read();
 
            if(No=='1') count.income();
            else if(No=='2') count.outlay();
            else if(No=='3') count.debt();
            else if(No=='4') count.book();
            else if(No=='5') count.load();
            else if(No=='6') count.save();
            else if(No=='7') count.mout();
            else if(No=='8') count.end();
            else continue;
        }
    }
}
 
class Count{
    TreeMap<String,Integer> IncomeMap=new TreeMap<String,Integer>();
    TreeMap<String,Integer> OutlayMap=new TreeMap<String,Integer>();
    TreeMap<String,Integer> DebtMap=new TreeMap<String,Integer>();
 
    //부채 이자 변수
    int ija;
    //부채 이율 변수
    int iyul;
    //부채받은년월
    LocalDate currDate=LocalDate.now();
    //부채가 계산되는 년월
    LocalDate nextDate=LocalDate.now();
    //옛날 날짜
    LocalDate oldDate=null;
    //파일불러올때 데이터 상수
    static final int SIZE=1000000;
    //메뉴
    public void menu() throws Exception{
        System.out.printf("┌──────────────────┐\n");
        System.out.printf("│           1. 수입 입력             │\n");
        System.out.printf("│           2. 지출 입력             │\n");
        System.out.printf("│           3. 부채 입력             │\n");
        System.out.printf("│           4. 장부 보기             │\n");
        System.out.printf("│           5. 불러 오기             │\n");
        System.out.printf("│           6. 저장 하기             │\n");
        System.out.printf("│           7. 메모리해제            │\n");
        System.out.printf("│           8. 종     료             │\n");
        System.out.printf("└──────────────────┘\n");
        System.out.print("입력:>>");
 
    }
    //수입
    public void income() throws Exception{
        Scanner scanner=new Scanner(System.in);
 
        System.out.println("==가계부 수입 입력==");
        System.out.print("수입항목입력:>>");
        String instr=scanner.nextLine();
 
        System.out.print("수입돈입력:>>");
        Integer inmonstr=scanner.nextInt();
 
        IncomeMap.put(instr,inmonstr);
        System.out.println("수입되었습니다.");
    }
    //지출
    public void outlay() throws Exception{
        Scanner scanner=new Scanner(System.in);
 
        System.out.println("==가계부 지출 입력==");
        System.out.print("지출항목입력:>>");
        String outstr=scanner.nextLine();
 
        System.out.print("지출돈입력:>>");
        Integer outmonstr=scanner.nextInt();
 
        OutlayMap.put(outstr,outmonstr);
        System.out.println("지출되었습니다.");
    }
    //부채
    public void debt() throws Exception{
        Scanner scanner=new Scanner(System.in);
 
        System.out.println("==가계부 부채 입력==");
        System.out.print("부채항목입력:>>");
        String destr=scanner.nextLine();
 
        System.out.print("부채돈입력:>>");
        Integer demonstr=scanner.nextInt();
 
        while(true){
            System.out.println("0=월이자 1=년이자");
            System.out.print("입력:>>");
            this.ija=scanner.nextInt();
 
            if(this.ija<0 || this.ija>1){
                System.out.println("잘못입력하셨습니다.");
                continue;
            }
            break;
        }
 
        while(true){
            System.out.print("이율(퍼센트)입력>>");
            this.iyul=scanner.nextInt();
 
            if(this.iyul<0){
                System.out.println("잘못입력하셨습니다.");
                continue;
            }
            break;
        }
 
        System.out.println("==이자계산==");
        System.out.println("현재날짜:"+this.currDate);
 
        if(this.ija==0)
            System.out.println("월이자--"+this.iyul*demonstr/100+"원 입니다.");
        else if(this.ija==1)
            System.out.println("년이자--"+this.iyul*demonstr/100+"원 입니다.");
 
        DebtMap.put(destr,demonstr);
        System.out.println("부채되었습니다.");
    }
    //장부
    public void book() throws Exception{
        Scanner scanner=new Scanner(System.in);
 
        System.out.println("==가계부 장부 보기==");
 
        System.out.println("수입내역:");
 
        Set<String> keySetIn=IncomeMap.keySet();
        Iterator<String> keyIteratorIn=keySetIn.iterator();
        while(keyIteratorIn.hasNext()){
            String keyIn=keyIteratorIn.next();
            Integer valueIn=IncomeMap.get(keyIn);
            System.out.println(keyIn+"\t"+valueIn+"원");
        }
        System.out.println("===================");
 
        System.out.println("지출내역:");
 
        Set<String> keySetOut=OutlayMap.keySet();
        Iterator<String> keyIteratorOut=keySetOut.iterator();
        while(keyIteratorOut.hasNext()){
            String keyOut=keyIteratorOut.next();
            Integer valueOut=OutlayMap.get(keyOut);
            System.out.println(keyOut+"\t"+valueOut+"원");
        }
        System.out.println("===================");
 
        System.out.println("부채내역:");
 
        Set<String> keySetDebt=DebtMap.keySet();
        Iterator<String> keyIteratorDebt=keySetDebt.iterator();
        while(keyIteratorDebt.hasNext()){
            String keyDebt=keyIteratorDebt.next();
            Integer valueDebt=DebtMap.get(keyDebt);
            System.out.println(keyDebt+"\t"+valueDebt+"원");
        }
        System.out.println("===================");
 
        System.out.println("부채이자내역서:");
 
        if(this.oldDate!=null){
            this.currDate=this.oldDate;
        }
 
        long afterYear=ChronoUnit.YEARS.between(this.currDate,this.nextDate);
        long afterMonth=ChronoUnit.MONTHS.between(this.currDate,this.nextDate);
 
        Set<String> keySetDebt_1=DebtMap.keySet();
        Iterator<String> keyIteratorDebt_1=keySetDebt_1.iterator();
        while(keyIteratorDebt_1.hasNext()){
            String keyDebt_1=keyIteratorDebt_1.next();
            Integer valueDebt_1=DebtMap.get(keyDebt_1);
            if(this.ija==0){
                System.out.println(keyDebt_1+"--월이자:"+valueDebt_1*this.iyul/100*afterMonth+"원");
            }
            else if(this.ija==1){
                System.out.println(keyDebt_1+"--년이자:"+valueDebt_1*this.iyul/100*afterYear+"원");
            }
        }
    }
    //불러오기
    public void load() throws Exception{
        Console console=System.console();
        System.out.println("==가계부 불러오기==");
 
        //날짜 입력은 실례로 "2019-12-19"로 입력하세요.
        System.out.print("날짜(년월일)입력:>>");
        String fileDate=console.readLine();
 
        File fileIn=new File("income"+fileDate+".dat");
        FileReader frIn=new FileReader(fileIn);
 
        File fileOut=new File("outlay"+fileDate+".dat");
        FileReader frOut=new FileReader(fileOut);
 
        File fileDebt=new File("debt"+fileDate+".dat");
        FileReader frDebt=new FileReader(fileDebt);
 
        int readCharNo;
        char[] cbuf=new char[SIZE];
 
        while((readCharNo=frIn.read(cbuf)) != -1){
            String iData=new String(cbuf,0,readCharNo);
 
            StringTokenizer Datasp=new StringTokenizer(iData,"\r\n");
 
            while(Datasp.hasMoreTokens()){
                String token=Datasp.nextToken();
                String[] Datasp_i=token.split("&");
                String Datasp_is=new String(Datasp_i[0]);
                Integer Datasp_ii=new Integer(Datasp_i[1]);
                IncomeMap.put(Datasp_is,Datasp_ii);
           }
        }
        frIn.close();
 
        int readCharNo_1;
        char[] cbuf_1=new char[SIZE];
 
        while((readCharNo_1=frOut.read(cbuf_1)) != -1){
            String iData_1=new String(cbuf_1,0,readCharNo_1);
 
            StringTokenizer Datasp_1=new StringTokenizer(iData_1,"\r\n");
 
            while(Datasp_1.hasMoreTokens()){
                String token_1=Datasp_1.nextToken();
                String[] Datasp_i_1=token_1.split("&");
                String Datasp_is_1=new String(Datasp_i_1[0]);
                Integer Datasp_ii_1=new Integer(Datasp_i_1[1]);
                OutlayMap.put(Datasp_is_1,Datasp_ii_1);
           }
        }
        frOut.close();
 
        int readCharNo_2;
        char[] cbuf_2=new char[SIZE];
 
        while((readCharNo_2=frDebt.read(cbuf_2)) != -1){
            String iData_2=new String(cbuf_2,0,readCharNo_2);
 
            StringTokenizer Datasp_2=new StringTokenizer(iData_2,"\r\n");
 
            while(Datasp_2.hasMoreTokens()){
                String token_2=Datasp_2.nextToken();
                String[] Datasp_i_2=token_2.split("&");
                String Datasp_is_2=new String(Datasp_i_2[0]);
                Integer Datasp_ii_2=new Integer(Datasp_i_2[1]);
                oldDate=LocalDate.parse(Datasp_i_2[2]); //옛날 날짜 불러오기
                DebtMap.put(Datasp_is_2,Datasp_ii_2);
           }
        }
        frDebt.close();
        System.out.println("불러오기되었습니다.");
    }
    //저장하기
    public void save() throws Exception{
        File fileIn=new File("income"+this.currDate+".dat");
        FileWriter fwIn=new FileWriter(fileIn,true);
 
        File fileOut=new File("outlay"+this.currDate+".dat");
        FileWriter fwOut=new FileWriter(fileOut,true);
 
        File fileDebt=new File("debt"+this.currDate+".dat");
        FileWriter fwDebt=new FileWriter(fileDebt,true);
 
        System.out.println("==가계부 저장==");
 
        Set<String> keySetIn=IncomeMap.keySet();
        Iterator<String> keyIteratorIn=keySetIn.iterator();
        while(keyIteratorIn.hasNext()){
            String keyIn=keyIteratorIn.next();
            Integer valueIn=IncomeMap.get(keyIn);
            fwIn.write(keyIn+"&"+valueIn+"\r\n");
        }
        fwIn.flush();
        fwIn.close();
 
        Set<String> keySetOut=OutlayMap.keySet();
        Iterator<String> keyIteratorOut=keySetOut.iterator();
        while(keyIteratorOut.hasNext()){
            String keyOut=keyIteratorOut.next();
            Integer valueOut=OutlayMap.get(keyOut);
            fwOut.write(keyOut+"&"+valueOut+"\r\n");
        }
        fwOut.flush();
        fwOut.close();
 
        Set<String> keySetDebt=DebtMap.keySet();
        Iterator<String> keyIteratorDebt=keySetDebt.iterator();
        while(keyIteratorDebt.hasNext()){
            String keyDebt=keyIteratorDebt.next();
            Integer valueDebt=DebtMap.get(keyDebt);
            fwDebt.write(keyDebt+"&"+valueDebt+"&"+this.currDate+"\r\n");
        }
        fwDebt.flush();
        fwDebt.close();
 
        System.out.println("저장되었습니다.");
    }
    //메모리해제
    public void mout() throws Exception{
        IncomeMap.clear();
        OutlayMap.clear();
        DebtMap.clear();
 
        this.oldDate=null;
 
        System.out.println("메모리 해제되었습니다.");
    }
    //끝마침
    public void end() throws Exception{
        System.out.println("끝마치겠습니다.");
        System.exit(0);
    }
}

소스 자세히 보십시요.
약간은 복잡합니다.

Forums: 

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.