




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、河北農(nóng)業(yè)大學(xué)本科畢業(yè)論文題 目: 學(xué) 院: 信息科學(xué)與技術(shù)學(xué)院 專業(yè)班級: 軟件工程1002班 學(xué) 號: 學(xué)生姓名: 指導(dǎo)教師姓名: 指導(dǎo)教師職稱: 講 師 二零一四 年 六 月 一 日摘要 移動互聯(lián)網(wǎng)時代的到來極大的改變了我們的生活,而Android是一種以Linux為基礎(chǔ)的開放源碼操作系統(tǒng)迅速占領(lǐng)了智能機(jī)操作系統(tǒng),所以在android環(huán)境下開發(fā)顯得尤為必要。Android是開放性體系架構(gòu),不僅具有非常好的開發(fā)、調(diào)試環(huán)境,而且還支持各種可擴(kuò)展的用戶體驗(yàn),包括豐富的圖形組件、多媒體支持功能以及強(qiáng)大的瀏覽器。因此,對于軟件從業(yè)人員來說,Android平臺具有無限的吸引力。 本文就在分析討論And
2、roid手機(jī)軟件開發(fā)技術(shù)原理的基礎(chǔ)上,為用戶開發(fā)出基于Android平臺的駕校模擬考試系統(tǒng)。通過對Android系統(tǒng)架構(gòu)和應(yīng)用開發(fā)進(jìn)行初步研究和對系統(tǒng)進(jìn)行詳細(xì)需求分析的基礎(chǔ)上,確定了系統(tǒng)的功能和性能要求。本文詳細(xì)介紹了在Android平臺上以Java為語言編完成開發(fā)的過程,最終實(shí)現(xiàn)了一個界面友好、操作簡單的手機(jī)駕校模擬考試系統(tǒng)。 關(guān)鍵詞:汽車;智能手機(jī);Android;考試系統(tǒng)。AbstractMobile Internet era of great change in our lives, and Android is a Linux-based open source operating
3、system and quickly occupied the smart operating system, so in the android development environment is particularly necessary. Android is an open architecture, not only has a very good development and debugging environment, but also supports a variety of scalable user experience, including rich graphi
4、cal components, multimedia support and a powerful browser. Therefore, for software professionals who, Android platform has unlimited appeal.In this paper, based on the analysis discussed Android mobile software development technology principle, for the user to develop a simulation-based driving scho
5、ol exam system Android platform. Through the Android-based system architecture and application development and preliminary study of the system on a detailed needs analysis to determine the functional and performance requirements of the system. This paper describes on the Android platform, Java-langu
6、age code to complete the development process, and ultimately a friendly interface, simple operation handset Driving simulation test system.Keywords : auto ; smart phones ; Android; examination system.目 錄 TOC o 1-3 h z u HYPERLINK l _Toc390248863 1 緒論 數(shù)據(jù)的安全性:數(shù)據(jù)的安全性是數(shù)據(jù)庫設(shè)計(jì)過程的基本要求。保護(hù)數(shù)據(jù)庫,防止權(quán)限的混亂造成的數(shù)據(jù)庫中數(shù)據(jù)
7、被竄改、信息的泄露,或者是導(dǎo)致數(shù)據(jù)不完整、丟失或不可恢復(fù)。3.3業(yè)務(wù)流程分析系統(tǒng)面向多用戶,每一個用戶的考試過程和結(jié)果的信息都要被記錄,所以說在進(jìn)入考試之前要先進(jìn)行用戶注冊,之后用戶登錄進(jìn)行考試,開始考試之后,系統(tǒng)要求實(shí)現(xiàn)考試過程中的錯題詳解,實(shí)現(xiàn)每錯一題便詳細(xì)學(xué)習(xí)一題的目的,從而達(dá)到高效復(fù)習(xí)的效果,所以說,對于每一位學(xué)員,答對題目直接跳過,答錯的題目將出現(xiàn)正確答案和題目解析。答題完畢之后點(diǎn)擊提交試卷,系統(tǒng)進(jìn)行自動評分同時給予考試評價。4 系統(tǒng)設(shè)計(jì)4.1系統(tǒng)設(shè)計(jì)目標(biāo) 了解到本系統(tǒng)要完成的功能,以及服務(wù)的對象,本系統(tǒng)主要服務(wù)于所有參加或者想要參加駕??荚嚨膶W(xué)員,以便捷性,精準(zhǔn)性為主,實(shí)現(xiàn)隨時隨地
8、進(jìn)行駕校模擬考試的功能。4.2 系統(tǒng)功能模塊設(shè)計(jì)從前面功能需求分析可以設(shè)計(jì)1個主要功能模塊,是模擬考試。4個次要功能模塊,即考試科目,試題內(nèi)容,考試結(jié)束條件,查看測試結(jié)果。1.模擬考試內(nèi)容:表4-1考試內(nèi)容科目試題數(shù)量每題分?jǐn)?shù)限定時間總分?jǐn)?shù)及格分?jǐn)?shù)C1、C2科目一10014510090C1、C2科目四5023010090 2.考試結(jié)束條件、考試期間可進(jìn)行的操作和考試過程可查看的內(nèi)容考生答完所有題目并進(jìn)行提交試卷操作,若沒有答完所有試題,不允許提交試卷。 考試時間結(jié)束,強(qiáng)制結(jié)束考試。 放棄考試,此次考試作廢。 可查看時間倒計(jì)時。 可查看未答題、已答題、答錯題、標(biāo)記題4.3 數(shù)據(jù)庫設(shè)計(jì) 1. C1
9、、C2科目一試題表 表4-2 數(shù)據(jù)庫字段字段名稱類型可為空默認(rèn)值注釋idintN試題IDchaptercharN所屬科目章節(jié)q_typecharN試題類型q_nameintN試題名稱q_answercharN試題答案q_analysisintY試題分析option_aintY試題選項(xiàng)option_blongYoption_cintYoption_dcharYq_imgurl_ncharY試題圖片q_imgurl_lcharY大圖q_imgurl_slongY小圖 2.C1、C2科目四試題表表名:st_c1c2_k4 與表4-2數(shù)據(jù)庫字段相同創(chuàng)建數(shù)據(jù)庫代碼:package com.driving
10、license.database;import java.util.ArrayList;import java.util.Map;import com.drivinglicense.pojo.TestQuestion;import com.drivinglicense.utils.DataBaseUtil;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteO
11、penHelper;public class ClientDataBase private Context context = null;private static final int DB_VERSION = 1;public final static String TABLE_K1 = st_c1c2_k1;public final static String TABLE_K4 = st_c1c2_k4;private SQLiteDatabase sqLiteDatabase = null;private SqliteHelper sqliteHelper = null;private
12、 static class SqliteHelper extends SQLiteOpenHelper public SqliteHelper(Context context) super(context, DataBaseUtil.DB_NAME, null, DB_VERSION);Overridepublic void onCreate(SQLiteDatabase db) Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) public ClientDataBase(Conte
13、xt context) this.context = context;public boolean open() if (DataBaseUtil.isDatabaseOperating) return false;sqliteHelper = new SqliteHelper(context);sqLiteDatabase = sqliteHelper.getWritableDatabase();DataBaseUtil.isDatabaseOperating = true;return true;public void close() sqliteHelper.close();DataBa
14、seUtil.isDatabaseOperating = false;public ArrayList getTestQuestions(String tableName) ArrayList testQuestions = new ArrayList();Cursor cursor = sqLiteDatabase.rawQuery(getQuerySQL(tableName), null);if (cursor.moveToFirst() do TestQuestion testQuestion = new TestQuestion();testQuestion.setId(cursor.
15、getInt(0);testQuestion.setChapter(cursor.getInt(1);testQuestion.setQ_type(cursor.getInt(2);testQuestion.setQ_name(cursor.getString(3);testQuestion.setQ_answer(cursor.getInt(4);testQuestion.setQ_analysis(cursor.getString(5);Map options = testQuestion.getOptions();options.put(cursor.getColumnName(6),
16、cursor.getString(6);options.put(cursor.getColumnName(7), cursor.getString(7);options.put(cursor.getColumnName(8), cursor.getString(8);options.put(cursor.getColumnName(9), cursor.getString(9);Map q_imgurl = testQuestion.getQ_imgurl();q_imgurl.put(cursor.getColumnName(10), cursor.getString(10);q_imgur
17、l.put(cursor.getColumnName(11), cursor.getString(11);q_imgurl.put(cursor.getColumnName(12), cursor.getString(12);testQuestions.add(testQuestion); while (cursor.moveToNext();cursor.close();return testQuestions;private String getQuerySQL(String tableName) return SELECT * FROM + tableName + ORDER BY RA
18、NDOM() limit 100;鏈接數(shù)據(jù)庫代碼:package com.drivinglicense.utils;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import android.content.Context;/* * * * author zhengyx * since 2014-1-25 上午9:49:09 * version 1.0 * */public class DataBaseUtil / - 數(shù)據(jù)庫操
19、作狀態(tài)public static boolean isDatabaseOperating = false;public final static String DB_NAME = jzmnks.db;private final static String DataBaseDir = databases;public String GetDataBasePath(Context context) String packageName = context.getPackageName();/Log.i(PackName, packageName);/ String DB_PATH = String
20、.format(/data/data/%1$s/databases/,/ packageName);String DB_PATH = File.separator + data + File.separator + data+ File.separator + packageName + File.separator + DataBaseDir;String DB_ASSETS_PATH = DataBaseDir + File.separator + DB_NAME;if (!(new File(DB_PATH).exists() try / 如 SQLite 數(shù)據(jù)庫文件不存在,再檢查一下
21、database 目錄是否存在File f = new File(DB_PATH);/ 如 database 目錄不存在,新建該目錄if (!f.exists() f.mkdir();/ 得到 assets 目錄下我們實(shí)現(xiàn)準(zhǔn)備好的 SQLite 數(shù)據(jù)庫作為輸入流InputStream is = context.getAssets().open(DB_ASSETS_PATH);/ 輸出流OutputStream os = new FileOutputStream(DB_PATH + File.separator+ DB_NAME);/ 文件寫入byte buffer = new byte1024
22、;int length;while (length = is.read(buffer) 0) os.write(buffer, 0, length);/ 關(guān)閉文件流os.flush();os.close();is.close(); catch (Exception e) e.printStackTrace();return DB_PATH;5 系統(tǒng)的實(shí)現(xiàn)5.1系統(tǒng)登錄 進(jìn)入系統(tǒng)登錄界面先注冊用戶信息,然后登陸,以便能夠保證每一位學(xué)員信息及考試能容信息得到保存。如圖5-1所示。 圖5-1 登陸界面登陸注冊界面實(shí)現(xiàn)代碼:package com.drivinglicense.options.logi
23、n;import com.drivinglicense.R;import com.drivinglicense.service.AppBaseFragmentActivity;import com.drivinglicense.service.MobileApplication;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RadioGroup;/* * 登陸
24、、注冊控制類 * * author zhengyx * since 2014-1-3 下午12:14:29 * version 1.0 * */public class LoginActivity extends AppBaseFragmentActivity implementsLoginTopFragment.Callbacks public static String Position = position;private Button parentdialog_cancel_Button;public static Button parentdialog_confirm_Button;
25、Overrideprotected void onCreate(Bundle savedInstanceState) MobileApplication.allActivity.add(this);super.onCreate(savedInstanceState);private OnClickListener clickListener = new OnClickListener() Overridepublic void onClick(View v) switch (v.getId() case R.id.parentdialog_cancel_Button:finish();brea
26、k;default:break;Overridepublic void onRadioGroupCheckedChanged(RadioGroup radioGroup, int checkedId) toFragment(checkedId);Overrideprotected int getLayoutId() return R.layout.login;Overrideprotected void setupView() parentdialog_cancel_Button = (Button) findViewById(R.id.parentdialog_cancel_Button);
27、parentdialog_cancel_Button.setOnClickListener(clickListener);parentdialog_confirm_Button = (Button) findViewById(R.id.parentdialog_confirm_Button);Overrideprotected void initializedData() onRadioGroupCheckedChanged(null, R.id.login_tab_1_RadioButton);5.2主界面登陸之后進(jìn)入系統(tǒng)主界面,如圖5-2所示。 圖5-2 主界面系統(tǒng)主界面實(shí)現(xiàn)代碼:pack
28、age com.drivinglicense.options;import com.drivinglicense.R;import com.drivinglicense.options.about.AboutActivity;import com.drivinglicense.options.beginexam.ExamActivity;import com.drivinglicense.options.cartype.CarTypeActivity;import com.drivinglicense.options.login.ExitAppActivity;import com.drivi
29、nglicense.options.login.LoginActivity;import com.drivinglicense.options.login.LogoutActivity;import com.drivinglicense.options.login.UserInfo;import com.drivinglicense.options.setting.SettingActivity;import com.drivinglicense.service.AppBaseFragmentActivity;import com.drivinglicense.service.MobileAp
30、plication;import android.content.Intent;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends AppBaseFragmentActivity implementsMainMiddleFragment.Callbacks private View main_login_RelativeLayout, mai
31、n_exit_RelativeLayout;public static View main_unlogin_ImageView;Overrideprotected void onCreate(Bundle savedInstanceState) MobileApplication.allActivity.add(this);super.onCreate(savedInstanceState);Overridepublic void onClick(View view) Intent intent = null;switch (view.getId() case R.id.main_top_le
32、ft_RelativeLayout:intent = new Intent(MainActivity.this, SettingActivity.class);break;case R.id.main_top_right_RelativeLayout:if (UserInfo.isOnLine) intent = new Intent(MainActivity.this, ExamActivity.class); else show(R.string.nologin);break;case R.id.main_bottom_left_RelativeLayout:intent = new In
33、tent(MainActivity.this, AboutActivity.class);break;case R.id.main_bottom_right_RelativeLayout:intent = new Intent(MainActivity.this, CarTypeActivity.class);break;default:break;if (intent != null) MainActivity.this.startActivity(intent);private OnClickListener clickListener = new OnClickListener() Ov
34、erridepublic void onClick(View view) Intent intent = null;switch (view.getId() case R.id.main_login_RelativeLayout:if (UserInfo.isOnLine) intent=newIntent(MainActivity.this, LogoutActivity.class); else intent=newIntent(MainActivity.this, LoginActivity.class);break;case R.id.main_exit_RelativeLayout:
35、intent = new Intent(MainActivity.this, ExitAppActivity.class);break;default:break;if (intent != null) MainActivity.this.startActivity(intent);Overrideprotected int getLayoutId() return R.layout.main;Overrideprotected void setupView() main_login_RelativeLayout = findViewById(R.id.main_login_RelativeL
36、ayout);main_unlogin_ImageView = findViewById(R.id.main_unlogin_ImageView);main_exit_RelativeLayout = findViewById(R.id.main_exit_RelativeLayout);main_login_RelativeLayout.setOnClickListener(clickListener);main_exit_RelativeLayout.setOnClickListener(clickListener);Overrideprotected void initializedDa
37、ta() Overridepublic boolean dispatchKeyEvent(KeyEvent event) if (event.getKeyCode() = KeyEvent.KEYCODE_BACK & event.getAction() = KeyEvent.ACTION_DOWN) Intentintent=newIntent(MainActivity.this, ExitAppActivity.class);MainActivity.this.startActivity(intent);return true; else return super.dispatchKeyE
38、vent(event);5.3開始考試 進(jìn)入主界面后,選擇考試類型開始進(jìn)行答題考試,答案正確直接進(jìn)入下一題,答案錯誤則會出現(xiàn)相應(yīng)題目解析。如圖5-3所示。圖5-3 考試界面考試界面控制代碼:package com.drivinglicense.options.beginexam;import java.util.ArrayList;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.view.View.OnClickListener;import androi
39、d.widget.TextView;import android.widget.Toast;import com.android.threadpool.IActivity;import com.android.threadpool.Task;import com.drivinglicense.R;import com.drivinglicense.database.ClientDataBase;import com.drivinglicense.pojo.TestQuestion;import com.drivinglicense.service.AppBaseFragmentActivity
40、;import com.drivinglicense.service.MobileApplication;import com.drivinglicense.service.TaskID;import com.drivinglicense.widget.dialog.ExamConfirmDialog;/* * 考試頁面控制類 * * author zhengyx * since 2014-1-24 上午10:27:01 * version 1.0 * */public class ExamActivity extends AppBaseFragmentActivity implementsE
41、xamBottomFragment.Callbacks, IActivity private TextView back_TextView, confirm_TextView;private ExamConfirmDialog confirmDialog;private ArrayList testQuestions;public static int index = 0;Overrideprotected void onCreate(Bundle savedInstanceState) MobileApplication.allActivity.add(this);MobileApplica
42、tion.allIActivity.add(this);super.onCreate(savedInstanceState);private OnClickListener clickListener = new OnClickListener() Overridepublic void onClick(View view) switch (view.getId() case R.id.exam_header_left_TextView:ExamBottomFragment.stopTimer();finish();break;case R.id.exam_header_right_TextV
43、iew:ExamBottomFragment.isPause = true;confirmDialog = new ExamConfirmDialog(ExamActivity.this, this, this);confirmDialog.show();break;case R.id.parentdialog_cancel_Button:ExamBottomFragment.isPause = false;confirmDialog.cancel();break;case R.id.parentdialog_confirm_Button:confirmDialog.cancel();Exam
44、BottomFragment.stopTimer();finish();break;default:break;Overrideprotected int getLayoutId() return R.layout.exam;Overrideprotected void setupView() back_TextView = (TextView) findViewById(R.id.exam_header_left_TextView);confirm_TextView = (TextView) findViewById(R.id.exam_header_right_TextView);back
45、_TextView.setOnClickListener(clickListener);confirm_TextView.setOnClickListener(clickListener);Overrideprotected void initializedData() Task task = new Task(TaskID.TASK_QUERY_TESTQUESTION, ClientDataBase.TABLE_K1, this.getClass().getName(), -隨機(jī)抽取考題-);loadingDialog.show();MobileApplication.poolManage
46、r.addTask(task);Overridepublic void onClick(View view) switch (view.getId() case R.id.exam_tab_previous_Button:if (index 0) index-; else Toast.makeText(ExamActivity.this, R.string.exam_noprevious_question, Toast.LENGTH_SHORT).show();break;case R.id.exam_tab_next_Button:if (index 100) index+; else To
47、ast.makeText(ExamActivity.this, R.string.exam_nonext_question, Toast.LENGTH_SHORT).show();break;default:break;toFragment(new ExamContentFragment(), testQuestions.get(index), index);Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) if (keyCode= KeyEvent.KEYCODE_BACK & event.getAction() = KeyEvent.ACTION_DOWN) ExamBottomFragment.stopTimer();finish();return true; else return super.onKeyDown(keyCode, event);Overridepublic void closeLoadingView() Overridepublic vo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技助力現(xiàn)代教室環(huán)境衛(wèi)生優(yōu)化
- 出售股份合同范本
- 2025-2030年中國濕法磷酸行業(yè)發(fā)展趨勢規(guī)劃研究報告
- 裝修櫥柜合同范本
- 租客裝修合同范本
- 2025-2030年中國汽車凸輪軸市場競爭格局及投資戰(zhàn)略研究報告
- 委托開采合同范本
- 銷售石料合同范本
- 2025-2030年中國橄欖苦苷行業(yè)十三五規(guī)劃與未來發(fā)展趨勢分析報告
- 基于腦機(jī)接口的智能機(jī)器人控制系統(tǒng)設(shè)計(jì)
- 地理-廣東省上進(jìn)聯(lián)考領(lǐng)航高中聯(lián)盟2025屆高三下學(xué)期開學(xué)考試題和答案
- GB/T 20032-2024項(xiàng)目風(fēng)險管理應(yīng)用指南
- 博鰲亞洲論壇:創(chuàng)新報告2024
- 2025年全國青少年禁毒知識競賽題庫及答案(401一516) - 副本
- 2025年高三歷史高考第二輪復(fù)習(xí)知識梳理中國史部分復(fù)習(xí)提綱
- 2025年蒙鹽集團(tuán)招聘筆試參考題庫含答案解析
- 精神科醫(yī)療質(zhì)控課件
- 護(hù)理三基三嚴(yán)習(xí)題+參考答案
- 椎間孔鏡的手術(shù)配合
- 四大名著之紅樓夢飲食文化
- 員工互評表(含指標(biāo))
評論
0/150
提交評論