واجهة Console / واجهة المسؤول
جزء من قسم Object Oriented Programming في رحلة C# على Coddy — الدرس 66 من 70.
التحدي
سهللنقم بإكمال نظام المكتبة الخاص بك عن طريق بناء واجهة وحدة تحكم (console interface) تجمع كل المكونات معاً! ستقوم بإنشاء واجهة مسؤول تعالج الأوامر لإدارة المكتبة - إضافة الكتب، تسجيل المستخدمين، معالجة عمليات الاستعارة، والبحث في الكتالوج.
ستستمر في البناء على هيكل مشروعك الحالي:
Book.cs: احتفظ بفئة Book معId،Title،Author،IsAvailable، وطرقBorrow()وReturn().User.cs: احتفظ بفئة User مع تتبع الاستعارة، وثابتMaxBooks، وCanBorrow()، وطرق إدارة الكتب المستعارة.Library.cs: احتفظ بفئة Library مع كل منطق الاستعارة وطرق بحث LINQ التي قمت ببنائها. أضف طريقة جديدةGetAllBooks()التي تعيد جميع الكتب في المكتبة، وGetAllUsers()التي تعيد جميع المستخدمين المسجلين.Program.cs: هذا هو المكان الذي تدب فيه الحياة في واجهة وحدة التحكم الخاصة بك! ستقوم ببناء معالج أوامر يقرأ الأوامر وينفذ عمليات المكتبة المناسبة. فكر في هذا كلوحة تحكم المسؤول لنظام المكتبة الخاص بك.
يجب أن تتعامل واجهة وحدة التحكم الخاصة بك مع هذه الأوامر:
ADD_BOOK|id|title|author- يضيف كتاباً جديداً ويطبعAdded: {Title}ADD_USER|name|memberId- يسجل مستخدماً جديداً ويطبعRegistered: {Name}BORROW|bookId|memberId- يعالج طلب استعارة (استخدم منطق BorrowBook الحالي لديك)RETURN|bookId|memberId- يعالج طلب إرجاع (استخدم منطق ReturnBook الحالي لديك)SEARCH|type|value- يبحث في الكتالوج حيث يكون النوعtitle، أوauthor، أوavailable، أوborrowedSTATUS- يطبع ملخصاً يوضح إجمالي الكتب، الكتب المتاحة، إجمالي المستخدمين، وإجمالي الكتب المستعارة
بالنسبة لأمر STATUS، اطبع الملخص بهذا التنسيق:
--- Library Status ---
Total Books: {count}
Available: {count}
Total Users: {count}
Books Borrowed: {count}بالنسبة لنتائج البحث، اطبع كل كتاب كـ {Title} by {Author} في سطر مستقل، أو No books found إذا كانت النتائج فارغة.
ستتلقى المدخلات التالية:
- اسم المكتبة
- عدد الأوامر المطلوب معالجتها
- كل أمر في سطر مستقل بالتنسيقات الموضحة أعلاه
على سبيل المثال، إذا كانت المدخلات هي:
Downtown Library
8
ADD_BOOK|B001|Clean Code|Robert Martin
ADD_BOOK|B002|The Pragmatic Programmer|David Thomas
ADD_USER|Alice|101
ADD_USER|Bob|102
BORROW|B001|101
SEARCH|available
BORROW|B002|102
STATUSيجب أن يكون المخرج:
Added: Clean Code
Added: The Pragmatic Programmer
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
The Pragmatic Programmer by David Thomas
Bob borrowed The Pragmatic Programmer
--- Library Status ---
Total Books: 2
Available: 0
Total Users: 2
Books Borrowed: 2تعمل واجهة وحدة التحكم الخاصة بك كالغراء الذي يربط مدخلات المستخدم بمكونات مكتبتك المنظمة جيداً. يفوض كل أمر إلى الطريقة المناسبة في فئة Library الخاصة بك، مما يوضح كيف يجعل التصميم النظيف (clean architecture) بناء واجهات المستخدم أمراً مباشراً!
جرّب بنفسك
using System;
using System.Collections.Generic;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// قراءة اسم المكتبة
string libraryName = Console.ReadLine();
// إنشاء مثيل (instance) من Library باستخدام اسم المكتبة
Library library = new Library(libraryName);
// قراءة عدد الأوامر
int numCommands = Convert.ToInt32(Console.ReadLine());
// معالجة كل أمر
for (int i = 0; i < numCommands; i++)
{
string commandLine = Console.ReadLine();
string[] parts = commandLine.Split('|');
string command = parts[0];
// TODO: معالجة الأمر ADD_BOOK
// التنسيق: ADD_BOOK|id|title|author
// طباعة: Added: {title}
// TODO: معالجة الأمر ADD_USER
// التنسيق: ADD_USER|name|memberId
// طباعة: Registered: {name}
// TODO: معالجة الأمر BORROW
// التنسيق: BORROW|bookId|memberId
// طباعة النتيجة من library.BorrowBook()
// TODO: معالجة الأمر RETURN
// التنسيق: RETURN|bookId|memberId
// طباعة النتيجة من library.ReturnBook()
// TODO: معالجة الأمر SEARCH
// التنسيق: SEARCH|type|value (يمكن أن يكون النوع title، author، available، borrowed)
// طباعة كل كتاب بتنسيق "{Title} by {Author}" أو "No books found"
// TODO: معالجة الأمر STATUS
// طباعة:
// --- Library Status ---
// Total Books: {count}
// Available: {count}
// Total Users: {count}
// Books Borrowed: {count}
}
}
}
}
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةNamespaces والتوجيهاتمقدمة في Classes و Objectsالكلمة المفتاحية 'this'Methods والمعاملاتFields مقابل PropertiesConstructorsObject Initializersمراجعة - آلة حاسبة بسيطة4الوراثة
صيغة الوراثة الأساسية (:)الكلمة المفتاحية 'base'الكلمات المفتاحية Virtual و Overrideالأصناف المختومة (Sealed Classes)الفئة الأساسية 'object'مراجعة - هيكلية الموظفين7ميزات متقدمة
تحميل العوامل (Operator Overloading)المفهرسات (Indexers (this[]))إعادة تعريف ()ToStringدوال التوسعة (Extension Methods)ملخص - Custom List2الخصائص والأعضاء الساكنة (Static Members)
الخصائص المطبقة تلقائيًا (Auto-Implemented Properties)خصائص القراءة فقط والكتابة فقطالحقول والدوال الساكنة (Static)الفئات الساكنة (Static Classes)الأعضاء ذات البنية التعبيرية (Expression-Bodied Members)5تعدد الأشكال والواجهات (Polymorphism & Interfaces)
تعدد الأشكال: وقت التجميع مقابل وقت التشغيلالواجهة مقابل الفئة المجردة (Abstract Class)الواجهات المتعددةالواجهات الصريحةUpcasting و Downcastingملخص - حاسبة الأشكال8مفاهيم البرمجة كائنية التوجه (OOP) المتقدمة
التركيب بدلاً من الوراثةالـ Generics (الأصناف والدوال)الـ Delegates والأحداثالـ Attributes والـ Reflectionواجهة IDisposable وجملة usingأساسيات Dependency Injection3بنية الكلاسات
بيانات الـ Instance مقابل البيانات الـ Staticالكلمات المفتاحية 'readonly' و 'const'الحقول الخلفية (Backing Fields)مراجعة - مدير الحساب البنكي6التغليف
معدلات الوصولالخصائص من أجل التغليفتنفيذ إخفاء البياناتأنماط عدم القابلية للتغييرمراجعة - سجلات الطلاب12مشروع: نظام المكتبة
هيكلة المشروعنماذج الكتاب والمستخدم