전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (174)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

JAVA

[자바/JAVA] 프로그래밍 - 종합 예제 (도서관 프로그램)

2023. 6. 21. 21:01


Book Class

package com.kh.library.model.vo;

public class Book {
	private String bNo;
	private String title;
	private String author;
	private String publisher;
	private int price;
	private String description;
	
	public Book() {}
	// 단축키로 생성해보기

	public Book(String bNo, String title, String author, String publisher, int price, String description) {
		super();
		this.bNo = bNo;
		this.title = title;
		this.author = author;
		this.publisher = publisher;
		this.price = price;
		this.description = description;
	}

	public String getbNo() {
		return bNo;
	}

	public void setbNo(String bNo) {
		this.bNo = bNo;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getPublisher() {
		return publisher;
	}

	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	@Override
	public String toString() {
		return "Book [bNo=" + bNo + ", title=" + title + ", author=" + author + ", publisher=" + publisher + ", price="
				+ price + ", description=" + description + "]";
	}

}

Magazine Class

package com.kh.library.model.vo;

// Book 상속받아서 작성
public class Magazine extends Book{
	private int year;
	private int month;
	
	public Magazine() {}

	// 단축키로 생성해보기
	public Magazine(String bNo, String title, String author, String publisher, int price, String description, int year,
			int month) {
		super(bNo, title, author, publisher, price, description);
		this.year = year;
		this.month = month;
	}

	public int getYear() {
		return year;
	}

	public void setYear(int year) {
		this.year = year;
	}

	public int getMonth() {
		return month;
	}

	public void setMonth(int month) {
		this.month = month;
	}

	@Override
	public String toString() {
		return "Magazine [" + super.toString() +  ", year=" + year + ", month=" + month + "]";
	}
	
}

BookManager interface

package com.kh.library.controller;

import java.util.ArrayList;

import com.kh.library.model.vo.Book;

/*
 * BookManager 인터페이스는 다양한 Book 객체들을 핸들링하는 템플릿 기능을 가지고 있다.
 */
public interface BookManager {
	// 무조건 해당 인터페이스에 있는 함수로 BookController.java 구현할 것
	
	void addBook(Book nBook);
	ArrayList<Book> getAllBook();
	Book searchBookBybNo(String bNo);
	ArrayList<Book> searchBookByTitle(String title);
	ArrayList<Book> onlySearchBook();
	ArrayList<Book> onlySearchMagazine();
	ArrayList<Book> magazineOfThisYearInfo(int year);
	ArrayList<Book> searchBookByPublisher(String publisher);
	ArrayList<Book> searchBookByPrice(int price);
	int getTotalPrice();
	int getAvgPrice();

}

BookController Class

package com.kh.library.controller;

import java.util.ArrayList;

import com.kh.library.model.vo.Book;
import com.kh.library.model.vo.Magazine;

//BookManager 인터페이스 구현
public class BookController implements BookManager {
	
	public ArrayList<Book> list = new ArrayList<>();

	@Override
	public void addBook(Book nBook) {

		list.add(nBook);
		
	}

	@Override
	public ArrayList<Book> getAllBook() {
		return list;
	}

	@Override
	public Book searchBookBybNo(String bNo) {
		
		Book b = null; 
		
		for(Book sb : list) {
			if(sb.getbNo().equals(bNo)) {
				b = sb;
			}
		}
		
		return b;
		
//		for(int i = 0; i < list.size(); i++) {
//			if(list.get(i).getbNo().equals(bNo)) {
//				b = list.get(i);
//			}
//		}
//		return b;
	}

	@Override
	public ArrayList<Book> searchBookByTitle(String title) {
		
		ArrayList<Book> TitleList = new ArrayList<>();
		
		for(Book b : list) {
			if(b.getTitle().contains(title)) {
				TitleList.add(b);
			}
		}
		
//		
//		for(int i = 0; i < list.size(); i++) {
//			if(list.get(i).getTitle().contains(title)) {
//				TitleList.add(list.get(i));
//			}
//		}
		return TitleList;
	}

	@Override
	public ArrayList<Book> onlySearchBook() {
		
		ArrayList<Book> bookList = new ArrayList<>();
		
		for(Book b : list) {
			if(b instanceof Magazine == false){	// Book == true 는 안된다. 왜냐 ? Magazine이 Book에게 상속받고 있기 때문에 Magazine 도 true라고 나온다.
				bookList.add(b);
			}
		}
		return bookList;
	}

	@Override
	public ArrayList<Book> onlySearchMagazine() {
		ArrayList<Book> magazineList = new ArrayList<Book>();
		
		for(Book b : list) {
			if(b instanceof Magazine) {
				magazineList.add(b);
			}
		}
		return magazineList;
	}

	@Override
	public ArrayList<Book> magazineOfThisYearInfo(int year) {
		
		ArrayList<Book> yearList = new ArrayList<>();
		/*
		for(int i = 0; i < onlySearchMagazine().size(); i++) {
			if(	((Magazine)(onlySearchMagazine().get(i))).getYear() == year) {
				yearList.add(onlySearchMagazine().get(i));
			}
		}
		*/
		
		
		for(Book b : onlySearchMagazine()) {
			if(((Magazine)(b)).getYear() == year) {
				yearList.add(b);
			}
		}
		
		return yearList;
	}

	@Override
	public ArrayList<Book> searchBookByPublisher(String publisher) {
		
		ArrayList<Book> publishList = new ArrayList<>();
		
		for(Book b : list) {
			if(b.getPublisher().contains(publisher)) {
				publishList.add(b);
			}
		}
		return publishList;
		
	}

	@Override
	public ArrayList<Book> searchBookByPrice(int price) {
		
		ArrayList<Book> priceList = new ArrayList<>();
		
		for(Book b : list) {
			
			if(b.getPrice() < price) {
				priceList.add(b);
			}
			
		}
		return priceList;

	}

	@Override
	public int getTotalPrice() {
		int sum = 0;
		
		for(int i = 0; i < list.size(); i++) {
			sum += list.get(i).getPrice();
		}
		return sum;
	}

	@Override
	public int getAvgPrice() {
		
		return getTotalPrice() / list.size();
	}
	

}

LibraryRun Class

package com.kh.library.run;

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

import com.kh.library.controller.BookController;
import com.kh.library.model.vo.Book;
import com.kh.library.model.vo.Magazine;

public class LibraryRun {

	public static void main(String[] args) {// 소장책 DB
		ArrayList<Book> bList = new ArrayList<>();

		/* 생성 DB
		bList.add(new Book("100", "잃어버린 민준이를 찾아서", "저자 고서준", "도윤 출판사", 8500, "『예준스』, 『르 몽드』 선정 20세기 최고의 책"));
		bList.add(new Book("101", "시우의 자서전", "하준이가 옮김", "빛나는 주원출판사", 8500, "영화배우 민지호가 추천한 젊음에 바치는 영혼의 자서전"));
		bList.add(new Magazine("102", "박지후 과학동아", "편집부 박준우 선생", "준서 사이언스", 8500, "건우의 유튜브에 소개된 과학만화 잡지", 2023,3));
		bList.add(new Book("103", "도현이의 코딩스쿨", "코딩천재 윤현우", "지훈이네 동네", 9900, "제 13회 우진이가 주는 문학상 수상작"));
		bList.add(new Magazine("104", "선우와 서진이의 여행일기", "서울대 이유준 교수", "연우21", 3800, "영화감독 이원종pd가 집필한 영화 전문 잡지", 2023, 4));
		bList.add(new Magazine("105", "민재의 OOTD", "인플루언서 장현준", "은우네 책방", 12000, "핫가이 조정우의 샤라웃을 받은 잡지", 2022,11));
		bList.add(new Book("106", "조시윤의 미라클모닝", "샤이걸 승우찡", "승현 출판사", 6300, "준혁이도 2번이나 성공한 미라클모닝"));
		bList.add(new Book("107", "지환이의 백만가지 요리레시피", "제주도에서 온 윤우", "우리반 출판사", 6300, "제주에서 밥해먹고 사는 일상"));
		 */
		bList.add(new Book("100", "잃어버린 민준이를 찾아서", "저자 고서준", "도윤 출판사", 8500, "『예준스』, 『르 몽드』 선정 20세기 최고의 책"));
		bList.add(new Book("101", "시우의 자서전", "하준이가 옮김", "빛나는 주원출판사", 8500, "영화배우 민지호가 추천한 젊음에 바치는 영혼의 자서전"));
		bList.add(new Magazine("102", "박지후 과학동아", "편집부 박준우 선생", "준서 사이언스", 8500, "건우의 유튜브에 소개된 과학만화 잡지", 2023,3));
		bList.add(new Book("103", "도현이의 코딩스쿨", "코딩천재 윤현우", "지훈이네 동네", 9900, "제 13회 우진이가 주는 문학상 수상작"));
		bList.add(new Magazine("104", "선우와 서진이의 여행일기", "서울대 이유준 교수", "연우21", 3800, "영화감독 이원종pd가 집필한 영화 전문 잡지", 2023, 4));
		bList.add(new Magazine("105", "민재의 OOTD", "인플루언서 장현준", "은우네 책방", 12000, "핫가이 조정우의 샤라웃을 받은 잡지", 2022,11));
		bList.add(new Book("106", "조시윤의 미라클모닝", "샤이걸 승우찡", "승현 출판사", 6300, "준혁이도 2번이나 성공한 미라클모닝"));
		bList.add(new Book("107", "지환이의 백만가지 요리레시피", "제주도에서 온 윤우", "우리반 출판사", 6300, "제주에서 밥해먹고 사는 일상"));

		printBooks(bList);

	}

	public static void printBooks(ArrayList<Book> bs) {
		// 여기서 메뉴열고 구현 시작
		BookController bc = new BookController();
		
		/*
		for(int i = 0 ; i < bs.size(); i++) {
			System.out.println(bs.get(i));
			bc.addBook(bs.get(i));
			
		}
		System.out.println("-------------------------------");
		*/
		
		for(Book allbs : bs) {
			System.out.println(allbs);
			bc.addBook(allbs);
		}

		boolean flag = true; // 메뉴 스위치

		while (flag == true) { // 메뉴 스위치가 켜져있는 동안 무한반복
			System.out.println("===============================");
			System.out.println("KH 우리반전용 도서관 관리 페이지입니다.");
			System.out.println("1. 조회하기");
			System.out.println("2. 추가하기");
			System.out.println("3. 책 찾기");
			System.out.println("4. 전체책 가격 합계 및 평균 조회");
			System.out.println("5. 프로그램 종료");
			System.out.println("===============================");

			
			Scanner sc = new Scanner(System.in);
			System.out.print("메뉴번호를 입력해주세요 : ");
			int menu = sc.nextInt(); // 메뉴 번호 입력
			sc.nextLine();
			
			switch (menu) {
			case 1: // 1. 조회하기
				System.out.println("===============================");
				System.out.println("어떤 방법으로 책을 조회하겠습니까?");
				System.out.println("1. 도서관 전체 소장책 조회하기");
				System.out.println("2. 일반도서만 조회하기(잡지 제외)");
				System.out.println("3. 잡지만 조회하기(일반도서 제외)");
				System.out.println("4. 이전으로");
				System.out.println("===============================");

				System.out.print("메뉴번호를 입력해주세요 : ");
				int search = sc.nextInt();
				
				if (search == 1) {
					ArrayList<Book> selectBook = bc.getAllBook();
					for(Book b : selectBook) {
						System.out.println(b);
					}
				}
				else if (search == 2) {
					ArrayList<Book> bookList = bc.onlySearchBook();
					for(Book b : bookList) {
						System.out.println(b);
					}
				}
				else if (search == 3) {
					ArrayList<Book> magazineList = bc.onlySearchMagazine();
					for(Book b : magazineList) {
						System.out.println(b);
					}
				}
				else if (search == 4) {
					// 이전으로 가야함
					flag = true;
;
				}
				break;
				
			case 2: // 2. 추가하기
				System.out.print("bNo을 입력하세요 : ");
				String bNo = sc.nextLine();
				
				System.out.print("책 제목을 입력하세요 : ");
				String title = sc.nextLine();
				
				System.out.print("작가를 입력하세요 : ");
				String author = sc.nextLine();
				
				System.out.print("출판사를 입력하세요 : ");
				String publisher = sc.nextLine();
				
				System.out.print("가격을 입력하세요 : ");
				int price = sc.nextInt();
				
				sc.nextLine();
				
				System.out.print("간단한 설명을 입력하세요 : ");
				String description = sc.nextLine();
				
				System.out.print("일반도서이면 true, 잡지이면 false를 입력하세요 : ");
				Boolean bkOrMaga = sc.nextBoolean();
				
				System.out.println("===============================================");
				
				Book tmpBook = null;
				
				if (bkOrMaga.equals(true)) {
					tmpBook = new Book(bNo, title, author, publisher, price, description);

					
				} else if (bkOrMaga.equals(false)) {
					System.out.print("출간연도를 입력하세요 : ");
					int year = sc.nextInt();
					System.out.print("출간월을 입력하세요 : ");
					int month = sc.nextInt();
					tmpBook = new Magazine(bNo, title, author, publisher, price, description, year, month);

					
				}
				boolean duplication = false;

				for(Book b : bc.list) {
					
					if(b.getbNo().equals(tmpBook.getbNo())) {
						duplication = true;
					}
				}
				
				
//				for(int i = 0 ; i < bc.list.size(); i++) {
//					
//					if(bc.list.get(i).getbNo().equals(tmpBook.getbNo())) {
//						duplication = true;
//					
//					}
//				}
				
				if(duplication == false) {
					bc.addBook(tmpBook);
					System.out.println("성공적으로 일반도서가 추가되었습니다!");
				}else {
					System.out.println("해당 도서는 이미 소장하고 있는 책입니다.");
				}
	
				break;
				
			case 3:// 3. 책 찾기
				System.out.println("===============================");
				System.out.println("어떤 방법으로 책을 찾겠습니까?");
				System.out.println("1. bNo으로 책 찾기");
				System.out.println("2. 책 제목으로 책 찾기");
				System.out.println("3. 출간연도로 잡지 찾기");
				System.out.println("4. 출판사로 책 찾기");
				System.out.println("5. 특정 가격 밑으로 책 찾기");
				System.out.println("6. 이전으로");
				System.out.println("===============================");
				System.out.print("메뉴번호를 입력해주세요 : ");
				search = sc.nextInt();
				sc.nextLine();

				if (search == 1) { // bNo으로 책 찾기
					System.out.print("bNo을 입력하세요 : ");
					bNo = sc.nextLine();
					
					Book b = bc.searchBookBybNo(bNo);
					
					if(b == null) {
						System.out.println("존재하지 않는 책입니다.");
					}else {
						System.out.println(b); 
					}
					
				
					
				} else if (search == 2) { // 책 제목으로 책 찾기
					System.out.print("책 제목을 입력하세요 : ");
					title = sc.nextLine();
					ArrayList<Book> TitleList = bc.searchBookByTitle(title);
					
					if(TitleList.isEmpty()) {
						System.out.println("존재하지 않는 책입니다.");
					}else {
						for(Book b : TitleList) {
							System.out.println(b);
						}
						
					}
					
					
				} else if (search == 3) { // 출간연도로 잡지 찾기
					System.out.print("출간연도를 입력하세요 : (올해 --> 2022) : ");
					int year = sc.nextInt();
					
					ArrayList<Book> yearList = bc.magazineOfThisYearInfo(year);
					
					if(yearList.isEmpty()) {
						System.out.println("존재하지 않는 책입니다.");
					}else {
						for(Book b : yearList) {
							System.out.println(b);
						}
						
					}
					
				} else if (search == 4) { // 4. 출판사로 책 찾기
					System.out.print("출판사를 입력하세요 : ");
					publisher = sc.nextLine();
					
					ArrayList<Book> publishList =  bc.searchBookByPublisher(publisher);
					
					if(publishList.isEmpty()) {
						System.out.println("존재하지 않는 책입니다.");
					}else {
						for(Book b : publishList) {
							System.out.println(b);
						}
						
					}
					
				} else if (search == 5) { // 5. 특정 가격 밑으로 책 찾기
					System.out.print("가격을 입력하세요 : ");
					price = sc.nextInt();
					sc.nextLine();
					
					ArrayList<Book> priceList = bc.searchBookByPrice(price);
					
					if(priceList.isEmpty()) {
						System.out.println("존재하지 않는 책입니다.");
					}else {
						for(Book b : priceList) {
							System.out.println(b);
						}
						
					}
					
				} else if (search == 6)
					flag = true; // 6. 이전으로
				
				else
					System.out.println("잘못 입력하셨습니다.");
				
				break;
				
			case 4:// 4. 전체책 가격 합계 및 평균 조회
				System.out.println("전체책 가격 합계 : " + bc.getTotalPrice());
				System.out.println("전체책 가격 평균 : " + bc.getAvgPrice());
				break;
				
			case 5: 
				System.out.println("프로그램을 종료합니다");
				return;
			default:
				break;
			}
		}
	}
}

실행 결과

MVC.jar
0.02MB

    'JAVA' 카테고리의 다른 글
    • [자바/JAVA] 프로그래밍 - Network_서버, 클라이언트 통신
    • [자바/JAVA] 프로그래밍 - Network_InetAddress
    • [자바/JAVA] 프로그래밍 - 종합 예제(MVC)
    • [자바/JAVA] 프로그래밍 - Map (HashMap, Properties)
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바