# wenyueivyxie/library-management-system architecture

> Architecture diagram of the GitHub repository wenyueivyxie/library-management-system, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wenyueivyxie/library-management-system
- Repository: https://github.com/wenyueivyxie/library-management-system

## Overview

This is a desktop library-management application. Its principal workflow starts when the application loads an inventory and opens a Swing interface; customers search, borrow, reserve, or return items, while employees submit use requests and a master librarian approves or rejects them. Inventory tracks catalog availability, reservations, and requests; loans record checkout dates and returns. The graph preserves the catalog’s distinct media types and the inventory table. README content is absent, and several files are represented only by source-index references, so undocumented connections are omitted.

Main entry points: [`Inventory.java`](https://github.com/wenyueivyxie/library-management-system/blob/main/Inventory.java) (Inventory), [`LibraryItem.java`](https://github.com/wenyueivyxie/library-management-system/blob/main/LibraryItem.java) (Catalog item), [`UseRequest.java`](https://github.com/wenyueivyxie/library-management-system/blob/main/UseRequest.java) (Use request), [`LibraryGUI.java`](https://github.com/wenyueivyxie/library-management-system/blob/main/LibraryGUI.java) (Library interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application UI"]
  node_main["Startup<br/>[Main.java]"]
  node_loader["Inventory loader"]
  node_gui["Library interface<br/>[LibraryGUI.java]"]
  node_table["Inventory table"]
end

subgraph group_catalog["Catalog"]
  node_inventory[("Inventory<br/>[Inventory.java]")]
  node_item["Catalog item<br/>[LibraryItem.java]"]
  node_book["Book<br/>[Book.java]"]
  node_audiobook["Audiobook<br/>[AudioBook.java]"]
  node_magazine["Magazine<br/>[Magazine.java]"]
  node_movie["Movie<br/>[Movie.java]"]
end

subgraph group_circulation["Circulation"]
  node_user["User accounts<br/>[User.java]"]
  node_loan["Loans<br/>[Loan.java]"]
  node_reservation["Reservations<br/>[Reservation.java]"]
end

subgraph group_governance["Staff Requests"]
  node_employee["Employee<br/>[Employee.java]"]
  node_request["Use request<br/>[UseRequest.java]"]
  node_purpose["Use purpose<br/>[UsePurpose.java]"]
  node_librarian["Master librarian"]
end

node_visitor(("Library user"))

node_visitor -->|"uses"| node_gui
node_main -->|"loads"| node_loader
node_main -->|"opens"| node_gui
node_main -->|"initializes"| node_inventory
node_gui -->|"creates"| node_table
node_gui -->|"manages"| node_inventory
node_table -->|"reads"| node_inventory
node_inventory -->|"stores"| node_item
node_inventory -->|"tracks"| node_reservation
node_inventory -->|"tracks"| node_request
node_inventory -->|"identifies"| node_book
node_inventory -->|"identifies"| node_audiobook
node_inventory -->|"identifies"| node_magazine
node_inventory -->|"identifies"| node_movie
node_user -->|"returns items"| node_inventory
node_user -->|"creates"| node_loan
node_user -->|"creates"| node_reservation
node_employee -->|"submits"| node_request
node_employee -->|"records request"| node_inventory
node_librarian -->|"approves changes"| node_inventory
node_librarian -->|"approves or rejects"| node_request
node_librarian -->|"creates"| node_loan
node_request -->|"specifies"| node_purpose
node_request -->|"concerns"| node_item
node_loan -->|"records checkout"| node_item
node_book -->|"extends"| node_item
node_audiobook -->|"extends"| node_item
node_magazine -->|"extends"| node_item
node_movie -->|"extends"| node_item

click node_main "https://github.com/wenyueivyxie/library-management-system/blob/main/Main.java"
click node_loader "https://github.com/wenyueivyxie/library-management-system/blob/main/InventoryLoader.java"
click node_gui "https://github.com/wenyueivyxie/library-management-system/blob/main/LibraryGUI.java"
click node_table "https://github.com/wenyueivyxie/library-management-system/blob/main/InventoryTable.java"
click node_inventory "https://github.com/wenyueivyxie/library-management-system/blob/main/Inventory.java"
click node_item "https://github.com/wenyueivyxie/library-management-system/blob/main/LibraryItem.java"
click node_book "https://github.com/wenyueivyxie/library-management-system/blob/main/Book.java"
click node_audiobook "https://github.com/wenyueivyxie/library-management-system/blob/main/AudioBook.java"
click node_magazine "https://github.com/wenyueivyxie/library-management-system/blob/main/Magazine.java"
click node_movie "https://github.com/wenyueivyxie/library-management-system/blob/main/Movie.java"
click node_user "https://github.com/wenyueivyxie/library-management-system/blob/main/User.java"
click node_loan "https://github.com/wenyueivyxie/library-management-system/blob/main/Loan.java"
click node_reservation "https://github.com/wenyueivyxie/library-management-system/blob/main/Reservation.java"
click node_employee "https://github.com/wenyueivyxie/library-management-system/blob/main/Employee.java"
click node_request "https://github.com/wenyueivyxie/library-management-system/blob/main/UseRequest.java"
click node_purpose "https://github.com/wenyueivyxie/library-management-system/blob/main/UsePurpose.java"
click node_librarian "https://github.com/wenyueivyxie/library-management-system/blob/main/MasterLibrarian.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_loader,node_gui,node_table,node_visitor toneBlue
class node_inventory,node_item,node_book,node_audiobook,node_magazine,node_movie toneAmber
class node_user,node_loan,node_reservation toneMint
class node_employee,node_request,node_purpose,node_librarian toneRose
```

## Components

### Application UI

- [Startup](https://github.com/wenyueivyxie/library-management-system/blob/main/Main.java): `Main.java`
- [Inventory loader](https://github.com/wenyueivyxie/library-management-system/blob/main/InventoryLoader.java): `InventoryLoader.java`
- [Library interface](https://github.com/wenyueivyxie/library-management-system/blob/main/LibraryGUI.java): `LibraryGUI.java`
- [Inventory table](https://github.com/wenyueivyxie/library-management-system/blob/main/InventoryTable.java): `InventoryTable.java`

### Catalog

- [Inventory](https://github.com/wenyueivyxie/library-management-system/blob/main/Inventory.java): `Inventory.java`
- [Catalog item](https://github.com/wenyueivyxie/library-management-system/blob/main/LibraryItem.java): `LibraryItem.java`
- [Book](https://github.com/wenyueivyxie/library-management-system/blob/main/Book.java): `Book.java`
- [Audiobook](https://github.com/wenyueivyxie/library-management-system/blob/main/AudioBook.java): `AudioBook.java`
- [Magazine](https://github.com/wenyueivyxie/library-management-system/blob/main/Magazine.java): `Magazine.java`
- [Movie](https://github.com/wenyueivyxie/library-management-system/blob/main/Movie.java): `Movie.java`

### Circulation

- [User accounts](https://github.com/wenyueivyxie/library-management-system/blob/main/User.java): `User.java`
- [Loans](https://github.com/wenyueivyxie/library-management-system/blob/main/Loan.java): `Loan.java`
- [Reservations](https://github.com/wenyueivyxie/library-management-system/blob/main/Reservation.java): `Reservation.java`

### Staff Requests

- [Employee](https://github.com/wenyueivyxie/library-management-system/blob/main/Employee.java): `Employee.java`
- [Use request](https://github.com/wenyueivyxie/library-management-system/blob/main/UseRequest.java): `UseRequest.java`
- [Use purpose](https://github.com/wenyueivyxie/library-management-system/blob/main/UsePurpose.java): `UsePurpose.java`
- [Master librarian](https://github.com/wenyueivyxie/library-management-system/blob/main/MasterLibrarian.java): `MasterLibrarian.java`

### Other components

- **Library user**

## Connections

- Library user → Library interface: uses
- Startup → Inventory loader: loads (evidence: `Main.java`)
- Startup → Library interface: opens (evidence: `Main.java`)
- Startup → Inventory: initializes (evidence: `Main.java`)
- Library interface → Inventory table: creates (evidence: `LibraryGUI.java`)
- Library interface → Inventory: manages (evidence: `LibraryGUI.java`)
- Inventory table → Inventory: reads (evidence: `InventoryTable.java`)
- Inventory → Catalog item: stores (evidence: `Inventory.java`)
- Inventory → Reservations: tracks (evidence: `Inventory.java`)
- Inventory → Use request: tracks (evidence: `Inventory.java`)
- Inventory → Book: identifies (evidence: `Inventory.java`)
- Inventory → Audiobook: identifies (evidence: `Inventory.java`)
- Inventory → Magazine: identifies (evidence: `Inventory.java`)
- Inventory → Movie: identifies (evidence: `Inventory.java`)
- User accounts → Inventory: returns items (evidence: `User.java`)
- User accounts → Loans: creates (evidence: `User.java`)
- User accounts → Reservations: creates (evidence: `User.java`)
- Employee → Use request: submits (evidence: `Employee.java`)
- Employee → Inventory: records request (evidence: `Employee.java`)
- Master librarian → Inventory: approves changes (evidence: `MasterLibrarian.java`)
- Master librarian → Use request: approves or rejects (evidence: `MasterLibrarian.java`)
- Master librarian → Loans: creates (evidence: `MasterLibrarian.java`)
- Use request → Use purpose: specifies (evidence: `UseRequest.java`)
- Use request → Catalog item: concerns (evidence: `UseRequest.java`)
- Loans → Catalog item: records checkout (evidence: `Loan.java`)
- Book → Catalog item: extends (evidence: `Book.java`)
- Audiobook → Catalog item: extends (evidence: `AudioBook.java`)
- Magazine → Catalog item: extends (evidence: `Magazine.java`)
- Movie → Catalog item: extends (evidence: `Movie.java`)
