도서관리 프로그램 - 만화책방 운영하기
- Java기초프로그래밍 중 3번째 프로젝트
- CRUD기능과 MENU기능을 통해 도서관리 프로그램 만들기
프로젝트 소개
- 사용자가 만화책방을 운영하는 게임
- 손님, 대여할 도서, 대여기간은 랜덤
- 손님에게 대여여부에 따라 명성도,자금,피로도 증감
- 손님 종류에 따른 도서 분실 확률이 다름
- CRUD기능과 MENU기능을 통해 도서관리 프로그램 만들기
개발환경 및 적용기술
- Language & IDE
- 적용기술
- Nested Class : 중첩클래스를 활용하여 익명클래스, 람다식, 메서드 레퍼런스 적용
- Composit Pattern적용 : GoF의 Composit 패턴을 적용하여 CRUD와 UI출력 분리 (SRP)
- 랜덤 클래스 만들기 : ArrayList 크기 만큼의 랜덤 숫자 생성, n% 확률로 0또는1 반환
목차
아키텍처
- 기본 데이터타입 : Book, RentInfo, Guest, StoreInfo
- Book, RentInfo, Guest 은 App클래스에서 ArrayList로 활용
- StorInfo에 가게운영상황을 업데이트
- Command : 손님 응대, 운영 상황, 종료/결산 명령 처리수행
- GuestCommand : 랜덤 손님 호출, 대여 여부 결정, 해당 결과를 App에 선언된 ArrayList에 저장
- OperationCommand : App에 저장된 대출정보, 재고정보 ArrayList를 호출 하여 확인
- DayOverCommand : App에 저장된 대출정보 ArrayList를 통해 수입, 반납여부 확인
- Menu : 각 항목별 메뉴 정보 저장 및 출력
주요기능
1) GuestCommand
코드 접기/펼치기
public class GuestCommand implements Command {
List<Guest> guests;
List<BookInfo> bookList;
List<RentInfo> rentInfoList;
StoreInfo storeInfo;
Random random = new Random();
private int guestRandomValue;
private Guest guest;
private String bookName;
public GuestCommand(
List<BookInfo> bookInfoList, List<RentInfo> rentInfoList,
StoreInfo storeInfo,List<Guest> guests)
public String getBookName()
public void setBookName(String bookName)
public void setGuestRandomValue(int guestRandomValue)
public Guest getGuest()
public void setGuest(Guest guest)
private BookInfo getBook()
public void preExecute() {
//손님랜덤설정
//책 랜덤설정
//대여기간 랜덤설정
}
public void execute(String menuName) {
//빌려준다 메서드 실행
//거절한다 메서드 실행
}
private void accept(Guest guest) {
//확률계산을 통한 반납여부 결정
//preExcute에서 계산된 책 호출
//재고확인 및 반납설정
//대여한 책 rentList에 저장
//storeInfo 설정값(명성,자금,피로도) 변경
}
private void reject(Guest guest) {
//storeInfo 설정값(명성,자금,피로도) 변경
}
}
2) OperationCommand
코드 접기/펼치기
public class OperationCommand implements Command {
private List<BookInfo> bookList;
private List<RentInfo> rentList;
private StoreInfo storeInfo;
public OperationCommand(List<BookInfo> bookList, List<RentInfo> rentList, StoreInfo storeInfo)
public void execute(String menuName) {
//재고조회 메서드 실행
//서점가기 메서드 실행
//대출현황 메서드 실행
}
public void checkStock() {
//App에서 받아온 BookList 정보중 제목, 재고 출력
}
public void bookStore() {
//App에서 받아온 BookList 정보 제목, 가격 출력
//자금과 비교하여 구매여부 결정
//bookList에 구매정보 반영
}
public void checkRent() {
//App에서 받아온 rentList 출력
}
}
3) DayOverCommand
코드 접기/펼치기
public class DayOverCommand implements Command {
StoreInfo storeInfos;
private List<RentInfo> rentList;
private List<BookInfo> bookList;
private List<Guest> guestList;
public DayOverCommand(StoreInfo storeInfos, List<RentInfo> rentList,
List<BookInfo> bookList,List<Guest> guestList)
public void execute(String menuName) {
//결과 출력을 위해 rentGuest, returnTrue, returnFalse의 ArrayList 생성
//rentList를 호출하여 각 결과를 rentGuest, returnTrue, returnFalse에 저장하구 출력
//storeInfo에 영업 1일 증가, 피로도 조정
}
}
결과
보완사항
- composite 패턴을 적용하였는데, 완전하게 분리할 필요가 있다.(혼재된 상태)
- command를 각 메서드에 따라서 클래스로 관리할 필요가 있다.
'개발자 꿈나무의 하루 > 01_Boot Camp' 카테고리의 다른 글
(네이버클라우드 부트캠프) 36일차 - java프로그래밍 기초(람다식) (0) | 2024.07.18 |
---|---|
(네이버클라우드 부트캠프) 35일차 - 실습프로젝트(컴포짓패턴과 복제패턴) (0) | 2024.07.18 |
(네이버클라우드 부트캠프) 33일차 - Java프로그래밍 기초(중첩) (0) | 2024.07.11 |
(네이버클라우드 부트캠프) 31일차 - 실습프로젝트(DIP, Stack, Queue) (0) | 2024.07.09 |
(네이버클라우드 부트캠프) 30일차 - 실습프로젝트(리팩토링) (0) | 2024.07.08 |