Programming Basics SQL HTML CSS JavaScript Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Learn Typing

تحديات برمجيةالتحدي الأول - الحل بلغة C#

فكرة المشروع

لنفترض أننا نريد إنشاء برنامج الهدف منه تخزين مجموعة كتب و من ثم عرضها بشكل مرتب.
البيانات التي نريد تخزينها هي التالية:

  • المؤلفين: بيانات كل مؤلف ستتضمن (رقم تعرفة, الإسم الكامل, الهاتف, البريد الإلكتروني).
  • الكتب: بيانات كل كتاب ستتضمن (رقم تعرفة, العنوان, تاريخ النشر, رقم الإصدار, مؤلف الكتاب).

ملاحظة: رقم التعرفة لكل من المؤلفين و الكتب يجب أن يتم إعطاؤه لهم بشكل تلقائي.


الشكل العام لأقسام المشروع


شرح أقسام المشروع

Author يمثل أي مؤلف يتم إنشاؤه.
Book يمثل أي كتاب يتم إنشاؤه.
Library سيحتوي على كل المؤلفين و الكتب و الدوال التي تسمح بإضافة و حذف مؤلف و كتب.
add_author(): مهمتها إضافة مؤلف جديد.
remove_author(): مهمتها حذف مؤلف من خلال id المؤلف الذي نمرره لها عند استدعائها.
print_author(): مهمتها عرض كل معلومات المؤلف من خلال id المؤلف الذي نمرره لها عند استدعائها.
print_author_books(): مهمتها عرض إسم المؤلف و أسماء كتبه من خلال id المؤلف الذي نمرره لها عند استدعائها.
add_book(): مهمتها إضافة كتاب جديد.
remove_book(): مهمتها حذف كتاب من خلال id الكتاب الذي نمرره لها عند استدعائها.
print_book(): مهمتها عرض كل معلومات الكتاب و إسم مؤلفه من خلال id الكتاب الذي نمرره لها عند استدعائها.

قم بتحويل الرسم إلى كود. ثم قم بإنشاء مجموعة كتب و مؤلفين. و قم بتجربة جميع الدوال في البرنامج.


معلومة

لإعطاء رقم id موحد لكل كائن يتم إنشاؤه, يمكنك تعريف متغير ثابت ( static ) في الكلاس و جعله أيضاً private حتى لا يمكن تعديل قيمته بشكل يدوي من خارج هذا الكلاس. بعدها تقوم فقط بجعل قيمته تزيد 1 كلما قمت بإنشاء كائن من هذا الكلاس و من ثم تضع قيمته في المتغير id.

ملاحظة: سنقوم بإنشاء متغير نوعه private static إسمه idIncrementer في الكلاس Author و الكلاس Book من أجل هذا الهدف فقط.


الحل بلغة #C

Author.cs
class Author
{
// هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها المؤلف
public int Id { get; }
public string Name { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
// لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
// لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
private static int idIncrementer = 0;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
// id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
// الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
public Author(string name, string phone, string email)
{
idIncrementer++;
this.Id = idIncrementer;
this.Name = name;
this.Phone = phone;
this.Email = email;
}
}
class Author { // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها المؤلف public int Id { get; } public string Name { get; set; } public string Phone { get; set; } public string Email { get; set; } // لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير // لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر private static int idIncrementer = 0; // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر // id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة // الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن public Author(string name, string phone, string email) { idIncrementer++; this.Id = idIncrementer; this.Name = name; this.Phone = phone; this.Email = email; } }

Book.cs
class Book
{
// هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها الكتاب
public int Id { get; }
public string Title { get; set; }
public string PublishingDate { get; set; }
public int Version { get; set; }
public Author Author { get; set; }
// لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
// لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
private static int idIncrementer = 0;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
// id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
// الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
public Book(string title, string publishingDate, int version, Author author)
{
idIncrementer++;
this.Id = idIncrementer;
this.Title = title;
this.PublishingDate = publishingDate;
this.Version = version;
this.Author = author;
}
}
class Book { // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها الكتاب public int Id { get; } public string Title { get; set; } public string PublishingDate { get; set; } public int Version { get; set; } public Author Author { get; set; } // لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير // لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر private static int idIncrementer = 0; // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر // id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة // الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن public Book(string title, string publishingDate, int version, Author author) { idIncrementer++; this.Id = idIncrementer; this.Title = title; this.PublishingDate = publishingDate; this.Version = version; this.Author = author; } }

Library.cs
using System;
using System.Collections.Generic;
// يمثل كل ما تحتويه المكتبة من كتب و مؤلفين و الدوال التي يمكن استخدامها للتعامل معهم Library الكلاس
class Library
{
// سنضع فيه كل معلومات الكتب Books سنضع فيه كل معلومات المؤلفين, و الكائن Authors الكائن
public List<Author> Authors { get; set; }
public List<Book> Books { get; set; }
public Library()
{
Authors = new List<Author>();
Books = new List<Book>();
}
// Authors بداخل المصفوفة Author يمكن استخدامها لإضافة كائن من الكلاس AddAuthor() الدالة
public void AddAuthor(Author author)
{
Authors.Add(author);
}
// الخاص به Id بالإعتماد على رقم الـ Authors موضوع بداخل المصفوفة Author يمكن استخدامها لإلغاء كائن من الكلاس RemoveAuthor() الدالة
public void RemoveAuthor(int id)
{
// author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Authors بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Author author in Authors)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة Id يملك نفس رقم الـ author في حال كان الكائن
if (author.Id == id)
{
Authors.Remove(author);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Authors في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Author with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به Id بالإعتماد على رقم الـ Authors يمكن استخدامها لطباعة كل المعلومات المتوفرة حول مؤلف موضوع بداخل المصفوفة printAuthor() الدالة
public void PrintAuthor(int id)
{
// author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Authors بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Author author in Authors)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة Id يملك نفس رقم الـ author في حال كان الكائن
if (author.Id == id)
{
Console.WriteLine("Author with id " + id + " info.");
Console.WriteLine("Name: " + author.Name);
Console.WriteLine("Phone: " + author.Phone);
Console.WriteLine("Email: " + author.Email);
Console.WriteLine("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Authors في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Author with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ Authors يمكن استخدامها لطباعة كل أسماء الكتب التي قام بتأليفها مؤلف موضوع بداخل المصفوفة PrintAuthorBooks() الدالة
public void PrintAuthorBooks(int id)
{
// الذي تم تمريره للدالة Id يملك رقم الـ Authors بهدف التأكد ما إن كان يوجد كاتب في المصفوفة isAuthorExist سنستخدم المتغير
// من إعداد هذا الكاتب لأن ذلك سيكون غير منطقي Books لأنه إن لم يكن هناك كاتب أصلاً فلن نقوم بالبحث عن كتب في المصفوفة
bool isAuthorExist = false;
String authorName = "";
// author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Authors هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Author author in Authors)
{
// authorName الذي مررناه للدالة سيتم تخزين إسم المؤلف في المتغير Id يملك نفس رقم الـ author في حال كان الكائن
// Authors و إيقاف الحلقة لأننا تأكدنا أن هذا المؤلف موجود في المصفوفة true إلى isAuthorExist و من ثم تغيير قيمة
if (author.Id == id)
{
isAuthorExist = true;
authorName = author.Name;
break;
}
}
// Authors فهذا يعني أنه لم يتم إيجاد أي كائن في المصفوفة false تساوي isAuthorExist في حال بقيت قيمة
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية و الخروج من الدالة Id يملك نفس رقم الـ
if (!isAuthorExist)
{
Console.WriteLine("Author with id " + id + " is not found!");
Console.WriteLine("----------------------");
return;
}
// هنا سيتم طباعة إسم المؤلف
Console.WriteLine("Books of author " + authorName + ":");
// book و كل كائن نمر عليه ( و الذي يمثل كتاب ) سنضعه بشكل مؤقته بداخل الكائن Books هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Book book in Books)
{
// الذي تم تمريره Id يملك نفس رقم الـ book ( أي المؤلف ) الموضوع في الكائن author في حال كان الكائن
// و بالتالي سيتم طباعة إسم هذا الكتاب book للدالة فهذا يعني أنه هو مؤلف الكتاب الحالي المخزن في الكائن
if (book.Author.Id == id)
{
Console.WriteLine("- " + book.Title);
}
}
Console.WriteLine("----------------------");
}
// Books بداخل المصفوفة Book يمكن استخدامها لإضافة كائن من الكلاس AddBook() الدالة
public void AddBook(Book book)
{
Books.Add(book);
}
// الخاص به Id بالإعتماد على رقم الـ Books موضوع بداخل المصفوفة Book يمكن استخدامها لإلغاء كائن من الكلاس RemoveBook() الدالة
public void RemoveBook(int id)
{
// book و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Books بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Book book in Books)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة Id يملك نفس رقم الـ book في حال كان الكائن
if (book.Id == id)
{
Books.Remove(book);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Books في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Book with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به Id بالإعتماد على رقم الـ Books يمكن استخدامها لطباعة كل المعلومات المتوفرة حول كتاب موضوع بداخل المصفوفة printBook() الدالة
public void PrintBook(int id)
{
// book و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Books بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Book book in Books)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة Id يملك نفس رقم الـ book في حال كان الكائن
if (book.Id == id)
{
Console.WriteLine("Book with id " + id + " info.");
Console.WriteLine("Title: " + book.Title);
Console.WriteLine("Version: " + book.Version);
Console.WriteLine("Publishing date: " + book.PublishingDate);
Console.WriteLine("author in " + book.Author.Name);
Console.WriteLine("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Books في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Book with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
}
using System; using System.Collections.Generic; // يمثل كل ما تحتويه المكتبة من كتب و مؤلفين و الدوال التي يمكن استخدامها للتعامل معهم Library الكلاس class Library { // سنضع فيه كل معلومات الكتب Books سنضع فيه كل معلومات المؤلفين, و الكائن Authors الكائن public List<Author> Authors { get; set; } public List<Book> Books { get; set; } public Library() { Authors = new List<Author>(); Books = new List<Book>(); } // Authors بداخل المصفوفة Author يمكن استخدامها لإضافة كائن من الكلاس AddAuthor() الدالة public void AddAuthor(Author author) { Authors.Add(author); } // الخاص به Id بالإعتماد على رقم الـ Authors موضوع بداخل المصفوفة Author يمكن استخدامها لإلغاء كائن من الكلاس RemoveAuthor() الدالة public void RemoveAuthor(int id) { // author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Authors بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة foreach (Author author in Authors) { // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة Id يملك نفس رقم الـ author في حال كان الكائن if (author.Id == id) { Authors.Remove(author); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Authors في حال لم يتم إيجاد أي كائن في المصفوفة Console.WriteLine("Author with id " + id + " is not found!"); Console.WriteLine("----------------------"); } // الخاص به Id بالإعتماد على رقم الـ Authors يمكن استخدامها لطباعة كل المعلومات المتوفرة حول مؤلف موضوع بداخل المصفوفة printAuthor() الدالة public void PrintAuthor(int id) { // author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Authors بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة foreach (Author author in Authors) { // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة Id يملك نفس رقم الـ author في حال كان الكائن if (author.Id == id) { Console.WriteLine("Author with id " + id + " info."); Console.WriteLine("Name: " + author.Name); Console.WriteLine("Phone: " + author.Phone); Console.WriteLine("Email: " + author.Email); Console.WriteLine("----------------------"); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Authors في حال لم يتم إيجاد أي كائن في المصفوفة Console.WriteLine("Author with id " + id + " is not found!"); Console.WriteLine("----------------------"); } // الخاص به id بالإعتماد على رقم الـ Authors يمكن استخدامها لطباعة كل أسماء الكتب التي قام بتأليفها مؤلف موضوع بداخل المصفوفة PrintAuthorBooks() الدالة public void PrintAuthorBooks(int id) { // الذي تم تمريره للدالة Id يملك رقم الـ Authors بهدف التأكد ما إن كان يوجد كاتب في المصفوفة isAuthorExist سنستخدم المتغير // من إعداد هذا الكاتب لأن ذلك سيكون غير منطقي Books لأنه إن لم يكن هناك كاتب أصلاً فلن نقوم بالبحث عن كتب في المصفوفة bool isAuthorExist = false; String authorName = ""; // author و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Authors هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة foreach (Author author in Authors) { // authorName الذي مررناه للدالة سيتم تخزين إسم المؤلف في المتغير Id يملك نفس رقم الـ author في حال كان الكائن // Authors و إيقاف الحلقة لأننا تأكدنا أن هذا المؤلف موجود في المصفوفة true إلى isAuthorExist و من ثم تغيير قيمة if (author.Id == id) { isAuthorExist = true; authorName = author.Name; break; } } // Authors فهذا يعني أنه لم يتم إيجاد أي كائن في المصفوفة false تساوي isAuthorExist في حال بقيت قيمة // الذي تم تمريره للدالة سيتم طباعة الجملة التالية و الخروج من الدالة Id يملك نفس رقم الـ if (!isAuthorExist) { Console.WriteLine("Author with id " + id + " is not found!"); Console.WriteLine("----------------------"); return; } // هنا سيتم طباعة إسم المؤلف Console.WriteLine("Books of author " + authorName + ":"); // book و كل كائن نمر عليه ( و الذي يمثل كتاب ) سنضعه بشكل مؤقته بداخل الكائن Books هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة foreach (Book book in Books) { // الذي تم تمريره Id يملك نفس رقم الـ book ( أي المؤلف ) الموضوع في الكائن author في حال كان الكائن // و بالتالي سيتم طباعة إسم هذا الكتاب book للدالة فهذا يعني أنه هو مؤلف الكتاب الحالي المخزن في الكائن if (book.Author.Id == id) { Console.WriteLine("- " + book.Title); } } Console.WriteLine("----------------------"); } // Books بداخل المصفوفة Book يمكن استخدامها لإضافة كائن من الكلاس AddBook() الدالة public void AddBook(Book book) { Books.Add(book); } // الخاص به Id بالإعتماد على رقم الـ Books موضوع بداخل المصفوفة Book يمكن استخدامها لإلغاء كائن من الكلاس RemoveBook() الدالة public void RemoveBook(int id) { // book و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Books بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة foreach (Book book in Books) { // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة Id يملك نفس رقم الـ book في حال كان الكائن if (book.Id == id) { Books.Remove(book); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Books في حال لم يتم إيجاد أي كائن في المصفوفة Console.WriteLine("Book with id " + id + " is not found!"); Console.WriteLine("----------------------"); } // الخاص به Id بالإعتماد على رقم الـ Books يمكن استخدامها لطباعة كل المعلومات المتوفرة حول كتاب موضوع بداخل المصفوفة printBook() الدالة public void PrintBook(int id) { // book و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Books بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة foreach (Book book in Books) { // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة Id يملك نفس رقم الـ book في حال كان الكائن if (book.Id == id) { Console.WriteLine("Book with id " + id + " info."); Console.WriteLine("Title: " + book.Title); Console.WriteLine("Version: " + book.Version); Console.WriteLine("Publishing date: " + book.PublishingDate); Console.WriteLine("author in " + book.Author.Name); Console.WriteLine("----------------------"); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية Id يملك نفس رقم الـ Books في حال لم يتم إيجاد أي كائن في المصفوفة Console.WriteLine("Book with id " + id + " is not found!"); Console.WriteLine("----------------------"); } }

Program.cs
using System;
class Program
{
static void Main(string[] args)
{
// أي كأننا قمنا بإنشاء 3 مؤلفين Author هنا قمنا بإنشاء 3 كائنات من الكلاس
Author author1 = new Author("Mhamad", "+96170123456", "mhamad@gmail.com");
Author author2 = new Author("Salem", "+9664021833", "salem@gmail.com");
Author author3 = new Author("Rola", "+9631249392", "rola@gmail.com");
// أي كأننا قمنا بإنشاء 4 كتب Book هنا قمنا بإنشاء 4 كائنات من الكلاس
// Book وضعناه لكائنين من الكلاس author1 لاحظ أننا وضعنا الثلاث مؤلفين بداخل الكتب التي أنشأناها. و لاحظ أن الكائن
// book2 و book1 يعتبر مؤلف الكتابين اللذين يمثلهما الكائنين author1 إذاً المؤلف الذي يمثله الكائن
Book book1 = new Book("Learn Java", "12-20-2019", 1, author1);
Book book2 = new Book("Learn HTML", "8-5-2018", 3, author1);
Book book3 = new Book("PHP for beginners", "10-2-2019", 1, author2);
Book book4 = new Book("C# for dummies", "12-20-2019", 1, author3);
// لأننا نريد تخزين الكتب و المؤلفين بشكل مرتب بداخله Library هنا قمنا بإنشاء كائن من الكلاس
Library library = new Library();
// AddAuthor() بواسطة الدالة library التي يمكلها الكائن Authors هنا قمنا بإضافة المؤلفين في المصفوفة
library.AddAuthor(author1);
library.AddAuthor(author2);
library.AddAuthor(author3);
// AddBook() بواسطة الدالة library التي يمكلها الكائن Books هنا قمنا بإضافة الكتب في المصفوفة
library.AddBook(book1);
library.AddBook(book2);
library.AddBook(book3);
library.AddBook(book4);
// PrintAuthor() الخاص بهم و بواسطة الدالة Id هنا قمنا بطباعة معلومات كل المؤلفين بالإعتماد على رقم التعرفة
// تذكر: رقم التعرفة الخاص بكل مؤلف تم إنشاؤه بشكل تلقائي عند إنشاء كل مؤلف بداخل الكونستركتور
library.PrintAuthor(1);
library.PrintAuthor(2);
library.PrintAuthor(3);
// PrintBook() الخاص بهم و بواسطة الدالة Id هنا قمنا بطباعة معلومات كل الكتب بالإعتماد على رقم التعرفة
// تذكر: رقم التعرفة الخاص بكل كتاب تم إنشاؤه بشكل تلقائي عند إنشاء كل كتاب بداخل الكونستركتور
library.PrintBook(1);
library.PrintBook(2);
library.PrintBook(3);
library.PrintBook(4);
// PrintAuthorBooks() الخاص بهم و بواسطة الدالة Id هنا قمنا بطباعة الكتب التي يملكها كل مؤلف بالإعتماد على رقم التعرفة
library.PrintAuthorBooks(1);
library.PrintAuthorBooks(2);
library.PrintAuthorBooks(3);
// RemoveAuthor() هنا قمنا بحذف المؤلف الذي يملك رقم التعرفة 2 بواسطة الدالة
// PrintAuthorBooks() و PrintAuthor() بعدها حاولنا طباعة معلوماته و الكتب التي قام بتأليفها بواسطة الدالة
// لاحظ أنه لم يحدث أي خطأ عند محاولة طباعة معلومات مؤلف لم يعد موجوداً لأن الدوال مصممة للتأكد قبل المحاولة الحذف
library.RemoveAuthor(2);
library.PrintAuthor(2);
library.PrintAuthorBooks(2);
Console.ReadKey();
}
}
using System; class Program { static void Main(string[] args) { // أي كأننا قمنا بإنشاء 3 مؤلفين Author هنا قمنا بإنشاء 3 كائنات من الكلاس Author author1 = new Author("Mhamad", "+96170123456", "mhamad@gmail.com"); Author author2 = new Author("Salem", "+9664021833", "salem@gmail.com"); Author author3 = new Author("Rola", "+9631249392", "rola@gmail.com"); // أي كأننا قمنا بإنشاء 4 كتب Book هنا قمنا بإنشاء 4 كائنات من الكلاس // Book وضعناه لكائنين من الكلاس author1 لاحظ أننا وضعنا الثلاث مؤلفين بداخل الكتب التي أنشأناها. و لاحظ أن الكائن // book2 و book1 يعتبر مؤلف الكتابين اللذين يمثلهما الكائنين author1 إذاً المؤلف الذي يمثله الكائن Book book1 = new Book("Learn Java", "12-20-2019", 1, author1); Book book2 = new Book("Learn HTML", "8-5-2018", 3, author1); Book book3 = new Book("PHP for beginners", "10-2-2019", 1, author2); Book book4 = new Book("C# for dummies", "12-20-2019", 1, author3); // لأننا نريد تخزين الكتب و المؤلفين بشكل مرتب بداخله Library هنا قمنا بإنشاء كائن من الكلاس Library library = new Library(); // AddAuthor() بواسطة الدالة library التي يمكلها الكائن Authors هنا قمنا بإضافة المؤلفين في المصفوفة library.AddAuthor(author1); library.AddAuthor(author2); library.AddAuthor(author3); // AddBook() بواسطة الدالة library التي يمكلها الكائن Books هنا قمنا بإضافة الكتب في المصفوفة library.AddBook(book1); library.AddBook(book2); library.AddBook(book3); library.AddBook(book4); // PrintAuthor() الخاص بهم و بواسطة الدالة Id هنا قمنا بطباعة معلومات كل المؤلفين بالإعتماد على رقم التعرفة // تذكر: رقم التعرفة الخاص بكل مؤلف تم إنشاؤه بشكل تلقائي عند إنشاء كل مؤلف بداخل الكونستركتور library.PrintAuthor(1); library.PrintAuthor(2); library.PrintAuthor(3); // PrintBook() الخاص بهم و بواسطة الدالة Id هنا قمنا بطباعة معلومات كل الكتب بالإعتماد على رقم التعرفة // تذكر: رقم التعرفة الخاص بكل كتاب تم إنشاؤه بشكل تلقائي عند إنشاء كل كتاب بداخل الكونستركتور library.PrintBook(1); library.PrintBook(2); library.PrintBook(3); library.PrintBook(4); // PrintAuthorBooks() الخاص بهم و بواسطة الدالة Id هنا قمنا بطباعة الكتب التي يملكها كل مؤلف بالإعتماد على رقم التعرفة library.PrintAuthorBooks(1); library.PrintAuthorBooks(2); library.PrintAuthorBooks(3); // RemoveAuthor() هنا قمنا بحذف المؤلف الذي يملك رقم التعرفة 2 بواسطة الدالة // PrintAuthorBooks() و PrintAuthor() بعدها حاولنا طباعة معلوماته و الكتب التي قام بتأليفها بواسطة الدالة // لاحظ أنه لم يحدث أي خطأ عند محاولة طباعة معلومات مؤلف لم يعد موجوداً لأن الدوال مصممة للتأكد قبل المحاولة الحذف library.RemoveAuthor(2); library.PrintAuthor(2); library.PrintAuthorBooks(2); Console.ReadKey(); } }

سنحصل على النتيجة التالية عند التشغيل.

Author with id 1 info.   --> الموضوعة في السطر 36 PrintAuthor() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Mhamad
Phone: +96170123456
Email: mhamad@gmail.com
----------------------
Author with id 2 info.   --> الموضوعة في السطر 37 PrintAuthor() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Salem
Phone: +9664021833
Email: salem@gmail.com
----------------------   --> الموضوعة في السطر 38 PrintAuthor() تم عرض هذا المحتوى بسبب استدعاء الدالة
Author with id 3 info.
Name: Rola
Phone: +9631249392
Email: rola@gmail.com
----------------------
Book with id 1 info.   --> الموضوعة في السطر 42 PrintBook() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: Learn Java
Version: 1
Publishing date: 12-20-2019
author in Mhamad
----------------------
Book with id 2 info.   --> الموضوعة في السطر 43 PrintBook() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: Learn HTML
Version: 3
Publishing date: 8-5-2018
author in Mhamad
----------------------
Book with id 3 info.   --> الموضوعة في السطر 44 PrintBook() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: PHP for beginners
Version: 1
Publishing date: 10-2-2019
author in Salem
----------------------
Book with id 4 info.   --> الموضوعة في السطر 45 PrintBook() تم عرض هذا المحتوى بسبب استدعاء الدالة
Title: C# for dummies
Version: 1
Publishing date: 12-20-2019
author in Rola
----------------------
Books of author Mhamad:   --> الموضوعة في السطر 48 PrintAuthorBooks() تم عرض هذا المحتوى بسبب استدعاء الدالة
- Learn Java
- Learn HTML
----------------------
Books of author Salem:   --> الموضوعة في السطر 49 PrintAuthorBooks() تم عرض هذا المحتوى بسبب استدعاء الدالة
- PHP for beginners
----------------------
Books of author Rola:   --> الموضوعة في السطر 50 PrintAuthorBooks() تم عرض هذا المحتوى بسبب استدعاء الدالة
- C# for dummies
----------------------
Author with id 2 is not found!   --> الموضوعة في السطر 56 PrintAuthor() تم عرض هذا المحتوى بسبب استدعاء الدالة
----------------------
Author with id 2 is not found!   --> الموضوعة في السطر 57 PrintAuthorBooks() تم عرض هذا المحتوى بسبب استدعاء الدالة
----------------------