본문 바로가기

Back-End/Python

[Python] 파이썬 실습2 - 회원전용 도서관리 키오스크 만들기

~ 목차 ~

<최초 메뉴>


  : 회원 번호는 문자열 무엇이든 상관없이 등록
  : 서비스 종료 시 프로그램 자체 종료
 

[서비스 이용을 위한 회원 인증]
 1. 회원번호 등록
 2. 회원 인증
 3. 서비스 종료

 


<회원 인증이 된 경우 메뉴>


  : 도서 정보 : 도서번호, 도서제목, 재고권수
  : 도서 상태 확인 : 특정 도서에 대한 정보 조회(도서번호, 도서제목, 현재권수/전체권수)

 

 [도서 서비스 메뉴]
 1. 도서 입고
 2. 도서 대출
 3. 도서 반납
 4. 도서 상태 확인
 5. 도서 전체 목록 확인
 6. 도서 서비스 종료(회원 인증 메뉴로 갑니다.)

 


 

저번에 한 코드를 더 발전시켜보았다.

 

1. 유저정보 등록 함수 :  user_register()

    - user_id 값 입력

    - users 리스트 생성 후 값 넣기(append)

 

2. 유저인증 함수 : user_check()

    - 입력한 회원번호가 users리스트에 있는지 확인

 

3. 메인과 비슷하게 while True문을 써서 도서 서비스 메뉴를 입력 받는 함수 : user_auth (회원인증시에만 뜨도록!!!)

 

4. 특정 도서에 대한 정보 조회(도서번호, 도서제목, 현재권수/전체권수)에서 전체권수 추가

     - add_book함수에 'totalquantity':quantity 정보 추가하기

 

5. 도서 대출이 quantity > 0 일 때만 대출가능하도록 설정

 

6. 도서 반납 시 계속 대출 재고와 상관없이 계속 반납되는 오류 해결!

    - (전체 재고) - (현재 재고) 가 0보다 큰 값을 가질 때만 반납할 수 있도록 수정!

       (0보다 크다는 것은 대출한 사람이 있다는 뜻!)

class LibraryKiosk: 
    def __init__(self):
         self.books = {}
        
    def user_register(self):
        print("회원번호 등록 화면입니다.")
        while True:
            user_id = input("회원번호를 입력하세요.")
            if user_id in users:
                print("이미 존재한 회원번호입니다.")
            else:
                users.append(user_id)
                print("등록이 완료되었습니다.")
                print(users)
                break
        return users

    def user_check(self):
        print("회원 인증하기 화면입니다.")
        check_num = input("자신의 회원번호를 입력하세요.")
        if check_num in users:
            print("회원인증이 완료되었습니다.")
            user_auth() 
        else:
            print("해당 회원번호가 존재하지 않습니다.")
            
    def user_auth():
        while True:
                user_menu = input('''
                                    [도서 서비스 메뉴]
                                     1. 도서 입고
                                     2. 도서 대출
                                     3. 도서 반납
                                     4. 도서 상태 확인
                                     5. 도서 전체 목록 확인
                                     6. 도서 서비스 종료(회원 인증 메뉴로)
                                     원하시는 서비스 번호를 입력하세요.
                                   ''')
                if user_menu == '1':
                    print("도서입고 화면입니다.")
                    book_id = input('도서 번호를 입력해 주세요 : ')
                    title = input('도서 제목을 입력해 주세요 : ')
                    quantity = int(input('입고할 권수를 입력해 주세요 : '))
                    kiosk.add_book(book_id, title, quantity)
                 
                elif user_menu == '2':
                    print("도서 대출 화면입니다.")
                    book_id = input("대출할 도서번호를 입력해주세요 : ")
                    kiosk.borrow_book(book_id)
                    
                elif user_menu == '3':
                    print("도서 반납 화면입니다.")
                    book_id = input("반납할 도서번호를 입력해주세요 : ")
                    kiosk.return_book(book_id)
                    
                elif user_menu == '4':
                    print("도서 상태확인 화면입니다.")
                    book_id = input("도서상태를 확인할 도서번호를 입력해주세요 : ")
                    kiosk.check_book(book_id)
                    
                elif user_menu == '5':
                    print("도서 전체목록확인 화면입니다.")
                    kiosk.list_book()
                    
                elif user_menu == '6':
                    print("도서 서비스종료(회원 인증 메뉴로)")
                    break
                    
                else :
                    print('잘못입력하셨습니다. 다시 입력해주세요.')
    
    def add_book(self, book_id, title, quantity):
        if book_id in self.books:
            self.books[book_id]['quantity'] += quantity
            self.books[book_id]['totalquantity'] += quantity  
        else:
            self.books[book_id] = {'title':title, 'quantity':quantity, 'totalquantity':quantity}
        print(f"도서번호 : {book_id} /제목 : {title} / 입고수량 : {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:
            if (self.books[book_id]['totalquantity']-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("반납할 책이 존재하지 않습니다.")
        else:
            print("해당 도서가 존재하지 않습니다.")
        
    def check_book(self, book_id):
        if book_id in self.books:
            print(f"도서번호:{book_id}, 도서제목:{self.books[book_id]['title']}, 현재수량:{self.books[book_id]['quantity']}/전체수량:{self.books[book_id]['totalquantity']}")
        else:
            print("해당 도서가 존재하지 않습니다.")

    def list_book(self):
        for i in self.books.keys():
            print(f"도서번호:{i}, 도서제목:{self.books[i]['title']}, 현재수량:{self.books[i]['quantity']}/전체수량:{self.books[i]['totalquantity']}")

 

def main():
    kiosk = LibraryKiosk()
    
    while True:
        print_menu = input('''
                            [서비스 이용을 위한 회원 인증]
                             1. 회원번호 등록
                             2. 회원 인증
                             3. 서비스 종료
                             원하시는 서비스 번호를 입력하세요.
                           ''')
        if print_menu == '1':
            user_register()
         
        elif print_menu == '2':
            user_check()
             
        elif print_menu == '3':
            print("서비스 종료")
            break
        else :
            print('잘못입력하셨습니다. 다시 입력해주세요.')
             
if __name__ == "__main__" :
    main()

 

결과

[서비스 이용을 위한 회원 인증]
                             1. 회원번호 등록
                             2. 회원 인증
                             3. 서비스 종료
                             원하시는 서비스 번호를 입력하세요.
                            1
회원번호 등록 화면입니다.
회원번호를 입력하세요. 000
등록이 완료되었습니다.
['123', '58', '578', '888', '2', '1', '3', '8', '999', '258', '5', '000']

                            [서비스 이용을 위한 회원 인증]
                             1. 회원번호 등록
                             2. 회원 인증
                             3. 서비스 종료
                             원하시는 서비스 번호를 입력하세요.
                            2
회원 인증하기 화면입니다.
자신의 회원번호를 입력하세요. 000
회원인증이 완료되었습니다.

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                1
도서입고 화면입니다.
도서 번호를 입력해 주세요 :  1
도서 제목을 입력해 주세요 :  파이썬
입고할 권수를 입력해 주세요 :  5
도서번호 : 1 /제목 : 파이썬 / 입고수량 : 5 입고 성공!!

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                2
도서 대출 화면입니다.
대출할 도서번호를 입력해주세요 :  1
대출이 완료되었습니다.
도서번호:1 / 도서제목:파이썬 / 재고수량:4

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                3
도서 반납 화면입니다.
반납할 도서번호를 입력해주세요 :  1
반납이 완료되었습니다.
도서번호:1 / 도서제목:파이썬 / 재고수량:5

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                4
도서 상태확인 화면입니다.
도서상태를 확인할 도서번호를 입력해주세요 :  1
도서번호:1, 도서제목:파이썬, 현재수량:5/전체수량:5

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                1
도서입고 화면입니다.
도서 번호를 입력해 주세요 :  2
도서 제목을 입력해 주세요 :  기초문법
입고할 권수를 입력해 주세요 :  4
도서번호 : 2 /제목 : 기초문법 / 입고수량 : 4 입고 성공!!

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                5
도서 전체목록확인 화면입니다.
도서번호:1, 도서제목:파이썬, 현재수량:5/전체수량:5
도서번호:2, 도서제목:기초문법, 현재수량:4/전체수량:4

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                2
도서 대출 화면입니다.
대출할 도서번호를 입력해주세요 :  2
대출이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:3

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                2
도서 대출 화면입니다.
대출할 도서번호를 입력해주세요 :  2
대출이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:2

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                2
도서 대출 화면입니다.
대출할 도서번호를 입력해주세요 :  2
대출이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:1

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                2
도서 대출 화면입니다.
대출할 도서번호를 입력해주세요 :  2
대출이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:0

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                2
도서 대출 화면입니다.
대출할 도서번호를 입력해주세요 :  2
도서가 존재하지 않거나, 대출할 재고가 없습니다.

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                3
도서 반납 화면입니다.
반납할 도서번호를 입력해주세요 :  2
반납이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:1

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                3
도서 반납 화면입니다.
반납할 도서번호를 입력해주세요 :  2
반납이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:2

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                3
도서 반납 화면입니다.
반납할 도서번호를 입력해주세요 :  2
반납이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:3

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                3
도서 반납 화면입니다.
반납할 도서번호를 입력해주세요 :  2
반납이 완료되었습니다.
도서번호:2 / 도서제목:기초문법 / 재고수량:4

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                3
도서 반납 화면입니다.
반납할 도서번호를 입력해주세요 :  2
반납할 책이 존재하지 않습니다.

                                [도서 서비스 메뉴]
                                 1. 도서 입고
                                 2. 도서 대출
                                 3. 도서 반납
                                 4. 도서 상태 확인
                                 5. 도서 전체 목록 확인
                                 6. 도서 서비스 종료(회원 인증 메뉴로)
                                 원하시는 서비스 번호를 입력하세요.
                                6
도서 서비스종료(회원 인증 메뉴로)

                            [서비스 이용을 위한 회원 인증]
                             1. 회원번호 등록
                             2. 회원 인증
                             3. 서비스 종료
                             원하시는 서비스 번호를 입력하세요.
                            3
서비스 종료

 전체 수량 모두 대출하면 더이상 대출 못하도록 설정

 대출한 수 만큼 모두 반납하면 더이상 반납 못하도록 설정

728x90