این نکات را در تمامی سوالهای این مسابقه رعایت کنید؛ رعایت نکردن این نکات ممکن است باعث شود کد ارسالی شما حتی اگر درست هم باشد نمرهی کمی دریافت کند.
پروژهای که آپلود میکنید بصورت اتوماتیک توسط سیستم داوری میشود، پس تلاش کنید تمام نکات گفتهشده داخل صورت سوال را رعایت کنید و دقیقاُ آنچه گفته شده را پیادهسازی کنید.
پروژه مربوط به هر سوال را از لینک داخل صورت آن سوال دریافت کنید و با توجه به صورت سوال، taskهای معرفی شده را پیاده سازی کنید تمامی فایلهای موردنیاز برای اجرای پروژه را باتوجه به توضیحات صورت سوال ارسال کنید.
برای ارسال، پوشهی App از پروژه را زیپ کرده و در محل مشخص شده آپلود نمایید.
پس از آن که کد را ارسال کردید و نمرهدهی انجام شد، شما میتوانید روی نمره ارسال خود در بخش همه ارسالها کلیک کنید و از راهنماییها و جزئیات نمرهای که دریافت کردید باخبر شوید.
لطفا پروژه را یک بار در رایانه شخصی خود اجرا کرده و پس از اطمینان از اجرا شدن برنامه آن را برای داوری ارسال نمایید.
تنها فایلهای مشخص شده در صورت سوال را تغییر داده و در بقیه قسمتهای پروژه تغییری ایجاد نفرمایید.
اضافه کردن فایل جدید درصورتی که در پوشه main
یا زیرپوشههای آن قرارگیرد، مشکلی ایجاد نمیکند و بلامانع است.
در صورتی که در حین مسابقه راجع به صورت سوالها به ابهامی برخوردید، میتوانید در بخش سوال بپرسید از پشتیبانی مسابقه مورد را جویا شوید.
رتبهبندی مسابقه به ترتیب مجموع نمرهای است که از سوالها دریافت میکنید؛ شرکتکنندهی با نمرهی بیشتر رتبهی بهتری کسب میکند. شرکتکنندگان با رتبهی برابر بر اساس مجموع زمان ارسالهای نهایی رتبهبندی میشوند.
گروه کوه دانشگاه شریف تصمیم به گرفتن اعضای جدید کرده است. آنها میخواهند فرمی را درست کنند تا متقاضیان بتوانند اطلاعات خود را در آن وارد نمایند. برای اینکار از شما کمک میخواهند. فرم شامل فیلد های نام، شماره دانشجویی و سال ورود به دانشگاه میباشد. هر کدام از فیلد ها دارای شرایطی هستند:
name is invalid
در فیلد TextView
که بالای صفحه قراردارد، نمایش داده میشود.student number is invalid
در فیلد TextView
که بالای صفحه قراردارد، نمایش داده میشود.94000000
باشد، در فیلد سال ورود نیز باید عدد 94
وارد شود) در غیر اینصورت عبارت entrance year is invalid
در فیلد TextView
که بالای صفحه قراردارد، نمایش داده میشود.you submit successfully
در فیلد TextView
که بالای صفحه قراردارد، نمایش داده میشود.TextView
نمایش داده میشوند.\n
که بکار بردهاید، به تعداد کافی باشند. (عدم استفاده از \n
برای جداکردن خطوط، درج \n
قبل از خط اول یا بعد از خط آخر از خطاهای متداول هستند.)app
موجود در ریشه فایلهای پروژه، باید در ریشه فایل زیپ ارسالی قراربگیرد.ساختار فایل ارسالی(فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند):
مهدیار به عنوان مدیر داخلی شرکت «گوبرا» انتخاب شده است. او پس از چند روز که از شروع کارش گذشت و مشخصات کارمندان شرکت را در کاغذ وارد کرد، احساس خستگی کرد. مهدیار از عطا خواست که برایش برنامهی اندرویدی بنویسد که بتواند با کمک آن لیست کارمندان شرکت را مدیریت کند. عطا هم از فرط خستگی، پروژه را ناتمام گذاشته و زحمت اتمام کار بر دوش شماست.برنامه دو قسمت اصلی دارد؛ ثبت کارمند جدید و گرفتن گزارش کارمندان.
در بخش ثبت کارمند جدید(Register
)، باید مشخصات کارمند جدید دریافت شود. هر کارمند مشخصات زیر را دارد:
در بخش گزارش(Report
)، چند نوع گزارش میتوان تهیه کرد.
n
امین کارمند شرکت از نظر بیشترین درآمد ماهانه. (رتبه هر کارمند به اینصورت محاسبه میشود: درصورتی که کارمندان را بصورت نزولی براساس حقوق دریافتی ماهانه مرتب کنیم، کارمند با بیشترین دریافتی رتبه یک را دریافت میکند و با کاهش حقوق، به ترتیب رتبه افزایش مییابد.)شما باید تغییرات زیر را در پروژه ایجاد کنید:
با اجرای برنامه، MainActivity
اجرا شود و activity_main
را نمایش دهد. همچنین در اولین اجرای برنامه بر روی دستگاه، پایگاه دادهای با نام company (دقیقا به همین نام و بدون هیچ پسوند، پیشوند یا فرمت فایل) ساخته شود و جدولی به اسم Staff با ستونهای زیر در آن قرار گیرد:
شمارهی کارمندی (ستون ID
)
نام (ستون FirstName
)
نام خانوادگی (ستون LastName
)
درآمد هر ساعت (ستون Salary
)
ساعات کار ماهانه (ستون Hour
)
منصب (ستون Position
)
با زدن دکمهی Register
، کلاس RegisterActivity
و با زدن دکمهی Report
، کلاس ReportActivity
اجرا شود و به ترتیب activity_register
و activity_report
نمایش داده شوند.
در activity_register
، داخل edit_code
، edit_hour
و edit_salary
فقط باید بتوان عدد وارد کرد.
در activity_register
، پس از فشردهشدن btn_submit
اگر هر کدام از EditText
ها خالی بود، رنگ پیغام راهنمای آن باید با استفاده از ثابت Color.RED
یا کد رنگ معادل آن، به قرمز تغییر کند. در غیر اینصورت، اطلاعات واردشده باید به جدول Staff اضافه شوند. در صورتی که کد کارمندی واردشده تکراری بود، نباید اطلاعات اضافه شوند و پیغام Duplicate Personal Code
داخل txt_result
نمایش داده شود. در صورت موفقیتآمیز بودن هم پیغام Registration successful
داخل txt_result
نمایش داده شود و همه EditText
ها به حالت اولیه (بدون متنی که کاربر وارد کرده و با کد رنگ پیشفرض برای متن راهنما) برگردند.
در activity_report
، با فشردهشدن btn_payment
باید کل حقوق ماهانهی همه کارمندان گروهی که در drop_report_position
انتخاب شدهاند، در txt_report
نمایش داده شود.(کل حقوق ماهانهی یک کارمند برابر با حاصلضرب تعداد ساعات کار در حقوق ساعتی است.)
در activity_report
، با فشردهشدن btn_person
، باید نام و نام خانوادگی کارمندی که شمارهی کارمندی او در edit_get_code
وارد شده است، در txt_report
نمایش داده شود. توجه کنید که بین نام و نام خانوادگی باید دقیقا یک فاصله (space
)باشد. همچنین اگر کارمندی با شماره واردشده وجود نداشت، پیغام Not found
در txt_report
نمایش داده شود. همچنین اگر edit_get_code
خالی بود، پیغام راهنمای آن باید با استفاده از ثابت Color.RED
یا کد رنگ معادل آن، به رنگ قرمز تغییر کند. توجه شود که ورودی edit_get_code
فقط باید عدد باشد و غیر عدد را نباید بتوان وارد کرد.
در activity_report
، با فشردهشدن btn_top
، باید کارمندی که در رتبهی متناظر با عدد واردشده در edit_top
قرار دارد، در txt_report
نمایش دادهشود؛ (کارمندان براساس حقوق دریافتی بصورت نزولی مرتب میشوند و بالاترین حقوق، بالاترین رده یعنی رذه یک را دریافت میکند) باید نام، نام خانوادگی و درآمد ماهیانه در txt_report
نوشته شود (موارد باید با دقیقا یک کاراکتر space
از هم جدا میشوند.) اگر عدد واردشده از تعداد کارمندان شرکت بیشتر بود، عبارت Not found
در txt_report
نوشته شود. همچنین اگر edit_top
خالی بود، پیغام راهنمای آن با استفاده از ثابت Color.RED
یا کد رنگ معادل آن، به قرمز تغییر کند. توجه شود که ورودی edit_top
فقط باید عدد باشد و غیر عدد را نباید بتوان وارد کرد.
permision
جدیدی نباید به فایل پروژه اضافه شود. درصورت استفاده از روشهایی که نیاز به افزودن دسترسی به پروژه دارند، بخشی از نمره راهحل ارسالی کسر میگردد و یا نمرهای به راهحل ارسالی شما تعلق نمیگیرد.ساختار فایل ارسالی(فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند):
[0,1,2,3,4,5,6,7,8,9]
۲۵٪ امتیاز سوال (پیادهسازی هر عدد ٪۲.۵)محمد از اینکه هر دفعه برای زنگ زدن به کسی باید روی آن شماره لمس کند خسته شده و دلش تنوع میخواهد. حسین که به تازگی با برنامهنویسی اندروید آشنا شده است، قصد دارد به محمد کمک کند اما به دلیل تازه کار بودن برنامه را نصفه رها کرده است. حال، شما باید به وی کمک کنید تا بتواند محمد را خوشحال کند.
برنامه بدین صورت است که:
صفحه ای که نمایش داده میشود دارای دکمه های سفید با کد رنگ #FFFFFF
است که با لمس شدن، به رنگ مشکی با کد رنگ 000000#
تغییر رنگ میدهند.
برای نوشتن هر عدد باید باید دکمه هایی که در کنار هم آن عدد را شکل میدهند، با لمس کردن به رنگ مشکی درآیند. وارد کردن عدد به این صورت است که کاربر، دست خود را برروی صفحه نمایش قرار میدهد و با کشیدن الگوی عدد موردنظر روی صفحه نمایش (بدون جدا شدن دست از صفحه نمایش)، مسیر متناظر با حرکت دست روی صفحه، به رنگ مشکی با کد رنگ 000000#
تغییر رنگ میدهند (مشابه با وارد کردن الگو برای باز کردن قفل صفحه گوشی) و در صورت برداشتن دست از روی صفحه نمایش:
TextView
سبز رنگ، در پایین صفحه اضافه میشود و همه دکمه ها به رنگ سفید اولیه باز میگردند.[0,1,2,3,4,5,6,7,8,9]
نباشد، رنگ زمینه تمام پانزده دکمه، همراه با انیمیشنی به مرور تغییر رنگ داده و مجددا به رنگ سفید بازمیگردند.لینک دانلود درصورت بروز مشکل در نمایش گیف
app
موجود در ریشه فایلهای پروژه، باید در ریشه فایل زیپ ارسالی قراربگیرد.ساختار فایل ارسالی(فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند):
encode
کردن صحیح دادههای ارسالی به سرور ۸٪ امتیاز سوالدر این سوال شما باید یک بازی شبیه به بازی بیست سوالی (بدون محدودیت سوال) را پیادهسازی کنید. به این صورت که شما سوالات خود را تایپ و ثبت میکنید، سپس سوال خود را به آدرس سرور ارسال میکنید و پس از پردازش سوال، پاسخی متناسب از طرف سرور به شما برمیگردد (پاسخ سرور صرفا شامل یک رشته بعنوان پاسخ سوال ارسالی است و هیچ ساختار خاصی ندارد). شما باید سوالات و پاسخ ها را در قسمت بالایی صفحه، بصورت گزارشی از تاریخچه عملکرد نمایش دهید؛ به این صورت که هر سوال بلافاصله پس از لمس دکمه submit
به لیست افزوده میشود، آخرین پاسخ ارسالی در last_answer_tv
نمایش داده میشود و با رسیدن پاسخ جدید از سمت سرور، متن موجود در last_answer_tv
، به history_tv
منتقل میشود و پاسخ جدید در last_answer_tv
نمایش داده میشود.
۱- سوال کاربر باید در EditText با آیدی question_et تایپ شود و با لمس دکمه Submit برای پردازش، به سرور ارسال شود تا پاسخ سرور را در قالب یک رشته دریافت کند. دقت کنید متن سوال نمیتواند خالی باشد. نمونه درخواست ارسالی به سرور برای پرسیدن سوال ?what is length of the word
نمونه پاسخ ارسالی سرور:
۲- آخرین پاسخ دریافت شده از سرور باید در TextView با آیدی last_answer_tv نمایش داده شود.
۳- لیست تاریخچه سوالات کاربر و پاسخ های سرور (بجز آخرین پاسخ سرور) باید در TextView با آیدی history_tv نمایش داده شود.
۴- برنامه شما باید با تغییر جهت دستگاه، وضعیت فعلی خود (شامل اطلاعات نمایش داده شده به کاربر و اطلاعات موردنیاز جهت ادامه فعالیت بصورت صحیح) را حفظ کند.
۵- درصورتی که در هنگام ارتباط با سرور و انتظار برای پاسخ سرور، جهت دستگاه تغییر کرد (دستگاه rotate شد)، نباید خللی در ارتباط با سرور و دریافت پاسخ بوجود آید.
۶- درصورتی که کاربر سوالی را با استفاده از کلید Submit ثبت کند و پیش از پاسخگویی سرور، سوال (یا سوالات) دیگری را ثبت کند، ارسال سوالات به سرور باید در لحظه ثبت انجام شود (نباید ارسال سوال جدید و انتظار برای گرفتن پاسخ، تا زمان پاسخگویی سرور به سوال قبلی، به تعویق بیافتد).
درخواست ها به سرور توسط متد GET ارسال میشوند.
آدرس پایهای سرور را حتما در متغیر url که عضو ثابت کلاس BaseURL میباشد،قرار دهید و زمانی که به آن نیاز داشتید، از BaseURL.url استفاده کنید. (از بکار گیری آدرس پایه بطور مستقیم در کد، جدا خودداری کنید).
به هیچ وجه آیدی (id) های موجود در فایل activity_main.xml را تغییر ندهید.
+برای بررسی کدهای خود میتوانید از سرور محلی یا کتابخانههای موجود برای اندروید جهت شبیهسازی سرور استفاده کنید.
app
موجود در ریشه فایلهای پروژه، باید در ریشه فایل زیپ ارسالی قراربگیرد.main
قرارگرفته باشند.manifest
وجود دارد.ساختار فایل ارسالی(فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند، همچنین امکان افزودن فایل به ساختار ارسالی زیر وجود دارد اما از اعمال تغییر در محتویات پوشه layout
جداً خودداری کنید):