from Client import Client
from Employee import Employee
# يمثل كل ما تحتويه المكتبة من كتب و مؤلفين و الدوال التي يمكن استخدامها للتعامل معهم Company هنا قمنا بتعريف الكلاس
# سنضع فيها كل معلومات الفواتير orders سنضع فيها كل معلومات الكتب. المصفوفة orders سنضع فيها كل معلومات الأشخاص. المصفوفة persons المصفوفة
# 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 في حال كان الكائن
self.products.remove(product)
# الذي تم تمريره للدالة سيتم طباعة الجملة التالية 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 في حال كان الكائن
self.persons.remove(person)
# الذي تم تمريره للدالة سيتم طباعة الجملة التالية 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 في حال كان الكائن
self.orders.remove(order)
# الذي تم تمريره للدالة سيتم طباعة الجملة التالية 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 في حال كان الكائن
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("----------------------")
# الذي تم تمريره للدالة سيتم طباعة الجملة التالية 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 في حال كان الكائن
print("Product with id", id, "info.")
print("Name:", product.name)
print("Price:", str(product.price) + "$")
print("----------------------")
# الذي تم تمريره للدالة سيتم طباعة الجملة التالية id يملك نفس رقم الـ products في حال لم يتم إيجاد أي كائن في المصفوفة
print("Product with id", id, "is not found!")
print("----------------------")
# الخاص به id بالإعتماد على رقم الـ orders يمكن استخدامها لطباعة كل المعلومات المتوفرة حول فاتورة موضوعة بداخل المصفوفة print_order_details() الدالة
def print_order_details(self, id):
# سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في الفاتورة total_sum المتغير
# order و كل كائن نمر عليه ( و الذي يمثل كتاب ) سنضعه بشكل مؤقته بداخل الكائن orders هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for order in self.orders:
# الذي مررناه للدالة سيتم طباعة كل معلوماته id يملك نفس رقم الـ order في حال كان الكائن
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)
# 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("----------------------")
# الذي تم تمريره للدالة سيتم طباعة الجملة التالية 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 لأنه إن لم يكن هناك شخص أصلاً فلن نقوم بالبحث عن فواتير في المصفوفة
# person و كل كائن نمر عليه سنضعه بشكل مؤقته بداخل الكائن persons هنا سنمر على جميع الكائنات المخزنة بداخل المصفوفة
for person in self.persons:
# الذي مررناه للدالة سيتم تغيير قيمة id يملك نفس رقم الـ person في حال كان الكائن
# persons و إيقاف الحلقة لأننا تأكدنا أن هذا الشخص موجود في المصفوفة True إلى is_person_exist
# persons فهذا يعني أنه لم يتم إيجاد أي كائن في المصفوفة False تساوي is_person_exist في حال بقيت قيمة
# الذي تم تمريره للدالة سيتم طباعة الجملة التالية و الخروج من الدالة id يملك نفس رقم الـ
print("Person with id", id, "is not found!")
print("----------------------")
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)
# سنستخدمه لحساب ناتج جمع جميع أسعار المنتجات التي نجدها في كل فاتورة total_sum المتغير
# 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
# يمثل كل ما تحتويه المكتبة من كتب و مؤلفين و الدوال التي يمكن استخدامها للتعامل معهم 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("----------------------")