.لینکهای مفید برای شرکت در مسابقه:
میتوانید سوالهای خود را از بخش "سوال بپرسید" مطرح کنید.
سامانه گلستان، یک سامانه بسیار قوی و کارآمد است که برای وضعیت تحصیلی دانشجوها و برگزاری و ثبت نام کلاسهای دانشجوها طراحی شده است.
هر دانشجو و هر استاد به محض ورود به دانشگاه در سامانه گلستان ثبت نام میکنند. در این سامانه مشخصات هر کدام وارد میشود. همچنین تعدادی کلاس در سامانه گلستان تعریف میشود. هر دانشجو میتواند در تعدادی از این کلاسها ثبت نام کند.
اساتید نمرات را در سامانه گلستان وارد میکنند و دانشجویان هم در این سامانه میتوانند نمرات خود را در این سامانه ببینند.
name
identical_num
entering_year
field
name
identical_num
field
name
class_id
field
professor
students
از شما میخواهیم تا به صورت مرحله به مرحله این سامانه را طراحی کنید. در واقع در پیاده سازی هر فاز از دستورات فاز قبلی هم استفاده خواهد شد.
register_student
در این درخواست یک دانشجو نام <name>
، کد ملی <identical_num>
، سال ورودی <entering_year>
، رشته تحصیلی <field>
خود را وارد می کند و اقدام به ثبت نام در سامانه گلستان میکند.
در صورتی که یک دانشجو یا استاد دیگر قبلاً با کد ملی (identical_num
) مشابه در سیستم ثبت نام کرده است پیام this identical number previously registered
را چاپ کنید.
بعد از ثبت نام با موفقیت پیام welcome to golestan
را چاپ کنید.
register_professor
در این درخواست یک استاد نام <name>
، کد ملی <identical_num>
، رشته تدریس <field>
خود را وارد میکند و اقدام به ثبت نام میکند.
در صورتی که یک دانشجو یا استاد دیگر قبلاً با کد ملی (identical_num
) مشابه در سیستم ثبت نام کرده است پیام this identical number previously registered
را چاپ کنید.
بعد از ثبت نام با موفقیت پیام welcome to golestan
را چاپ کنید.
make_class
در این درخواست یک کلاس با نام <name>
و کد درس <class_id>
برای رشته تحصیلی <field>
ایجاد میشود.
اگر این کد کلاس دیگری قبلاً استفاده شده است، پیام this class id previously used
را چاپ کنید.
در غیر این صورت پیام class added successfully
را چاپ کنید.
add_student
در این درخواست یک دانشجو با کد ملی <identical_num>
درخواست اضافه شدن به کلاس با کد <class_id>
را دارد.
invalid student
را چاپ کنید.invalid class
را چاپ کنید.<field>
این کلاس یکسان نیست پیام student field is not match
را چاپ کنید.student is already registered
را چاپ کنید.student added successfully to the class
را چاپ کنید.توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
add_professor
در این درخواست یک استاد با کد ملی <identical_num>
میخواهد تدریس کلاس با کد <class_id>
را به عهده بگیرد.
invalid professor
را چاپ کنید.invalid class
را چاپ کنید.<field>
این کلاس یکسان نیست پیام professor field is not match
را چاپ کنید.this class has a professor
را چاپ کنید.professor added successfully to the class
را چاپ کنید.توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
student_status
در صورتی که دانشجویی با کد ملی <identical_num>
وجود ندارد پیام invalid student
را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام دانشجو (student_name
)، سال ورودی (entering_year
)، رشته تحصیلی (field
) و
نام (name
) کلاسهایی که این دانشجو در آنها شرکت میکند را به ترتیب ثبت نام چاپ کنید. در صورتی که این دانشجو در هیچ کلاسی ثبت نام نکرده است هیچ چیزی چاپ نکنید.
professor_status
در صورتی که استادی با کد ملی <identical_num>
وجود ندارد پیام invalid professor
را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام استاد (professor_name
)، رشته تحصیلی (field
) و
نام (name
) کلاسهایی که این استاد در آنها تدریس میکند را به ترتیب ثبت نام چاپ کنید. در صورتی که این استاد تدریس هیچ کلاسی را به عهده نگرفته است هیچ چیزی چاپ نکنید.
class_status
در صورتی که چنین کلاسی برای این رشته وجود ندارد پیام invalid class
را چاپ کنید.
در غیر این صورت در یک سطر و با یک فاصله بین آنها به ترتیب نام (name
) استادی که در این کلاس تدریس میکند را چاپ کنید. در صورتی که هیچ استادی برای تدریس این کلاس وجود ندارد کلمه None
را به جای نام استاد، چاپ کنید.
سپس نام(name
) تمامی دانشجویان این کلاس را به ترتیبی که در این کلاس ثبت نام کردهاند را در یک سطر و با فاصله چاپ کنید. اگر هیچ دانشجویی وجود ندارد هیچ چیزی چاپ نکنید.
set_final_mark
در این درخواست استادی با کد ملی <professor_identical_num>
برای دانشجویی با کد ملی <student_identical_num>
در درسی با کد <class_id>
نمره پایان ترم <mark>
را ثبت میکند.
invalid professor
را چاپ کنید. invalid student
را چاپ کنید. invalid class
را چاپ کنید.professor class is not match
را چاپ کنید.student did not registered
را چاپ کنید.در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد، نمره پایان ترم این دانشجو را برای این درس برابر <grade>
قرار دهید. اگر نمرهای قبلاً ثبت شده آن را به این نمره تغییر دهید. در نهایت پیام student final mark added or changed
را چاپ کنید.
تضمین میشود که <grade>
یک عدد صحیح بین تا (شامل هر دو) است.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
mark_student
در این درخواست نمره دانشجو با کد ملی <identical_num>
برای درس با کد <class_id>
نمایش داده میشود.
invalid student
را چاپ کنید. invalid class
را چاپ کنید.student did not registered
را چاپ کنید.None
را چاپ کنید.در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد، آخرین نمره ثبت شده این دانشجو را برای این درس چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
mark_list
در این درخواست لیست نمرات کلاس با کد <class_id>
نمایش داده میشود.
invalid class
را چاپ کنید.no professor
را چاپ کنید. no student
را چاپ کنید.در صورتی که هیچ کدام از حالتهای بالا اتفاق نیفتد به ترتیب دانشجوهایی که در کلاس ثبت نام کردهاند. نمره هر دانشجو را در یک سطر و با یک فاصله بین آنها چاپ کنید. اگر نمرهای برای یک دانشجو ثبت نشده به جای نمره آن کلمه None
را چاپ کنید.
توجه کنید اگر چند خطا همزمان اتفاق افتاد، پیامها از بالا به پایین الویت دارند.
average_mark_professor
در این درخواست میانگین نمرات ثبت شده توسط استادی با کدملی <identical_num>
نمایش داده میشود.
در صورتی که استادی با این کد ملی وجود ندارد پیام invalid professor
را چاپ کنید.
در غیر این صورت میانگین تمام نمراتی که این استاد برای تمام دانشجوها (در همه کلاسهایش) ثبت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.
اگر یک استاد برای یک دانشجو در یک کلاس نمرهای را تغییر دهد فقط نمره جدید در میانگین در نظر گرفته میشود.
در صورتی که این استاد هیچ نمرهای ثبت نکرده است کلمه None
را چاپ کنید.
منظور از میانگین نمرات ثبت شده برای یک استاد یعنی مجموع نمرات ثبت شده توسط این استاد تقسیم بر تعداد نمرات ثبت شده توسط این استاد.
average_mark_student
در این درخواست میانگین نمرات ثبت شده برای دانشجویی با کدملی <identical_num>
نمایش داده میشود.
در صورتی که دانشجویی با این کد ملی وجود ندارد پیام invalid student
را چاپ کنید.
در غیر این صورت میانگین تمام نمراتی که این دانشجو از تمام استادها (در همه کلاسهایش) دریافت کرده است را به صورت یک عدد اعشاری با دقت دقیقاً دو رقم بعد از اعشار چاپ کنید.
اگر یک استاد برای یک دانشجو در یک کلاس نمرهای را تغییر دهد فقط نمره جدید در میانگین در نظر گرفته میشود.
در صورتی که این دانشجو هیچ نمرهای دریافت نکرده است عبارت None
را چاپ کنید.
منظور از میانگین نمرات دریافت شده برای یک دانشجو یعنی مجموع نمرات دریافت شده این دانشجو تقسیم بر تعداد نمرات دریافت شده توسط این دانشجو.
top_student
در این درخواست نام دانشجویی که در رشته <field>
و ورودی سال <entering_year>
میانگین نمرات بیشتری دارد را چاپ کنید.
در صورتی که هیچ دانشجویی با این مشخصات وجود ندارد به جای نام آن کلمه None
را چاپ کنید.
در صورتی که چند دانشجو با این مشخصات وجود دارد و همگی میانگین نمره یکسانی دارند، نام دانشجویی را چاپ کنید که زودتر ثبت نام کرده است.
top_mark
در این درخواست بیشترین نمره ثبت شده برای دانشجوهای کلاس <class_id>
نمایش داده میشود.
در صورتی که چنین کلاسی وجود ندارد پیام invalid class
را چاپ کنید.
در صورتی که هیچ دانشجویی در این کلاس هیچ نمرهای دریافت نکرده است، کلمهNone
را چاپ کنید.
در غیر این صورت بیشترین نمره ثبت شده برای دانشجویان این کلاس را چاپ کنید.
در هر سطر از ورودی تعدادی از دستورات گفته شده میآید. تضمین میشود که تعداد این دستورات از بیشتر نخواهد بود.
برای نشان دادن پایان دستورات، بعد از آخرین سطر کلمه end
در یک خط ورودی داده میشود.
نمره دهی این سوال به این صورت است:
در هر سطر از خروجی پاسخ مناسب هر دستور را چاپ کنید.