Przejdź do głównej zawartości

21. System zarządzania biblioteką szkolną

System zarządzania biblioteką szkolną

Stworzycie aplikację webową umożliwiającą zarządzanie zbiorami biblioteki szkolnej: katalog książek, wypożyczenia, zwroty i historia transakcji. Dane przechowywane w plikach JSON.

  • Projektowania relacji między encjami (książki, czytelnicy, wypożyczenia)
  • Walidacji dat (data wypożyczenia, termin zwrotu)
  • Obsługi stanów (dostępna / wypożyczona / zagubiona)
  • Generowania raportów i historii transakcji
  • Pracy z plikami JSON jako prostą bazą danych
  1. Katalog książek — dodawanie, przeglądanie i wyszukiwanie po tytule/autorze/ISBN
  2. Rejestracja wypożyczeń — przypisanie książki do czytelnika z datą zwrotu
  3. Rejestracja zwrotów — oznaczanie książki jako dostępnej
  4. Historia transakcji — lista wszystkich wypożyczeń z filtrowaniem
  5. Powiadomienia o przeterminowaniu — wyróżnienie książek po terminie
{
"books": [
{
"id": 1,
"isbn": "978-83-01-12345-6",
"title": "Algorytmy i struktury danych",
"author": "Sedgewick Robert",
"status": "borrowed",
"added_at": "2025-09-01"
}
],
"loans": [
{
"id": 1,
"book_id": 1,
"reader_name": "Anna Kowalska",
"reader_class": "3TI",
"loaned_at": "2026-02-01",
"due_date": "2026-02-28",
"returned_at": null
}
]
}

Wymagane funkcje:

  • Formularz dodawania książki (tytuł, autor, ISBN)
  • Lista książek ze statusem
  • Formularz wypożyczenia (przypisanie czytelnika)
  • Oznaczanie zwrotu
  • Zapis do JSON, walidacja pól wymaganych
Ocena: 3.0
  • Folderbiblioteka/
    • index.php
    • ksiazki.php
    • wypozycz.php
    • zwrot.php
    • historia.php
    • Folderincludes/
      • config.php
      • functions.php
      • auth.php
    • Folderdata/
      • books.json
      • loans.json
    • Foldercss/
      • style.css

Sprawdzanie przeterminowania:

function isOverdue(string $dueDate): bool {
return strtotime($dueDate) < time() && $dueDate !== '';
}
function getDaysOverdue(string $dueDate): int {
$diff = time() - strtotime($dueDate);
return (int) floor($diff / 86400);
}

Zmiana statusu książki:

function loanBook(array &$data, int $bookId, string $reader, string $class): void {
foreach ($data['books'] as &$book) {
if ($book['id'] === $bookId && $book['status'] === 'available') {
$book['status'] = 'borrowed';
}
}
$data['loans'][] = [
'id' => generateId($data['loans']),
'book_id' => $bookId,
'reader_name' => $reader,
'reader_class' => $class,
'loaned_at' => date('Y-m-d'),
'due_date' => date('Y-m-d', strtotime('+30 days')),
'returned_at' => null,
];
}