فكرة المشروع
في هذا التمرين سنفترض أننا نقوم بتخزين بيانات لمؤسسة صغيرة.
البيانات التي نريد تخزينها هي التالية:
الموظفين الذين يعملون في المؤسسة (الإسم, الهاتف, الجنس, دوام العمل, أيام العمل).
الزبائن الذين يشترون من المؤسسة (الإسم, الهاتف, الجنس, البريد الإلكتروني).
المنتجات التي تبيعها المؤسسة (إسم المنتج و سعره).
الفواتير الخاصة ببيع المنتجات (تاريخ البيع, هل تم الدفع أم لا, بيانات المشتري, المنتجات التي تم شراءها).
ملاحظة: رقم التعرفة لكل من الأشخاص, المنتجات, الفواتير يجب أن يتم إعطاؤه لهم بشكل تلقائي.
الشكل العام لأقسام المشروع
شرح أقسام المشروع
Person يمثل المعلومات المشتركة بين الموظف و الزبون.
Client يمثل المعلومات الإضافية الخاصة بالزبون و غير موجودة عند الموظف.
Employee يمثل المعلومات الإضافية الخاصة الموظف و غير موجودة عند الزبون.
Product يمثل أي منتج تبيعه الشركة.
Order يمثل فواتير بيع المنتجات و لاحظ أن كل فاتورة سيتم فيها بيع مجموعة من المنتجات و كل فاتورة سيتم إصدارها لشخص محدد.
add_product(): مهمتها إضافة منتج جديد.
add_person(): مهمتها إضافة شخص جديد سواء موظف أو زبون.
add_order(): مهمتها إضافة فاتورة جديدة.
remove_product(): مهمتها حذف منتج من خلال id المنتج الذي نمرره لها عند إستدعاءها.
remove_person(): مهمتها حذف شخص من خلال id الشخص الذي نمرره لها عند إستدعاءها.
remove_order(): مهمتها حذف فاتورة من خلال id الفاتورة الذي نمرره لها عند إستدعاءها.
print_person_info(): مهمتها عرض كل معلومات الشخص من خلال id الشخص الذي نمرره لها عند إستدعاءها.
print_product_details(): مهمتها عرض كل معلومات المنتج من خلال id المنتج الذي نمرره لها عند إستدعاءها.
print_order_details(): مهمتها عرض كل معلومات الفاتورة من خلال id الفاتورة الذي نمرره لها عند إستدعاءها.
print_person_orders(): مهمتها عرض كل فواتير الشخص من خلال id الشخص الذي نمرره لها عند إستدعاءها.
print_extra_info(): مهمتها عرض كل المعلومات المتوفرة حول الشخص سواء كان موظف أو زبون.
قم بتحويل الرسم إلى كود. ثم قم بإنشاء مجموعة موظفين, زبائن, منتجات و فواتير. و قم بتجربة جميع الدوال في البرنامج.
معلومة
لإعطاء رقم id موحد لكل كائن يتم إنشاؤه, يمكنك تعريف متغير ثابت ( static ) في الكلاس و جعله أيضاً private حتى لا يمكن تعديل قيمته بشكل يدوي من خارج هذا الكلاس. بعدها تقوم فقط بجعل قيمته تزيد 1 كلما قمت بإنشاء كائن من هذا الكلاس و من ثم تضع قيمته في المتغير id.
ملاحظة: سنقوم بإنشاء متغير نوعه private static إسمه idIncrementer في الكلاسات Person, Product و Order من أجل هذا الهدف فقط.
الحل بلغة #C
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي شخص Person هنا قمنا بتعريف الكلاس
// لأننا لا نريد أن يتم إنشاء كائنات منه بل من الكلاسات التي ترث منه abstract ملاحظة: قمنا بتعريفه كـ
abstract class Person
{
// هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها أي شخص
public int Id { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string Gender { get; set; }
// لأننا بنفس الوقت نريده أن يكون موحداً لجميع private و static قمنا بتعريفه كـ idIncrementer المتغير
// الكائنات التي ننشئها من الكلاسات التي ترث من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
private static int idIncrementer = 0;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر من أي كلاس يرث هذا الكونستركتور
// id تزيد 1 في كل مرة نستدعي فيها هذا الكونستركتور و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أيضاً أننا قمنا بتحديد أن قيمة
// الخاصة بالكائن الذي سيملكها. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
// و لكننا نستطيع إستدعاؤه من الكلاسات التي ترثه Main إنتبه: هذا الكونستركتور لا نستطيع إستدعاؤه بشكل مباشر من الكلاس
public Person(string name, string phone, string gender)
{
idIncrementer++;
this.Id = idIncrementer;
this.Name = name;
this.Phone = phone;
this.Gender = gender;
}
}
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي زبون Client هنا قمنا بتعريف الكلاس
// Email لأن الزبون عبارة عن شخص عادي و لكنه يملك الخاصية الإضافية Person هذا الكلاس يرث من الكلاس
class Client : Person
{
// هنا قمنا بتعريف الخاصية الإضافية التي سيملكها الزبون
// Id, Name, Phone, Gender, Email :أصبح يملك الخصائص التالية Client إذاً الكلاس
public string Email { get; set; }
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته
// base() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس Name, Phone, Gender الخصائص
// Id سيتولى أمر توليد قيمة للخاصية Person أيضاَ, لا تنسى أن كونستركتور الكلاس
public Client(string name, string phone, string gender, string email) : base(name, phone, gender)
{
this.Email = email;
}
}
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي موظف Employee هنا قمنا بتعريف الكلاس
// WorkingTime و Salary لأن الموظف عبارة عن شخص عادي و لكنه يملك خصائص إضافية هي Person هذا الكلاس يرث من الكلاس
class Employee : Person
{
// هنا قمنا بتعريف الخاصية الإضافية التي سيملكها العميل
// Id, Name, Phone, Gender, Salary, WorkingTime :أصبح يملك الخصائص التالية Employee إذاً الكلاس
public float Salary { get; set; }
public string WorkingTime { get; set; }
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته
// base() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس Name, Phone, Gender الخصائص
// id سيتولى أمر توليد قيمة للخاصية Person أيضاَ, لا تنسى أن كونستركتور الكلاس
public Employee(string name, string phone, string gender, float salary, string workingTime) : base(name, phone, gender)
{
this.Salary = salary;
this.WorkingTime = workingTime;
}
}
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي منتج Product هنا قمنا بتعريف الكلاس
class Product
{
// هنا قمنا بتعريف الخاصية الإضافية التي سيملكها المنتج
public int Id { get; set; }
public string Name { get; set; }
public float Price { get; set; }
// لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
// لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
private static int idIncrementer;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
// Id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
// الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
public Product(string name, float price)
{
idIncrementer++;
this.Id = idIncrementer;
this.Name = name;
this.Price = price;
}
}
using System.Collections.Generic;
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن تمكلها أي فاتورة Order هنا قمنا بتعريف الكلاس
class Order
{
// هنا قمنا بتعريف الخصائص الأساسية التي يجب أن تملكها أي فاتورة
public int Id { get; set; }
public string Date { get; set; }
public bool IsPaid { get; set; }
public Person Person { get; set; }
public List<Product> Products { get; set; }
// لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
// لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
private static int idIncrementer;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
// Id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
// الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
public Order(string date, bool isPaid, Person person, List<Product> products)
{
idIncrementer++;
this.Id = idIncrementer;
this.Date = date;
this.IsPaid = isPaid;
this.Person = person;
this.Products = products;
}
}
// يمثل كل ما تحتويه الشركة من أشخاص, فواتير, منتجات, و الدوال التي يمكن استخدامها للتعامل معهم Company الكلاس
using System;
using System.Collections.Generic;
class Company
{
// سنضع فيه كل معلومات الفواتير Orders سنضع فيه كل معلومات المنتجات. الكائن Products سنضع فيه كل معلومات الأشخاص. الكائن Persons الكائن
public List<Person> Persons { get; set; }
public List<Product> Products { get; set; }
public List<Order> Orders { get; set; }
// Orders و Products و Persons هنا قمنا بتعريف كونستركتور الكلاس و الذي قمنا فيه بإنشاء الكائنات
public Company()
{
Persons = new List<Person>();
Products = new List<Product>();
Orders = new List<Order>();
}
// Products بداخل المصفوفة Product يمكن استخدامها لإضافة كائن من الكلاس AddProduct() الدالة
public void AddProduct(Product product)
{
Products.Add(product);
}
// Persons بداخل المصفوفة Person يمكن استخدامها لإضافة كائن من الكلاس AddPerson() الدالة
public void AddPerson(Person person)
{
Persons.Add(person);
}
// Orders بداخل المصفوفة Order يمكن استخدامها لإضافة كائن من الكلاس AddOrder() الدالة
public void AddOrder(Order order)
{
Orders.Add(order);
}
// الخاص به id بالإعتماد على رقم الـ Products موضوع بداخل المصفوفة Product يمكن استخدامها لإلغاء كائن من الكلاس RemoveProduct() الدالة
public void RemoveProduct(int id)
{
// product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Product product in Products)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن
if (product.Id == id)
{
Products.Remove(product);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Products في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Product with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ Persons موضوع بداخل المصفوفة Person يمكن استخدامها لإلغاء كائن من الكلاس RemovePerson() الدالة
public void RemovePerson(int id)
{
// person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Person person in Persons)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
if (person.Id == id)
{
Persons.Remove(person);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Persons في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Person with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ Orders موضوع بداخل المصفوفة Order يمكن استخدامها لإلغاء كائن من الكلاس RemoveOrder() الدالة
public void RemoveOrder(int id)
{
// order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Order order in Orders)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن
if (order.Id == id)
{
Orders.Remove(order);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Orders في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Order with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ Persons يمكن استخدامها لطباعة كل المعلومات المتوفرة حول شخص موضوع بداخل المصفوفة PrintPersonInfo() الدالة
public void PrintPersonInfo(int id)
{
// person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Person person in Persons)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
if (person.Id == id)
{
Console.WriteLine("Person with id " + id + " info.");
Console.WriteLine("Name: " + person.Name);
Console.WriteLine("Phone: " + person.Phone);
Console.WriteLine("Gender: " + person.Gender);
// ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Client تم إنشاؤه من الكلاس person إذا كان الكائن
// Client التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس Email حتى نستطيع طباعة الخاصية
if (person is Client)
{
Console.WriteLine("Email: " + ((Client)person).Email);
}
// ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Employee تم إنشاؤه من الكلاس person إذا كان الكائن
// Employee التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس WorkingTime و Salary حتى نستطيع طباعة الخاصيتين
else if (person is Employee)
{
Console.WriteLine("Salary: " + ((Employee)person).Salary + "$");
Console.WriteLine("Working time: " + ((Employee)person).WorkingTime);
}
// بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة
Console.WriteLine("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Persons في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Person with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ Products يمكن استخدامها لطباعة كل المعلومات المتوفرة حول منتج موضوع بداخل المصفوفة PrintProductDetails() الدالة
public void PrintProductDetails(int id)
{
// product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Product product in Products)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن
if (product.Id == id)
{
Console.WriteLine("Product with id " + id + " details.");
Console.WriteLine("Name: " + product.Name);
Console.WriteLine("Price: " + product.Price + "$");
Console.WriteLine("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Products في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Product with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص بها id بالإعتماد على رقم الـ Orders يمكن استخدامها لطباعة كل معلومات فاتورة موضوعة بداخل المصفوفة PrintProductDetails() الدالة
public void PrintOrderDetails(int id)
{
// سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في الفاتورة totalSum المتغير
float totalSum = 0;
// order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Order order in Orders)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن
if (order.Id == id)
{
Console.WriteLine("Order with id " + id + " details.");
Console.WriteLine("Date: " + order.Date);
Console.WriteLine("Is paid: " + ((order.IsPaid) ? "yes" : "no"));
Console.WriteLine("Ordered by: " + order.Person.Name);
Console.WriteLine("Products:");
// order الموضوعة في الكائن Products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
// product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن
// totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير
foreach (Product product in order.Products)
{
totalSum += product.Price;
Console.WriteLine("- " + product.Name + ": " + product.Price + "$");
}
// و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة و من ثم الخروج من الدالة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير
Console.WriteLine("Total: " + totalSum + "$");
Console.WriteLine("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Orders في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Order with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ Persons يمكن استخدامها لطباعة كل معلومات الفواتير التابعة لشخص موضوع بداخل المصفوفة PrintProductDetails() الدالة
public void PrintPersonOrders(int id)
{
// person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Person person in Persons)
{
// الذي مررناه للدالة سيتم طباعة كل فواتيره و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
if (person.Id == id)
{
Console.WriteLine("All Orders made by person with id " + id + ":");
// order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن Orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
foreach (Order order in Orders)
{
// ( الذي مررناه للدالة سيتم طباعة معلوماته ( أي معلومات الفاتورة id يملك نفس رقم الـ order الموضوع في الكائن person في حال كان الكائن
if (order.Person.Id == id)
{
Console.WriteLine("> Order: #" + order.Id);
Console.WriteLine(" Date: " + order.Date);
Console.WriteLine(" Is paid: " + ((order.IsPaid) ? "yes" : "no"));
Console.WriteLine(" Ordered by: " + order.Person.Name);
Console.WriteLine(" Products:");
// سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في كل فاتورة totalSum المتغير
float totalSum = 0;
// order الموضوعة في الكائن Products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
// product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن
// totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير
foreach (Product product in order.Products)
{
totalSum += product.Price;
Console.WriteLine(" - " + product.Name + ": " + product.Price + "$");
}
// و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير
Console.WriteLine(" Total Price: " + totalSum + "$");
}
}
// بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة
Console.WriteLine("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ Persons في حال لم يتم إيجاد أي كائن في المصفوفة
Console.WriteLine("Person with id " + id + " is not found!");
Console.WriteLine("----------------------");
}
}
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
// أي كأننا قمنا بإنشاء شخصين Person هنا قمنا بإنشاء كائنين من كلاسات ترث من الكلاس
// و بالتالي فإنه يمثل شخص يعتبر زبون Client عبارة عن كائن من الكلاس person1
// و بالتالي فإنه يمثل شخص يعتبر موظف Employee عبارة عن كائن من الكلاس person2
Client person1 = new Client("Mhamad", "+96170123456", "Male", "mhamad@example.com");
Employee person2 = new Employee("Nadine", "+9631249392", "Female", 800f, "8:00 AM to 3:00 PM");
// و التي تمثل 6 منتجات Product هنا قمنا بتعريف 6 كائنات من الكلاس
Product product1 = new Product("Keyboard", 15f);
Product product2 = new Product("Camera", 45f);
Product product3 = new Product("HDD 1TB", 70f);
Product product4 = new Product("SSD 1TB", 274.66f);
Product product5 = new Product("Mouse", 8f);
Product product6 = new Product("Table", 44.55f);
// product3 و product2 و product1 وضعنا فيه الكائنات List هنا قمنا بتعريف كائن من الكلاس
// و الذي سننئه بعد قليل order1 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
List<Product> order1Products = new List<Product>();
order1Products.Add(product1);
order1Products.Add(product2);
order1Products.Add(product3);
// product4 وضعنا فيه الكائن List هنا قمنا بتعريف كائن من الكلاس
// و الذي سننئه بعد قليل order2 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
List<Product> order2Products = new List<Product>();
order2Products.Add(product4);
// product5 و product6 وضعنا فيه الكائنات List هنا قمنا بتعريف كائن من الكلاس
// و الذي سننئه بعد قليل order3 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
List<Product> order3Products = new List<Product>();
order3Products.Add(product5);
order3Products.Add(product6);
// و التي تمثل فواتير Order هنا قمنا بتعريف 3 كائنات من الكلاس
// person1 وضعناهما لنفس الشخص الذي يمثله الكائن order2 و order1 لاحظ أن الفاتورتين
Order order1 = new Order("2020-1-1", true, person1, order1Products);
Order order2 = new Order("2020-2-7", true, person1, order2Products);
Order order3 = new Order("2020-5-4", false, person2, order3Products);
// لأننا نريد تخزين الأشخاص و المنتجات و الفواتير بشكل مرتب بداخله Company هنا قمنا بإنشاء كائن من الكلاس
Company company = new Company();
// AddPerson() بواسطة الدالة company التي يمكلها الكائن Persons هنا قمنا بإضافة الشخصين في المصفوفة
company.AddPerson(person1);
company.AddPerson(person2);
// AddProduct() بواسطة الدالة company التي يمكلها الكائن Products هنا قمنا بإضافة المنتجات في المصفوفة
company.AddProduct(product1);
company.AddProduct(product2);
company.AddProduct(product3);
company.AddProduct(product4);
company.AddProduct(product5);
company.AddProduct(product6);
// AddOrder() بواسطة الدالة company التي يمكلها الكائن Orders هنا قمنا بإضافة الفواتير في المصفوفة
company.AddOrder(order1);
company.AddOrder(order2);
company.AddOrder(order3);
// PrintPersonInfo() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كلا الشخصين بالإعتماد على رقم التعرفة
// تذكر: رقم التعرفة الخاص بكل شخص تم إنشاؤه بشكل تلقائي عند إنشاء كل شخص بداخل الكونستركتور
company.PrintPersonInfo(1);
company.PrintPersonInfo(2);
// PrintProductDetails() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كل المنتجات بالإعتماد على رقم التعرفة
// تذكر: رقم التعرفة الخاص بكل منتج تم إنشاؤه بشكل تلقائي عند إنشاء كل منتج بداخل الكونستركتور
company.PrintProductDetails(1);
company.PrintProductDetails(2);
company.PrintProductDetails(3);
company.PrintProductDetails(4);
company.PrintProductDetails(5);
company.PrintProductDetails(6);
// PrintPersonOrders() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة الفواتير التي يملكها كل شخص بالإعتماد على رقم التعرفة
company.PrintPersonOrders(1);
company.PrintPersonOrders(2);
// RemoveOrder() هنا قمنا الفاتورة التي تملك رقم التعرفة 1 بواسطة الدالة
// PrintOrderDetails() بعدها حاولنا طباعة معلومات الفاتورة التي قمنا بحذفها بواسطة الدالة
// بعدها قمنا بطباعة جمبع الفواتير التي يمكلها الشخص الذي يملك رقم التعرفة 1 و الذي كان يملك الفاتورة التي تم حذفها
// لاحظ أن الفاتورة المحذوفة أيضاَ لم تظر ضمن فواتيره
company.RemoveOrder(1);
company.PrintOrderDetails(1);
company.PrintPersonOrders(1);
Console.ReadKey();
}
}
سنحصل على النتيجة التالية عند التشغيل.
Name: Mhamad
Phone: +96170123456
Gender: Male
Email: mhamad@example.com
----------------------
Person with id 2 info. --> الموضوعة في السطر 56 PrintPersonInfo() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Nadine
Phone: +9631249392
Gender: Female
Salary: 800.0$
Working time: 8:00 AM to 3:00 PM
----------------------
Product with id 1 details. --> الموضوعة في السطر 60 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Keyboard
Price: 15.0$
----------------------
Product with id 2 details. --> الموضوعة في السطر 61 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Camera
Price: 45.0$
----------------------
Product with id 3 details. --> الموضوعة في السطر 62 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: HDD 1TB
Price: 70.0$
----------------------
Product with id 4 details. --> الموضوعة في السطر 63 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: SSD 1TB
Price: 274.66$
----------------------
Product with id 5 details. --> الموضوعة في السطر 64 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Mouse
Price: 8.0$
----------------------
Product with id 6 details. --> الموضوعة في السطر 65 PrintProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Table
Price: 44.55$
----------------------
All Orders made by person with id 1: --> الموضوعة في السطر 68 PrintPersonOrders() تم عرض هذا المحتوى بسبب استدعاء الدالة
> Order: #1
Date: 2020-1-1
Is paid: yes
Ordered by: Mhamad
Products:
- Keyboard: 15.0$
- Camera: 45.0$
- HDD 1TB: 70.0$
Total Price: 130.0$
> Order: #2
Date: 2020-2-7
Is paid: yes
Ordered by: Mhamad
Products:
- SSD 1TB: 274.66$
Total Price: 274.66$
----------------------
All Orders made by person with id 2: --> الموضوعة في السطر 69 PrintPersonOrders() تم عرض هذا المحتوى بسبب استدعاء الدالة
> Order: #3
Date: 2020-5-4
Is paid: no
Ordered by: Nadine
Products:
- Mouse: 8.0$
- Table: 44.55$
Total Price: 52.55$
----------------------
Order with id 1 is not found! --> الموضوعة في السطر 75 PrintOrderDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
----------------------
All Orders made by person with id 1: --> الموضوعة في السطر 76 PrintPersonOrders() تم عرض هذا المحتوى بسبب استدعاء الدالة
> Order: #2
Date: 2020-2-7
Is paid: yes
Ordered by: Mhamad
Products:
- SSD 1TB: 274.66$
Total Price: 274.66$
----------------------



محرر الويب
نظام الألوان
محول الوحدات
محلل عناوين الشبكات