728x90
반응형
주제 : 도서 입고/대출/반납 관리를 위한 키오스크 파이썬 프로그램 실습
1. 주요내용
- 도서 목록 : 새로운 책이 도서관에 [입고]되었을 때 프로그램 작성
- 도서 대출 : 도서 목록에서 임의 책을 빌리고자 할 때 [대출] 프로그램 작성
- 도서 반납 : 대출한 도서를 [반납]하고자 할 때 프로그램 작성
- 종료하기 : 종료하기에 대한 프로그램 작성
- 도서 입고/대출/반납/종료 중 원하는 것을 선택했을 때 위 내용을 수행합니다.
- 프로그램을 종료하기 전까지는 위 내용은 누구든지 서비스를 받을 수 있도록 반복 실행
- 도서에 대한 확인 값은 자유롭게 정의하여 진행
2. 요구사항
- class 생성하여 처리
3. 내가 적어본 코드
class Library():
def __init__(self):
self.__library = list()
def start_service(self):
while True:
start = input('어떤 서비스를 이용하시겠습니까? ')
if start == "입고":
self.stock()
elif start == "대출":
self.loan()
elif start == "반납":
self.re()
elif start == "종료":
self.end()
def stock(self):
print('입고정보를 입력해주세요')
customer = { 'name':'', 'count': 0, 'bookName': ''}
customer['name'] = input('이름을 입력하세요 : ')
customer['count'] = int(input('입고 갯수를 입력하세요 : '))
customer['bookName'] = input('책 제목 : ')
print(f'입고정보 : {customer}')
self.__library.append(customer)
book_count = customer['count']
book_name = [customer['bookName'] for customer in self.__library]
if book_count >= 0:
print(f'책이 {book_count}권 입고 되었습니다')
print(f'잔여 책 갯수: {len(self.__library)}')
print(f'책 목록: {book_name}')
return self.__library
def loan(self):
print('대출정보를 입력해주세요')
customer = { 'name':'', 'count': 0, 'bookName': ''}
customer['name'] = input('이름을 입력하세요 : ')
customer['count'] = int(input('대출 갯수를 입력하세요 : '))
customer['bookName'] = input('책 제목 : ')
print(f'대출정보 : {customer}')
removed_customers = []
for i in self.__library:
if i['bookName'] == customer['bookName']:
removed_customers.append(i)
for i in removed_customers:
self.__library.remove(i)
new_book_name = [customer["bookName"] for customer in self.__library]
book_count = customer['count']
if book_count > 0:
print(f'책이 {book_count}권 대출 되었습니다')
print(f'잔여 책 갯수: {len(self.__library)}')
print(f'책 목록: {new_book_name}')
return self.__library
def re(self):
print('반납정보를 입력해주세요')
customer = { 'name':'', 'count': '', 'bookName': ''}
customer['name'] = input('이름을 입력하세요 : ')
customer['count'] = int(input('반납 갯수를 입력하세요 : '))
customer['bookName'] = input('책 제목 : ')
self.__library.append(customer)
book_count = customer['count']
book_name = [customer['bookName'] for customer in self.__library]
if book_count >= 0:
print(f'책이 {book_count}권 반납 되었습니다')
print(f'잔여 책 갯수: {len(self.__library)}')
print(f'책 목록: {book_name}')
return self.__library
def end(self):
print('종료되었습니다')
if __name__ == '__main__':
a = library()
a.start_service()
3 -1. 코드 실행결과

4. 강사님 코드
- class와 main함수 따로 작성
### 기능을 수행할 클래스(모듈 or 라이브러리) 정의
class LibraryKiosk :
### 클래스 생성자 정의
# self = 클래스의 모든 변수에 접근할 수 있도록 하는 것.
def __init__(self) :
### 도서 목록을 저장할 딕셔너리 변수 생성
# - 도서번호, 도서제목, 도서재고수량 정보 담기
self.books = {}
print("클래스 생성")
### 도서입고 기능 정의하기|
def add_book(self, book_id, title, quantity) :
### 입고할 도서번호가 존재하는지 확인
# - 존재한다면 수량만 증가시키기
if book_id in self.books : # 여기서 books는 key값만 list로 가져옴
# self.books[book_id]["quantity"] = self.books[book_id]["quantity"] + quantity
self.books[book_id]["quantity"] += quantity
# - 존재하지 않는다면
else :
# {book_id : {"tilte" : tilte, "quantity" : quantity} }
# {"001" : {"tilte" : "파이썬 기초", "quantity" : 4} }
self.books[book_id] = {"title" : title, "quantity" : quantity}
print(f"도서번호 : {book_id} / 제목 : {title} / 입고수량 : {quantity} 입고성공:)")
# 여기서 books는 key값만 list로 가져옴
# 딕셔너리가 이미 만들어져있고 추가하기만 하면 됨
# self.books[book_id] 이 형태는 key를 줄테니 값(딕셔너리)을 달라!
# self.books[book_id]["quantity"] 불러온 딕셔너리에서 또 값을 불러옴
# self.books[book_id] = {"tilte" : tilte, "quantity" : quantity} 그 값에 제목과 수량을 넣는다.
### 도서 대출 기능 정의하기
def borrow_book(self, book_id):
### 대출하고자 하는 도서번호에 해당하는 재고수량 확인
if (book_id in self.books) and (self.books[book_id]['quantity']) > 0 :
self.books[book_id]['quantity'] -= 1
print("대출이 완료되었습니다.")
print(f"도서번호 : {book_id} / 제목 : {self.books[book_id]['title']} / 남은재고수량 : {self.books[book_id]['quantity']}")
else:
print("도서가 존재하지 않거나, 대출할 재고가 없습니다.")
### 반납 기능 정의하기
def return_book(self, book_id) :
# - 반납할 도서번호가 도서목록에 있는지 확인
if book_id in self.books :
self.books[book_id]["quantity"] += 1
print(f"도서번호 : {book_id} / 제목 : {self.books[book_id]['title']} / 남은재고수량 : {self.books[book_id]['quantity']}")
# - 해당 도서가 목록에 없다
else:
print("해당 도서가 존재하지 않습니다.")
### 2. 최초에 실행할 기능(함수)
def main() :
### 클래스 생성하기
# - 최초 한번 : 프로그램이 종료되면 클래스는 소멸(메모리 공간 삭제)됩니다.
kiosk = LibraryKiosk()
print(kiosk)
#print("main 함수 호출")
### 3. 메뉴 선택 보여주기
while True :
print("<도서 키오스크 메뉴>")
print("1. 도서 입고")
print("2. 도서 대출")
print("3. 도서 반납")
print("4. 종료")
choice = input("원하는 번호(1~4)를 선택하세요 : ")
if choice == "1" :
# print("입고 선택")
book_id = input("도서 번호를 입력해 주세요 : ")
title = input("도서 제목를 입력해 주세요 : ")
quantity = int(input("입고할 권수를 입력해 주세요 : "))
# print(f"{book_id} / {title} / {quantity}")
# - 클래스 내부의 입고 기능 호출하기
kiosk.add_book(book_id, title, quantity)
elif choice == "2" :
# print("대출 선택")
book_id = input("대출할 도서번호를 입력해주세요 : ")
### 클래스 내부의 대출 기능 호출하기
kiosk.borrow_book(book_id)
elif choice == "3" :
# print("반납 선택")
book_id = input("반납할 도서번호를 입력해주세요 : ")
### 클래스 내부의 반납 기능 호출하기
kiosk.return_book(book_id)
elif choice == "4" :
print("종료 선택")
break
else :
print("다시 선택해주세요")
### 1. 최초 코드 시작
if __name__ == "__main__":
### 최초에 실행할 기능(함수) 호출
main()
4 -1. 코드 실행 결과

728x90
반응형
'Digital Boot > Python' 카테고리의 다른 글
[Python] 파이썬 도서 관리 프로그램 만들기 실습 2 (0) | 2023.11.14 |
---|---|
[Python] 파이썬 클로저(Closure) (0) | 2023.11.14 |
[Python] 파이썬 유니코드 프로그램 (1) | 2023.11.14 |
[Python] 파이썬 문자열 메소드, 정규식 (2) | 2023.11.09 |
[Python] 파이썬 표준 라이브러리 (날짜/시간) - datetime, timedelta, relativedelta (0) | 2023.11.08 |