Advertisement
xSenny

Untitled

Sep 24th, 2024 (edited)
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.55 KB | None | 0 0
  1. from abc import ABC, abstractmethod
  2. from typing import List, Dict, Tuple, Set
  3.  
  4. class LibraryItem(ABC):
  5.     def __init__(self, title: str, id: int):
  6.         self._title = title
  7.         self._id = id
  8.  
  9.     @abstractmethod
  10.     def get_details(self) -> str:
  11.         pass
  12.  
  13.     @abstractmethod
  14.     def borrow(self) -> None:
  15.         pass
  16.  
  17.     @abstractmethod
  18.     def return_item(self) -> None:
  19.         pass
  20.  
  21.  
  22. class Book(LibraryItem):
  23.     def __init__(self, title: str, id: int, author: str):
  24.         super().__init__(title, id)
  25.         self._author = author
  26.         self._is_borrowed = False
  27.  
  28.     def get_details(self) -> str:
  29.         return f"Book Title: {self._title}, ID: {self._id}, Author: {self._author}"
  30.  
  31.     def borrow(self) -> None:
  32.         if not self._is_borrowed:
  33.             self._is_borrowed = True
  34.         else:
  35.             print("This book is already borrowed.")
  36.  
  37.     def return_item(self) -> None:
  38.         if self._is_borrowed:
  39.             self._is_borrowed = False
  40.         else:
  41.             print("This book was not borrowed.")
  42.  
  43. class Magazine(LibraryItem):
  44.     def __init__(self, title: str, id: int, issue_number: int):
  45.         super().__init__(title, id)
  46.         self._issue_number = issue_number
  47.         self._is_borrowed = False
  48.  
  49.     def get_details(self) -> str:
  50.         return f"Magazine Title: {self._title}, ID: {self._id}, Issue Number: {self._issue_number}"
  51.  
  52.     def borrow(self) -> None:
  53.         if not self._is_borrowed:
  54.             self._is_borrowed = True
  55.         else:
  56.             print("This magazine is already borrowed.")
  57.  
  58.     def return_item(self) -> None:
  59.         if self._is_borrowed:
  60.             self._is_borrowed = False
  61.         else:
  62.             print("This magazine was not borrowed.")
  63.  
  64. def display_item_details(items: List[LibraryItem]) -> None:
  65.     for item in items:
  66.         print(item.get_details())
  67.  
  68. class Library:
  69.     def __init__(self):
  70.         self.items: List[LibraryItem] = []
  71.         self.borrowed_items: Dict[int, LibraryItem] = {}
  72.         self.available_ids: Set[int] = set()
  73.  
  74.     def add_item(self, item: LibraryItem) -> None:
  75.         self.items.append(item)
  76.         self.available_ids.add(item._id)
  77.  
  78.     def borrow_item(self, item_id: int) -> None:
  79.         for item in self.items:
  80.             if item._id == item_id:
  81.                 item.borrow()
  82.                 self.borrowed_items[item_id] = item
  83.                 self.available_ids.discard(item_id)
  84.                 return
  85.         print("Item not found.")
  86.     def return_item(self, item_id: int) -> None:
  87.         if item_id in self.borrowed_items:
  88.             item = self.borrowed_items[item_id]
  89.             item.return_item()
  90.             del self.borrowed_items[item_id]
  91.             self.available_ids.add(item_id)
  92.         else:
  93.             print("Item was not borrowed.")
  94.  
  95.     def display_all_items(self) -> None:
  96.         display_item_details(self.items)
  97.  
  98. def main():
  99.     library = Library()
  100.    
  101.     book1 = Book("1984", 1, "George Orwell")
  102.     magazine1 = Magazine("National Geographic", 2, 2023)
  103.     library.add_item(book1)
  104.     library.add_item(magazine1)
  105.    
  106.     print("All Library Items:")
  107.     library.display_all_items()
  108.  
  109.     print("\nBorrowing Item ID 1 (1984):")
  110.     library.borrow_item(1)
  111.     print("\nBorrowing Item ID 2 (National Geographic):")
  112.     library.borrow_item(2)
  113.  
  114.     print("\nAll Library Items After Borrowing:")
  115.     library.display_all_items()
  116.  
  117.     print("\nReturning Item ID 1 (1984):")
  118.     library.return_item(1)
  119.  
  120.     print("\nFinal Library Items:")
  121.     library.display_all_items()
  122.  
  123. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement