[دانلود فایل پروژه](https://quera.org/qbox/view/AXlf078qBW/CompanyManager.zip)
مهدیار به عنوان مدیر داخلی شرکت «گوبرا» انتخاب شده است. او پس از چند روز که از شروع کارش گذشت و مشخصات کارمندان شرکت را در کاغذ وارد کرد، احساس خستگی کرد. مهدیار از عطا خواست که برایش برنامهی اندرویدی بنویسد که بتواند با کمک آن لیست کارمندان شرکت را مدیریت کند. عطا هم از فرط خستگی، پروژه را ناتمام گذاشته و زحمت اتمام کار بر دوش شماست.برنامه دو قسمت اصلی دارد؛ ثبت کارمند جدید و گرفتن گزارش کارمندان.
در بخش ثبت کارمند جدید(```Register```)، باید مشخصات کارمند جدید دریافت شود. هر کارمند مشخصات زیر را دارد:
1. کد کارمندی
2. نام
3. نام خانوادگی
4. حقوق(به ازای هر ساعت)
5. ساعت کار ماهانه
6. منصب(مدیر، توسعهدهنده، کارمند)
در بخش گزارش(```Report```)، چند نوع گزارش میتوان تهیه کرد.
1. محاسبهی کل پرداختی ماهانهی شرکت برای هر گروه شغلی(مدیر، توسعهدهنده، کارمند، همه)
2. گرفتن مشخصات کارمند با واردکردن کد کارمندی
3. مشاهدهی ```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``` جدیدی نباید به فایل پروژه اضافه شود. درصورت استفاده از روشهایی که نیاز به افزودن دسترسی به پروژه دارند، بخشی از نمره راهحل ارسالی کسر میگردد و یا نمرهای به راهحل ارسالی شما تعلق نمیگیرد.
ساختار فایل ارسالی(فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند):
```
<your-zip-name>.zip
└───app
│ .gitignore
│ app.iml
│ build.gradle
│ proguard-rules.pro
│
├───libs
└───src
├───androidTest
│ │ androidTest.iml
│ │
│ └───java
│ └───ir
│ └───quera
│ └───companymanager
│ ExampleInstrumentedTest.java
│
├───main
│ │ AndroidManifest.xml
│ │ main.iml
│ │
│ ├───gen
│ ├───java
│ │ └───ir
│ │ └───quera
│ │ └───companymanager
│ │ MainActivity.java <----
│ │ RegisterActivity.java <----
│ │ ReportActivity.java <----
│ │
│ └───res
│ ├───drawable
│ ├───layout
│ │ activity_main.xml
│ │ activity_register.xml
│ │ activity_report.xml
│ │
│ ├───mipmap-hdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-mdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-xhdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-xxhdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-xxxhdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ └───values
│ colors.xml
│ strings.xml
│ styles.xml
```