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

تحديات برمجيةالتحدي الثاني - الحل بلغة جافا

فكرة المشروع

في هذا التمرين سنفترض أننا نقوم بتخزين بيانات لمؤسسة صغيرة.
البيانات التي نريد تخزينها هي التالية:

  • الموظفين الذين يعملون في المؤسسة (الإسم, الهاتف, الجنس, دوام العمل, أيام العمل).
  • الزبائن الذين يشترون من المؤسسة (الإسم, الهاتف, الجنس, البريد الإلكتروني).
  • المنتجات التي تبيعها المؤسسة (إسم المنتج و سعره).
  • الفواتير الخاصة ببيع المنتجات (تاريخ البيع, هل تم الدفع أم لا, بيانات المشتري, المنتجات التي تم شراءها).

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


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


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

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 من أجل هذا الهدف فقط.


الحل بلغة جافا

Person.java
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي شخص Person هنا قمنا بتعريف الكلاس
// لأننا لا نريد أن يتم إنشاء كائنات منه بل من الكلاسات التي ترث منه abstract ملاحظة: قمنا بتعريفه كـ
public abstract class Person {
// هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها أي شخص
int id;
String name;
String phone;
String gender;
// لأننا بنفس الوقت نريده أن يكون موحداً لجميع 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;
}
}
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي شخص Person هنا قمنا بتعريف الكلاس // لأننا لا نريد أن يتم إنشاء كائنات منه بل من الكلاسات التي ترث منه abstract ملاحظة: قمنا بتعريفه كـ public abstract class Person { // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها أي شخص int id; String name; String phone; String gender; // لأننا بنفس الوقت نريده أن يكون موحداً لجميع 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.java
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي زبون Client هنا قمنا بتعريف الكلاس
// email لأن الزبون عبارة عن شخص عادي و لكنه يملك الخاصية الإضافية Person هذا الكلاس يرث من الكلاس
public class Client extends Person {
// هنا قمنا بتعريف الخاصية الإضافية التي سيملكها الزبون
// id, name, phone, gender, email :أصبح يملك الخصائص التالية Client إذاً الكلاس
String email;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته
// super() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس name, phone, gender الخصائص
// id سيتولى أمر توليد قيمة للمتغير Person أيضاَ, لا تنسى أن كونستركتور الكلاس
public Client(String name, String phone, String gender, String email)
{
super(name, phone, gender);
this.email = email;
}
}
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي زبون Client هنا قمنا بتعريف الكلاس // email لأن الزبون عبارة عن شخص عادي و لكنه يملك الخاصية الإضافية Person هذا الكلاس يرث من الكلاس public class Client extends Person { // هنا قمنا بتعريف الخاصية الإضافية التي سيملكها الزبون // id, name, phone, gender, email :أصبح يملك الخصائص التالية Client إذاً الكلاس String email; // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته // super() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس name, phone, gender الخصائص // id سيتولى أمر توليد قيمة للمتغير Person أيضاَ, لا تنسى أن كونستركتور الكلاس public Client(String name, String phone, String gender, String email) { super(name, phone, gender); this.email = email; } }

Employee.java
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي موظف Employee هنا قمنا بتعريف الكلاس
// workingTime و salary لأن الموظف عبارة عن شخص عادي و لكنه يملك خصائص إضافية هي Person هذا الكلاس يرث من الكلاس
public class Employee extends Person {
// هنا قمنا بتعريف الخاصية الإضافية التي سيملكها الموظف
// id, name, phone, gender, salary, workingTime :أصبح يملك الخصائص التالية Employee إذاً الكلاس
float salary;
String workingTime;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته
// super() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس name, phone, gender الخصائص
// id سيتولى أمر توليد قيمة للمتغير Person أيضاَ, لا تنسى أن كونستركتور الكلاس
public Employee(String name, String phone, String gender, float salary, String workingTime)
{
super(name, phone, gender);
this.salary = salary;
this.workingTime = workingTime;
}
}
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي موظف Employee هنا قمنا بتعريف الكلاس // workingTime و salary لأن الموظف عبارة عن شخص عادي و لكنه يملك خصائص إضافية هي Person هذا الكلاس يرث من الكلاس public class Employee extends Person { // هنا قمنا بتعريف الخاصية الإضافية التي سيملكها الموظف // id, name, phone, gender, salary, workingTime :أصبح يملك الخصائص التالية Employee إذاً الكلاس float salary; String workingTime; // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته // super() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس name, phone, gender الخصائص // id سيتولى أمر توليد قيمة للمتغير Person أيضاَ, لا تنسى أن كونستركتور الكلاس public Employee(String name, String phone, String gender, float salary, String workingTime) { super(name, phone, gender); this.salary = salary; this.workingTime = workingTime; } }

Product.java
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي منتج Product هنا قمنا بتعريف الكلاس
public class Product {
// هنا قمنا بتعريف الخاصية الإضافية التي سيملكها المنتج
int id;
String name;
float price;
// لأننا بنفس الوقت نريده أن يكون موحداً 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;
}
}
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي منتج Product هنا قمنا بتعريف الكلاس public class Product { // هنا قمنا بتعريف الخاصية الإضافية التي سيملكها المنتج int id; String name; float price; // لأننا بنفس الوقت نريده أن يكون موحداً 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; } }

Order.java
import java.util.ArrayList;
// الذي وضعنا فيه المعلومات الأساسية التي يجب أن تمكلها أي فاتورة Order هنا قمنا بتعريف الكلاس
public class Order {
// هنا قمنا بتعريف الخصائص الأساسية التي يجب أن تملكها أي فاتورة
int id;
String date;
boolean isPaid;
Person person;
ArrayList<Product> products;
// لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير
// لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر
private static int idIncrementer;
// هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر
// id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة
// الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن
public Order(String date, boolean isPaid, Person person, ArrayList<Product> products)
{
idIncrementer++;
this.id = idIncrementer;
this.date = date;
this.isPaid = isPaid;
this.person = person;
this.products = products;
}
}
import java.util.ArrayList; // الذي وضعنا فيه المعلومات الأساسية التي يجب أن تمكلها أي فاتورة Order هنا قمنا بتعريف الكلاس public class Order { // هنا قمنا بتعريف الخصائص الأساسية التي يجب أن تملكها أي فاتورة int id; String date; boolean isPaid; Person person; ArrayList<Product> products; // لأننا بنفس الوقت نريده أن يكون موحداً private و static قمنا بتعريفه كـ idIncrementer المتغير // لجميع الكائنات التي ننشئها من هذا الكلاس و لا يمكن التعامل معه بشكل مباشر من أي كلاس آخر private static int idIncrementer; // هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للكائن الذي ننشئه من هذا الكلاس بشكل مباشر // id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بتحديد أن قيمة // الخاصة بالكائن. القيم الأخرى التي سيتم تمريرها للكائن سيتم تخزينها بشكل مباشر في خصائص الكائن public Order(String date, boolean isPaid, Person person, ArrayList<Product> products) { idIncrementer++; this.id = idIncrementer; this.date = date; this.isPaid = isPaid; this.person = person; this.products = products; } }

Company.java
import java.util.ArrayList;
// يمثل كل ما تحتويه الشركة من أشخاص, فواتير, منتجات, و الدوال التي يمكن استخدامها للتعامل معهم Library الكلاس
public class Company {
// سنضع فيه كل معلومات الفواتير orders سنضع فيه كل معلومات المنتجات. الكائن products سنضع فيه كل معلومات الأشخاص. الكائن persons الكائن
ArrayList<Person> persons;
ArrayList<Product> products;
ArrayList<Order> orders;
// orders و products و persons هنا قمنا بتعريف كونستركتور الكلاس و الذي قمنا فيه بإنشاء الكائنات
public Company()
{
persons = new ArrayList();
products = new ArrayList();
orders = new ArrayList();
}
// 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 بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Product product: products)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن
if (product.id == id)
{
products.remove(product);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ products في حال لم يتم إيجاد أي كائن في المصفوفة
System.out.println("Product with id " + id + " is not found!");
System.out.println("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ persons موضوع بداخل المصفوفة Person يمكن استخدامها لإلغاء كائن من الكلاس removePerson() الدالة
public void removePerson(int id)
{
// person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Person person: persons)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
if (person.id == id)
{
persons.remove(person);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة
System.out.println("Person with id " + id + " is not found!");
System.out.println("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ orders موضوع بداخل المصفوفة Order يمكن استخدامها لإلغاء كائن من الكلاس removeOrder() الدالة
public void removeOrder(int id)
{
// order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Order order: orders)
{
// الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن
if (order.id == id)
{
orders.remove(order);
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ orders في حال لم يتم إيجاد أي كائن في المصفوفة
System.out.println("Order with id " + id + " is not found!");
System.out.println("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ persons يمكن استخدامها لطباعة كل المعلومات المتوفرة حول شخص موضوع بداخل المصفوفة printPersonInfo() الدالة
public void printPersonInfo(int id)
{
// person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Person person: persons)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
if (person.id == id)
{
System.out.println("Person with id " + id + " info.");
System.out.println("Name: " + person.name);
System.out.println("Phone: " + person.phone);
System.out.println("Gender: " + person.gender);
// ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Client تم إنشاؤه من الكلاس person إذا كان الكائن
// Client التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس email حتى نستطيع طباعة الخاصية
if (person instanceof Client)
{
System.out.println("Email: " + ((Client)person).email);
}
// ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Employee تم إنشاؤه من الكلاس person إذا كان الكائن
// Employee التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس workingTime و salary حتى نستطيع طباعة الخاصيتين
else if (person instanceof Employee)
{
System.out.println("Salary: " + ((Employee)person).salary + "$");
System.out.println("Working time: " + ((Employee)person).workingTime);
}
// بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة
System.out.println("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة
System.out.println("Person with id " + id + " is not found!");
System.out.println("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ products يمكن استخدامها لطباعة كل المعلومات المتوفرة حول منتج موضوع بداخل المصفوفة printProductDetails() الدالة
public void printProductDetails(int id)
{
// product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Product product: products)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن
if (product.id == id)
{
System.out.println("Product with id " + id + " details.");
System.out.println("Name: " + product.name);
System.out.println("Price: " + product.price + "$");
System.out.println("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ products في حال لم يتم إيجاد أي كائن في المصفوفة
System.out.println("Product with id " + id + " is not found!");
System.out.println("----------------------");
}
// الخاص بها id بالإعتماد على رقم الـ orders يمكن استخدامها لطباعة كل معلومات فاتورة موضوعة بداخل المصفوفة printProductDetails() الدالة
public void printOrderDetails(int id)
{
// سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في الفاتورة totalSum المتغير
float totalSum = 0;
// order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Order order: orders)
{
// الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن
if (order.id == id)
{
System.out.println("Order with id " + id + " details.");
System.out.println("Date: " + order.date);
System.out.println("Is paid: " + ((order.isPaid)? "yes": "no"));
System.out.println("Ordered by: " + order.person.name );
System.out.println("Products:");
// order الموضوعة في الكائن products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
// product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن
// totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير
for (Product product: order.products)
{
totalSum += product.price;
System.out.println("- " + product.name + ": " + product.price + "$");
}
// و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة و من ثم الخروج من الدالة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير
System.out.println("Total: " + totalSum + "$");
System.out.println("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ orders في حال لم يتم إيجاد أي كائن في المصفوفة
System.out.println("Order with id " + id + " is not found!");
System.out.println("----------------------");
}
// الخاص به id بالإعتماد على رقم الـ persons يمكن استخدامها لطباعة كل معلومات الفواتير التابعة لشخص موضوع بداخل المصفوفة printProductDetails() الدالة
public void printPersonOrders(int id)
{
// person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Person person: persons)
{
// الذي مررناه للدالة سيتم طباعة كل فواتيره و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن
if (person.id == id)
{
System.out.println("All orders made by person with id " + id + ":");
// order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for (Order order: orders)
{
// ( الذي مررناه للدالة سيتم طباعة معلوماته ( أي معلومات الفاتورة id يملك نفس رقم الـ order الموضوع في الكائن person في حال كان الكائن
if (order.person.id == id)
{
System.out.println("> Order: #" + order.id);
System.out.println(" Date: " + order.date);
System.out.println(" Is paid: " + ((order.isPaid)? "yes": "no"));
System.out.println(" Ordered by: " + order.person.name );
System.out.println(" Products:");
// سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في كل فاتورة totalSum المتغير
float totalSum = 0;
// order الموضوعة في الكائن products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
// product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن
// totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير
for (Product product: order.products)
{
totalSum += product.price;
System.out.println(" - " + product.name + ": " + product.price + "$");
}
// و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير
System.out.println(" Total Price: " + totalSum + "$");
}
}
// بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة
System.out.println("----------------------");
return;
}
}
// الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة
System.out.println("Person with id " + id + " is not found!");
System.out.println("----------------------");
}
}
import java.util.ArrayList; // يمثل كل ما تحتويه الشركة من أشخاص, فواتير, منتجات, و الدوال التي يمكن استخدامها للتعامل معهم Library الكلاس public class Company { // سنضع فيه كل معلومات الفواتير orders سنضع فيه كل معلومات المنتجات. الكائن products سنضع فيه كل معلومات الأشخاص. الكائن persons الكائن ArrayList<Person> persons; ArrayList<Product> products; ArrayList<Order> orders; // orders و products و persons هنا قمنا بتعريف كونستركتور الكلاس و الذي قمنا فيه بإنشاء الكائنات public Company() { persons = new ArrayList(); products = new ArrayList(); orders = new ArrayList(); } // 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 بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Product product: products) { // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن if (product.id == id) { products.remove(product); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ products في حال لم يتم إيجاد أي كائن في المصفوفة System.out.println("Product with id " + id + " is not found!"); System.out.println("----------------------"); } // الخاص به id بالإعتماد على رقم الـ persons موضوع بداخل المصفوفة Person يمكن استخدامها لإلغاء كائن من الكلاس removePerson() الدالة public void removePerson(int id) { // person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Person person: persons) { // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن if (person.id == id) { persons.remove(person); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة System.out.println("Person with id " + id + " is not found!"); System.out.println("----------------------"); } // الخاص به id بالإعتماد على رقم الـ orders موضوع بداخل المصفوفة Order يمكن استخدامها لإلغاء كائن من الكلاس removeOrder() الدالة public void removeOrder(int id) { // order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Order order: orders) { // الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن if (order.id == id) { orders.remove(order); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ orders في حال لم يتم إيجاد أي كائن في المصفوفة System.out.println("Order with id " + id + " is not found!"); System.out.println("----------------------"); } // الخاص به id بالإعتماد على رقم الـ persons يمكن استخدامها لطباعة كل المعلومات المتوفرة حول شخص موضوع بداخل المصفوفة printPersonInfo() الدالة public void printPersonInfo(int id) { // person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Person person: persons) { // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن if (person.id == id) { System.out.println("Person with id " + id + " info."); System.out.println("Name: " + person.name); System.out.println("Phone: " + person.phone); System.out.println("Gender: " + person.gender); // ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Client تم إنشاؤه من الكلاس person إذا كان الكائن // Client التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس email حتى نستطيع طباعة الخاصية if (person instanceof Client) { System.out.println("Email: " + ((Client)person).email); } // ( type-casting سيتم تحديد أن الكائن أصله منه ( أي سنفعل ,Employee تم إنشاؤه من الكلاس person إذا كان الكائن // Employee التي يملكها الشخص فقط في حال كان عبارة عن كائن من الكلاس workingTime و salary حتى نستطيع طباعة الخاصيتين else if (person instanceof Employee) { System.out.println("Salary: " + ((Employee)person).salary + "$"); System.out.println("Working time: " + ((Employee)person).workingTime); } // بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة System.out.println("----------------------"); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة System.out.println("Person with id " + id + " is not found!"); System.out.println("----------------------"); } // الخاص به id بالإعتماد على رقم الـ products يمكن استخدامها لطباعة كل المعلومات المتوفرة حول منتج موضوع بداخل المصفوفة printProductDetails() الدالة public void printProductDetails(int id) { // product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Product product: products) { // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن if (product.id == id) { System.out.println("Product with id " + id + " details."); System.out.println("Name: " + product.name); System.out.println("Price: " + product.price + "$"); System.out.println("----------------------"); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ products في حال لم يتم إيجاد أي كائن في المصفوفة System.out.println("Product with id " + id + " is not found!"); System.out.println("----------------------"); } // الخاص بها id بالإعتماد على رقم الـ orders يمكن استخدامها لطباعة كل معلومات فاتورة موضوعة بداخل المصفوفة printProductDetails() الدالة public void printOrderDetails(int id) { // سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في الفاتورة totalSum المتغير float totalSum = 0; // order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Order order: orders) { // الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن if (order.id == id) { System.out.println("Order with id " + id + " details."); System.out.println("Date: " + order.date); System.out.println("Is paid: " + ((order.isPaid)? "yes": "no")); System.out.println("Ordered by: " + order.person.name ); System.out.println("Products:"); // order الموضوعة في الكائن products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة // product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن // totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير for (Product product: order.products) { totalSum += product.price; System.out.println("- " + product.name + ": " + product.price + "$"); } // و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة و من ثم الخروج من الدالة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير System.out.println("Total: " + totalSum + "$"); System.out.println("----------------------"); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ orders في حال لم يتم إيجاد أي كائن في المصفوفة System.out.println("Order with id " + id + " is not found!"); System.out.println("----------------------"); } // الخاص به id بالإعتماد على رقم الـ persons يمكن استخدامها لطباعة كل معلومات الفواتير التابعة لشخص موضوع بداخل المصفوفة printProductDetails() الدالة public void printPersonOrders(int id) { // person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Person person: persons) { // الذي مررناه للدالة سيتم طباعة كل فواتيره و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن if (person.id == id) { System.out.println("All orders made by person with id " + id + ":"); // order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for (Order order: orders) { // ( الذي مررناه للدالة سيتم طباعة معلوماته ( أي معلومات الفاتورة id يملك نفس رقم الـ order الموضوع في الكائن person في حال كان الكائن if (order.person.id == id) { System.out.println("> Order: #" + order.id); System.out.println(" Date: " + order.date); System.out.println(" Is paid: " + ((order.isPaid)? "yes": "no")); System.out.println(" Ordered by: " + order.person.name ); System.out.println(" Products:"); // سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في كل فاتورة totalSum المتغير float totalSum = 0; // order الموضوعة في الكائن products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة // product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن // totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير for (Product product: order.products) { totalSum += product.price; System.out.println(" - " + product.name + ": " + product.price + "$"); } // و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة totalSum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير System.out.println(" Total Price: " + totalSum + "$"); } } // بعدها سيتم رسم هذا الخط و من ثم الخروج من الدالة System.out.println("----------------------"); return; } } // الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة System.out.println("Person with id " + id + " is not found!"); System.out.println("----------------------"); } }

Main.java
import java.util.ArrayList;
public class Main {
public 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 وضعنا فيه الكائنات Arrayهنا قمنا بتعريف كائن من الكلاس
// و الذي سننئه بعد قليل order1 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
ArrayList<Product> order1Products = new ArrayList();
order1Products.add(product1);
order1Products.add(product2);
order1Products.add(product3);
// product4 وضعنا فيه الكائن Arrayهنا قمنا بتعريف كائن من الكلاس
// و الذي سننئه بعد قليل order2 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
ArrayList<Product> order2Products = new ArrayList();
order2Products.add(product4);
// product5 و product6 وضعنا فيه الكائنات Arrayهنا قمنا بتعريف كائن من الكلاس
// و الذي سننئه بعد قليل order3 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن
ArrayList<Product> order3Products = new ArrayList();
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);
}
}
import java.util.ArrayList; public class Main { public 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 وضعنا فيه الكائنات Arrayهنا قمنا بتعريف كائن من الكلاس // و الذي سننئه بعد قليل order1 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن ArrayList<Product> order1Products = new ArrayList(); order1Products.add(product1); order1Products.add(product2); order1Products.add(product3); // product4 وضعنا فيه الكائن Arrayهنا قمنا بتعريف كائن من الكلاس // و الذي سننئه بعد قليل order2 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن ArrayList<Product> order2Products = new ArrayList(); order2Products.add(product4); // product5 و product6 وضعنا فيه الكائنات Arrayهنا قمنا بتعريف كائن من الكلاس // و الذي سننئه بعد قليل order3 لأننا ننوي وضعها في مصفوفة المنتجات التي تم شراءها في الفاتورة التي يمثلها الكائن ArrayList<Product> order3Products = new ArrayList(); 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); } }

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

Person with id 1 info.   --> الموضوعة في السطر 67 printPersonInfo() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Mhamad
Phone: +96170123456
Gender: Male
Email: mhamad@example.com
----------------------
Person with id 2 info.   --> الموضوعة في السطر 68 printPersonInfo() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Nadine
Phone: +9631249392
Gender: Female
Salary: 800.0$
Working time: 8:00 AM to 3:00 PM
----------------------
Product with id 1 details.   --> الموضوعة في السطر 72 printProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Keyboard
Price: 15.0$
----------------------
Product with id 2 details.   --> الموضوعة في السطر 73 printProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Camera
Price: 45.0$
----------------------
Product with id 3 details.   --> الموضوعة في السطر 74 printProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: HDD 1TB
Price: 70.0$
----------------------
Product with id 4 details.   --> الموضوعة في السطر 75 printProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: SSD 1TB
Price: 274.66$
----------------------
Product with id 5 details.   --> الموضوعة في السطر 76 printProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Mouse
Price: 8.0$
----------------------
Product with id 6 details.   --> الموضوعة في السطر 77 printProductDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Table
Price: 44.55$
----------------------
All orders made by person with id 1:   --> الموضوعة في السطر 80 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:   --> الموضوعة في السطر 81 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!   --> الموضوعة في السطر 88 printOrderDetails() تم عرض هذا المحتوى بسبب استدعاء الدالة
----------------------
All orders made by person with id 1:   --> الموضوعة في السطر 89 printPersonOrders() تم عرض هذا المحتوى بسبب استدعاء الدالة
> Order: #2
  Date: 2020-2-7
  Is paid: yes
  Ordered by: Mhamad
  Products:
  - SSD 1TB: 274.66$
  Total Price: 274.66$
----------------------