Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ§‘β€πŸ’» Coder Information

Field Detail
πŸ‘€ Name Samuel Monsalve Orrego
🧭 Clan Lovelace
πŸ“§ Mail samuel.monsalve.orrego@gmail.com
πŸͺͺ Document CC 1013458915

πŸ“š LibroNova - Library Management System

Java MySQL JDBC

A comprehensive desktop application for library management built with Java SE 17, featuring book catalog management, member registration, loan tracking, and CSV export capabilities.


πŸ“‹ Table of Contents


πŸš€ Features

πŸ“š Book Management

  • CRUD Operations: Add, view, update, and delete books
  • Advanced Search: Find books by title or author
  • ISBN Validation: Ensure unique ISBN numbers
  • Stock Control: Track total and available copies
  • CSV Export: Export complete book catalog

πŸ‘₯ Member Management

  • Member Registration: Add new library members
  • ID Validation: Unique identification number system
  • Status Management: Activate/deactivate members
  • Contact Info: Store email and phone details
  • CSV Export: Export member directory

πŸ”„ Loan Management

  • Loan Processing: Create book loans with validation
  • Return Handling: Manage returns and fine calculation
  • Transaction Safety: ACID-compliant loan operations
  • Status Tracking: Active, returned, and overdue loans
  • Loan Limits: Enforce per-member book limits

πŸ“Š Reporting & Analytics

  • Overdue Loans: Track and identify overdue books
  • Fine Calculation: Automated fine computation
  • CSV Reports: Export loan/overdue reports
  • Activity Logging: Full operational logging

πŸ—οΈ Architecture

System Design

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      VIEW       β”‚    β”‚   CONTROLLER    β”‚    β”‚     SERVICE     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   MenuView      β”‚    β”‚ BookController  β”‚    β”‚  BookService    β”‚
β”‚   BookView      β”‚β—„---β”‚MemberController β”‚β—„---β”‚ MemberService   β”‚
β”‚   MemberView    β”‚    β”‚ LoanController  β”‚    β”‚  LoanService    β”‚
β”‚   LoanView      β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜            β”‚                       β”‚
                               β–Ό                       β–Ό
                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                       β”‚       DAO       β”‚    β”‚     DOMAIN      β”‚
                       β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
                       β”‚  BookDAO        β”‚    β”‚     Book        β”‚
                       β”‚  MemberDAO      β”‚    β”‚     Member      β”‚
                       β”‚  LoanDAO        β”‚    β”‚     Loan        β”‚
                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Design Patterns

  • 🧩 MVC Architecture: Clear separation of concerns
  • πŸ—‚οΈ DAO Pattern: Abstracts database access
  • βš™οΈ Service Layer: Encapsulates business logic
  • πŸ“¦ DTO Pattern: Simplified data transfer

πŸ’» Installation

Prerequisites

  • β˜• Java JDK 17 or higher
  • πŸ›’οΈ MySQL Server 8.0+
  • πŸ”— MySQL Connector/J 8.0+

Step-by-Step Setup

  1. Clone the Repository

    git clone https://github.com/Samnmy/LibroNova.git
    cd LibroNova
  2. Configure Database Connection
    Edit the config.properties file:

    db.url=jdbc:mysql://localhost:3306/library_db
    db.user=your_username
    db.password=your_password
  3. Add MySQL Connector
    Download MySQL Connector/J
    Add it to your project classpath.

  4. Run the Application

    javac -cp ".:mysql-connector-java-8.0.xx.jar" app/Main.java
    java -cp ".:mysql-connector-java-8.0.xx.jar" app.Main

🎯 Usage

Starting the Application

public class Main {
    public static void main(String[] args) {
        DatabaseConfig.initializeDatabase();
        // Controllers and views auto-initialize
    }
}

Main Menu Options

πŸ“š Book Management: Add, search, update, delete, export
πŸ‘₯ Member Management: Register, view, update, deactivate, export
πŸ”„ Loan Management: Create, return, view, overdue, history
πŸ“Š Reports: Overdue loans and CSV reports


πŸ—„οΈ Database Schema

File: library_db.sql

  • books β€” book information
  • members β€” library members
  • loans β€” loan transactions
  • Includes foreign key relationships and constraints

🧩 Project Structure

LibroNova/
 β”œβ”€β”€ src/
 β”‚   β”œβ”€β”€ app/
 β”‚   β”‚   β”œβ”€β”€ Main.java
 β”‚   β”‚   └── TestConnection.java
 β”‚   β”œβ”€β”€ config/
 β”‚   β”‚   └── DatabaseConfig.java
 β”‚   β”œβ”€β”€ controller/
 β”‚   β”‚   β”œβ”€β”€ BookController.java
 β”‚   β”‚   β”œβ”€β”€ MemberController.java
 β”‚   β”‚   └── LoanController.java
 β”‚   β”œβ”€β”€ dao/
 β”‚   β”‚   β”œβ”€β”€ BookDAO.java
 β”‚   β”‚   β”œβ”€β”€ BookDAOJDBC.java
 β”‚   β”‚   β”œβ”€β”€ MemberDAO.java
 β”‚   β”‚   β”œβ”€β”€ MemberDAOJDBC.java
 β”‚   β”‚   β”œβ”€β”€ LoanDAO.java
 β”‚   β”‚   └── LoanDAOJDBC.java
 β”‚   β”œβ”€β”€ domain/
 β”‚   β”‚   β”œβ”€β”€ Book.java
 β”‚   β”‚   β”œβ”€β”€ Member.java
 β”‚   β”‚   └── Loan.java
 β”‚   β”œβ”€β”€ exceptions/
 β”‚   β”‚   └── BusinessException.java
 β”‚   β”œβ”€β”€ service/
 β”‚   β”‚   β”œβ”€β”€ BookService.java
 β”‚   β”‚   β”œβ”€β”€ MemberService.java
 β”‚   β”‚   └── LoanService.java
 β”‚   β”œβ”€β”€ util/
 β”‚   β”‚   β”œβ”€β”€ CSVExportUtil.java
 β”‚   β”‚   └── DateUtils.java
 β”‚   └── view/
 β”‚       β”œβ”€β”€ BookView.java
 β”‚       β”œβ”€β”€ MemberView.java
 β”‚       β”œβ”€β”€ LoanView.java
 β”‚       └── MenuView.java
 β”œβ”€β”€ export/
 β”œβ”€β”€ config.properties
 β”œβ”€β”€ library_db.sql
 └── README.md

πŸ§ͺ Testing

Running Tests

javac -cp ".:mysql-connector-java-8.0.xx.jar:junit-platform-console-standalone-1.9.0.jar" service/*Test.java
java -jar junit-platform-console-standalone-1.9.0.jar --class-path . --scan-class-path

Test Coverage

  • BookServiceTest: CRUD operations and validation
  • MemberServiceTest: Member management
  • LoanServiceTest: Loan logic and fines
  • DomainObjectsTest: Entity validation

βš™οΈ Configuration

Application Properties

# Database Configuration
db.url=jdbc:mysql://localhost:3306/library_db
db.user=root
db.password=your_password

# Business Rules
loan.days=14
fine.per.day=5.00
max.books.per.member=3

Logging Levels

  • INFO: General operations
  • WARNING: Business rule violations
  • SEVERE: Errors and exceptions
  • FINE: Debug information

πŸ“– API Documentation

BookService

public class BookService {
    public void addBook(Book book) throws BusinessException;
    public List<Book> getAllBooks();
    public Optional<Book> getBookByIsbn(String isbn);
    public void updateBook(Book book) throws BusinessException;
    public void deleteBook(Integer id) throws BusinessException;
    public boolean isBookAvailableForLoan(Integer bookId);
}

LoanService

public class LoanService {
    public void createLoan(Integer bookId, Integer memberId) throws BusinessException;
    public void returnLoan(Integer loanId) throws BusinessException;
    public List<Loan> getActiveLoans();
    public List<Loan> getOverdueLoans();
    public int countActiveLoansByMember(Integer memberId);
}

🀝 Contributing

We welcome contributions!

  1. Fork the repository
  2. Create a branch
    git checkout -b feature/AmazingFeature
  3. Commit your changes
    git commit -m "Add AmazingFeature"
  4. Push to the branch
    git push origin feature/AmazingFeature
  5. Open a Pull Request

πŸŽ‰ Acknowledgments

  • β˜• Built with Java SE 17
  • πŸ›’οΈ MySQL for data persistence
  • πŸ§ͺ JUnit 5 for testing
  • πŸ“˜ PlantUML for diagrams

Β© 2025 LibroNova Project β€” Developed with ❀️ by Samnmy

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages