تمرین‌های آموزشی

آش مامان‌جون (تا پایان جلسه چهاردهم)

سطح سوال: متوسط

آنچه از این جلسه باید بدانید: آشنایی با کاربردهای ظرف‌ها و ساختمان‌داده‌های مختلف جاوا

مغازه‌ی آش‌فروشی مامان‌جون یک مغازه‌ی قدیمی و صاحب نام در محدوده انقلاب است. به مرور زمان شهرت و محبوبیت آش‌های مامان‌جون بیشتر و بیشتر شده و تعداد تقاضا و سفارشات روزانه نیز رو به افزایش است. آن‌ها محدودیتی در میزان پخت آش ندارند و تنها چالشی که با آن روبرو هستند، کوچک بودن فضای مغازه برای سرویس‌دهی و فروش آش به مشتریان است. مامان‌جون تصمیم می‌گیرد تا فروش و سرویس‌دهی به سفارشات رو تا جای ممکن به صورت غیرحضوری انجام دهد و در واقع آش را به محل مشتری ارسال کند. برای اینکه مشتریان را ترغیب کند تا به صورت غیرحضوری خرید کنند، سیاست زیر را در پیش می‌گیرد. سه روش مختلف برای سفارش وجود دارد:

  1. حضوری
  2. پیامکی
  3. تلفنی

هر یک از انواع سفارشات به صورت مجزا بررسی و رسیدگی می‌شوند. برای ترغیب مشتریان به خرید غیرحضوری، سیاست‌های زیر برای ثبت و تحویل سفارش‌های مشتریانی که از هر یک از سه روش فوق استفاده می‌کنند، در نظر گرفته شده است.

  1. سفارش حضوری: افراد بر حسب حرف دوم!!! نام خود مرتب شده و به همان ترتیب سفارششان را تحویل می‌گیرند. در واقع هر فرد جدید که به صورت حضوری برای سفارش اقدام می‌کند، نامش به لیست سفارشات حضوری اضافه شده و این لیست مجددا بر اساس حرف دوم!!! نام افراد مرتب می‌شود. این سیاست غیرعادلانه به این دلیل اتخاذ شده است که مردم برای خریدهای بعدی خود از سفارش حضوری منصرف شده و از طریق دیگری سفارش خود را ثبت کنند. اگر فردی که هنوز سفارش خود را دریافت نکرده، مجددا برای ثبت همان سفارش اقدام کند، الویت رسیدگی به سفارشش هیچ تغییری نمی‌کند. در واقع سفارشش چون تکراری است، اصلا ثبت نمی‌شود.
  2. سفارش از طریق پیامک: همواره سفارش کسی که آخرین پیامک را زده ثبت و تحویل داده می‌شود. ممکن است برای اینکه افراد به اول لیست سفارشات بیایند، چندین بار سفارش خود را پیامک کنند. مسوول ثبت سفارش باید حواسش باشد که اگر سفارشی قبلا در لیست وجود داشته، آن سفارش را به ابتدای لیست منتقل کند و مجددا آن را ثبت نکند. وگرنه ممکن است هر کس به تعداد پیامک‌هایی که زده، سفارشش را دریافت کند که ما قطعا همچین چیزی نمی‌خواهیم.
  3. سفارش تلفنی: به همان ترتیبی که افراد تماس گرفته و سفارش می‌دهند، به همان ترتیب هم سفارش خود را در محل مورد نظرشان دریافت می‌کنند. اگر فردی مجددا تماس بگیرد، الویت رسیدگی به سفارشش هیچ تغییری نمی‌کند. در واقع سفارشش چون تکراری است، اصلا ثبت نمی‌شود.

نکات

  • در تمامی این سه روش، باید توجه داشت که هیچ سفارش تکراری‌ای ثبت نمی‌شود و فقط و فقط در روش پیامکی، سفارش تکراری باعث تغییر در الویت‌های رسیدگی به سفارشات می‌شود.
  • برای ثبت سفارش، نام فرد سفارش‌دهنده، شماره تماس و وزن آشی که می‌خواهد سفارش دهد، ثبت می‌شود. تا پایان روز به تمام سفارش‌های ثبت‌شده رسیدگی می‌شود.
  • هر کس تا زمانی که سفارشش را دریافت نکرده، دیگر نمی‌تواند سفارشی با همان شماره تماس و همان وزن را ثبت کند.

حالا وقت پیاده‌سازی است. بسته‌ی ir.javacup.delivery را دانلود کنید. در داخل این بسته یک واسط با نام DeliveryOrder و یک کلاس با نام Order وجود دارد. در واسط DeliveryOrderr سه متد به شرح زیر تعریف شده‌اند:

رفتار نام متد
سفارشی که الان نوبتش است و باید به آن رسیدگی شود را برمی‌گرداند تا به آن رسیدگی شود و به این ترتیب، آن سفارش، از مجموعه سفارشاتِ در حال انتظار حذف می‎کند. Order getCurrentOrder();
یک سفارش دریافت می‌کند و به نحوی که توضیح داده‌شد آن را به لیست سفارشات اضافه می‌کند. void takeNewOrder(Order order);
کالکشنی که مجموعه‌ی سفارشات در آن قرار دارد را برمی‌گرداند. Collection<Order> getOrders();

شما باید سه کلاس به صورت زیر ایجاد کنید که برای هریک از انواع سفارشات، این واسط را پیاده‌سازی کنند:

  1. کلاس SMSOrderDelivery: برای سفارش پیامکی
  2. کلاس CallOrderDelivery: برای سفارش تلفنی
  3. کلاس InPersonOrderDelivery: برای سفارش حضوریهمانطور که در بالاتر نیز توضیح داده شد، هر یک از انواع سفارشات به صورت مجزا بررسی و رسیدگی می‌شوند. پس هر کدام باید دارای یک کالکشن جدا باشند.

آنچه باید آپلود کنید:

یک فایل زیپ شامل بسته‌ی ir.javacup.delivery است. به صورتی که وقتی فایل زیپ را باز می‌کنیم، دقیقا شاخه‌ی ir را ببینیم که درون آن شاخه‌ی javacup و درون آن نیز شاخه‌ی delivery قرار دارد. در داخل شاخه‌ی delivery باید 4 فایل Order.java و CallOrderDelivery.java و SMSOrderDelivery.java و InPersonOrderDelivery.java وجود داشته باشد.

برای داوری تمرین، می‌توانید پاسخ خود را در سایت Quera به نحوی که در بالا گفته شد، بارگذاری کنید.

با ما همراه باشید:

آدرس کانال تلگرام: IranianJavaDevelopers@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

نوشته های مشابه

‫8 دیدگاه ها

    1. سلام
      دقیقا همانطور که در بخش «آنچه باید آپلود کنید» گفته شده باید عمل کنید.
      واسط DeliveryOrder را نباید تغییری دهید و بنابراین نیازی هم نیست که آپلود کنید. در هنگام اجرای کد، واسط در کنار کلاس‌هایی که شما پیاده‌سازی و ارسال کردید قرار میگیره.

  1. با سلام و عرض خسته نباشید بسته ir.javacup.delivery قابل دانلود نمیباشذ لطفا بررسی کتید …
    با تشکر از سایت خوبتون

    1. سلام
      ما بررسی کردیم و ظاهرا مشکلی وجود نداشت.
      لطفا یکبار دیگر تلاش کنید.
      با تشکر

پاسخ دادن به مهدی لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا