زهرا که معلم زبان است با دیدن اینکه شاگردانش یک سری از کلمات را فراموش میکنند تصمیم گرفت برنامهای طراحی کند تا بتواند به آنها در یادگیری کلمات کمک کند؛ هذف او از طراحی این برنامه این است که شاگردانش کلماتی را که همیشه فراموش میکنند، در آن ذخیره کنند تا به هنگام نیاز به معنی آن دسترسی داشته باشند، اما بدلیل نداشتن دانش برنامه نویسی اندروید از شما کمک میخواهد.
[فایل پایه را از اینجا دانلود کنید](https://blog.quera.ir/wp-content/uploads/2018/10/Dictionary-contestant-1.zip)
![](https://blog.quera.ir/wp-content/uploads/2018/10/screenShot.jpg)
![](https://blog.quera.ir/wp-content/uploads/2018/10/ezgif-4-e89dcf945.gif)
**تعریف پروژه:** شمای کلی برنامه مانند شکل بالا است و عملکرد آن مانند یک فرهنگ لغت فارسی-انگلیسی است، با این تفاوت که لیست لغات توسط کاربر ویرایش میشود. در صفحه ابتدایی برنامه، لغت انگلیسی را در ``EditText`` با متن راهنمای ``word`` و ترجمه آن را در ``EditText`` با متن راهنمای ``defunition`` بنویسید.کلات و معنای آنها باید در یک دیتابیس ``sqLite`` ذخیره شوند.
+ با لمس دکمه ``ADD``، **فقط درصورتی که کلمه در دیتابیس موجود نباشد** به آن اضافه میشود. (هردو فیلد مربوط به لغت و ترجمه باید پر شوند)
+ با لمس دکمه ``Delete``، **فقط درصورتی که کلمه در دیتابیس موجود باشد** از آن حذف میشود. (پر کردن فیلد ``word`` کافی است)
+ با لمس دکمه ``Update`` درصورت وجود کلمه، معنای آن با معنای جدید جایگزین میشود. (هردو فیلد مربوط به لغت و ترجمه باید پر شوند)
+ با لمس دکمه ``View All`` وارد ``Activity`` به نام ``DictionaryPage`` میشویم (شکل سمت چپ) که در آن هر لغت به همراه معنای متناظر با آن به ترتیب جدید به قدیم در لیست نمایش داده میشود.
+ با لمس دکمه ``search`` معنای لغت نوشته شده در ``EditText`` با متن راهنمای ``search_word`` جستجو میشود و درصورت وجود لغت، معنای آن در ``TextView`` پایین صفحه نمایش داده میشود و درصورت عدم وجود لغت در دیتابیس، عبارت ``word doesn't exist`` در آن نمایش داده میشود.
+ با لمس دکمه ``Quiz`` درصورتی که تعداد لغات موجود در دیتابی کمتر از چهار (۴) لغت باشد، هیچ اتفاقی نمیافتد و در صورتی که چهار کلمه یا بیشتر در دیتابیس موجود باشد، برنامه وارد صفحه وارد ``QuizActivity`` میشود. در این صفحه (همانطور که در ``gif`` موجود در صورت سوال میبینید) یک سوال چهارگزینهای از میان لغات موجود در دیتابیس طرح میشود. به این صورت که بطور تصادفی یک کلمه انتخاب میشود و در ``TextView`` با آیدی ``quiz_question`` موجود در بالای صفحه نمایش دادهمیشود و معنای آن کلمه به همراه معنای سه کلمه دیگر (که این معناها هم بصورت تصادفی انتخاب شدهاند) با یک ترتیب تصادفی بر روی چهار ``Button`` موجود در میانه صفحه نمایش داده میشوند. کاربر برای پاسخگویی به هر سوال تنها هشت (۸) ثانیه زمان دارد. درصورتی که در این زمان کاربر هیچ گزینهای را انتخاب نکند، سوال جدیدی ایجاد میشود و نمایش داده میشود. اگر قبل از اتمام زمان پاسخگویی به سوال، کاربر گزینه درست را انتخاب کند، در (۱۰) امتیاز به امتیاز فعلی او اضافه میشود (این امتیاز در پایین صفحه در ``TextView`` با آیدی ``current_score`` نمایش داده میشود). درصورت انتخاب گزینه غلط نیز بدون تغییر در امتیاز، سوال جدیدی نمایش داده میشود.
نکات مهم در پیادهسازی دیتابیس:
+ اطلاعات در دیتابیس با نام ``wordlist.db`` و در جدول ``list`` ذخیره میشوند.
+ دیتابیس را در محل پیشفرض دخیرهسازی دیتابیسها (زیر مجموعه مسیر``/data/data``) ذخیره کنید.
+ برای کار با دیتابیس دسترسی به حافظه را استفاده نکنید.
+ شمای جدول را **دقیقا** به شکل زیر پیادهسازی کنید.
```
ColumnId ---> primary key auto Increment
Definition ---> TEXT
word ---> TEXT
```
# نکات حیاتی:
+ مکان قرارگیری و نام انتخابی برای دیتابیس و جدول مورد استفاده را **دقیقا** برابر با موارد گفتهشده و **بدون هیچ پسوندی** انتخاب کنید.
+ درصورتیکه حجم فایل `zip` ارسالی شما، بیشتر از حد مجاز بود، پوشه(های) `build` را در فایل ارسالی پاک کنید.
+ امکان استفاده از کتابخانههای آماده وجود ندارد و پیادهسازیها باید توسط خودتان انجام شود.
+ آیدی و متنهای نمایشی موجود در فایلهای `activity_main.xml` ، `dictionary_page.xml` و `list_item.xml` را تغییر ندهید (حذف نکنید).
+ درصورتیکه به دسترسیای نیاز دارید که در نسخههای جدید اندروید به شکل متفاوتی از کاربر گرفتهمیشود، **حتما** این تفاوت را درنظر بگیرید و تغییرات لازم را برای **زمان شروع برنامه** اعمال کنید.
+ دیتابیس را **حتما** در مسیر پیشفرض قراردهید. (نیازی به دسترسی خواندن و نوشتن برروی حافظه خارجی ندارید)
+ پیادهسازی سوالات بخش ``Quiz`` باید به گونهای باشد که دو سوال یکسان پشتسر هم نمایشداده نشوند. (منظور از دو سوال یکسان دو سوال با کلمه انگلیسی یکسان و گزینههای یکسان و ترتیب یکسان در گزینهها است)
+ حتما از فایل ```WordListViewHolder.java``` و متغیرهای عضو این کلاس متناسب با نام آنها استفاده کنید. اعمال هرگونه تغییر در این فایل و فایلهای دیگر پروژه که دارای پسوند ```java``` هستند بلامانع است اما از **تغییر نام** یا **حذف** کلاسها، توابع و متغیرهای موجود در فایل پایه خودداری کنید.
ساختار بخشی از فایل پایه بصورت زیر است. میتوانید فایلهایی به پوشه `java` (یا زیر پوشههای آن) اضافه کنید. همچنین مجازید به فایلهایی که با علامت (---->) مشخص شدهاند کدهای خودتان را اضافه کنید (اما مجاز به تغییر یا حذف کدهای موجود نیستید). درنهایت محتویات پوشه `app` را در قالب یک فایل فشرده ارسال کنید.
```
app
│
└───src
└───main
│ AndroidManifest.xml
│
├───java
│ └───com
│ └───quera
│ └───android
│ └───dictionary
│ │ DictionaryPage.java (<----)
│ │ MainActivity.java (<----)
│ │
│ ├───adapters
│ │ WordListAdapter.java (<----)
│ │
│ └───ViewHolders
│ WordListViewHolder.java (<----)
│
└───res
├───drawable
├───layout
│ activity_main.xml
│ dictionary_page.xml
│ list_item.xml
│
├───mipmap-hdpi
│
├───mipmap-mdpi
│
├───mipmap-xhdpi
│
├───mipmap-xxhdpi
│
├───mipmap-xxxhdpi
│
└───values
colors.xml
dimens.xml
strings.xml
styles.xml
```
یادگیری زبان آسان میشود :)