- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
پارک پردیس برای برگزاری مسابقات المپیک فناوری تعداد زیادی استف استخدام کرده تا این مسابقات به بهترین نحو ممکن برگزار بشن، حالا نیاز به سامانه ای برای مدیریت سلف دارد و از شما میخواهد تا این سامانه را طراحی کنید. این سامانه از دو بخش تشکیل شده است.
بخش کاربران
ثبت نام
کارمندان جدید نیاز دارند در سامانه ثبت نام کنند. برای اینکار دستور زیر را وارد میکنند:
REGISTER username password
$username$ نامکاربری مورد نظر
$password$ رمز عبور مورد نظر
در صورتی که شخصی با این نام کاربری از پیش در سامانه وجود داشته باشد پیام زیر نمایش داده میشود:
USERNAME username ALREADY EXISTS
رمز عبور وارد شده توسط کاربر (password) باید حداقل هشت کاراکتر داشته باشد و شامل ارقام، حروف کوچک و بزرگ و کاراکترهای خاص ( +=_-)(*&^%$#@! ) باشد. در غیر این صورت پیام زیر نمایش داده میشود:
PASSWORD IS NOT STRONG ENOGH
در صورتی که کاربر از قبل داخل سامانه باشد، پیام زیر نمایش داده میشود:
YOU NEED TO LOGOUT FIRST
در صورت موفقیت آمیز بودن ثبت نام، پیام زیر نمایش داده میشود:
username REGISTERED SUCCESSFULLY
ورود
بعد از ثبت نام، کاربران باید توسط بخش مدیریت تایید شوند تا بتوانند از سامانه استفاده کنند که دستورات مربوط به آن در بخش مدیریت آورده شده است.
کارمندان برای ورود به سامانه دستور زیر را وارد میکنند:
LOGIN username password
در صورتی که شخصی با نام کاربری username از پیش در سامانه وجود نداشته باشد یا رمز عبور نادرست باشد، پیام زیر نمایش داده میشود:
WRONG PASSWORD OR USERNAME DOESN'T EXIST
در صورتی که حساب کاربر توسط مدیریت تایید نشده باشد یا غیرفعال شده باشد ، پیام زیر نمایش داده میشود:
ACCOUNT IS DEACTIVE
در صورتی که کاربر از قبل داخل سامانه باشد، پیام زیر نمایش داده میشود:
YOU NEED TO LOGOUT FIRST
در صورت موفقیت آمیز بودن ورود پیام زیر نمایش داده میشود :
username LOGGEDIN SUCCESSFULLY
خروج
کارمندان برای خروج از سامانه دستور زیر را وارد میکنند:
LOGOUT
در صورتی که کاربر وارد سامانه نشده باشد، پیام زیر نمایش داده میشود:
YOU NEED TO LOGIN FIRST
در صورت موفقیت آمیز بودن خروج پیام زیر نمایش داده میشود :
LOGGEDOUT SUCCESSFULLY
مشاهده برنامه غذایی
کارمندان برای مشاهده برنامه غذایی ارائه شده در بازه تاریخی مورد نظرشان دستور زیر را وارد میکنند:
MENU startdate enddate
مقادیر $startdate$ و $enddate$ با فرمت YYYY-MM-DD وارد میشود.
در صورتی که کاربر وارد سامانه نشده باشد، پیام زیر نمایش داده میشود:
YOU NEED TO LOGIN FIRST
در صورتی که تاریخ شروع (startdate) قبل از (enddate) باشد، پیام زیر نمایش داده میشود :
STARTDATE MUST BE BEFORE ENDDATE
برنامه غذایی به فرم زیر به کاربر نمایش داده میشود:
date1: food1:remaining,food2:remaining,...
date2: food1:remaining,food2:remaining,...
مقدار date باید با فرمت YYYY-MM-DD باشد. در صورتی که برای روزی منو غذایی تعریف نشده باشد، آن روز نمایش داده نمیشود. در صورتی که برای یک روز بیش از یک غذا تعریف شده باشد، نام غذاها رابه صورت مرتب شده (به ترتیب حروف الفبا) با $,$ از هم جدا میشود. در صورتی که باقی مانده یک غذا صفر شده باشد، آن غذا نمایش داده نمیشود و در نتیجه اگر تمام غذاهای یک روز رزرو شده باشند و باقیمانده نداشته باشند، آن روز نمایش داده نمیشود. برای درک بهتر به نمونه زیر توجه کنید. ورودی
MENU 2024-10-19 2024-10-23
خروجی
2024-10-19: GhormeSabzi:10
2024-10-21: AdasPolo:20
2024-10-23: Fesenjoon:5,Abgoosht:15
در مثال فوق برای روز ۱۹ ام ۱۰ قورمهسبزی باقی مانده و برای روز های ۲۰ ام و ۲۲ ام غذایی تعریف نشده و یا تمام غذاهای آنها رزرو شده اند،بنابراین در لیست آورده نشده اند.
رزرو
کارمندان برای رزرو غذا دستور زیر را وارد میکنند:
RESERVE date food
در صورتی که کاربر وارد سامانه نشده باشد، پیام زیر نمایش داده میشود:
YOU NEED TO LOGIN FIRST
در صورتی که غذا مورد نظر در آن روز وجود نداشته باشد و یا همه آن رزرو شده باشد، پیام زیر نمایش داده میشود:
SELECTED FOOD WAS NOT SERVED
کاربر برای هر روز تنها میتواند یک غذا رزرو کند، بنابر این اگر کاربر از قبل برای آن روز غذایی رزرو کرده باشد، نمیتواند غذای دیگری رزرو کند و پیام زیر نمایش داده میشود:
RESERVATION ALREADY EXISTS FOR THIS DATE
در صورت موفقیت آمیز بودن رزرو، از تعداد باقی مانده غذا کاسته میشود و پیام زیر نمایش داده میشود :
SUCCESSFULLY RESERVED
بخش مدیریت
مدیریت کاربران
فعال کردن کاربران
برای فعال کردن یک کاربر مدیر دستور زیر را وارد میکند:
ACTIVE username
در صورتی که نام کاربری (username) در سیستم وجود نداشته باشد، پیام زیر نمایش داده میشود:
USER NOT FOUND
در صورتی که کاربر از قبل فعال باشد، پیام زیر نمایش داده میشود:
USER WAS ALREADY ACTIVE
غیرفعال کردن کاربران
برای فعال کردن یک کاربر مدیر دستور زیر را وارد میکند:
INACTIVE username
در صورتی که نام کاربری (username) در سیستم وجود نداشته باشد، پیام زیر نمایش داده میشود:
USER NOT FOUND
در صورتی که کاربر از قبل غیرفعال باشد، پیام زیر نمایش داده میشود:
USER WAS ALREADY INACTIVE
مشاهده لیست کاربران
برای مشاده لیست کاربران مدیر دستور زیر را وارد میکند:
LIST ACTIVE/DEACTIVE/(empty)
در صورت وارد شدن $ACTIVE$ یا $DEACTIVE$ به ترتیب لیست کاربران فعال یا غیر فعال نمایش داده میشود و در صورت خالی بودن بخش دوم (منظور از empty آمدن دستور $LIST$ به تنهایی است)، لیست تمام کاربران نمایش داده میشود. لیست کاربران به فرمت زیر نمایش داده میشود:
user1
user2
user3
لیست کاربران رابه صورت مرتب شده (به ترتیب حروف الفبا) و هر نام کاربری در یک خط جداگانه چاپ کنید.
مدیریت غذاها
افزودن غذا
برای افزودن غذا به برنامه غذایی مدیر دستور زیر را وارد میکند:
ADDFOOD food amount date
تعداد موردنظر (amount) باید بزرگتر از $۰$ باشد در غیر این صورت پیام زیر نمایش داده میشود :
AMOUNT SHOULD BE BIGGER THAN 0
این دستور غذا مورد نظر (food) را با تعداد قابل رزرو مورد نظر (amount) به برنامه روز موردنظر (date) اضافه میکند. در صورتی که غذای وارد شده از قبل در آن روز وجود داشته باشد، تعداد قابل رزرو جدید به تعداد قبلی افزوده میشود.
حذف غذا
برای حذف غذا از برنامه غذایی، مدیر دستور زیر را وارد میکند:
REMOVEFOOD food date
این دستور غذا مورد نظر (food) را از برنامه روز موردنظر (date) حذف میکند.
در صورتی که غذای وارد شده در برنامه آن روز وجود نداشته باشد پیام زیر نمایش داده میشود :
FOOD NOT FOUND IN SELECTED DATE
در صورتی که شخصی غذای موردنظر را رزرو کرده باشد، مدیر دیگر نمیتواند آن غذا را از لیست حذف کند و پیام زیر نمایش داده میشود :
FOOD IS RESERVED AND CAN'T BE REMOVED
گزارش رزروها
برای گزارشگیری از وضعیت غذاهای رزرو شده در بازه زمانی مورد نظر (از تاریخ $startdate$ تا تاریخ $enddate$)، مدیر دستور زیر را وارد میکند:
REPORT startdate enddate
مقادیر $startdate$ و $enddate$ با فرمت YYYY-MM-DD وارد میشود.
در صورتی که تاریخ شروع (startdate) قبل از (enddate) باشد، پیام زیر نمایش داده میشود :
STARTDATE MUST BE BEFORE ENDDATE
گزارش به صورت زیر ارائه میشود :
date1: food1:amount rserved, food2:amount reserved
date2: food1:amount rserved, food2:amount reserved
.
.
.
مقدار $date$ تاریخ و به فرمت YYYY-MM-DD مقدار $food$ نام غذا مقدار $amount$ تعداد اولیه تعریف شده غذا مقدار $reserved$ تعداد رزرو شده غذا تاریخ هایی که در آنها غذایی وجود ندارد در لیست نمایش داده نمیشوند. در صورتی که در یک روز بیش از یک غذا وجود داشته باشد نام غذا ها به صورت مرتب شده(به ترتیب حروف الفبا) و با $,$ از هم جدا میشوند. برای درک بهتر به نمونه زیر توجه کنید: ورودی
REPORT 2024-10-19 2024-10-23
خروجی
2024-10-19: GhormeSabzi:50 30
2024-10-20: AdasPolo:40 15, ZereshkPolo:20 10
2024-10-23: Fesenjoon:25 5
در مثال فوق، در تاریخ ۱۹م از ۵۰ پرس قورمهسبزی، ۳۰ پرس رزرو شده است.در تاریخ ۲۰م دو غذا با مقادیر اولیه و تعداد رزرو متفاوت وجود دارد، و در تاریخ ۲۳م تنها فسنجون ارائه شده است.
مدیر برای ورود از دستور ورود که در بخش کاربران آورده شده با نام کاربری و کلمه عبور زیر استفاده میکند.
username : admin
password : admin
در صورتی که کاربر ساده دستورات مربوط به بخش مدیر را وارد کند یا مدیر دستورات مربوط به کاربر(مشاهده برنامه غذایی و رزرو) را وارد کند، پیام زیر نمایش داده میشود:
ACCESS DENIED
ورودی
در خط اول عدد صحیح $n$ وارد میشود که بیانگر تعداد دستورات است. در $n$ خط بعدی دستورات به نحوی که در بالا توضیح داده شده است وارد میشود.
خروجی
خروجی هر دستور در بخش توضیحات آن دستور آورده شده.
مثال
ورودی نمونه ۱
10
REGISTER reza 1234Reza!
LOGIN admin admin
LIST DEACTIVE
ACTIVE reza
ADDFOOD GhormeSabzi 50 2024-10-27
LOGOUT
LOGIN reza 1234Reza!
MENU 2024-10-25 2024-10-28
RESERVE 2024-10-27 GhormeSabzi
LOGOUT
خروجی نمونه ۱
reza REGISTERED SUCCESSFULLY
admin LOGGEDIN SUCCESSFULLY
reza
LOGGEDOUT SUCCESSFULLY
reza LOGGEDIN SUCCESSFULLY
2024-10-27: GhormeSabzi:50
SUCCESSFULLY RESERVED
LOGGEDOUT SUCCESSFULLY
ارسال پاسخ برای این سؤال