تحديات برمجيةالتحدي الثاني - الحل بلغة بايثون
فكرة المشروع
في هذا التمرين سنفترض أننا نقوم بتخزين بيانات لمؤسسة صغيرة.
البيانات التي نريد تخزينها هي التالية:
- الموظفين الذين يعملون في المؤسسة (الإسم, الهاتف, الجنس, دوام العمل, أيام العمل).
- الزبائن الذين يشترون من المؤسسة (الإسم, الهاتف, الجنس, البريد الإلكتروني).
- المنتجات التي تبيعها المؤسسة (إسم المنتج و سعره).
- الفواتير الخاصة ببيع المنتجات (تاريخ البيع, هل تم الدفع أم لا, بيانات المشتري, المنتجات التي تم شراءها).
ملاحظة: رقم التعرفة لكل من الأشخاص, المنتجات, الفواتير يجب أن يتم إعطاؤه لهم بشكل تلقائي.
الشكل العام لأقسام المشروع
شرح أقسام المشروع
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
موحد لكل كائن يتم إنشاؤه, يمكنك تعريف متغير في الكلاس و الأفضل جعله مخفياً ( من خلال وضع الرمز __
قبل إسمه ) حتى لا يمكن رؤيته مع باقي متغيرات الكلاس من الكائنات التي ننشئها منه. بعدها تقوم فقط بجعل قيمته تزيد 1 كلما قمت بإنشاء كائن من هذا الكلاس و من ثم تضع قيمته في المتغير id
.
ملاحظة: سنقوم بإنشاء متغير إسمه __id_incrementer
في الكلاسات Person
, Product
و Order
من أجل هذا الهدف فقط.
الحل بلغة بايثون
# و الذي سيحتوي على جميع الخصائص التي سيمكلها أي شخص Person هنا قمنا بتعريف الكلاس class Person: # بتعريفه هنا و هكذا ليكون موحد بالنسبة لجميع الكائنات التي ننشئها من هذا الكلاس idIncrementer المتغير __id_incrementer = 0 # هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها الشخص و التي يمكننا تحديد قيمها عند إنشاء كائن من هذا الكلاس # الخاسة بالكائن id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بجعل قيمة # القيم الأخرى التي يتم تمريرها للكائن سيتم تخزينها كما هي def __init__(self, name, phone, gender): Person.__id_incrementer += 1 self.id = Person.__id_incrementer self.name = name self.phone = phone self.gender = gender
from Person import Person # الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي زبون Client هنا قمنا بتعريف الكلاس # email لأن الزبون عبارة عن شخص عادي و لكنه يملك الخاصية الإضافية Person هذا الكلاس يرث من الكلاس class Client(Person): # هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته # super() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس name, phone, gender الخصائص # id سيتولى أمر توليد قيمة للمتغير Person أيضاَ, لا تنسى أن كونستركتور الكلاس def __init__(self, name, phone, gender, email): super().__init__(name, phone, gender) self.email = email
from Person import Person # الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي موظف Employee هنا قمنا بتعريف الكلاس # workingTime و salary لأن الموظف عبارة عن شخص عادي و لكنه يملك خصائص إضافية هي Person هذا الكلاس يرث من الكلاس class Employee(Person): # هنا قمنا بتعريف كونستركتور للكلاس حتى نستطيع إسناد قيم للخصائص بشكل مباشر بواسطته # super() عن طريق الدالة Person سيتم إسناد قيم لها من خلال كونستركتور الكلاس name, phone, gender الخصائص # id سيتولى أمر توليد قيمة للمتغير Person أيضاَ, لا تنسى أن كونستركتور الكلاس def __init__(self, name, phone, gender, salary, working_time): super().__init__(name, phone, gender) self.salary = salary self.working_time = working_time
# الذي وضعنا فيه المعلومات الأساسية التي يجب أن يملكها أي منتج Product هنا قمنا بتعريف الكلاس class Product: # بتعريفه هنا و هكذا ليكون موحد بالنسبة لجميع الكائنات التي ننشئها من هذا الكلاس idIncrementer المتغير __id_incrementer = 0 # هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها المنتج و التي يمكننا تحديد قيمها عند إنشاء كائن من هذا الكلاس # الخاسة بالكائن id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بجعل قيمة # القيم الأخرى التي يتم تمريرها للكائن سيتم تخزينها كما هي def __init__(self, name, price): Product.__id_incrementer += 1 self.id = Product.__id_incrementer self.name = name self.price = price
# و الذي سيحتوي على جميع الخصائص التي ستملكها أي فاتورة Order هنا قمنا بتعريف الكلاس class Order: # بتعريفه هنا و هكذا ليكون موحد بالنسبة لجميع الكائنات التي ننشئها من هذا الكلاس idIncrementer المتغير __id_incrementer = 0 # هنا قمنا بتعريف الخصائص الأساسية التي يجب أن يملكها الفاتورة و التي يمكننا تحديد قيمها عند إنشاء كائن من هذا الكلاس # الخاسة بالكائن id تزيد 1 في كل مرة و من ثم يتم وضعها في الخاصية idIncrementer لاحظ أننا قمنا بجعل قيمة # القيم الأخرى التي يتم تمريرها للكائن سيتم تخزينها كما هي def __init__(self, date, is_paid, person, products): Order.__id_incrementer += 1 self.id = Order.__id_incrementer self.date = date self.is_paid = is_paid self.person = person self.products = products
from Client import Client from Employee import Employee # يمثل كل ما تحتويه المكتبة من كتب و مؤلفين و الدوال التي يمكن استخدامها للتعامل معهم Company هنا قمنا بتعريف الكلاس class Company: # سنضع فيها كل معلومات الفواتير orders سنضع فيها كل معلومات الكتب. المصفوفة orders سنضع فيها كل معلومات الأشخاص. المصفوفة persons المصفوفة persons = [] products = [] orders = [] # product بداخل المصفوفة Product يمكن استخدامها لإضافة كائن من الكلاس add_product() الدالة def add_product(self, product): self.products.append(product) # persons بداخل المصفوفة Person يمكن استخدامها لإضافة كائن من الكلاس add_person() الدالة def add_person(self, person): self.persons.append(person) # orders بداخل المصفوفة Order يمكن استخدامها لإضافة كائن من الكلاس add_order() الدالة def add_order(self, order): self.orders.append(order) # الخاص به id بالإعتماد على رقم الـ products موضوع بداخل المصفوفة Product يمكن استخدامها لإلغاء كائن من الكلاس remove_product() الدالة def remove_product(self, id): # product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for product in self.products: # الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن if product.id == id: self.products.remove(product) return # الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ products في حال لم يتم إيجاد أي كائن في المصفوفة print("Product with id", id, "is not found!") print("----------------------") # الخاص به id بالإعتماد على رقم الـ persons موضوع بداخل المصفوفة Person يمكن استخدامها لإلغاء كائن من الكلاس remove_person() الدالة def remove_person(self, id): # person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for person in self.persons: # الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن if person.id == id: self.persons.remove(person) return # الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة print("Person with id", id, "is not found!") print("----------------------") # الخاص به id بالإعتماد على رقم الـ orders موضوع بداخل المصفوفة Order يمكن استخدامها لإلغاء كائن من الكلاس remove_order() الدالة def remove_order(self, id): # order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for order in self.orders: # الذي مررناه للدالة سيتم حذفه و من ثم الخروج من الدالة id يملك نفس رقم الـ order في حال كان الكائن if order.id == id: self.orders.remove(order) return # الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ orders في حال لم يتم إيجاد أي كائن في المصفوفة print("Order with id", id, "is not found!") print("----------------------") # الخاص به id بالإعتماد على رقم الـ persons يمكن استخدامها لطباعة كل المعلومات المتوفرة حول شخص موضوع بداخل المصفوفة print_person_info() الدالة def print_person_info(self, id): # person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for person in self.persons: # الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ person في حال كان الكائن if person.id == id: print("Person with id", id, "info.") print("Name:", person.name) print("Phone:", person.phone) print("Gender", person.gender) # التي يملكها email سيتم طباعة الخاصية Client تم إنشاؤه من الكلاس person إذا كان الكائن if isinstance(person, Client): print("Email:", person.email) # التي يملكها workingTime و salary سيتم طباعة الخاصيتين Employee تم إنشاؤه من الكلاس person إذا كان الكائن elif isinstance(person, Employee): print("Salary:", person.salary) print("Working time", person.working_time) # بعدها سيتم طباعة خط و الخروج من الدالة print("----------------------") return # الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ persons في حال لم يتم إيجاد أي كائن في المصفوفة print("Person with id", id, "is not found!") print("----------------------") # الخاص به id بالإعتماد على رقم الـ products يمكن استخدامها لطباعة كل المعلومات المتوفرة حول منتج موضوع بداخل المصفوفة print_product_details() الدالة def print_product_details(self, id): # product و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن products بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for product in self.products: # الذي مررناه للدالة سيتم طباعة كل معلوماته و من ثم الخروج من الدالة id يملك نفس رقم الـ product في حال كان الكائن if product.id == id: print("Product with id", id, "info.") print("Name:", product.name) print("Price:", str(product.price) + "$") print("----------------------") return # الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ products في حال لم يتم إيجاد أي كائن في المصفوفة print("Product with id", id, "is not found!") print("----------------------") # الخاص به id بالإعتماد على رقم الـ orders يمكن استخدامها لطباعة كل المعلومات المتوفرة حول فاتورة موضوعة بداخل المصفوفة print_order_details() الدالة def print_order_details(self, id): # سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في الفاتورة total_sum المتغير total_sum = 0 # order و كل كائن نمر عليه ( و الذي يمثل كتاب ) سنضعه بشكل مؤقته بداخل الكائن orders هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة for order in self.orders: # الذي مررناه للدالة سيتم طباعة كل معلوماته id يملك نفس رقم الـ order في حال كان الكائن if order.id == id: print("Order with id", id, "details.") print("Date:", order.date) print("Is paid:", "yes" if order.is_paid else "no") print("Ordered by:", order.person.name) print("Products") # order الموضوعة في الكائن products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة # product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن # total_sum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير for product in order.products: total_sum += product.price print("- " + product.name + ": " + str(product.price) + "$") # و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة و من ثم الخروج من الدالة total_sum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير print("Total Price: " + str(total_sum) + "$") print("----------------------") return # الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ orders في حال لم يتم إيجاد أي كائن في المصفوفة print("Order with id", id, "is not found!") print("----------------------") # الخاص به id بالإعتماد على رقم الـ persons يمكن استخدامها لطباعة كل معلومات الفواتير التابعة لشخص موضوع بداخل المصفوفة print_person_orders() الدالة def print_person_orders(self, id): # الذي تم تمريره للدالة id يملك رقم الـ persons بهدف التأكد ما إن كان يوجد شخص في المصفوفة isPersonExist سنستخدم المتغير # تابعو لهذا الشخص لأن ذلك سيكون غير منطقي orders لأنه إن لم يكن هناك شخص أصلاً فلن نقوم بالبحث عن فواتير في المصفوفة is_person_exist = False # person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة for person in self.persons: # الذي مررناه للدالة سيتم تغيير قيمة id يملك نفس رقم الـ person في حال كان الكائن # persons و إيقاف الحلقة لأننا تأكدنا أن هذا الشخص موجود في المصفوفة True إلى is_person_exist if person.id == id: is_person_exist = True break # persons فهذا يعني أنه لم يتم إيجاد أي كائن في المصفوفة False تساوي is_person_exist في حال بقيت قيمة # الذي تم تمريره للدالة سيتم طباعة الجملة التالية و الخروج من الدالة id يملك نفس رقم الـ if not is_person_exist: print("Person with id", id, "is not found!") print("----------------------") return print("All orders made by person with id " + str(id) + ":") # order و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن orders بواسطة هذه الحلقة سنمر على جميع الكائنات المخزنة بداخل المصفوفة for order in self.orders: # ( الذي مررناه للدالة سيتم طباعة معلوماته ( أي معلومات الفاتورة id يملك نفس رقم الـ order الموضوع في الكائن person في حال كان الكائن if order.person.id == id: print("> Order: #" + str(order.id)) print(" Date:", order.date) print(" Is paid:", "yes" if order.is_paid else "no") print(" Ordered by:", order.person.name) print(" Products") # سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في كل فاتورة total_sum المتغير total_sum = 0 # order الموضوعة في الكائن products هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة # product كل كائن نمر عليه ( و الذي يمثل منتج ) سنضعه بشكل مؤقته بداخل الكائن # totalSum سعر كل منتج يتم إيجاده في هذه المصفوفة سيتم إضافته على قيمة المتغير for product in order.products: total_sum += product.price print(" - " + product.name + ": " + str(product.price) + "$") # و الذي يمثل ثمن كل المشتريات الموضوعة في الفاتورة total_sum هنا سيتم عرض ناتج الجمع الذي تم تخزينه في المتغير print(" Total Price: " + str(total_sum) + "$") print("----------------------")
from Client import Client from Employee import Employee from Product import Product from Order import Order from Company import Company # أي كأننا قمنا بإنشاء شخصين Person هنا قمنا بإنشاء كائنين من كلاسات ترث من الكلاس # و بالتالي فإنه يمثل شخص يعتبر زبون Client عبارة عن كائن من الكلاس person1 # و بالتالي فإنه يمثل شخص يعتبر موظف Employee عبارة عن كائن من الكلاس person2 person1 = Client("Mhamad", "+96170123456", "Male", "mhamad@example.com") person2 = Employee("Nadine", "+9631249392", "Female", 800, "8:00 AM to 3:00 PM") # و التي تمثل 6 منتجات Product هنا قمنا بتعريف 6 كائنات من الكلاس product1 = Product("Keyboard", 15) product2 = Product("Camera", 45) product3 = Product("HDD 1TB", 70) product4 = Product("SSD 1TB", 274.66) product5 = Product("Mouse", 8) product6 = Product("Table", 44.55) # و التي تمثل فواتير Order هنا قمنا بتعريف 3 كائنات من الكلاس # person1 وضعناهما لنفس الشخص الذي يمثل الكائن order2 و order1 لاحظ أن الفاتورتين order1 = Order("2020-1-1", True, person1, [product1, product2, product3]) order2 = Order("2020-2-7", True, person1, [product4]) order3 = Order("2020-5-4", False, person2, [product5, product6]) # لأننا نريد تخزين الأشخاص و المنتجات و الفواتير بشكل مرتب بداخله Company هنا قمنا بإنشاء كائن من الكلاس company = Company() # add_person() بواسطة الدالة company التي يمكلها الكائن persons هنا قمنا بإضافة الشخصين في المصفوفة company.add_person(person1) company.add_person(person2) # add_product() بواسطة الدالة company التي يمكلها الكائن products هنا قمنا بإضافة المنتجات في المصفوفة company.add_product(product1) company.add_product(product2) company.add_product(product3) company.add_product(product4) company.add_product(product5) company.add_product(product6) # add_order() بواسطة الدالة company التي يمكلها الكائن orders هنا قمنا بإضافة الفواتير في المصفوفة company.add_order(order1) company.add_order(order2) company.add_order(order3) # print_person_info() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كلا الشخصين بالإعتماد على رقم التعرفة # تذكر: رقم التعرفة الخاص بكل شخص تم إنشاؤه بشكل تلقائي عند إنشاء كل شخص بداخل الكونستركتور company.print_person_info(1) company.print_person_info(2) # print_product_details() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة معلومات كل المنتجات بالإعتماد على رقم التعرفة # تذكر: رقم التعرفة الخاص بكل منتج تم إنشاؤه بشكل تلقائي عند إنشاء كل منتج بداخل الكونستركتور company.print_product_details(1) company.print_product_details(2) company.print_product_details(3) company.print_product_details(4) company.print_product_details(5) company.print_product_details(6) # print_person_orders() الخاص بهم و بواسطة الدالة id هنا قمنا بطباعة الفواتير التي يملكها كل شخص بالإعتماد على رقم التعرفة company.print_person_orders(1) company.print_person_orders(2) # remove_order() هنا قمنا الفاتورة التي تملك رقم التعرفة 1 بواسطة الدالة # printOrderDetails() بعدها حاولنا طباعة معلومات الفاتورة التي قمنا بحذفها بواسطة الدالة # بعدها قمنا بطباعة جمبع الفواتير التي يمكلها الشخص الذي يملك رقم التعرفة 1 و الذي كان يملك الفاتورة التي تم حذفها # لاحظ أن الفاتورة المحذوفة أيضاَ لم تظر ضمن فواتيره company.remove_order(1) company.print_order_details(1) company.print_person_orders(1)
سنحصل على النتيجة التالية عند التشغيل.
Name: Mhamad
Phone: +96170123456
Gender: Male
Email: mhamad@example.com
----------------------
Person with id 2 info. --> الموضوعة في السطر 50 print_person_info() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Nadine
Phone: +9631249392
Gender: Female
Salary: 800$
Working time: 8:00 AM to 3:00 PM
----------------------
Product with id 1 details. --> الموضوعة في السطر 54 print_product_details() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Keyboard
Price: 15$
----------------------
Product with id 2 details. --> الموضوعة في السطر 55 print_product_details() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Camera
Price: 45$
----------------------
Product with id 3 details. --> الموضوعة في السطر 56 print_product_details() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: HDD 1TB
Price: 70$
----------------------
Product with id 4 details. --> الموضوعة في السطر 57 print_product_details() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: SSD 1TB
Price: 274.66$
----------------------
Product with id 5 details. --> الموضوعة في السطر 58 print_product_details() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Mouse
Price: 8$
----------------------
Product with id 6 details. --> الموضوعة في السطر 59 print_product_details() تم عرض هذا المحتوى بسبب استدعاء الدالة
Name: Table
Price: 44.55$
----------------------
All orders made by person with id 1: --> الموضوعة في السطر 62 print_person_orders() تم عرض هذا المحتوى بسبب استدعاء الدالة
> Order: #1
Date: 2020-1-1
Is paid: yes
Ordered by: Mhamad
Products:
- Keyboard: 15$
- Camera: 45$
- HDD 1TB: 70$
Total Price: 130$
> 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: --> الموضوعة في السطر 63 print_person_orders() تم عرض هذا المحتوى بسبب استدعاء الدالة
> Order: #3
Date: 2020-5-4
Is paid: no
Ordered by: Nadine
Products:
- Mouse: 8$
- Table: 44.55$
Total Price: 52.55$
----------------------
Order with id 1 is not found! --> الموضوعة في السطر 70 print_order_details() تم عرض هذا المحتوى بسبب استدعاء الدالة
----------------------
All orders made by person with id 1: --> الموضوعة في السطر 71 print_person_orders() تم عرض هذا المحتوى بسبب استدعاء الدالة
> Order: #2
Date: 2020-2-7
Is paid: yes
Ordered by: Mhamad
Products:
- SSD 1TB: 274.66$
Total Price: 274.66$
----------------------