← BACK

LibraryManagementSystem-CSharp

A console-based Library Management System in C# (.NET) showcasing core OOP principles, clean architecture, and polymorphic search.

C# ⭐ 0

README (6).md

██╗     ██╗██████╗ ██████╗  █████╗ ██████╗ ██╗   ██╗
██║     ██║██╔══██╗██╔══██╗██╔══██╗██╔══██╗╚██╗ ██╔╝
██║     ██║██████╔╝██████╔╝███████║██████╔╝ ╚████╔╝ 
██║     ██║██╔══██╗██╔══██╗██╔══██║██╔══██╗  ╚██╔╝  
███████╗██║██████╔╝██║  ██║██║  ██║██║  ██║   ██║   
╚══════╝╚═╝╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝   ╚═╝   
    ███╗   ███╗ █████╗ ███╗   ██╗ █████╗  ██████╗ ███████╗██████╗ 
    ████╗ ████║██╔══██╗████╗  ██║██╔══██╗██╔════╝ ██╔════╝██╔══██╗
    ██╔████╔██║███████║██╔██╗ ██║███████║██║  ███╗█████╗  ██████╔╝
    ██║╚██╔╝██║██╔══██║██║╚██╗██║██╔══██║██║   ██║██╔══╝  ██╔══██╗
    ██║ ╚═╝ ██║██║  ██║██║ ╚████║██║  ██║╚██████╔╝███████╗██║  ██║
    ╚═╝     ╚═╝╚═╝  ╚═╝╚═╝  ╚═══╝╚═╝  ╚═╝ ╚═════╝ ╚══════╝╚═╝  ╚═╝

📚 C# OOP Sprint Project — Inheritance × Interfaces × Polymorphism × Exception Handling 📚

Visual Studio Community  •  .NET  •  Console App  •  Sprint 1

Language
Type
Pattern
Status


⚡ إيه المشروع ده؟

نظام إدارة مكتبة كامل شغال بالكونسول، بيدمج كل مفاهيم الـ OOP في تطبيق واحد حقيقي بدل تمارين منفصلة:

Abstraction • Inheritance • Polymorphism • Encapsulation • Interfaces • Exception Handling

الأمين (Librarian) بيقدر يضيف كتب وأعضاء، يستعير ويرجع كتب، يبحث في الكتالوج، يشوف الكتب المتاحة، يراجع سجل استعارة أي عضو، ويطلع تقرير بالكتب المتأخرة — كل ده وهو محمي بـ try/catch من أي مدخل غلط.


🧬 هيكل الكلاسات

┌──────────────────────────────────────────────────────────┐
│                     ISearchable  «interface»              │
│                  bool MatchesQuery(string query)          │
└───────────────┬────────────────────────────┬──────────────┘
                 │ implements                 │ implements
                 ▼                            ▼
      ┌─────────────────────┐        ┌─────────────────┐
      │   LibraryItem        │        │     Member       │
      │   «abstract»         │        │───────────────────│
      │───────────────────────│        │ Id, Name, Email   │
      │ Id, Title, AddedDate  │        │ JoinDate           │
      │ + GetInfo() : abstract│        │ Book[] BorrowedBooks│
      └──────────┬────────────┘        └─────────┬─────────┘
                 │ inherits                       │ inherits
                 ▼                                ▼
         ┌───────────────┐              ┌─────────────────────┐
         │      Book      │              │    PremiumMember     │
         │─────────────────│              │───────────────────────│
         │ Author, Year    │              │ MaxBorrowLimit = 10   │
         │ Genre           │              │ LoanDays = 30         │
         │ IsAvailable     │              │ + GetInfo()            │
         │ + GetInfo()     │              └─────────────────────┘
         │ + MarkAsBorrowed│
         │ + MarkAsReturned│
         └────────┬────────┘
                  │ referenced by
                  ▼
         ┌─────────────────────┐
         │     BorrowRecord      │
         │───────────────────────│
         │ Book, Member            │
         │ BorrowDate, ReturnDate? │
         │ + IsLate() : bool       │
         └─────────────────────┘
                  ▲
                  │ manages all of the above
         ┌─────────────────────┐
         │       Library          │
         │  «Service / Business    │
         │      Logic Layer»       │
         └─────────────────────┘

🔑 كل كلاس ودوره

الكلاس النوع مسؤوليته
ISearchable Interface عقد واحد: MatchesQuery() — بيوحّد البحث بين Book وMember من غير ما تعرف نوعهم
LibraryItem Abstract Class جذر الوراثة، بيحمل الخصائص المشتركة (Id, Title, AddedDate)
Book يرث من LibraryItem، ينفذ ISearchable كتاب حقيقي: مؤلف، سنة، نوع، وحالة الإتاحة
Member ينفذ ISearchable عضو مسجل، بيحمل مصفوفة الكتب المستعارة حاليًا
PremiumMember يرث من Member عضو مميز بحد استعارة وفترة سماح أطول
BorrowRecord Data Class يربط كتاب بعضو، وبيحسب هل الاستعارة متأخرة
Library Service Class المخ المدبر — كل العمليات والـ business logic هنا

⚙️ العمليات الثمانية (Library Methods)

+ AddBook(title, author, year, genre)      → إضافة كتاب + Id تلقائي
+ AddMember(name, email, isPremium)        → تسجيل عضو عادي أو Premium
+ BorrowBook(bookId, memberId)             → استعارة + exception لو مش متاح
+ ReturnBook(bookId)                       → إرجاع + تحديث حالة الكتاب
+ Search(query)                            → بحث موحّد في الكتب والأعضاء
+ GetAvailableBooks()                      → كل الكتب المتاحة حاليًا
+ GetMemberHistory(id)                     → سجل استعارة عضو معيّن
+ GetLateReturns()                         → تقرير الاستعارات المتأخرة (+14 يوم)

🛡️ إدارة الأخطاء

كل عملية حساسة (استعارة، إرجاع) بترمي Exception بدل ما تكسر البرنامج:

الحالة الرسالة
الكتاب مش موجود Book not found
الكتاب مستعار بالفعل Book is already borrowed
العضو مش موجود Member not found
إرجاع كتاب مش مستعار Book was not borrowed

كل ده متمسوك من Program.cs بـ try/catch، فأي مدخل غلط بيطلع رسالة واضحة مش Crash.


🛠️ شغال بإيه

🧠 اللغة 🖥️ IDE 📦 النوع 🏗️ الـ Pattern
C# (.NET) Visual Studio Community Console App OOP

🚀 تشغيل سريع

1️⃣  افتح المشروع بـ Visual Studio Community
2️⃣  تأكد إن Program.cs هو الـ Startup Object
3️⃣  دوس F5 ▶️
4️⃣  اختار رقم من 1 لـ 9 من القائمة

📁 هيكل الملفات

📦 LibraryManagementSystem
 ┣ 📂 Interfaces
 ┃ ┗ 📜 ISearchable.cs
 ┣ 📂 Models
 ┃ ┣ 📜 LibraryItem.cs      ← abstract base class
 ┃ ┣ 📜 Book.cs             ← inherits LibraryItem, implements ISearchable
 ┃ ┣ 📜 Member.cs           ← implements ISearchable
 ┃ ┣ 📜 PremiumMember.cs    ← inherits Member
 ┃ ┗ 📜 BorrowRecord.cs
 ┣ 📂 Services
 ┃ ┗ 📜 Library.cs          ← كل الـ business logic
 ┣ 📜 Program.cs             ← القائمة الرئيسية + الـ I/O
 ┗ 📜 README.md              ← إنت هنا 👋


👨‍🎓 حمزة أحمد حسن إسماعيل

بإشراف د. علي علي سطوحي — Full-Stack .NET Training Program

Sprint 1 — Library Management System — OOP Fundamentals in C#

⭐⭐⭐