Written by
Parkdev
on
on
클래스를 이용하여 도서관리 프로그램을 짜보자
클래스를 이용하여 도서관리 프로그램을 짜보자
도서 관리 프로그램
Library, Book, User클래스 구현
프로그램 시작시 도서 5권 정도를 가진 상태로 시작
Library
attrs
name: 도서관명 (str)
book_list: 도서 목록 (Book인스턴스의 목록) (list)
methods
add_book (책 제목을 받아서 새로운 Book을 생성, self.book_list에 추가)
remove_book (책 제목을 받아서 해당 제목의 Book을 self.book_list에서 삭제)
property
info: 가지고 있는 도서 목록을 보기좋은 텍스트로 리턴 (빌려간 도서는 출력 안해도 됨)
-> print(library1.info)
Book
attrs
title: 제목
location: 현재 자신이 어떤 Library 또는 User에게 있는지를 출력
property
is_borrowed: 대출되었는지 (location이 User인지 Library인지 확인)
User
attrs
name: 이름
book_list: 가지고 있는 도서 목록
methods
borrow_book(library, book_name): library로부터 book을 가져옴
return_book(library, book_name): library에 book을 다시 건네줌
아래는 완성된 코드이다. 설명은 각 줄마다 주석으로 설명하고자한다.
class Library():
def __init__(self, name): #매서드초기화
self.name = name #이름초기화
self.book_list = [] # 새로
def add_book(self, book): #도서관에 책을 추가
if book in self.book_list: #책이 이미 리스트에 있으면 프린트
print('이미 소장중입니다.')
else :
self.book_list.append(book) #책이 없으면 리스트에 추가
book.is_borroweds = True #책을 빌릴수있는 상태로 전환
book.location = self.name #책의 위치는 name 즉 도서관이다.
print(f'{book.title} 이 도서관에 추가되었습니다.') #알림 메세지
def remove_book(self, book): #책을 치우는 기능
if book in self.book_list: #책이 리스트에 있어야 실행
self.book_list.remove(book) #책을 제거
book.is_borroweds = None #책을 빌릴수없음 (책이없음)
book.location = None #마찬가지
print(f'{book.title} 이 도서관에서 삭제되었습니다.') #책이 없어짐을 알림
else:
print('없는 책입니다.') #책이 없습니다.
@property #get,set을 쉽게 하기위한 정의
def info(self): #인포
print(f'도서관: {self.name}\n 장서목록: {[i.title for i in self.book_list]}') 현재 도서관이름과 장서목록
class Book():
def __init__(self, title): #메서드 초기화
self.title = title
self.location = None #책을 처음 입력할땐 위치가없어야한다
is_borroweds = None #책을 처음 입력할댄 역시 빌린사람도없다
@property #전과 동일
def is_borrowed(self): #누가 빌려갔으면 F 아니면 T 등록이안되어있으면 None
if self.is_borroweds == False:
print( '대여중')
elif self.is_borroweds == True:
print ('대여가능')
else :
print ('책이 없음')
@property #이역시 동일
def info(self): #책의 정보
print(f'제목 : {self.title}\n소재지: {self.location}\n대여여부: {self.is_borrowed}')
class User():
def __init__(self, name): #매서드 초기화
self.name = name
self.book_list = [] #빌린사람의 북리스트
def borrow_book(self, library, book): #책을빌려보자
if book in self.book_list: #책이있네
print ('이미 소장중인 도서입니다.') #프린트
else: #책이없다면
library.book_list.remove(book) #도서관책을지우고
self.book_list.append(book) #이용자의 리스트에 추가
book.location = self.name #책의 위치는 사람이름을 출력
book.is_borroweds = False #책이 빌려졌음
print (f'{library.name} 에서 {book.title}을(를) 빌렸습니다. {[i.title for i in self.book_list]}') #프린트
def return_book(self, library, book): #책을 반납해보자
if book in self.book_list: #책이 이용자 리스트에있다면
self.book_list.remove(book) #이용자 리스트에서 제거
library.book_list.append(book) #도서관에 다시 추가
book.location = library.name #위치는 다시 도서관으로
book.is_borroweds = True #책을 다시 빌릴 수 있음
print (f'{self.name}이 {book.location}에 {book.title}을 반납했습니다. {[i.title for i in self.book_list]}') #프린트
else: #책이없으면
print('해당하는 도서가 없습니다.') #프린트
@property #전과 동일
def info(self): #이용자의 상태
print (f'이름: {self.name}\n소장목록: {[i.title for i in self.book_list]}') #프린트
이상 매니져님의 도움으로 코드를 짜보았다.