Java/Java 수강일지

[수강일지_21] 가계부 만들기

jamk-diary 2026. 6. 10. 11:11
MainClass
package accountbookDao;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import accountbookDto.AccountBookDto;   
import accountbookDto.AccountbookDto2;  
import accountbookDto.AccountBookDto3;
import singleton.SingleTon;

public  class AccountBookDaoMpl implements AccountBookDao {

	Scanner sc = new Scanner(System.in);
	

	//예산 설정 
	@Override
	public void budget() {
	while(true){ 
		System.out.println("=========== 예산관리===========" );
		 System.out.println(" [1] 예산 설정");
		 System.out.println(" [2] 예산 현황");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work1 = sc.nextInt();
		 sc.nextLine(); // 버퍼에 남아있는 엔터(\n)를 청소
	
		 
		 	
		 			switch(work1) {
		 				
		 				case 1:
		 					System.out.println("=========== 예산 설정===========" );
		 					System.out.println(" - 월별 예산을 설정합니다 ");
		 					System.out.println(" 1. 가계부 이름  ->  ");
		 					System.out.println(" 2. 기간 설정  ->  예) 1998-02");
		 					System.out.println(" 3. 예산  ->  예) 2000000 ");
		 					System.out.println("============================" );
		 					
		 					System.out.print("1. -> ");
		 					String book_name = sc.next();
		 					
		 					
		 					System.out.print("2. -> ");
		 					String book_budget_month = sc.next();
		 					
		 					
		 					System.out.print("3. -> ");
		 					int book_budget_money = sc.nextInt();
		 					sc.nextLine();
		 					
		 				    System.out.println("============================" );
		 			       
		 			        
		 			      //케이스 2에서 꺼내올 상자 생성
		 			       AccountBookDto dto = new AccountBookDto(); // 빈상자 생성 
		 			       
		 			       // 2. dto에  이름, 기간. 금액 담기 
		 			       dto.setAccountbookname(book_name);         // 이름 따로 담기
		 			       dto.setBudget_Month(book_budget_month);     // 기간 따로 담기
		 			       dto.setUser_budget(book_budget_money);      // 금액 따로 담기
		 			       
		 			       // 3. dto 상자 리스트에 추가하기 
		 			       SingleTon.getInstance().budgetList.add(dto);
		 			       
		 			       System.out.println(book_name + " 가계부 예산 설정이 완료되었습니다.");
		 			      System.out.println( book_budget_month + " 월에 사용하실 수 있는 금액은  "  +book_budget_money + " 원 입니다. ");
		 			       break;
		 			     
		 			      
				
		 				case 2:
		 					System.out.println("=========== 예산 현황===========" );
		 					System.out.println(" 원하시는 가계부와 예산을 입력해 주세요 ");		
		 					System.out.println(" 1. 가계부 이름 ->  ");		
		 					System.out.println(" 2. 조회하실 월 ->  예 : 1988-02");		
		 					System.out.println("============================" );
		 					
		 					System.out.print("1. -> ");
		 					String now_budget_name = sc.next();
		 					 	
		 					
		 					System.out.print("2. -> ");
		 					String now_budget_mont = sc.next();
		 					sc.nextLine(); 	  	 				  
		 					System.out.println("============================" );
		 					
		 					AccountBookDto founddto = null;
		 					
		 					for (AccountBookDto i : SingleTon.getInstance().budgetList) {
								if(i.getAccountbookname().equals(now_budget_name)&& i.getBudget_Month().equals(now_budget_mont)) {
									founddto= i;
									break;
								}
							}
		 					if (founddto != null) {
		 				        
		 				       //founddto 상자에서 꺼낸 getUser_budget 데이터를 find_budget_money 에 담기 
		 				        int find_budget_money = founddto.getUser_budget(); 
		 				       //남은 예산 
		 				        int now_buget_total = find_budget_money - 0; 
		 				        
		 				
		 				        System.out.println(" 가계부 이름:  " + founddto.getAccountbookname());
		 				        System.out.println(" 조회하신 월  : " + founddto.getBudget_Month());
		 				        System.out.println(" 조회하신 기간 예산:  " + find_budget_money + "원");  
		 				        System.out.println(" 남은 예산:  " + now_buget_total + 0 + "원");
		 				        
		 				    } 
		 				
		 					else { System.out.println(" 입력하신 조건과 일치하는 정보가 없습니다.");}
		 					
		 			          break;
		 							
		 				case 3:										
		 			}   break;	 
		 	}
}


	//작성
	@Override
	public void insert() {
		 System.out.println("========== 가계부 작성하기 ==========" );
		 System.out.println(" [1] 수입");
		 System.out.println(" [2] 지출");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work2 = sc.nextInt();
		 
		 while(true){ 
		 	switch(work2) {
		 		case 1:
		 			System.out.println("=========== 수입 작성 ===========" );
 					System.out.println(" - 수입 내용을 작성합니다 ");
 					System.out.println(" 1. 가계부 이름 ->  ");
 					System.out.println(" 2. 수입 날짜  ->  ");
 					System.out.println(" 3. 수입 제목  ->  예) 1998-02-22");
 					System.out.println(" 4. 수입 금액  ->  예) 2000000 ");
 					System.out.println(" 5. 세부 내용  ->   ");
 					System.out.println("============================" );
 					
 				    System.out.print("1. -> ");
 				    String insert_accountbookname = sc.next();
 				    
 				    //빈상자 만들기 ,비교해서 있으면 상자에 담기 
 				    AccountBookDto foundBudget = null;
 				    
 				    for (AccountBookDto i : SingleTon.getInstance().budgetList) {
 				        if (i.getAccountbookname().equals(insert_accountbookname)) {
 				            foundBudget = i; 
 				            break;
 				        }
 				    }
 				    
 				    //가계부 없을때
 				    if (foundBudget == null) {
 				        System.out.println( insert_accountbookname + "로 설정된 가계부가 없습니다.");
 				        System.out.println("   메인 메뉴의 [1] 예산 메뉴에서 먼저 가계부를 생성해 주세요.");
 				        System.out.println("============================" );
 				        return; // insert() 메소 즉시 종료
 				    }
 					
 					System.out.print("2. -> ");
 					String insert_earnings_date = sc.next();
 					
 					System.out.print("3. -> ");
 					String insert_earnings_title = sc.next();
 					
 					System.out.print("4. -> ");
 					int insert_earnings_money = sc.nextInt();
 					
 					System.out.print("5. -> ");
 					String insert_earnings_content = sc.next();
 					sc.nextLine();
 					
 				    System.out.println("============================" );
 				 
 				   AccountbookDto2 dto2 = new AccountbookDto2();

 				   //가계부 이름에 수입 넣기 -> 나중에 수입 호출하려고 
 				  dto2.setEarnings(foundBudget.getAccountbookname());

 				   dto2.setDate_earnings(insert_earnings_date);
 				   dto2.setTitle_earnings(insert_earnings_title); 
 				   dto2.setMoney_earnings(insert_earnings_money);
 				   dto2.setContent_earnings(insert_earnings_content);
 				   
 				   SingleTon.getInstance().earningsList.add(dto2);

 				   System.out.println("[" + foundBudget.getAccountbookname() + "] 가계부에 수입 내역이 성공적으로 추가되었습니다.");
 				   System.out.println(" 수입 날짜: " + insert_earnings_date);
 				   System.out.println(" 수입 제목: " + insert_earnings_title);
 				   System.out.println(" 수입 금액: " + insert_earnings_money + "원");
 				   System.out.println(" 수입 세부내용: " + insert_earnings_content);
 	                break;
 	                
		 		case 2:
		 			System.out.println("=========== 지출 작성 ===========" );
 					System.out.println(" - 지출 내용을 작성합니다 ");
 					System.out.println(" 1. 가계부 이름 ->  ");
 					System.out.println(" 2. 수입 날짜  ->  ");
 					System.out.println(" 3. 수입 제목  ->  예) 1998-02-22");
 					System.out.println(" 4. 수입 금액  ->  예) 2000000 ");
 					System.out.println(" 5. 세부 내용  ->   ");
 					System.out.println("============================" );
 					
 				    System.out.print("1. -> ");
 				    String  expenditure_bookname2 = sc.next();
 				    
 				    //빈상자 만들기  ,비교해서 있으면 상자에 담기 
 				   AccountBookDto foundBudget2 = null;
 				   
 				    for (AccountBookDto i : SingleTon.getInstance().budgetList) {
 				        if (i.getAccountbookname().equals(expenditure_bookname2)) {
 				            foundBudget2 = i; 
 				            break;
 				        }
 				    }
 				    
 				    //가계부 없을때
 				    if (foundBudget2 == null) {
 				        System.out.println( expenditure_bookname2 + "로 설정된 가계부가 없습니다.");
 				        System.out.println("   메인 메뉴의 [1] 예산 메뉴에서 먼저 가계부를 생성해 주세요.");
 				        System.out.println("============================" );
 				        return; // insert() 메소 즉시 종료
 				    }
		 			
 				   System.out.print("2. -> ");
					String expenditure_date = sc.next();
					
					System.out.print("3. -> ");
					String expenditure_title = sc.next();
					
					System.out.print("4. -> ");
					int expenditure_money = sc.nextInt();
					
					System.out.print("5. -> ");
					String expenditure_content = sc.next();
					sc.nextLine();
					
				    System.out.println("============================" );
				  
				    AccountBookDto3 dto3 = new AccountBookDto3();
		
				   
				   //가계부 이름에 지출넣기 -> 나중에 지출 호출하려고 
				    dto3.setExpenditure(foundBudget2.getAccountbookname());

				   dto3.setDate_expenditures(expenditure_content);
				   dto3.setTitle_expenditures(expenditure_title); 
				   dto3.setMoney_expenditures(expenditure_money);
				   dto3.setContent_expenditures(expenditure_content);
				   
				   SingleTon.getInstance().expenditureList.add(dto3);

				   System.out.println("[" + foundBudget2.getAccountbookname() + "] 가계부에 지출 내역이 성공적으로 추가되었습니다.");
				   System.out.println(" 수입 날짜: " + expenditure_date);
				   System.out.println(" 수입 제목: " + expenditure_title);
				   System.out.println(" 수입 금액: " + expenditure_money + "원");
				   System.out.println(" 수입 세부내용: " + expenditure_content);
		 			
		 				break;
		 		case 3:		
		 	} break;
	       }//와일문 닫기
		 }//인서트문 닫기


	
	@Override
	public void delete() {
		System.out.println("============삭제============" ); 
		 System.out.println(" [1] 해당일 수입 내역삭제 ");
		 System.out.println(" [2] 해당일 지출 내역삭제 ");
		 System.out.println(" [3] 전체 삭제 (모든 데이터가 삭제 됩니다) ");
		 System.out.println(" [4] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work3= sc.nextInt();
		 
		 while(true){ 
			 switch(work3) {
			 
			 case 1:
				 System.out.println("==========해당일 수입 내역삭제 ==========" );
					System.out.println(" 해당일 수입 내용을 전부 삭제합니다 ");
					System.out.println(" 해당일을 입력하세요  예)1998-02 ");
					
					System.out.println("============================" );
					System.out.print(" = >");
					String delete_earningsdate=sc.next();
					
				
				  // 1. 삭제할 대상을 담아둘 리스트 생성
				    List<AccountbookDto2> deleteList1 = new ArrayList<>();
				    
				    // 2. 지출 리스트를 돌면서 날짜가 일치하는 수입내역을 모두 찾아서 deleteList에 담기
				    for (AccountbookDto2 delete_box1 : SingleTon.getInstance().earningsList) {
				        if (delete_box1.getDate_earnings().equals(delete_earningsdate)) {
				           deleteList1.add(delete_box1);
				        }
				    }
				    
				    // 3. 찾은 데이터가 있으면 한꺼번에 삭제
				    if (!deleteList1.isEmpty()) {
				        SingleTon.getInstance().expenditureList.removeAll(deleteList1);
				        System.out.println(deleteList1.size() + "개의 수입 내역이 삭제되었습니다.");
				    } else {
				        System.out.println("해당 날짜에 수입 내역이 존재하지 않습니다.");
				    }
			 		
		 			
	 				break;   
			 
			 	case 2:
			 		System.out.println("==========해당일 지출 내역삭제 ==========" );
 					System.out.println(" 해당일 지출 내용을 전부 삭제합니다 ");
 					System.out.println(" 해당일을 입력하세요  예)1998-02 ");
 					
 					System.out.println("============================" );
 					System.out.print(" = >");
 					String delete_expendituredate=sc.next();
 					
 				
 			
 				    List<AccountBookDto3> deleteList2 = new ArrayList<>();
 				    
 				 
 				    for (AccountBookDto3 delete_box2 : SingleTon.getInstance().expenditureList) {
 				        if (delete_box2.getDate_expenditures().equals(delete_expendituredate)) {
 				           deleteList2.add(delete_box2);
 				        }
 				    }
 				    
 				   
 				    if (!deleteList2.isEmpty()) {
 				        SingleTon.getInstance().expenditureList.removeAll(deleteList2);
 				        System.out.println(deleteList2.size() + "개의 지출 내역이 삭제되었습니다.");
 				    } else {
 				        System.out.println("해당 날짜에 지출 내역이 존재하지 않습니다.");
 				    }
 				    
 				    break;
	            	
			 	case 3:
			 				break;    
			 				
			 	case 4:			
			 }break;
		 }	
		
	}



	@Override
	public void update() {
		System.out.println("=========== 수정하기===========" );
		 System.out.println(" [1] 예산 수정");
		 System.out.println(" [2] 일별 수입 내용 수정");
		 System.out.println(" [3] 일별 지출 내용 수정");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work4 = sc.nextInt();
		 
		 while(true){ 
		 		switch(work4) {
		 			case 1:
		 			
		 					break;
				
		 			case 2:
		 			
		 					break;
		 			case 3:		
		 			
		 				break;
		 			case 4:
		 		
		 		}break;
		 }
	}
	
	@Override
	public void select() {
		 System.out.println("=========== 검색하기===========" );
		 System.out.println(" [1] 날짜로 검색");
		 System.out.println(" [2] 제목으로 검색");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 
		 int work5 = sc.nextInt(); //1번 2번 중 선택하게 만들기 
		 
		 while(true){ 
		 	switch(work5) {
				case 1:
					
					 	break;
					
				case 2:
		          
		            	break;
		            	
				case 3:    	
		 }break;
	  }
		

		
	}

	@Override
	public void allprint() {
		 System.out.println("============보기============" );
		 System.out.println(" [1] 해당월로 찾아  내용 보기  ");
		 System.out.println(" [2] 해당일로 찾아 내용 보기 ");
		 System.out.println(" [2] 제목으로 찾아 내용 보기 ");
		 System.out.println(" [3] 월별 결산 합계 ");
		 System.out.println(" [4] 일일 결산 합계 ");
		 System.out.println(" [5] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work6= sc.nextInt();
	     
		 while(true){ 

		 	switch(work6) {
				case 1:
				   
						break;
					
				case 2:
				
						break;
				case 3:
					
						break;	
				case 4:
					
						break;	
				case 5:    		
		 	}break;
		 }
		
	}

	

	@Override
	public void file_Load() {
	
		
	}

	@Override
	public void file_Save() {
		
	}

	@Override
	public void out() {
		
		
	}

	
}

 

class AccountBookDto
package accountbookDto;

public class AccountBookDto {

	//예산 입력 
	 private String accountbookname; //가계부 이름
	 private int user_budget; //월별 예산
	 private String budget_Month; //예산 설정 기간 

	 
	 public AccountBookDto() {
		 
	 }

	 //1. 예산  
	//using
	public AccountBookDto(String accountbookname, int user_budget, String budget_Month) {
		super();
		this.accountbookname = accountbookname;
		this.user_budget = user_budget;
		this.budget_Month = budget_Month;
	}

	//get/set
	


	public String getAccountbookname() {
		return accountbookname;
	}

	public void setAccountbookname(String accountbookname) {
		this.accountbookname = accountbookname;
	}

	public int getUser_budget() {
		return user_budget;
	}

	public void setUser_budget(int user_budget) {
		this.user_budget = user_budget;
	}

	public String getBudget_Month() {
		return budget_Month;
	}

	public void setBudget_Month(String budget_Month) {
		this.budget_Month = budget_Month;
	}
	
	@Override
	public String toString() {
		return "  [ 가계부 이름 =" + accountbookname + ", 예산 기간 = " + budget_Month +", 예산 =" + user_budget + "]";
	}
	


	
}
class AccountbookDto2
package accountbookDto;

public class AccountbookDto2 {

    private String earnings; //수입 
	 private String date_earnings; //날짜
	 private String title_earnings; //제목
	 private int money_earnings; //금액
	 private String content_earnings; //세부내용
	 
 public AccountbookDto2() {
		 
	 }

 //using
public AccountbookDto2(String earnings, String date_earnings, String title_earnings, int money_earnings,
		String content_earnings) {
	super();
	this.earnings = earnings;
	this.date_earnings = date_earnings;
	this.title_earnings = title_earnings;
	this.money_earnings = money_earnings;
	this.content_earnings = content_earnings;
}

//get, set
public String getEarnings() {
	return earnings;
}

public void setEarnings(String earnings) {
	this.earnings = earnings;
}

public String getDate_earnings() {
	return date_earnings;
}

public void setDate_earnings(String date_earnings) {
	this.date_earnings = date_earnings;
}

public String getTitle_earnings() {
	return title_earnings;
}

public void setTitle_earnings(String title_earnings) {
	this.title_earnings = title_earnings;
}

public int getMoney_earnings() {
	return money_earnings;
}

public void setMoney_earnings(int money_earnings) {
	this.money_earnings = money_earnings;
}

public String getContent_earnings() {
	return content_earnings;
}

public void setContent_earnings(String content_earnings) {
	this.content_earnings = content_earnings;
}

//to string
@Override
public String toString() {
	return   "수입 ["  + ", 날짜 : " + date_earnings + ", 제목 : "
			+ title_earnings + ", 금액 : " + money_earnings + ", 세부내용 : " + content_earnings + "]";
}



public void earnings_bookname(String accountbookname) {
	// TODO Auto-generated method stub
	
}
 
 
}
class AccountBookDto3
package accountbookDto;

public class AccountBookDto3 {

	private String expenditure; //지출
	 
	 private String date_expenditures; //날짜
	 private String title_expenditures; //제목
	 private int money_expenditures; //금액
	 private String content_expenditures; //세부내용
	 
	 public AccountBookDto3() {
		 
	 }

	public AccountBookDto3(String expenditure, String date_expenditures, String title_expenditures,
			int money_expenditures, String content_expenditures) {
		super();
		this.expenditure = expenditure;
		this.date_expenditures = date_expenditures;
		this.title_expenditures = title_expenditures;
		this.money_expenditures = money_expenditures;
		this.content_expenditures = content_expenditures;
	}

	public String getExpenditure() {
		return expenditure;
	}

	public void setExpenditure(String expenditure) {
		this.expenditure = expenditure;
	}

	public String getDate_expenditures() {
		return date_expenditures;
	}

	public void setDate_expenditures(String date_expenditures) {
		this.date_expenditures = date_expenditures;
	}

	public String getTitle_expenditures() {
		return title_expenditures;
	}

	public void setTitle_expenditures(String title_expenditures) {
		this.title_expenditures = title_expenditures;
	}

	public int getMoney_expenditures() {
		return money_expenditures;
	}

	public void setMoney_expenditures(int money_expenditures) {
		this.money_expenditures = money_expenditures;
	}

	public String getContent_expenditures() {
		return content_expenditures;
	}

	public void setContent_expenditures(String content_expenditures) {
		this.content_expenditures = content_expenditures;
	}

	@Override
	public String toString() {
		return  expenditure +  "지출 날짜  =" + date_expenditures
				+ "지출 제목=" + title_expenditures + "지출 금액 =" + money_expenditures
				+ "세부내용" + content_expenditures + "]";
	}



	
	
	
}
package accountbookDao;
package accountbookDao;

public interface AccountBookDao {


// 1. 예산 계산 , 예산 계산한 내용 자동 저장 -> (가계부 이름 , 기간별 예산 설정, 남은 예산 계산)
public void budget();	     // 1.  예산 설정하기 -> 예산 생성자 -가계부 이름 , 기간별 예산 설정  /dto

// 2. 가계부 작성하기 - insert
public void insert(); //  수입,지출   -> 수입 생성자 -> 추가한 내용 자동 저장  ( 날짜, 수입/ 지출, 제목, 세부내용, 금액, ) /dto


// 3. 삭제  -> 삭제한 내용 자동 저장 
public void delete	 ();	  // 일별로 검색해서 해당일에 입력된 내용 불러와서 삭제하기 		
       // 전체 내용 삭제하기                       
								 
                                       
// 4. 수정 -> 수정한 내용 자동 저장 
public void  update();
//_budget();     // 예산 수정하기 
//public void  update_earnings_date();   // 일별로 검색해서 해당일에 입력된 수입 내용 불러와서 수정  
//public void  update_expenditure_date(); 	 // 일별로 검색해서 해당일에 입력된 지출 내용 불러와서 수정  			 			
//									 
 
// 5. 검색
public void select();
//_Date(); //날짜검색 -> 날짜 포함하고 있으면 검색1
//public void select_Title(); //내용검색 -> 내용 포함하고 있으면 검색 2

// 6. 보기(출력) 
public void allprint();
//_month(); //월별출력 1
//public void allprint_date();   //일별 출력  2
//public void allprint_title();   //제목포함시 출력  2
//public void Total_month(); //월별결산합계 검색 3
//public void Total_date(); //일별결산합계 검색 4

// 7. 불러오기 
public void file_Load(); //데이터 불러오기 -이전에 저장된 모든 데이터 불러오기 

// 8. 저장하기 
public void file_Save(); //데이터 저장 -현재 입력한 내용 저장 (안 보여도 됨 ) 

// 9.프로그램 종료 
public void out(); // 프로그램 종료  - 프로그램 종료시 수정한 내용 모두 저장(?)



}
class AccountBookDaoMpl
package accountbookDao;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import accountbookDto.AccountBookDto;   
import accountbookDto.AccountbookDto2;  
import accountbookDto.AccountBookDto3;
import singleton.SingleTon;

public  class AccountBookDaoMpl implements AccountBookDao {

	Scanner sc = new Scanner(System.in);
	

	//예산 설정 
	@Override
	public void budget() {
	while(true){ 
		System.out.println("=========== 예산관리===========" );
		 System.out.println(" [1] 예산 설정");
		 System.out.println(" [2] 예산 현황");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work1 = sc.nextInt();
		 sc.nextLine(); // 버퍼에 남아있는 엔터(\n)를 청소
	
		 
		 	
		 			switch(work1) {
		 				
		 				case 1:
		 					System.out.println("=========== 예산 설정===========" );
		 					System.out.println(" - 월별 예산을 설정합니다 ");
		 					System.out.println(" 1. 가계부 이름  ->  ");
		 					System.out.println(" 2. 기간 설정  ->  예) 1998-02");
		 					System.out.println(" 3. 예산  ->  예) 2000000 ");
		 					System.out.println("============================" );
		 					
		 					System.out.print("1. -> ");
		 					String book_name = sc.next();
		 					
		 					
		 					System.out.print("2. -> ");
		 					String book_budget_month = sc.next();
		 					
		 					
		 					System.out.print("3. -> ");
		 					int book_budget_money = sc.nextInt();
		 					sc.nextLine();
		 					
		 				    System.out.println("============================" );
		 			       
		 			        
		 			      //케이스 2에서 꺼내올 상자 생성
		 			       AccountBookDto dto = new AccountBookDto(); // 빈상자 생성 
		 			       
		 			       // 2. dto에  이름, 기간. 금액 담기 
		 			       dto.setAccountbookname(book_name);         // 이름 따로 담기
		 			       dto.setBudget_Month(book_budget_month);     // 기간 따로 담기
		 			       dto.setUser_budget(book_budget_money);      // 금액 따로 담기
		 			       
		 			       // 3. dto 상자 리스트에 추가하기 
		 			       SingleTon.getInstance().budgetList.add(dto);
		 			       
		 			       System.out.println(book_name + " 가계부 예산 설정이 완료되었습니다.");
		 			      System.out.println( book_budget_month + " 월에 사용하실 수 있는 금액은  "  +book_budget_money + " 원 입니다. ");
		 			       break;
		 			     
		 			      
				
		 				case 2:
		 					System.out.println("=========== 예산 현황===========" );
		 					System.out.println(" 원하시는 가계부와 예산을 입력해 주세요 ");		
		 					System.out.println(" 1. 가계부 이름 ->  ");		
		 					System.out.println(" 2. 조회하실 월 ->  예 : 1988-02");		
		 					System.out.println("============================" );
		 					
		 					System.out.print("1. -> ");
		 					String now_budget_name = sc.next();
		 					 	
		 					
		 					System.out.print("2. -> ");
		 					String now_budget_mont = sc.next();
		 					sc.nextLine(); 	  	 				  
		 					System.out.println("============================" );
		 					
		 					AccountBookDto founddto = null;
		 					
		 					for (AccountBookDto i : SingleTon.getInstance().budgetList) {
								if(i.getAccountbookname().equals(now_budget_name)&& i.getBudget_Month().equals(now_budget_mont)) {
									founddto= i;
									break;
								}
							}
		 					if (founddto != null) {
		 				        
		 				       //founddto 상자에서 꺼낸 getUser_budget 데이터를 find_budget_money 에 담기 
		 				        int find_budget_money = founddto.getUser_budget(); 
		 				       //남은 예산 
		 				        int now_buget_total = find_budget_money - 0; 
		 				        
		 				
		 				        System.out.println(" 가계부 이름:  " + founddto.getAccountbookname());
		 				        System.out.println(" 조회하신 월  : " + founddto.getBudget_Month());
		 				        System.out.println(" 조회하신 기간 예산:  " + find_budget_money + "원");  
		 				        System.out.println(" 남은 예산:  " + now_buget_total + 0 + "원");
		 				        
		 				    } 
		 				
		 					else { System.out.println(" 입력하신 조건과 일치하는 정보가 없습니다.");}
		 					
		 			          break;
		 							
		 				case 3:										
		 			}   break;	 
		 	}
}


	//작성
	@Override
	public void insert() {
		 System.out.println("========== 가계부 작성하기 ==========" );
		 System.out.println(" [1] 수입");
		 System.out.println(" [2] 지출");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work2 = sc.nextInt();
		 
		 while(true){ 
		 	switch(work2) {
		 		case 1:
		 			System.out.println("=========== 수입 작성 ===========" );
 					System.out.println(" - 수입 내용을 작성합니다 ");
 					System.out.println(" 1. 가계부 이름 ->  ");
 					System.out.println(" 2. 수입 날짜  ->  ");
 					System.out.println(" 3. 수입 제목  ->  예) 1998-02-22");
 					System.out.println(" 4. 수입 금액  ->  예) 2000000 ");
 					System.out.println(" 5. 세부 내용  ->   ");
 					System.out.println("============================" );
 					
 				    System.out.print("1. -> ");
 				    String insert_accountbookname = sc.next();
 				    
 				    //빈상자 만들기 ,비교해서 있으면 상자에 담기 
 				    AccountBookDto foundBudget = null;
 				    
 				    for (AccountBookDto i : SingleTon.getInstance().budgetList) {
 				        if (i.getAccountbookname().equals(insert_accountbookname)) {
 				            foundBudget = i; 
 				            break;
 				        }
 				    }
 				    
 				    //가계부 없을때
 				    if (foundBudget == null) {
 				        System.out.println( insert_accountbookname + "로 설정된 가계부가 없습니다.");
 				        System.out.println("   메인 메뉴의 [1] 예산 메뉴에서 먼저 가계부를 생성해 주세요.");
 				        System.out.println("============================" );
 				        return; // insert() 메소 즉시 종료
 				    }
 					
 					System.out.print("2. -> ");
 					String insert_earnings_date = sc.next();
 					
 					System.out.print("3. -> ");
 					String insert_earnings_title = sc.next();
 					
 					System.out.print("4. -> ");
 					int insert_earnings_money = sc.nextInt();
 					
 					System.out.print("5. -> ");
 					String insert_earnings_content = sc.next();
 					sc.nextLine();
 					
 				    System.out.println("============================" );
 				 
 				   AccountbookDto2 dto2 = new AccountbookDto2();

 				   //가계부 이름에 수입 넣기 -> 나중에 수입 호출하려고 
 				  dto2.setEarnings(foundBudget.getAccountbookname());

 				   dto2.setDate_earnings(insert_earnings_date);
 				   dto2.setTitle_earnings(insert_earnings_title); 
 				   dto2.setMoney_earnings(insert_earnings_money);
 				   dto2.setContent_earnings(insert_earnings_content);
 				   
 				   SingleTon.getInstance().earningsList.add(dto2);

 				   System.out.println("[" + foundBudget.getAccountbookname() + "] 가계부에 수입 내역이 성공적으로 추가되었습니다.");
 				   System.out.println(" 수입 날짜: " + insert_earnings_date);
 				   System.out.println(" 수입 제목: " + insert_earnings_title);
 				   System.out.println(" 수입 금액: " + insert_earnings_money + "원");
 				   System.out.println(" 수입 세부내용: " + insert_earnings_content);
 	                break;
 	                
		 		case 2:
		 			System.out.println("=========== 지출 작성 ===========" );
 					System.out.println(" - 지출 내용을 작성합니다 ");
 					System.out.println(" 1. 가계부 이름 ->  ");
 					System.out.println(" 2. 수입 날짜  ->  ");
 					System.out.println(" 3. 수입 제목  ->  예) 1998-02-22");
 					System.out.println(" 4. 수입 금액  ->  예) 2000000 ");
 					System.out.println(" 5. 세부 내용  ->   ");
 					System.out.println("============================" );
 					
 				    System.out.print("1. -> ");
 				    String  expenditure_bookname2 = sc.next();
 				    
 				    //빈상자 만들기  ,비교해서 있으면 상자에 담기 
 				   AccountBookDto foundBudget2 = null;
 				   
 				    for (AccountBookDto i : SingleTon.getInstance().budgetList) {
 				        if (i.getAccountbookname().equals(expenditure_bookname2)) {
 				            foundBudget2 = i; 
 				            break;
 				        }
 				    }
 				    
 				    //가계부 없을때
 				    if (foundBudget2 == null) {
 				        System.out.println( expenditure_bookname2 + "로 설정된 가계부가 없습니다.");
 				        System.out.println("   메인 메뉴의 [1] 예산 메뉴에서 먼저 가계부를 생성해 주세요.");
 				        System.out.println("============================" );
 				        return; // insert() 메소 즉시 종료
 				    }
		 			
 				   System.out.print("2. -> ");
					String expenditure_date = sc.next();
					
					System.out.print("3. -> ");
					String expenditure_title = sc.next();
					
					System.out.print("4. -> ");
					int expenditure_money = sc.nextInt();
					
					System.out.print("5. -> ");
					String expenditure_content = sc.next();
					sc.nextLine();
					
				    System.out.println("============================" );
				  
				    AccountBookDto3 dto3 = new AccountBookDto3();
		
				   
				   //가계부 이름에 지출넣기 -> 나중에 지출 호출하려고 
				    dto3.setExpenditure(foundBudget2.getAccountbookname());

				   dto3.setDate_expenditures(expenditure_content);
				   dto3.setTitle_expenditures(expenditure_title); 
				   dto3.setMoney_expenditures(expenditure_money);
				   dto3.setContent_expenditures(expenditure_content);
				   
				   SingleTon.getInstance().expenditureList.add(dto3);

				   System.out.println("[" + foundBudget2.getAccountbookname() + "] 가계부에 지출 내역이 성공적으로 추가되었습니다.");
				   System.out.println(" 수입 날짜: " + expenditure_date);
				   System.out.println(" 수입 제목: " + expenditure_title);
				   System.out.println(" 수입 금액: " + expenditure_money + "원");
				   System.out.println(" 수입 세부내용: " + expenditure_content);
		 			
		 				break;
		 		case 3:		
		 	} break;
	       }//와일문 닫기
		 }//인서트문 닫기


	
	@Override
	public void delete() {
		System.out.println("============삭제============" ); 
		 System.out.println(" [1] 해당일 수입 내역삭제 ");
		 System.out.println(" [2] 해당일 지출 내역삭제 ");
		 System.out.println(" [3] 전체 삭제 (모든 데이터가 삭제 됩니다) ");
		 System.out.println(" [4] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work3= sc.nextInt();
		 
		 while(true){ 
			 switch(work3) {
			 
			 case 1:
				 System.out.println("==========해당일 수입 내역삭제 ==========" );
					System.out.println(" 해당일 수입 내용을 전부 삭제합니다 ");
					System.out.println(" 해당일을 입력하세요  예)1998-02 ");
					
					System.out.println("============================" );
					System.out.print(" = >");
					String delete_earningsdate=sc.next();
					
				
				  // 1. 삭제할 대상을 담아둘 리스트 생성
				    List<AccountbookDto2> deleteList1 = new ArrayList<>();
				    
				    // 2. 지출 리스트를 돌면서 날짜가 일치하는 수입내역을 모두 찾아서 deleteList에 담기
				    for (AccountbookDto2 delete_box1 : SingleTon.getInstance().earningsList) {
				        if (delete_box1.getDate_earnings().equals(delete_earningsdate)) {
				           deleteList1.add(delete_box1);
				        }
				    }
				    
				    // 3. 찾은 데이터가 있으면 한꺼번에 삭제
				    if (!deleteList1.isEmpty()) {
				        SingleTon.getInstance().expenditureList.removeAll(deleteList1);
				        System.out.println(deleteList1.size() + "개의 수입 내역이 삭제되었습니다.");
				    } else {
				        System.out.println("해당 날짜에 수입 내역이 존재하지 않습니다.");
				    }
			 		
		 			
	 				break;   
			 
			 	case 2:
			 		System.out.println("==========해당일 지출 내역삭제 ==========" );
 					System.out.println(" 해당일 지출 내용을 전부 삭제합니다 ");
 					System.out.println(" 해당일을 입력하세요  예)1998-02 ");
 					
 					System.out.println("============================" );
 					System.out.print(" = >");
 					String delete_expendituredate=sc.next();
 					
 				
 			
 				    List<AccountBookDto3> deleteList2 = new ArrayList<>();
 				    
 				 
 				    for (AccountBookDto3 delete_box2 : SingleTon.getInstance().expenditureList) {
 				        if (delete_box2.getDate_expenditures().equals(delete_expendituredate)) {
 				           deleteList2.add(delete_box2);
 				        }
 				    }
 				    
 				   
 				    if (!deleteList2.isEmpty()) {
 				        SingleTon.getInstance().expenditureList.removeAll(deleteList2);
 				        System.out.println(deleteList2.size() + "개의 지출 내역이 삭제되었습니다.");
 				    } else {
 				        System.out.println("해당 날짜에 지출 내역이 존재하지 않습니다.");
 				    }
 				    
 				    break;
	            	
			 	case 3:
			 				break;    
			 				
			 	case 4:			
			 }break;
		 }	
		
	}



	@Override
	public void update() {
		System.out.println("=========== 수정하기===========" );
		 System.out.println(" [1] 예산 수정");
		 System.out.println(" [2] 일별 수입 내용 수정");
		 System.out.println(" [3] 일별 지출 내용 수정");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work4 = sc.nextInt();
		 
		 while(true){ 
		 		switch(work4) {
		 			case 1:
		 			
		 					break;
				
		 			case 2:
		 			
		 					break;
		 			case 3:		
		 			
		 				break;
		 			case 4:
		 		
		 		}break;
		 }
	}
	
	@Override
	public void select() {
		 System.out.println("=========== 검색하기===========" );
		 System.out.println(" [1] 날짜로 검색");
		 System.out.println(" [2] 제목으로 검색");
		 System.out.println(" [3] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 
		 int work5 = sc.nextInt(); //1번 2번 중 선택하게 만들기 
		 
		 while(true){ 
		 	switch(work5) {
				case 1:
					
					 	break;
					
				case 2:
		          
		            	break;
		            	
				case 3:    	
		 }break;
	  }
		

		
	}

	@Override
	public void allprint() {
		 System.out.println("============보기============" );
		 System.out.println(" [1] 해당월로 찾아  내용 보기  ");
		 System.out.println(" [2] 해당일로 찾아 내용 보기 ");
		 System.out.println(" [2] 제목으로 찾아 내용 보기 ");
		 System.out.println(" [3] 월별 결산 합계 ");
		 System.out.println(" [4] 일일 결산 합계 ");
		 System.out.println(" [5] 나가기");
		 System.out.println(" 원하시는 작업 번호를 선택하세요. ");
		 System.out.println("=================================");
		 System.out.print(" = >");
		 int work6= sc.nextInt();
	     
		 while(true){ 

		 	switch(work6) {
				case 1:
				   
						break;
					
				case 2:
				
						break;
				case 3:
					
						break;	
				case 4:
					
						break;	
				case 5:    		
		 	}break;
		 }
		
	}

	

	@Override
	public void file_Load() {
	
		
	}

	@Override
	public void file_Save() {
		
	}

	@Override
	public void out() {
		
		
	}

	
}
package fileproc;

 

class SingleTon
package singleton;

import java.util.ArrayList;
import java.util.List;

import accountbookDto.AccountBookDto;
import accountbookDto.AccountbookDto2;
import accountbookDto.AccountBookDto3;

public class SingleTon {
	
	private static SingleTon singleton = null;
	
	public List<AccountBookDto> budgetList;   // 예산들 모음 (Dto1)
    public List<AccountbookDto2> earningsList;  // 수입들 모음 (Dto2)
    public List<AccountBookDto3> expenditureList; // 지출들 모음 (Dto3)
  

    
    private SingleTon() {
    	 budgetList = new ArrayList<AccountBookDto>();
    	earningsList = new ArrayList<AccountbookDto2>();
    	 expenditureList = new ArrayList<AccountBookDto3>();
    	 
    
	}
	
	public static SingleTon getInstance() {
		if(singleton == null) {
			singleton = new SingleTon();
		}
		return singleton;
	}

    
}