Action disabled: source

فروشگاه شی‌گرا

می‌خواهیم فروشگاه آنلاینی را به صورت شی‌گرا مدل‌سازی کنیم. در پوشهٔ پروژه دو فایل با نام‌های model.py و store.py ایجاد کنید. ماژول model مدلی از مفاهیم مرتبط با فروشگاه را نگه‌داری می‌کند و store حاوی نمونه‌هایی از مدل‌های موجود در ماژول model خواهد بود. در ماژول model چهار تا کلاس برای کاربر با نام User و محصولات فروشگاه با نام Product و سفارشات ثبت‌شده توسط کاربران با نام Purchase و نظرات کاربران دربارهٔ کالاها با نام Comment داریم. جزئیات کلاس‌ها به شرح زیر است:

  • کلاس کاربر با نام User:
    • نام کاربری با نام username که نوع آن متنی است.
  • کلاس کالا با نام Product:
    • عددی یکتا برای هر کالا با نام id به عنوان کد هر کالا که نوع آن عدد است و از یک شروع می‌شود و به‌صورت ترتیبی زیاد می‌شود. این مقدار یکتا باید موقع ایجاد یک نمونهٔ جدید از Product به آن تخصیص داده شود.
    • نام کالا با نام name که نوع آن متنی است.
    • قیمت با نام price که نوع آن عدد است.
    • تعداد موجود از کالا در هر فروشگاه که با quantity مشخص می‌شود و نوع آن دیکشنری است. در این دیکشنری کلیدها نام فروشگاه‌ها از نوع متنی و مقادیر، تعداد موجودی کالا در آن فروشگاه از نوع عدد است.
  • کلاس سفارش با نام Purchase:
    • تاریخچهٔ سفارشات ثبت شده با نام purchases که نوع آن لیست از اطلاعات سفارش‌ها است.
    • شی product و store و number و user و تاریخ با نام date یعنی این‌که چه کالایی از چه فروشگاهی به چه تعداد توسط چه کاربری در چه تاریخی تهیه شده است. برای تولید تاریخ از کتابخانهٔ استاندارد time استفاده کنید. بعد تهیهٔ هر کالا باید تعداد آن کالا در فروشگاه مورد نظر به تعداد سفارش‌داده‌شده کم شود.
  • کلاس نظر با نام Comment:
    • کاربری که نظر را ثبت کرده با نام user که نوع آن User است.
    • کالایی که برای آن نظر نوشته با نام product که نوع آن Product است.
    • امتیازی که کاربر همراه متن نظر، مشخص کرده با نام rating که نوع آن عدد است.
    • متن نظر کاربر با نام text که نوع آن متنی است.

در ماژول model باید متدهایی برای اضافه کردن به تعداد یک کالا در یک فروشگاه خاص، بررسی تعداد کل موجودی یک کالا در همهٔ فروشگاه‌ها، بررسی مبلغ فروش هر فروشگاه، لیست کاربرانی که یک کالای به خصوص را خریداری کردند، دریافت نظرات ثبت‌شده توسط یک کاربر، میانگین امتیازهایی که برای یک کالا توسط کاربرانی که آن را خریداری کردند ثبت شده وجود داشته باشد. همچنین امکانات بدیهی یک فروشگاه آنلاین مانند ثبت کاربر جدید، اضافه کردن کالای جدید، سفارش یک کالا توسط یک کاربر از یک فروشگاه و ثبت نظر وجود داشته باشد. جزئیات پیاده‌سازی به شما واگذار شده است. به عنوان مثال برای سفارش یک کالا اگر تعداد موجودی آن کالا در فروشگاه خواسته شده کافی نبود باید پیغام «کالا به تعداد کافی وجود ندارد» را بدهید.

نحوهٔ تعریف ماژول model باید به گونه‌ای باشد که سناریوهای مربوط به instantiate شدن کلاس‌ها و تعامل بین اشیا در زمان اجرا بتواند به طور کامل در ماژول store پیاده‌سازی شود و نیازی به دستکاری model برای پیاده‌سازی آن‌ها نباشد. به عبارت دیگر کدهای ماژول model نباید هیچ وابستگی‌ای به کدهای نوشته شده در ماژول store داشته باشد. در ماژول store باید داده‌های مربوط به فروشگاه‌ها، کالاها و کامنت‌ها و … را با یک رابط متنی از طریق تابع input از کاربر بگیرید و بر اساس داده‌هایی که کاربر می‌دهد از مدل‌های موجود در ماژول model نمونه بسازید. همچنین کد چاپ کردن گزارشات مورد نظر کاربر را در این فایل بنویسید.

برای همهٔ کلاس‌ها و متدها docstring بنویسید.