Курсова робота
Драйвер стандартних пристроїв введення-виведення
Вступ
мобільний інтерфейс програмний драйвер
Ціллю курсової роботи є створення мобільного додатку зі зручним та простим у використанні інтерфейсом, який би міг редагувати та використовувати XML-файли та за даними з файлу відтворювати інформацію. Також редактор повинен використовувати карти і використовувати GPS модуль.
Практичне застосування
даного програмного проекту можливе в сфері послуг.
1. Технічне завдання
За даними з карти ми відмічаємо об’єкт (магазін) де ми присваємо значення координат з GPS модуля і добавляємо назву. Далі нам потрібно зробити аудинтифікацію користувача (логін і пароль) щоб кожний користувач зміг скласти свій список покупок.
1.1 Функціональність
Програма має містити наступну функціональність:
· Можливість завантаження / збереження даних у в форматі XML
· Синтаксичний розбір і верифікація формату XML з відбудовою внутрішньої моделі даних, в разі помилок - формування виключення (Exception)
· Інтерфейс користувача (на основі компонентів бібліотеки Android), який містить такі області:
o Аудентифікацію користувача
o Список покупок і його редагування
o Список магазинів
o Зображення магазинів на карті
· Можливість
збереження списку.
1.2 Вимоги до
реалізації.
· Мова програмування Java з використанням бібліотеки Android
· Інтерфейс
користувача має забезпечувати доступ до всієї функціональності програми;
2. Проектування інтерфейсу користувача
2.1 Мета
Розробити таку програму, яка дозволить спростити похід в магазин як для однієї людини, так і для всієї родини
.2 Модель
інтерфейсу користувача
Призначення:
Головне вікно програми використовується для аудинтифікації і взаємодії користувача з програмою
Початковий опис прецеденту інтерфейсу користувача:
) Прецедент починається коли користувач запускає програму.
) Користувач може виконати одну з наступних дій:
· Добавить і видалить покупку.
· Добавить і видалити магазін.
· Відмітити на карті обєкт.
· Дізнатися по якій саме адресі знаходить даний обєкт.
· Змінити графічне положення обєкта.
· Побачіти на карті де знаходиться даний обєкт.
) Прецедент
закінчується коли користувач закінчує роботу з програмою.
2.3 Приклад зовнішнього вигляду програми




Програмний код
<? xml version= «1.0» encoding= «utf-8»?>
<manifest xmlns:android=
«http://schemas.android.com/apk/res/android»= «com.team1»:versionCode=
«1»:versionName= «1.0»>
<uses-permission android:name= «android.permission.INTERNET» />
<uses-permission
android:name= «android.permission.ACCESS_FINE_LOCATION» />
<application android:icon= «@drawable/icon» android:label= «@string/app_name»>
<uses-library android:name= «com.google.android.maps» />
<activity
android:name=».GSS»:label= «@string/app_name»>
</activity>
<activity android:name=».ShopsMap»>
</activity>
<activity android:name=».pokypki» android:label= «@string/app_name1»>
<intent-filter>
<action android:name= «android.intent.action.MAIN» />
<category android:name= «android.intent.category.LAUNCHER» />
</intent-filter>
</activity>
<activity
android:name=».magazin» android:label= «@string/app_name2»>
</activity>
<activity android:name=».seting» android:label= «@string/app_name3»>
</activity>
</application>
<uses-permission android:name= «android.permission.GET_ACCOUNTS» />
<uses-permission android:name= «android.permission.READ_CONTACTS» />
<uses-permission android:name= «android.permission.WRITE_CONTACTS» />
</manifest>
<? xml version= «1.0»
encoding= «utf-8»?>
<RelativeLayout
xmlns:android= «http://schemas.android.com/apk/res/android»:layout_width=
«fill_parent»:layout_height= «fill_parent»>
<TextView:id= «@+id/label1»:layout_width= «fill_parent»:layout_height= «wrap_content»:text= «Name:» />
<EditText:id= «@+id/entry1»:layout_width=
«fill_parent»:layout_height= «wrap_content»:background= «@android:drawable/editbox_background»:layout_below=
«@id/label1»/>
<TextView:id= «@+id/label2»:layout_width= «fill_parent»:layout_height= «wrap_content»:text= «Longtitude:»:layout_below= «@+id/entry1»/>
<EditText:id= «@+id/entry2»:layout_width= «fill_parent»:layout_height= «wrap_content»
android:background= «@android:drawable/editbox_background»:layout_below=
«@id/label2»/>
<TextView:id= «@+id/label3»:layout_width= «fill_parent»:layout_height= «wrap_content»:text= «Laptitude:»:layout_below= «@+id/entry2»/>
<EditText:id= «@+id/entry3»:layout_width=
«fill_parent»:layout_height= «wrap_content»:background= «@android:drawable/editbox_background»:layout_below=
«@id/label3»/>
<Button:id= «@+id/ok1»:layout_width= «wrap_content»:layout_height= «wrap_content»:layout_below= «@id/entry3»:layout_alignParentRight= «true»:layout_marginLeft= «10dip»:text= «OK» />
<Button:id= «@+id/cancel1»:layout_width=
«wrap_content»:layout_height= «wrap_content»:layout_toLeftOf= «@id/ok1»:layout_alignTop=
«@id/ok1»:text= «Cancel» />
</RelativeLayout>
<? xml version= «1.0»
encoding= «utf-8»?>
<RelativeLayout
xmlns:android= «http://schemas.android.com/apk/res/android»:layout_width=
«fill_parent»:layout_height= «fill_parent»>
<TextView:id= «@+id/label»:layout_width= «fill_parent»:layout_height= «wrap_content»
android:text= «Name:» />
<EditText
android:id= «@+id/entry»:layout_width= «fill_parent»:layout_height= «wrap_content»:background= «@android:drawable/editbox_background»:layout_below= «@id/label»/>
<Button:id= «@+id/ok»:layout_width= «wrap_content»:layout_height= «wrap_content»:layout_below= «@id/entry»:layout_alignParentRight= «true»:layout_marginLeft= «10dip»:text= «OK» />
<Button:id= «@+id/cancel»:layout_width=
«wrap_content»:layout_height= «wrap_content»:layout_toLeftOf= «@id/ok»:layout_alignTop=
«@id/ok»:text= «Cancel» />
</RelativeLayout>
<? xml version= «1.0»
encoding= «utf-8»?>
<LinearLayout
xmlns:android= «http://schemas.android.com/apk/res/android»:orientation=
«vertical»:layout_width= «fill_parent»:layout_height= «fill_parent»>
<LinearLayout:android=
«http://schemas.android.com/apk/res/android»:layout_width= «fill_parent»:layout_height=
«wrap_content»:orientation= «horizontal» >
<Button:id= «@+id/addContactButton»:layout_width= «wrap_content»:layout_height= «wrap_content»:layout_weight= «0.51»:text= «@string/allAccountsPlus» />
</LinearLayout>
<ListView
android:layout_width= «fill_parent»:id= «@+id/contactList»:layout_height=
«wrap_content»:layout_weight= «1»/>
<LinearLayout xmlns:android= «http://schemas.android.com/apk/res/android»
:orientation= «horizontal»:layout_width= «fill_parent»:layout_height= «wrap_content» android:weightSum= «3»>
<Button android:id= «@+id/addContactButton1»:text= «@string/addContactButtonLabel1»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
<Button android:id= «@+id/addContactButton2»:text= «@string/addContactButtonLabel2»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
<Button android:id= «@+id/addContactButton3»:text= «@string/addContactButtonLabel3»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
</LinearLayout>
</LinearLayout>
<? xml version= «1.0»
encoding= «utf-8»?>
<LinearLayout xmlns:android= «http://schemas.android.com/apk/res/android»:orientation= «vertical»:layout_width= «fill_parent»:layout_height= «fill_parent»>
<EditText android:layout_height= «wrap_content»:id= «@+id/editText1» android:text= «User»:layout_width= «fill_parent»></EditText>
<EditText
android:layout_height= «wrap_content» android:id= «@+id/editText2»
android:text= «Password» android:layout_width= «fill_parent»></EditText>
<ListView android:layout_width= «fill_parent»:id= «@+id/contactList»:layout_height= «wrap_content»:layout_weight= «1»/>
<LinearLayout xmlns:android= «http://schemas.android.com/apk/res/android»:orientation= «horizontal»:layout_width= «fill_parent»:layout_height= «wrap_content»>
<Button android:id= «@+id/addContactButton1»:text= «@string/addContactButtonLabel1»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
<Button android:id= «@+id/addContactButton2»:text= «@string/addContactButtonLabel2»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
<Button android:id= «@+id/addContactButton3»:text= «@string/addContactButtonLabel3»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
</LinearLayout>
</LinearLayout>
<? xml version= «1.0»
encoding= «utf-8»?>
<LinearLayout xmlns:android= «http://schemas.android.com/apk/res/android»:orientation= «vertical»:layout_width= «fill_parent»:layout_height= «fill_parent»>
<LinearLayout xmlns:android= «http://schemas.android.com/apk/res/android»:orientation= «horizontal»:layout_width= «fill_parent»:layout_height= «wrap_content»>
<Button android:id= «@+id/addContactButton»:text= «@string/allAccountsPlus»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
</LinearLayout>
<ListView android:layout_width= «fill_parent»
android:id= «@+id/contactList»
android:layout_height= «wrap_content»:layout_weight= «1»/>
<LinearLayout xmlns:android= «http://schemas.android.com/apk/res/android»:orientation= «horizontal»:layout_width= «fill_parent»:layout_height= «wrap_content»>
<Button android:id= «@+id/addContactButton1»:text= «@string/addContactButtonLabel1»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
<Button android:id= «@+id/addContactButton2»:text= «@string/addContactButtonLabel2»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
<Button android:id= «@+id/addContactButton3»:text= «@string/addContactButtonLabel3»:layout_height= «wrap_content»:layout_width= «wrap_content»:layout_weight= «1»/>
</LinearLayout>
</LinearLayout>
<? xml version= «1.0» encoding= «utf-8»?>
<LinearLayout:android= «http://schemas.android.com/apk/res/android»:layout_width= «fill_parent»:layout_height= «fill_parent»>
<com.google.android.maps. MapView:android= «http://schemas.android.com/apk/res/android»:id= «@+id/mapview»:layout_width= «fill_parent»:layout_height= «fill_parent»:clickable= «true»:apiKey= «0tzlgC_A9yCyQDmKwgGyFyoSsLtqWDMDCpQlp2Q»
/>
</LinearLayout>
<? xml version= «1.0» encoding= «utf-8»?>
<LinearLayout
xmlns:android= «http://schemas.android.com/apk/res/android»:layout_width=
«fill_parent»:layout_height= «fill_parent»:orientation= «horizontal»
>
<Button:id= «@+id/button_main1»:layout_width=
«wrap_content»:layout_height= «wrap_content»:layout_weight= «0.70»:padding=
«10dp»:text= «Shop» />
<Button:id= «@+id/button_main»:layout_width=
«168dp»:layout_height= «wrap_content»:padding= «10dp»:text=
«Purchase» />
</LinearLayout>
<? xml version= «1.0»
encoding= «utf-8»?>
<resources>
<string name= «accountSpinnerLabel»>Account</string>
<string name= «addContactButtonLabel1»>Purchase</string>
<string name= «addContactButtonLabel2»>Shop</string>
<string name= «addContactButtonLabel3»>User</string>
<string name= «allAccountsPlus»>+</string>
<string name= «app_name»>Purchase</string>
<string name= «app_name1»>Purchase</string>
<string name= «app_name2»>Shop</string>
<string name= «app_name3»>User</string>
</resources>
package com.team1;
import android.app. Dialog;
import android.content. Context;
import android.view. View;
import android.view. View. OnClickListener;
import android.widget. Button;
import android.widget. TextView;
public class AddPurchaseDialor extends Dialog implements
OnClickListener {okButton;cancelButton;
public AddPurchaseDialor (Context context) {
super(context);(R.layout.add_purches_dialog);= (Button) findViewById (R.id.ok);.setOnClickListener(this);= (Button) findViewById (R.id.cancel);.setOnClickListener(this);
}
@Override
public void onClick (View v) {
if (v == okButton)
{textView = (TextView) findViewById (R.id.entry);.getText();();
return;
}
if (v == cancelButton)
dismiss();
}
}
package com.team1;
import com.team1.R;
import android.app. Activity;
import android.content. Intent;
import android.os. Bundle;
import android.view. View;
import android.view. View. OnClickListener;
import android.widget. Button;
public class seting extends Activity {
public void onCreate (Bundle savedValues) {
super.onCreate(savedValues);(R.layout.seting);
// Capture our button from layoutbutton = (Button) findViewById (R.id.addContactButton1);
// Register the onClick
listener with the implementation above.setOnClickListener (new
OnClickListener() {
@Override
public void onClick (View v) {
// TODO Auto-generated method stubintent_pokypki = new Intent (seting.this, pokypki.class);(intent_pokypki);
}
});
// Capture our button from layoutbutton1 = (Button) findViewById (R.id.addContactButton2);
// Register the onClick
listener with the implementation above.setOnClickListener (new
OnClickListener() {
@Override
public void onClick (View v) {intent_magazin = new Intent (seting.this, magazin.class);
startActivity (intent_magazin);
}
});
}
}
package com.team1;
import java.util. ArrayList;
import java.util. List;
import android.app. AlertDialog;
import android.content. Context;
import android.content. Intent;
import android.graphics.drawable. Drawable;
import android.location. Location;
import android.location. LocationListener;
import android.location. LocationManager;
import android.os. Bundle;
import android.view. MotionEvent;
import android.widget. Toast;
import com.google.android.maps. GeoPoint;
import com.google.android.maps. ItemizedOverlay;
import com.google.android.maps. MapActivity;
import com.google.android.maps. MapController;
import com.google.android.maps. MapView;
import com.google.android.maps. Overlay;
import com.google.android.maps. OverlayItem;
public class ShopsMap extends MapActivity {