Skip to content

Instantly share code, notes, and snippets.

@gdsotirov
Last active November 24, 2024 13:08
Show Gist options
  • Select an option

  • Save gdsotirov/ef9499fbb2448ae1128c5a5974231255 to your computer and use it in GitHub Desktop.

Select an option

Save gdsotirov/ef9499fbb2448ae1128c5a5974231255 to your computer and use it in GitHub Desktop.
#Представи си, че създаваш система за управление на библиотека. Искаш да можеш да добавяш книги в библиотеката,
#да наемаш книги, и да проверяваш наличността на книгите.
# Методи на класа Book:|
# 1.Отпечатва информация за книгата вьв формат „Заглавие: ..., Автор: ..., Година: ..."
# 2.Ако книгата е налична, променя is_available на False и отпечатва сьобщение „Вие наехте книгата «заглавие>".
#Ако книгата вече е заета, изписва сьобщение „Книгата ‹заглавие > вече е заета."
# 3.Променя is_available обратно на True и отпечатва съобщение „Вие върнахте книгата ‹заглавие>".
# Методи на класа Library:
# 1.Добавя книга кьм библиотеката.
# 2.Отпечатва заглавията на всички налични книги.
# 3.Трси книга по заглавие и ако е налична, позволява на потребителя да я наеме
# 4.Тьрси книга по заглавие и позволява на потребителя да я върне
# • Ограничение на броя на книгите, които може да наеме един читател: Добавяме поле което не позволява на
#потребител да наеме повече от 3 книги наведньж. Ако читателят се опита да наеме четврта книга, програмата
#извежда сьобщение за ограничението.
# • Списьк на заетите книги и тяхната наличност: метод които извежда заглавията и имената на всички книги,
#които са заети.
# • Тьрсене на книги по автор или част от заглавие: Метод които позволява на потребителя да торси книги по
#автор или част от заглавие. Ако има сьвпадение, книгите се извеждат на екрана; ако няма, се извежда сьобщение
#„Няма намерени книги по зададения критерий."|
# • Брояч на заеманията на всяка книга: Поле което показва колко пьти е била заемана всяка книга. В огон
#() увеличаваме броя с 1 всеки пьт, когато книгата е наета.
import re
class Book:
def __init__(self, title, author, year):
self.title = title
self.author = author
self.year = year
self.is_available = True
self.rent_count = 0
def print(self):
print(f'Заглавие: {self.title}, Автор: {self.author}, Година: {self.year}')
def rent_book(self):
if self.is_available:
self.is_available = False
self.rent_count += 1
print(f"Вие наехте книгата \"{self.title}\".")
else:
print(f"Книгата \"{self.title}\" вече е заета.")
def return_book(self):
if not self.is_available:
self.is_available = True
print(f"Вие върнахте книгата \"{self.title}\".")
else:
print(f"Книгата \"{self.title}\" не е наета.")
class Library:
books = []
readers = {}
def add_book(self, book):
self.books.append(book)
print(f"Книгата \"{book.title}\" беше добавена към библиотеката.")
def add_reader(self, reader):
if reader in self.readers.keys():
self.readers[reader] += 1
else:
self.readers[reader] = 1
def all_books(self):
print("Всички книги:")
for book in self.books:
print(f"- {book.title}")
def available_books(self):
print("Налични книги:")
num = 0
for book in self.books:
if book.is_available:
num += 1
print(f"- {book.title}")
if num == 0:
print("Няма налични книги в библиотеката.")
def find_book(self, title, reader):
for book in self.books:
if book.title == title:
if book.is_available:
if self.readers.get(reader, 0) + 1 > 3:
print(f"{reader} you already rented 3 books!")
else:
book.rent_book()
self.add_reader(reader)
else:
book.return_book()
self.remove_reader(reader)
def rented_books(self):
print("Наети книги:")
num = 0
for book in self.books:
if not book.is_available:
num += 1
print(f"- {book.title}")
if num == 0:
print("Няма наети книги от библиотеката.")
def remove_reader(self, reader):
if reader in self.readers.keys():
self.readers[reader] -= 1
else:
self.readers[reader] = 0
def search_book(self, str):
found = False
for book in self.books:
if re.search(str, book.title) or re.search(str, book.author):
found = True
print("Found: ", end="")
book.print()
if not found:
print("Няма намерени книги по зададения критерий.")
b1 = Book("Book 1", "Author 1", 2001)
b2 = Book("Book 2", "Author 2", 2002)
b3 = Book("Book 3", "Author 3", 2003)
b4 = Book("Book 4", "Author 4", 2004)
b5 = Book("Book 5", "Author 5", 2005)
lib = Library()
lib.add_book(b1)
lib.add_book(b2)
lib.add_book(b3)
lib.add_book(b4)
lib.add_book(b5)
reader = ''
while True:
if reader == '':
reader = input(f"Моля, въведете името си: ")
print(f"Добре дошъл {reader}!")
print("a - налични, f - намиране, e - изход, n - нов читател, s - търсене")
action = input("Вашият избор? ")
match action:
case 'a':
lib.available_books()
continue
case 'f':
title = input("Заглавие: ")
lib.find_book(title, reader)
continue
case 'e':
print("Край.")
break
case 'n':
reader = ''
continue
case 's':
str = input("Търсене за: ")
lib.search_book(str)
continue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment