حتماً توضیحات تکمیلی مسابقه (راجع به نحوه نمرهدهی، معیارهای نهایی برای ورود به دوره نیمبو، و نحوه ارسال کدها) را در بلاگ Quera بخوانید: blog.quera.ir
از شما خواسته شده است طبق توضیحات زیر، یک پیادهسازی مقدماتی از سامانه ثبت نسخه دارویی را به زبان جاوا انجام دهید. ابتدا بستهی ir.nimbo را دانلود کرده و محتوای آن را ببینید.
این سامانه دو هدف اصلی دارد. ثبت نسخه به صورت اینترنتی و جستوجوی دارو
تلاش کنید برنامهی خود را تمیز و اصولی پیادهسازی کنید.
برای این منظور در کلاس DrugRepository
به عنوان مخزن داروها (Drug
)، دو متد برای جستوجو در بین داروها قرار دارد که شما باید آنها را پیادهسازی کنید:
findDrugByExactName
: در بین داروهای موجود در مخزن جستوجو میکند و دارویی که نامش دقیقا برابر با پارامتر ورودی است را بر میگرداند. (کوچک و بزرگ بودن حروف مهم است).search
: زمانی که نام دارویی را به صورت دقیق نمیدانیم و تنها بخشی از نام دارو را میدانیم، از این متد میتوان برای پیدا کردن نام دقیق دارو استفاده کرد. به این صورت که بخشهایی از نام دارو را که نمیدانیم، به جایش علامت %
میگذاریم. مثلا اگر بدانیم نام داروی مورد نظر ما شامل رشتهی phen
میباشد و ابتدا یا انتهاش ممکن است حروف دیگری هم وجود داشته باشد، پارامتر ورودی متد را به صورت %phen%
وارد میکنیم. خروجی این متد، یک لیست شامل نام کلیهی داروهایی خواهد بود که با رشتهی ورودی مطابقت دارند (کوچک و بزرگ بودن حروف مهم نیست).به این منظور، دو سرویس زیر باید پیادهسازی شوند. این سرویسها در کلاس PrescriptionService
قرار دارند و به صورت زیر باید عمل کنند:
۱. سرویس primaryRegisteration
:
با ثبت نسخه (Prescription
) و ارایهی یک موقعیت مکانی (Location
) دلخواه به برنامه، نزدیکترین داروخانه (Pharmacy
) به آن موقعیت مکانی که تمامی آیتمهای موجود (PrescriptionItem
) در آن نسخه را دارد (موجودی داروخانه باید بیشتر یا مساوی تعداد داروی مورد نظر باشد)، پیدا کرده و برگرداند.
Prescription is expired.
No Pharmacy Found. Try Later...
LocationService
در اختیارتان قرار داده خواهد شد و با فراخوانی متد distance
از آن، میتوانید مقدار فاصله بین دو موقعیت مکانی را بدست آورید.۲. سرویس finalRegisteration
:
این سرویس با گرفتن یک داروخانه و یک نسخه در پارامترهای ورودی، باید موجودی داروهای موجود در نسخه را در آن داروخانه بهروز کند:
نسخه (Prescription):
PrescriptionItem
) است که نام و تعداد هر آیتم در آن ذکر شده است.مخزن دارو (DrugRepository):
getInstance
برگردانده شود.داروخانه (Pharmacy):
inventory
) مشخص است.addDrug
باید بتوان یک دارو با مقدار موجودی مورد نظر را به لیست داروهای داروخانه (drugs) اضافه کرد (شما پیادهسازی کنید). دارویی که همچنان در داروخانه موجود است، به عنوان پارامتر به این متد داده نمیشود.removeDrug
باید بتوان یک دارو را از لیست داروهای داروخانه حذف کرد (شما پیادهسازی کنید).getDrugInventory
باید بتوان مقدار موجودی دارویی که در پارامتر ورودی داده شده است را به دست آورد (شما پیادهسازی کنید).getDrugCount
تعداد کل داروهای موجود در داروخانه به دست میآید (شما پیادهسازی کنید). دارو (Drug):
basePrice
) است.InsuredDrug
و UninsurdDrug
، متد getPrice
باید به گونهای پیادهسازی شود که قیمت داروهای تحت پوشش بیمه، ۳۰% کمتر محاسبه شود و قیمت داروهای آزاد، بدون تغییر و برابر با basePrice
باشد.نکته:
Parameterized Constructor
) دارند، نباید سازندهی دیگری اضافه شود. مثال:
فایل Program.java را دانلود کرده و در کنار فایلهایی که پیادهسازی کردهاید قرار داده و اجرا کنید. با اجرای آن، باید خروجی زیر در کنسول چاپ شود:
دقت کنید در این مثال، هدف تنها اجرای finalRegisteration
بوده است، بنابراین از یک پیادهسازی سادهلوحانه و غیرواقعی از LocationService
استفاده شده است.
آنچه باید آپلود کنید: یک فایل زیپ شامل بستهی ir.nimbo است. به صورتی که وقتی فایل زیپ را باز میکنیم، دقیقا شاخهی ir را ببینیم که درون آن شاخهی nimbo قرار دارد. در داخل شاخهی nimbo هفت فایل زیر باید وجود داشته باشد:
UninsurdDrug.java InsuredDrug.java Drug.java DrugRepository.java Pharmacy.java Prescription.java PrescriptionService.java