728x90
반응형
오늘 학습내용
# 기능을 수행할 클래스 (모듈 or 라이브러리)생성
class LibraryKiosk:
### 클래스 생성자 정의
def __init__(self):
### 도서 목록을 저장할 딕셔너리 변수 생성
# - 도서 번호, 도서 제목, 도서 재고 수량 정보 담기
self.books = {}
print("클래스가 생성되었습니다")
#도서 입고 정의하기
def add_book(self, book_id, title, quantity):
## 입고할 도서번호가 존재하는 지 확인
## 존재한다면 수량만 증가시키기
if book_id in self.books:
# self.books[book_id][quantity] = self.books[book_id][quantity] + quantity
self.books[book_id]["quantity"] += quantity
else: ##존재하지 않는다면
#{ 001 : {'title': 파이썬기초, "quantity:5}}
self.books[book_id] ={ "title": title, "quantity": quantity}
print (f"도서번호 :{book_id} / 제목 / : {title} / 입고수량 : {quantity} / 입고확인")
print(self.books)
#대출 기능 정의하기
def borrow_book(self, book_id):
# 대출하고자하는 해당하는 재고 수량확인하기
if (book_id in self.books) and (self.books[book_id]["quantity"]>0) :
# ["quantity"] = self.books[book_id]["quantity"]-1
self.books[book_id]["quantity"]-=1
print(f"제목: {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"제목: {self.books[book_id]['title']} / 남은 재고 수량: {self.books[book_id]['quantity']}")
# 해당 도서가 없다면
else:
print("해당 도서가 존재하지 않습니다.")
#### 최초에 실행할 기능(함수 ) 정의
def main():
print("main 함수 호출")
kiosk= LibraryKiosk()
##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":
book_id = input("대출할 도서 번호를 입력해주세요")
### 클래스 내의 대출 기능 호출하기
kiosk.borrow_book(book_id)
elif choice =="3":
### 클래스 내의 반납 기능 호출하기
book_id= input("반납할 도서 번호를 입력해주세요")
kiosk.return_book(book_id)
elif choice =="4":
print("종료되었습니다.")
break
else:
print("잘못선택했습니다")
# 최초 코드 시작
if __name__ == "__main__":
## 최초에 실행할 기능 (함수 호출)
main()
문제
# <도서 입고/대출반납 관리를 위한 키오스크 파이썬 프로그램 실습>
[미션]
- 도서목록 : 새로운 책이 도서관에 [입고]되었을 때 프로그램 작성
- 도서 대출 : 도서 목록에서 임의 책을 빌리고자 할 때 [대출] 프로그램 작성
- 도서 반납 : 대출한 도서를 [반납]하고자 할 때 프로그램 작성
- 종료하기 : 종료하기에 대한 프로그램 작성
- 도서 입고/대출/반납/종료 중 원하는 것을 선택했을 때 위 내용 수행합니다.
- 프로그램을 종료하기 전까지는 위 내용은 누구든지 서비스를 받을 수 있도록 반복 실행
- 도서에 대한 확인 값은 자유롭게 정의하셔서 진행
- [조건]
- class 생성하여 처리
자습내용
import pickle
class Library:
def __init__(self):
# self.book_list = {} # 전체 도서 목록
self.book_list= self.load()
def load(self):
book_list = {}
try:
with open('./book_list.pickle', 'rb') as file:
data = pickle.load(file)
if data:
print("저장된 도서 데이터를 불러왔습니다.")
book_list = data
for code, book_info in book_list.items():
print(f"도서코드:{code}-도서이름:{book_info['name']}-저자:{book_info['writer']}-수량:{book_info['quantity']}")
except FileNotFoundError:
print("파일이 존재하지 않습니다.")
return book_list
def add_book(self, code, name, writer, quantity):
## 입고할 도서번호가 존재하는 지 확인
## 존재한다면 수량만 증가시키기
if code in self.book_list:
self.book_list[book_id]["quantity"] += quantity
else: ##존재하지 않는다면
self.book_list[code] ={ "name": name, "writer":writer, "quantity": quantity}
# print(self.book_list)
def print_menu(self): # 반복문 안내문
return input('''
다음 중에서 하실 작업의 메뉴를 입력하세요.
I - 도서 입고
N - 모든 도서 상태
L - 도서 대출
R - 도서 반납
S - 저장
Q - 프로그램 종료
''').upper()
def chk_input_data(self, msg, func): # 도서 등록시 유효성 검사
while True:
x = input(msg).upper()
if func(x):
break
else:
print('잘못입력하셨습니다. 다시 입력 해 주세요.')
return x
def book_insert(self):
print ("도서 등록")
book = { 'code' : '' , 'name' : '', 'writer': '', 'status':1, 'quantity':0}
while True:
code = input('신규 책 번호를 입력하세요 ')
if code.isdigit():
break
else:
print("잘못입력하였습니다")
name = self.chk_input_data("신규 책 이름을 입력하세요.", lambda x: True if len(x) > 0 else False)
writer = self.chk_input_data("신규 책의 저자를 입력하세요.", lambda x: True if len(x)>0 else False)
quantity= int(self.chk_input_data("입고할 량을 입력하세요", lambda x: True if x.isdigit() else False))
self.add_book(code, name, writer, quantity)
print(self.book_list)
def book_loan(self,book_list):
print("도서대출")
if len(book_list)==0:
print("등록된 책이 없습니다.")
else:
loan_code = input("빌리실 책의 코드를 입력하세요")
if (loan_code in self.book_list) and (self.book_list[loan_code]["quantity"]>0) :
# ["quantity"] = self.books[book_id]["quantity"]-1
self.book_list[loan_code]["quantity"]-=1
print(f"제목: {self.book_list[loan_code]['name']} / 남은 재고 수량: {self.book_list[loan_code]['quantity']}")
#해당 도서가 없거나 재고가 없다면
else:
print("도서가 존재하지 않거나 , 대출할 재고가 없습니다.")
def now_book_list(self, book_list):
print("현재 도서 목록입니다.")
if len(book_list)==0:
print("입력된 도서가 없습니다")
else:
for code, book_info in book_list.items():
print(f"도서코드:{code}-도서이름:{book_info['name']}-저자:{book_info['writer']}-수량:{book_info['quantity']}")
def book_return(self,book_list):
print("도서반납")
if len(book_list)==0:
print("등록된 도서가 없습니다")
else:
return_code = input("반납하실 책의 코드를 입력하세요")
if (return_code in self.book_list):
self.book_list[return_code]["quantity"]+=1
print(f"제목: {self.book_list[return_code]['name']} / 남은 재고 수량: {self.book_list[return_code]['quantity']}")
# 해당 도서가 없다면
else:
print("해당 도서가 존재하지 않습니다.")
def save(self, book_list):
try:
with open('./book_list.pickle', 'wb') as file:
pickle.dump(book_list, file)
print("고객정보를 저장했습니다.")
except Exception as e:
print("저장 오류", e)
def main(self):
while True:
menu = self.print_menu()
if menu=='I': #도서 입고
self.book_insert()
elif menu=='N': #현재 도서 목록, 상태 조회
self.now_book_list(self.book_list)
elif menu=='L': # 도서 대출
self.book_loan(self.book_list)
elif menu=='R': #도서 반납
self.book_return(self.book_list)
elif menu=='S': #도서 목록저장
self.save(self.book_list)
elif menu=='Q': #종료 버튼
self.save(self.book_list)
print('종료합니다.')
break
else:
print("잘못누르셨습니다")
if __name__ == '__main__':
a = Library()
a.main()
저장, 불러오기,조회 기능 추가
728x90
반응형
'파이썬' 카테고리의 다른 글
클로저와 데코레이터 (3) | 2023.11.14 |
---|---|
유니코드 짧은 (1) | 2023.11.14 |
파이썬 class 클래스 (1) | 2023.11.10 |
파이썬은 객체지향 언어인가 절차지향 언어인가? (3) | 2023.11.09 |
raw string과 정규식. 파이썬 문자열 중에서.. (1) | 2023.11.09 |