1) Project Overview

1.1 Goal

Build a menu-driven C# Console Application that manages a small library:

  • Register students
  • Register books
  • Issue books to students
  • Return books
  • Calculate fine for late returns

1.2 Target Platform

  • .NET 9 Console App
  • EF Core 8
  • SQL Server (LocalDB / Express / Full)

2) Modules & Features (Functional Scope)

Main Menu (Top Level)

  1. Student Registration
  2. Book Registration
  3. Book Issue Details
  4. Book Return Details
  5. Fine Calculation
  6. Exit

3) Detailed Module Scope

Module 1: Student Registration

Features

  • List Students (ListView)
  • Add Student
  • Edit Student
  • Delete Student
  • Navigation:
    • Return to Previous Menu (Module Menu)
    • Return to Main Menu

Student Fields

  • StudentId (unique, e.g., S1001)
  • FullName
  • Department / Class
  • Phone
  • Email
  • IsActive (true/false)
  • CreatedOn

Rules

  • StudentId must be unique
  • Phone numeric + length validation
  • Email basic validation
  • Cannot delete a student if they have active issued books (not returned)

Module 2: Book Registration

Features

  • List Books
  • Add Book
  • Edit Book
  • Delete Book
  • Navigation options

Book Fields

  • BookId (unique, e.g., B2001)
  • Title
  • Author
  • Category
  • Publisher
  • Year (optional)
  • TotalCopies
  • AvailableCopies
  • IsActive
  • CreatedOn

Rules

  • BookId unique
  • TotalCopies >= 1
  • AvailableCopies <= TotalCopies
  • Cannot delete a book if it is currently issued (AvailableCopies < TotalCopies)

Module 3: Book Issue Details

Features

  • List Issued Books (active + history filters optional)
  • Issue Book (Add Issue)
  • Edit Issue (allow updating DueDate only OR fixing mistakes)
  • Delete Issue (cancel issue record)
  • Navigation options

Issue Fields

  • IssueId (unique, I3001)
  • StudentId (must exist)
  • BookId (must exist)
  • IssueDate
  • DueDate
  • IssuedBy (optional)
  • Status: Issued / Returned

Rules

  • A book can be issued only if AvailableCopies > 0
  • Student must be active
  • Default DueDate rule:
    • DueDate = IssueDate + 14 days (configurable)
  • Optional: MaxBooksPerStudent (e.g., 3)

Module 4: Book Return Details

Features

  • List Returns
  • Add Return (Return a book against an IssueId)
  • Edit Return (fix return date)
  • Delete Return Record (only if admin scenario)
  • Navigation options

Return Fields

  • ReturnId (unique, R4001)
  • IssueId (must exist and must be currently Issued)
  • ReturnDate
  • FineAmount (calculated)
  • Remarks (optional)

Rules

  • When a return happens:
    • Issue.Status becomes Returned
    • Book.AvailableCopies increases by 1
  • ReturnDate cannot be earlier than IssueDate

Module 5: Fine Calculation

Features

  • Calculate Fine for a given IssueId
  • List Overdue Items (active issues with due date passed)
  • List Fine Report (returns with fine)
  • Optional: configure fine rate

Fine Rules (Core Requirement)

  • Fine depends on DueDate and ReturnDate
  • Fine Per Day (default): ₹5/day (configurable)
  • Formula:

If returned late:

  • LateDays = (ReturnDate - DueDate).Days
  • Fine = LateDays * FinePerDay

If returned on/before due date:

  • Fine = 0

Note: If user wants fine calculation “today” for not-yet-returned books:

  • use EffectiveReturnDate = Today

4) Console Navigation Design (Menus)

Global Navigation Standard (Best Practice)

Every “screen” shows:

  • B = Back (Previous Menu)
  • M = Main Menu
  • 0 = Exit (optional everywhere)

Example Menu Tree

  • Main Menu
    • Student Module Menu
      • List
      • Add
      • Edit
      • Delete
      • Back to Main
    • Book Module Menu
    • Issue Module Menu
    • Return Module Menu
    • Fine Module Menu

5) Data Model (Entities)

Student

public class Student {
    public string StudentId { get; set; } = "";
    public string FullName { get; set; } = "";
    public string Department { get; set; } = "";
    public string Phone { get; set; } = "";
    public string Email { get; set; } = "";
    public bool IsActive { get; set; } = true;
    public DateTime CreatedOn { get; set; } = DateTime.Now;
}

Book

public class Book {
    public string BookId { get; set; } = "";
    public string Title { get; set; } = "";
    public string Author { get; set; } = "";
    public string Category { get; set; } = "";
    public int TotalCopies { get; set; }
    public int AvailableCopies { get; set; }
    public bool IsActive { get; set; } = true;
    public DateTime CreatedOn { get; set; } = DateTime.Now;
}

IssueRecord

public class IssueRecord {
    public string IssueId { get; set; } = "";
    public string StudentId { get; set; } = "";
    public string BookId { get; set; } = "";
    public DateTime IssueDate { get; set; }
    public DateTime DueDate { get; set; }
    public string Status { get; set; } = "Issued"; // Issued/Returned
}

ReturnRecord

public class ReturnRecord {
    public string ReturnId { get; set; } = "";
    public string IssueId { get; set; } = "";
    public DateTime ReturnDate { get; set; }
    public decimal FineAmount { get; set; }
    public string Remarks { get; set; } = "";
}

AppSettings (Fine & Due Days)

public class AppSettings {
    public int DefaultDueDays { get; set; } = 14;
    public decimal FinePerDay { get; set; } = 5m;
    public int MaxBooksPerStudent { get; set; } = 3;
}

 

6) Core Workflows (Step-by-step)

6.1 Issue Book Workflow

  1. Select StudentId → validate exists & active
  2. Select BookId → validate exists, active, AvailableCopies > 0
  3. Check student active issues count < MaxBooksPerStudent
  4. Create IssueRecord:
    • IssueDate = input (default Today)
    • DueDate = IssueDate + DefaultDueDays
  5. Update Book.AvailableCopies -= 1
  6. Save changes

6.2 Return Book Workflow

  1. Input IssueId
  2. Validate Issue exists and Status == “Issued”
  3. Input ReturnDate (default Today)
  4. Calculate Fine:
    • if ReturnDate > DueDate → LateDays * FinePerDay
  5. Create ReturnRecord
  6. Mark Issue.Status = “Returned”
  7. Update Book.AvailableCopies += 1
  8. Save

7) Fine Calculation Algorithm

public static decimal CalculateFine(DateTime dueDate, DateTime returnDate, decimal finePerDay)
{
    if (returnDate.Date <= dueDate.Date) return 0m;
    var lateDays = (returnDate.Date - dueDate.Date).Days;
    return lateDays * finePerDay;
}

8) Implementation Architecture

Layers

  • Models: Student, Book, IssueRecord, ReturnRecord, AppSettings
  • Repositories (file operations): load/save JSON
  • Services (business rules):
    • StudentService
    • BookService
    • IssueService
    • ReturnService
    • FineService
  • UI Menus (Console screens):
    • MainMenu
    • StudentMenu
    • BookMenu
    • IssueMenu
    • ReturnMenu
    • FineMenu

9) Project Folder Structure

LibraryManagementSystem/
  Program.cs
  Models/
    Student.cs
    Book.cs
    IssueRecord.cs
    ReturnRecord.cs
    AppSettings.cs
  Data/
    JsonStore.cs
    DataContext.cs
  Services/
    StudentService.cs
    BookService.cs
    IssueService.cs
    ReturnService.cs
    FineService.cs
  UI/
    MenuNavigator.cs
    MainMenu.cs
    StudentMenu.cs
    BookMenu.cs
    IssueMenu.cs
    ReturnMenu.cs
    FineMenu.cs
  Helpers/
    ConsoleInput.cs
    Validators.cs

Why Services?

UI should not contain SQL/EF logic. UI calls services; services use DbContext.



  •  

11) Validations Checklist

  • IDs must exist before editing/deleting
  • Dates must parse correctly
  • Cannot issue if book has zero available copies
  • Cannot return if issue already returned
  • Cannot delete active issued student/book
  • DueDate must be >= IssueDate
  • ReturnDate must be >= IssueDate

12) Test Scenarios (Minimum)

  1. Add student → list → edit → delete
  2. Add book with 2 copies → issue twice → third issue must fail
  3. Issue book → return before due date → fine 0
  4. Issue book → return after due date → fine correct
  5. Delete student with active issue → should block
  6. Delete book currently issued → should block
  7. Return same issue twice → should block

13) Deliverables (What you will produce)

  1. SQL Server DB created via EF migrations

  2. EF Core entities + DbContext + configurations

  3. CRUD for Students/Books/Issues/Returns using EF Core

  4. Transaction-safe Issue/Return workflows

  5. Fine calculation + overdue/fine reports

  6. Console UI menus with navigation (Back/Main)