-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlibrary.py
More file actions
115 lines (95 loc) · 3.38 KB
/
Copy pathlibrary.py
File metadata and controls
115 lines (95 loc) · 3.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
from abc import ABC, abstractmethod
from datetime import datetime, timedelta
#------------JASPER VALDEZ------------#
# Abstract class: LibraryItem
class LibraryItem(ABC):
def __init__(self, title):
self.title = title
self.borrower = None
self.due_date = None
self.borrow_date = None
self.is_borrowed = False
@abstractmethod
def get_type(self):
pass
#------------LIU ARBY GARCIA------------#
def borrow(self, borrower_name, borrow_date=None):
if self.is_borrowed:
print(f"'{self.title}' is already borrowed.")
else:
self.borrower = borrower_name
self.borrow_date = borrow_date if borrow_date else datetime.now()
self.due_date = self.borrow_date + timedelta(days=14)
self.is_borrowed = True
print(f"'{self.title}' has been borrowed by {borrower_name}.")
print(f"Borrowed on: {self.borrow_date.date()}, Due on: {self.due_date.date()}.")
def return_item(self, return_date=None):
if not self.is_borrowed:
print(f"'{self.title}' is not borrowed.")
else:
if return_date is None:
return_date = datetime.now()
late_days = (return_date - self.due_date).days
if late_days > 0:
fee = late_days * 2 # 2 pesos per late day
print(f"'{self.title}' returned by {self.borrower} on {return_date.date()}. Late fee: {fee} pesos")
else:
print(f"'{self.title}' returned by {self.borrower} on {return_date.date()}. No late fee.")
# Reset item status
self.borrower = None
self.due_date = None
self.borrow_date = None
self.is_borrowed = False
#------------RON CACHOLA------------#
def status(self):
if self.is_borrowed:
return (f"{self.title} ({self.get_type()}): Borrowed by {self.borrower}, "
f"Borrowed on {self.borrow_date.date()}, Due {self.due_date.date()}")
else:
return f"{self.title} ({self.get_type()}): Available"
# Subclasses
class Book(LibraryItem):
def get_type(self):
return "Book"
class Magazine(LibraryItem):
def get_type(self):
return "Magazine"
class DVD(LibraryItem):
def get_type(self):
return "DVD"
#------------KEN REYES------------#
# Library class
class Library:
def __init__(self):
self.items = []
def add_item(self, item):
self.items.append(item)
def show_inventory(self):
for item in self.items:
print(item.status())
#------------ARSENIO LARANANG------------#
lib = Library()
lib.add_item(Book("Python Programming"))
lib.add_item(Magazine("Tech Monthly"))
lib.add_item(DVD("Inception"))
print("------ INITIAL INVENTORY ------")
lib.show_inventory()
print()
# Borrow items
print("------ BORROWING ITEMS ------")
lib.items[0].borrow("Liu", datetime(2025, 4, 20))
lib.items[1].borrow("Ron", datetime(2025, 4, 25))
print()
# Inventory after borrowing
print("------ INVENTORY AFTER BORROWING ------")
lib.show_inventory()
print()
#------------KHRYZ ALABADO------------#
# Return items
print("------ RETURNING ITEMS ------")
lib.items[0].return_item(datetime(2025, 5, 10))
lib.items[1].return_item(datetime(2025, 5, 7))
print()
# Final inventory
print("------ FINAL INVENTORY ------")
lib.show_inventory()