Personal project · 2025
University Library System
A university library system built in Java, with different borrowing rules for each type of user and no database behind it.
Distinction Grade (80%)
Marked at 80 percent, a First-Class grade, for the architecture, the clean code, and the documentation.
Java · OOP · JUnit · File I/O
The problem
The module asked for a full library system with different rules for each type of user, students, children, and adults, built without a database.
What I built
I designed it as a Java MVC app where books and users share common base classes, borrowing limits are enforced per role, and everything saves to CSV files through a loader I wrote myself.
What it does
- Classic MVC Design. Books and users share abstract base classes, and every screen talks to the model through a controller.
- Different Rules Per Role. Adults can borrow ten items, children three, and the system enforces it, suspensions included.
- No Database Needed. Everything saves to CSV files through a loader I wrote myself.
- Properly Tested. JUnit tests cover the core logic, and end-to-end tests walk the full user flows.
Gallery

Class Hierarchy
| Base Class | Subclasses | Key Responsibilities |
|---|---|---|
| Product (Abstract) | Book, CD, DVD, Audiobook | Stores metadata (ISBN, Title), manages loan status |
| User (Abstract) | Student, ChildUser, AdultUser | Manages personal info, active loans, and permissions |
| Loan | N/A | Links Users to Products, tracks due dates and fines |
Testing Verification
| Test Type | Scope | Key Scenarios Verified |
|---|---|---|
| Functional | End-to-End User Flows | Login, Product Visibility (DVDs hidden for Students), Error Handling |
| Unit (JUnit) | Core Business Logic | Borrowing Limits (10/5/3), Guardian Assignment, ID Uniqueness |
| Regression | Bug Fix Verification | Loan state consistency between Controller and User classes |
The full engineering is on GitHub.