




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、華東交通大學(xué)畢業(yè)設(shè)計(jì)基于移動(dòng)設(shè)備的違章車輛管理系統(tǒng)設(shè)計(jì)及開發(fā)摘要當(dāng)今,人們機(jī)動(dòng)車的擁有量日益增加,車輛的違章發(fā)生率也在迅速攀升。當(dāng)前落后的違章的執(zhí)法模式在實(shí)際的操作過程中有著信息記錄不準(zhǔn)確,違章信息傳遞不及時(shí)等等缺點(diǎn)。而智能手機(jī)愈發(fā)普及,3g和4g網(wǎng)絡(luò)也在飛快發(fā)展,我們正大步走進(jìn)信息化的社會(huì)。與此同時(shí),安卓智能手機(jī)占據(jù)了智能手機(jī)的絕大多數(shù),Android憑借用戶數(shù)量多,易開發(fā)的優(yōu)勢(shì)占據(jù)了大部分的份額的市場(chǎng)。本課題便是基于Android系統(tǒng),通過eclipse集成開發(fā)環(huán)境,使用java語(yǔ)言,制作一個(gè)違章車輛管理系統(tǒng)的app(application應(yīng)用),用于交通執(zhí)法人員的信息收集查詢。本應(yīng)用包含
2、違章車輛信息錄入、違章車輛信息管理和違章車輛數(shù)據(jù)分析等功能。本系統(tǒng)的開發(fā)流程為:首先進(jìn)行需求分析,然后確定違章車輛管理系統(tǒng)的功能,再編寫程序的代碼,調(diào)試程序,運(yùn)行程序,并對(duì)程序進(jìn)行優(yōu)化完善。關(guān)鍵字:java;Android;智能手機(jī)應(yīng)用;違章車輛管理The development of illegal vehicles management system based on mobile devicesAbstractNowadays,the amount of motor vehicle ownership is increasing, the vehicle violation rates
3、are rapidly rising. The current law enforcement pattern of the backward violation has the information record in the actual operation process, and the illegal information transmission is not timely and so on,and smart phones are becoming more and more popular.3G and 4G networks are also developing fa
4、st.we are now entering the society of information technology.At the same time, Android smart phones occupy the vast majority of smart phones.Android dominate the market with the number of users and the advantages of easy development.This paper is based on Android systems,through the eclipse integrat
5、ed development environment, using java language, design a illegal vehicles management system app (Application) for the information collection and inquiry of traffic law enforcement officers.This application contains the functions of illegal vehicle information entry, illegal vehicle information mana
6、gement and illegal vehicle data analysis, etc.The development process of this system is: first carries on the demand analysis, then determines the function of peccancy vehicle management system, and then write a program code, debugging a program, run the program and the program optimiztion.Keywords:
7、java;Android;smart phone application;management of illegal vehicle.目錄1.開發(fā)背景51.1智能手機(jī)的普及51.2 各智能手機(jī)系統(tǒng)的特點(diǎn)51.3本系統(tǒng)的設(shè)計(jì)目的62.違章車輛管理系統(tǒng)功能要求72.1車輛信息錄入72.2違章信息的查找72.3違章車輛數(shù)據(jù)分析72.4系統(tǒng)功能結(jié)構(gòu)73.違章管理系統(tǒng)功能模塊設(shè)計(jì)93.1主系統(tǒng)設(shè)計(jì)93.2 信息錄入模塊設(shè)計(jì)12 3.3信息查找模塊設(shè)計(jì)173.4違章數(shù)據(jù)分析模塊264. 違章車輛管理系統(tǒng)運(yùn)行測(cè)試354.1系統(tǒng)測(cè)試的方法354.2系統(tǒng)測(cè)試過程354.3系統(tǒng)測(cè)試總結(jié)445.違章車輛管理系統(tǒng)的拓
8、展455.1 圖片的存儲(chǔ)功能455.2 數(shù)據(jù)庫(kù)與個(gè)人計(jì)算機(jī)的交互465.3數(shù)據(jù)庫(kù)在不同智能手機(jī)間的傳遞476.設(shè)計(jì)心得總結(jié)48參考文獻(xiàn):491.開發(fā)背景1.1智能手機(jī)的普及智能手機(jī)指的是像PC(個(gè)人電腦)一樣,有著自己獨(dú)立的操作系統(tǒng),可以由用戶自行安裝各類第三方程序的手機(jī)。智能手機(jī)主要具有互聯(lián)網(wǎng)能力、PDA功能、開發(fā)的操作系統(tǒng)、人性化、功能多運(yùn)行輸?shù)目斓牡鹊忍攸c(diǎn),相較于個(gè)人電腦,智能手機(jī)具有攜帶十分方便的優(yōu)勢(shì),隨之而來(lái)的是各式各樣在智能手機(jī)上使人們的學(xué)習(xí)和生活越來(lái)越方便的手機(jī)應(yīng)用。手機(jī)應(yīng)用功能繁多,Android的開發(fā)者逐年增加,各類應(yīng)用手機(jī)化已經(jīng)成了不可改變的趨勢(shì)。為了順應(yīng)時(shí)代潮流,在移動(dòng)端
9、的違章車輛管理系統(tǒng)的開發(fā)也就很有必要了。近幾年來(lái),智能手機(jī)已經(jīng)普及到了人手一部,3G網(wǎng)絡(luò)基本普及,4G網(wǎng)絡(luò)正在飛速的發(fā)展,智能手機(jī)已經(jīng)成為了人們生活的一部分。隨之而來(lái)的是各種方便人們生活的各類手機(jī)應(yīng)用的開發(fā)。本違章車輛管理系統(tǒng)便是基于智能手機(jī)而開發(fā)的一款違章車輛管理系統(tǒng)。1.2 各智能手機(jī)系統(tǒng)的特點(diǎn)1.2.1Android系統(tǒng)Android是開放源代碼的操作系統(tǒng),它基于Linux且非常自由,一般以智能手機(jī)和平板電腦等移動(dòng)設(shè)備作為載體。當(dāng)今的智能手機(jī)中,Android的市場(chǎng)份額占了80%以上,IOS不足13%,window phone 不足4%,在智能手機(jī)系統(tǒng)的領(lǐng)域占據(jù)主導(dǎo)地位。與此同時(shí),And
10、roid不同于蘋果,不在應(yīng)用程序上進(jìn)行嚴(yán)格的限制,同時(shí)Google放出了Android的開發(fā)平臺(tái),十分適合進(jìn)行應(yīng)用開發(fā),且尤其適合新手。1.2.2蘋果的IOS系統(tǒng)IOS是由蘋果公司開發(fā)的移動(dòng)操作系統(tǒng),IOS的系統(tǒng)最大的優(yōu)點(diǎn)就是其安全性能好,所有的應(yīng)用都必須通過appstore發(fā)布再進(jìn)行下載,IOS的系統(tǒng)運(yùn)行快,使用流暢,軟件數(shù)量和種類繁多,但是應(yīng)為安全性的原因遠(yuǎn)不及Android系統(tǒng)。IOS系統(tǒng)的安全性就導(dǎo)致了其開發(fā)的不方便,應(yīng)用發(fā)布的流程比較麻煩,軟件在硬件上的調(diào)試和測(cè)試所需要花費(fèi)的精力就太多,同時(shí)IOS的市場(chǎng)占有率不足13%,app的市場(chǎng)遠(yuǎn)沒有Android那么大,所以IOS系統(tǒng)并不適合用
11、來(lái)開發(fā)我們的違章車輛管理系統(tǒng)。1.2.3 微軟的Windows PhoneWindows Phone(簡(jiǎn)稱:WP)是微軟發(fā)布的一款手機(jī)操作系統(tǒng),它將微軟旗下的Xbox Live游戲、Xbox Music音樂與獨(dú)特的視頻體驗(yàn)集成至手機(jī)中。微軟的Windows Phone具有運(yùn)行流暢,系統(tǒng)優(yōu)先級(jí)高,硬件要求低,與windows操作系統(tǒng)的電腦結(jié)合緊密等等優(yōu)點(diǎn)。但是Windows Phone的應(yīng)用較少,手機(jī)不能越獄,這點(diǎn)也限制了開發(fā)者在這種系統(tǒng)上進(jìn)行開發(fā)新的軟件?;谝陨蠋讉€(gè)智能手機(jī)開發(fā)系統(tǒng)的比較,本應(yīng)用選擇Android系統(tǒng),使用eclipse集成開發(fā)環(huán)境,來(lái)對(duì)車輛違章系統(tǒng)進(jìn)行設(shè)計(jì)和開發(fā)。1.3本系
12、統(tǒng)的設(shè)計(jì)目的當(dāng)今社會(huì)人們的生活水平越來(lái)越高的同時(shí),機(jī)動(dòng)車的保有率也與日俱增。機(jī)動(dòng)車數(shù)量的增長(zhǎng)難免會(huì)帶來(lái)違章數(shù)量的提升,同時(shí)也給交通執(zhí)法人員和違章信息的處理帶來(lái)了更沉重的工作負(fù)擔(dān)。現(xiàn)當(dāng)前落后的執(zhí)法模式為,交通管理人員先發(fā)現(xiàn)違章行為,隨即開罰單記錄違章信息,之后再將罰單提交給交管部門。交通管理部門有專門的人員將違章信息錄入到網(wǎng)絡(luò)當(dāng)中,駕駛?cè)诉@時(shí)可以再網(wǎng)絡(luò)上查找到自己的違章信息,然后繳納罰款。此過程長(zhǎng),流程復(fù)雜,待違章信息上傳時(shí),駕駛?cè)嗽賮?lái)處理自己違章記錄,交通執(zhí)法人員的信息量不足,此過程有諸多不便。本違章車輛管理系統(tǒng)的意義就在于簡(jiǎn)化這個(gè)交通執(zhí)法的過程。交通執(zhí)法人員可以直接在自己的智能手機(jī)上安裝這個(gè)
13、應(yīng)用。這樣,交通管理或者執(zhí)法人員在發(fā)現(xiàn)違章的行為時(shí),可以直接將違章的信息直接錄入到數(shù)據(jù)庫(kù)當(dāng)中。不僅如此,交通執(zhí)法人員可以根據(jù)數(shù)據(jù)庫(kù)已經(jīng)存在的信息,判斷該次違章是否是初犯,是否該罰款,扣分有沒有達(dá)到十二分等等。系統(tǒng)避開了遞交罰單再上傳的過程,提升效率的同時(shí)節(jié)省了不少精力。交通管理人員可以對(duì)已知的違章信息進(jìn)行查詢和對(duì)系統(tǒng)分析出的結(jié)果多加注意,以提升交通違章的管理質(zhì)量。通過使用本系統(tǒng),交通管理的過程加快了信息的上傳速度,并且節(jié)省了人力物力,同時(shí)本應(yīng)用具有違章車輛數(shù)據(jù)分析的功能,可以給交通執(zhí)法人員提供一定的參考信息。2.違章車輛管理系統(tǒng)功能要求違章車輛管理系統(tǒng)的功能主要包括以下三種:車輛信息錄入、違章
14、信息查找、違章車輛數(shù)據(jù)分析。2.1車輛信息錄入 把司機(jī)違章的信息錄入到系統(tǒng)當(dāng)中,數(shù)據(jù)保存在手機(jī)的SD卡當(dāng)中,并以TXT的格式保存。內(nèi)容包括,駕駛員姓名、車牌號(hào)、駕駛證號(hào)、行駛證號(hào)、違章車型、違章地點(diǎn)、違章時(shí)間、違章條款和罰款金額。2.2違章信息的查找本應(yīng)用通過按姓名、按車牌號(hào)、按駕駛證號(hào)、按行駛證號(hào)4種方法查詢。查詢并可以一次性顯示出所有結(jié)果。2.3違章車輛數(shù)據(jù)分析本應(yīng)用通過對(duì)錄入的信息進(jìn)行統(tǒng)計(jì)和分析,以文字或圖表等形式把所以違章車輛的信息表現(xiàn)出來(lái),用于之后的車輛管理與研究。2.4系統(tǒng)功能結(jié)構(gòu)進(jìn)入程序的主界面后,分別通過三個(gè)按鈕進(jìn)入三種不同的功能,程序的組織結(jié)構(gòu)體系圖如下圖2.1所示:圖2.1
15、 違章車輛關(guān)系系統(tǒng)結(jié)構(gòu)體系圖3.違章管理系統(tǒng)功能模塊設(shè)計(jì)3.1主系統(tǒng)設(shè)計(jì)3.1.1 主界面設(shè)計(jì)主界面采用linearlayout,由一個(gè)textview和4個(gè)button組成,textview顯示“違章車輛管理系統(tǒng)”,前三個(gè)按鈕分別對(duì)應(yīng)車輛信息錄入、車輛信息查詢和違章車輛數(shù)據(jù)分析,第四個(gè)按鈕為初始化,該按鈕的作用是創(chuàng)建底層數(shù)據(jù)文件和格式化所有數(shù)據(jù)。主界面的樣式如下圖3.1:圖3.1 主界面其中所有控件的width均為fill_parent,height均為warp_content,如:3.1.2主界面對(duì)應(yīng)的代碼設(shè)計(jì)(MainActivity)首先在oncreate方法中,對(duì)所有的控件進(jìn)行實(shí)例化
16、,并對(duì)按鈕設(shè)置監(jiān)聽器,當(dāng)點(diǎn)擊按鈕的時(shí)候,系統(tǒng)會(huì)進(jìn)入當(dāng)相應(yīng)的操作界面,具體代碼如下Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/綁定主布局 /實(shí)例化操作btnInput=(Button) findViewById(R.id.btnInput);btnFind=(Button) findViewById(R.id.btnFind);btnAnalyze=(Button) find
17、ViewById(R.id.btnAnalyze);btnInitialise=(Button) findViewById(R.id.btnInitialise); /設(shè)置監(jiān)聽器btnInput.setOnClickListener(oclInput);btnFind.setOnClickListener(oclFind);btnAnalyze.setOnClickListener(oclAnalyze);btnInitialise.setOnClickListener(oclInitialise);MainAcitivity中,filename代表全局代碼使用的文件名,用于儲(chǔ)存違章車輛的數(shù)據(jù)
18、,路徑為手機(jī)內(nèi)存的根目錄,格式為txt,三個(gè)進(jìn)入次界面的按鈕監(jiān)聽器事件用intend 方法進(jìn)入下一個(gè)acitivity。初始化的點(diǎn)擊事件為新建txt文件,用于儲(chǔ)存數(shù)據(jù),同時(shí)可以清除所有之前輸入的數(shù)據(jù),具體代碼如下:public class MainActivity extends Activity public String filename=database.txt;/全程使用的文件名private Button btnInput,btnFind,btnAnalyze,btnInitialise;/四個(gè)按鈕的名稱public File sdcard = Environment.getExte
19、rnalStorageDirectory();/獲得SD卡的操作權(quán)限private OnClickListener oclInitialise=new OnClickListener() /初始化Overridepublic void onClick(View arg0) File myfile= new File(sdcard,filename);try myfile.createNewFile();FileOutputStream fos=new FileOutputStream(myfile);OutputStreamWriter osw=new OutputStreamWriter(f
20、os,UTF-8);osw.write();osw.flush();osw.close();fos.close();Toast.makeText(MainActivity.this, 初始化成功, Toast.LENGTH_SHORT).show(); catch (IOException e) e.printStackTrace();private OnClickListener oclInput=new OnClickListener() /進(jìn)入錄入窗體Overridepublic void onClick(View arg0) startActivity(new Intent(MainA
21、ctivity.this,inputActivity.class); ;private OnClickListener oclFind=new OnClickListener() /進(jìn)入查找窗體Overridepublic void onClick(View arg0) startActivity(new Intent(MainActivity.this,findActivity.class);private OnClickListener oclAnalyze=new OnClickListener() /進(jìn)入數(shù)據(jù)分析窗體Overridepublic void onClick(View ar
22、g0) startActivity(new Intent(MainActivity.this,analyzeActivity.class);3.2 信息錄入模塊設(shè)計(jì)3.2.1信息錄入界面設(shè)計(jì)違章車輛信息錄入的界面采用tablelayout,用tablerow來(lái)填充每一行,每一行包括一個(gè)textview和一個(gè)editext,textview用于提示要輸入的信息,edittext用于用戶的信息輸入。在最下有三個(gè)按鈕:違章信息錄入、重新輸入、返回主菜單,分別用于把輸入的數(shù)據(jù)保存到數(shù)據(jù)庫(kù),清空所有輸入的數(shù)據(jù)和返回之前的界面。每一行中,textview和edittext的weight都為1,用來(lái)填充并且
23、分割每一行的空間,具體界面如下圖3.2所示:圖3.2:車輛信息錄入界面3.2.2 存成數(shù)據(jù)類型的選擇本應(yīng)用存儲(chǔ)數(shù)據(jù)有兩種選擇SQLite數(shù)據(jù)庫(kù)和TXT文檔,以下對(duì)兩種數(shù)據(jù)存儲(chǔ)模式進(jìn)行分析。 SQLite在Android應(yīng)用的設(shè)計(jì)中,數(shù)據(jù)庫(kù)使用最多的是SQLite。SQLite是一種嵌入式的輕量數(shù)據(jù)庫(kù),它最大的優(yōu)點(diǎn)就是占用的資源極小,數(shù)據(jù)易于查詢,支持SQL語(yǔ)法,尤其適用于手機(jī)這種資源有限的設(shè)備。SQLite的數(shù)據(jù)保存在應(yīng)用的內(nèi)部,不能被eclipse集成開發(fā)環(huán)境打開,內(nèi)部存儲(chǔ)了多少數(shù)據(jù)難以知道。不僅如此,SQLite并不適合大量的數(shù)據(jù)存儲(chǔ),數(shù)據(jù)難以備份,保存和上傳,僅僅能作為內(nèi)部代碼的查詢和計(jì)
24、算。TXT文檔使用TXT文檔來(lái)存儲(chǔ)數(shù)據(jù)文件屬于另辟蹊徑的一種做法,它也有不少缺點(diǎn)。首先是查詢代碼難寫,在SQLite中查詢僅僅需要對(duì)SQL數(shù)據(jù)庫(kù)語(yǔ)言有一定的了解,用select form等語(yǔ)句就能輕松在數(shù)據(jù)庫(kù)中查出想要的信息。同時(shí)代碼牽涉到文件的讀取與寫入增加了代碼的復(fù)雜性。但是,使用TXT文檔存儲(chǔ)數(shù)據(jù)的優(yōu)點(diǎn)也是顯而易見的。TXT文件直接被應(yīng)用創(chuàng)建在SD的目錄下,數(shù)據(jù)寫入TXT文檔當(dāng)中。該txt文檔可以被其他應(yīng)用打開(如wps,記事本等等),方便檢查輸入的信息是否正確,對(duì)程序的調(diào)試有著很大的幫助。更重要的是,txt文檔是以文件的形式存在,意味著違章的數(shù)據(jù)可以進(jìn)行備份、手動(dòng)修改和上傳到服務(wù)器,有
25、著更加廣闊的拓展空間?;谝陨蠋c(diǎn)考慮,本違章車輛管理系統(tǒng)決定采用TXT文檔作為儲(chǔ)存數(shù)據(jù)的媒介,并認(rèn)真的花更多精力設(shè)計(jì)系統(tǒng)的查詢模塊和系統(tǒng)分析模塊,以使得軟件的數(shù)據(jù)具有備份和存儲(chǔ)的能力,和上傳服務(wù)器的潛力。3.2.3信息錄入界面代碼設(shè)計(jì)(inputActivity)與主界面的oncreate的方法類型,inputAcitivity的創(chuàng)建方法為控件的實(shí)例化和事件監(jiān)聽器的設(shè)置,具體代碼如下:Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentV
26、iew(R.layout.input);/按鈕實(shí)例化&設(shè)置監(jiān)聽器btnInputInfo=(Button) findViewById(R.id.btnInputInfo);btnInputInfo.setOnClickListener(oclInputInfo);btnInputBack=(Button) findViewById(R.id.btnInputBack);btnInputBack.setOnClickListener(oclInputBack);btnClear=(Button) findViewById(R.id.btnClear);btnClear.setOnClickLis
27、tener(oclClear);/EditText實(shí)例化EditTextName=(EditText) findViewById(R.id.EditTextName);EditTextLicenseNumber=(EditText) findViewById(R.id.EditTextLicenseNumber);EditTextLicenseNumber1=(EditText) findViewById(R.id.EditTextLicenseNumber1);EditTextPlateNumber=(EditText) findViewById(R.id.EditTextPlateNumb
28、er);EditTextType=(EditText) findViewById(R.id.EditTextType);EditTextAddress=(EditText) findViewById(R.id.EditTextAddress);EditTextTime=(EditText) findViewById(R.id.EditTextTime);EditTextClause=(EditText) findViewById(R.id.EditTextClause);EditTextMoney=(EditText) findViewById(R.id.EditTextMoney);在以上代
29、碼中,變量對(duì)應(yīng)的意義如下表3.1所示:表3.1 inputActivity變量含義表變量名稱對(duì)應(yīng)含義類型EditTextName用戶輸入的姓名EditTextEditTextLicenseNumber用戶輸入的駕駛證號(hào)EditTextEditTextLicenseNumber1用戶輸入的行駛證號(hào)EditTextEditTextPlateNumber用戶輸入的車牌號(hào)EditTextEditTextType用戶輸入的車型EditTextEditTextAddress用戶輸入的違章地點(diǎn)EditTextEditTextTime用戶輸入的違章時(shí)間EditTextEditTextClause用戶輸入的違章
30、條款EditTextEditTextMoney用戶輸入的罰款金額EditTextbtnInputInfo錄入信息按鈕ButtonbtnInputBack返回主菜單按鈕ButtonbtnClear清除信息按鈕ButtonoclInputInfo錄入信息按鈕監(jiān)聽器onclicklisteneroclInputBack返回主菜單按鈕監(jiān)聽器onclicklisteneroclClear清除信息按鈕監(jiān)聽器onclicklistener清除數(shù)據(jù)按鈕對(duì)應(yīng)的事件代碼很簡(jiǎn)單,把每一個(gè)edittext設(shè)為空“”即可,具體代碼如下:Overridepublic void onClick(View arg0) / 清
31、空數(shù)據(jù)EditTextName.setText();EditTextLicenseNumber.setText();EditTextLicenseNumber1.setText();EditTextPlateNumber.setText();EditTextType.setText();EditTextAddress.setText();EditTextTime.setText();EditTextClause.setText();EditTextMoney.setText();返回主菜單按鈕對(duì)應(yīng)的事件用intend發(fā)放實(shí)現(xiàn)即可:private OnClickListener oclInput
32、Back =new OnClickListener() /返回主菜單Overridepublic void onClick(View arg0) startActivity(new Intent(inputActivity.this,MainActivity.class);信息錄入按鈕對(duì)應(yīng)的事件代碼較為復(fù)雜,思路為首先讀取先前保存的數(shù)據(jù),存儲(chǔ)在一個(gè)字符串中,然后把所有edittext的信息整合起來(lái),保存為一個(gè)新的字符串,將新老字符串合并之后,總字符串便是最新的數(shù)據(jù)。最后將這最后的字符串保存到原先的數(shù)據(jù)文件中,便完成的違章信息的錄入,算法流程圖3.3如下:圖3.3 違章信息錄入算法流程圖 通過違
33、章車輛信息錄入系統(tǒng),每一條違章系統(tǒng)在違章的數(shù)據(jù)庫(kù)中占用一行,以“*”開頭,方便之后的查找,以回車“n”結(jié)束。比如按圖3.3中輸入違章信息,在數(shù)據(jù)庫(kù)中,顯示的結(jié)果為“*姓名:張三;駕駛證號(hào)行駛證號(hào):18237;車牌號(hào):贛A1430;車型:大眾;違章地點(diǎn):雙港路;違章時(shí)間:5月20日上午10點(diǎn);違章條款:闖紅燈;罰款金額:100;”其中每條信息由分號(hào)“;”隔開,用于之后的查找功能。圖3.4 車輛信息錄入實(shí)例3.3信息查找模塊設(shè)計(jì)3.3.1違章信息查找界面設(shè)計(jì)違章信息查找界面由RadioGroup單選組件決定選擇的方式,提供按姓名查找,按駕駛證號(hào)查找,按車牌號(hào)
34、查找三種查找方式。RadioGroup下面設(shè)置一個(gè)EditText,用于用戶輸入查找的關(guān)鍵字,最下方一個(gè)查找按鈕,用于顯示查找的結(jié)果。界面如下圖3.5顯示:圖3.5查找界面3.3.2查找界面代碼設(shè)計(jì)(findActivity)首先,在oncreate方法中進(jìn)行控件的實(shí)例化,具體代碼與之前的acitivity類似,如下:Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.find);btnFind=(Button)
35、 findViewById(R.id.btnFind);tvResult=(TextView) findViewById(R.id.tvResult);etKeyWord=(EditText) findViewById(R.id.etKeyWord);rdByName=(RadioButton) findViewById(R.id.rbByName);rdByLicense=(RadioButton) findViewById(R.id.rbByLicense);rdByNumber=(RadioButton) findViewById(R.id.rbByNumber);btnFind.set
36、OnClickListener(oclFind);在以上代碼中,變量對(duì)應(yīng)的意義如下表3.2所示:表3.2 findActivity變量含義表變量名稱對(duì)應(yīng)含義類型btnFind查找按鈕ButtontvResult顯示結(jié)果的地方TextViewetKeyWord用戶輸入的查找關(guān)鍵字EditTextrdByName按姓名查找選項(xiàng)RadioButtonrdByLicense按駕駛證號(hào)查找選項(xiàng)RadioButtonrdByNumber按車牌號(hào)查找選項(xiàng)RadioButtonoclFind查找按鈕的監(jiān)聽器OnClickListener在btnFind的點(diǎn)擊事件中,首先設(shè)置一些初始值:/獲取存放數(shù)據(jù)的文件名F
37、ile myfile= new File(sdcard,filename);/把用戶輸入的關(guān)鍵字轉(zhuǎn)換成字符串keyword=etKeyWord.getText().toString();/把顯示結(jié)果的界面清零tvResult.setText();為了防止用戶還未輸入任何關(guān)鍵字就點(diǎn)擊了查找按鈕而導(dǎo)致程序報(bào)錯(cuò),需添加:if (keyword.equals()return;由于有三種不同的查找方式:按姓名查找、按駕駛證號(hào)查找和按車牌號(hào)查找,用戶通過單選框(RadioButton)來(lái)對(duì)查找的方式進(jìn)行選擇,系統(tǒng)內(nèi)部需要判斷用戶的選擇,然后再執(zhí)行相應(yīng)的代碼,所以,可以得出之后的程序框架:if (rdByN
38、ame.isChecked()按姓名查找的代碼else if (rdByLicense.isChecked()按駕駛證號(hào)查找的代碼else if (rdByNumber.isChecked()按車牌號(hào)查找的代碼按姓名查找的理論算法:確定程序的框架之后,我們可以對(duì)三種不同查找方式的代碼進(jìn)行設(shè)計(jì),在設(shè)計(jì)查找的代碼時(shí),主要用到了indexof這個(gè)方法,該方法為:字符串A.indexof(需要查找的內(nèi)容,開始查找的位置)同理,lastindexof方法為從后往前查找。在查找時(shí),我們通過對(duì)數(shù)據(jù)庫(kù)的文件進(jìn)行讀取,把整個(gè)數(shù)據(jù)文件存放在一個(gè)字符串中(本系統(tǒng)存放數(shù)據(jù)的字符為inString),然后對(duì)inStri
39、ng進(jìn)行關(guān)鍵字查找。找到關(guān)鍵字的位置之后,判斷關(guān)鍵字是否為需要查找的內(nèi)容,如:按姓名查找只找姓名,其他信息的關(guān)鍵字若和姓名重復(fù),不會(huì)對(duì)其造成干擾。在確認(rèn)關(guān)鍵字與關(guān)鍵字的類型都匹配之后,系統(tǒng)會(huì)根據(jù)關(guān)鍵字的位置,通過之前信息錄入插入的星號(hào)“*”和每一欄信息的間隔符分號(hào)“;”,確定整條違章信息的內(nèi)容,然后把這整條違章信息顯示在屏幕上(tvResult),并記錄該條信息在整個(gè)系統(tǒng)中的違章。獲得違章信息是,本系統(tǒng)使用substring方法,截取instring的子字符串,如:字符串B=字符串A.Substring(開始位置,結(jié)束位置)在獲取整個(gè)字符串的長(zhǎng)度之后,通過for循環(huán),檢索第二、第三個(gè)關(guān)鍵字,并
40、用同樣的方法對(duì)違章信息進(jìn)行判定。算法流程圖如下:圖3.6按姓名查詢算法流程圖查找的過程中,需要用到各種變量,各變量的類型和含義在下表3.3中顯示:表3.3 查找點(diǎn)擊事件變量含義表變量名稱對(duì)應(yīng)含義類型inString從數(shù)據(jù)文件中讀取的數(shù)據(jù)字符串lengthinString的字符串長(zhǎng)度整型positionKeyword關(guān)鍵字在inString中的位置整型positionEnter關(guān)鍵字之后回車的位置整型result含有關(guān)鍵字的違章信息字符串position查找過程中的指針位置整型wzName違章信息中姓名的位置整型wzLicense違章信息中駕駛證號(hào)的位置整型wzLicense1違章信息中行駛證號(hào)
41、的位置整型wzNumber違章信息中車牌號(hào)的位置整型wzType違章信息中車型的位置整型wzAddress違章信息中違章地點(diǎn)的位置整型wzTime違章信息中違章時(shí)間的位置整型wzClause違章信息中違章條款的位置整型wzMoney違章信息中罰款金額的位置整型wzfh違章信息中分號(hào)的位置整型所以,按姓名查找的詳細(xì)設(shè)計(jì)如下:先讀入數(shù)據(jù)文件FileInputStream fis= new FileInputStream(myfile);InputStreamReader isr=new InputStreamReader(fis,UTF-8);char input= new charfis.ava
42、ilable();isr.read(input);isr.close();fis.close();String inString= new String(input);再獲取數(shù)據(jù)文件的長(zhǎng)度,并將顯示的文本清空Integer length = inString.length();tvResult.setText();建立for循環(huán),position指針位置為循環(huán)標(biāo)量,從0開始到length結(jié)束,步長(zhǎng)為1for (int position =0; position=length;position+)查找關(guān)鍵字是否存在, 如果關(guān)鍵字在數(shù)據(jù)庫(kù)中不存在,則positionKeyword獲得的返回值即為-
43、1,return跳出點(diǎn)擊方法,查找結(jié)果不存在。positionKeyword=inString.indexOf(keyword,position);if (positionKeyword=-1)return;查找到關(guān)鍵字后,positionKeyword即存放了本次循環(huán)中關(guān)鍵字所在的位置,通過獲取關(guān)鍵字位置的前一個(gè)星號(hào)“*”和最后的換行,在代碼中為“n”,再用截取子字符串的方式,把含有關(guān)鍵字的違章信息,保存到result字符串中。獲取違章信息之后,讓指針即循環(huán)變量position等于positionEnter(違章信息末尾的換行符),使下一次循環(huán)直接從下一條違章信息開始查找,直到for循環(huán)結(jié)束
44、。positionStar=inString.lastIndexOf(*,positionKeyword);positionEnter=inString.indexOf(n,positionKeyword);result=inString.substring(positionStar+1,positionEnter);position=positionEnter;在獲取了含有關(guān)鍵字的違章信息result之后,該關(guān)鍵字不一定是我們所需要查找的關(guān)鍵字,如:張三可能是人名,也有可能是違章地點(diǎn),車型等其他我們所不需要的信息,我們需要對(duì)result進(jìn)行逐條信息提取和比對(duì),來(lái)確定該信息是否是我們所需要的信
45、息。在查找姓名模塊中,以關(guān)鍵字輸入“張三”為例,首先獲取違章信息中的“姓名:”的位置。在“姓名:”和緊接著的一個(gè)分號(hào)“;”中間的內(nèi)容,便是違章信息的姓名內(nèi)容。同樣的,用截取子字符串的方法獲取違章信息中的姓名,再與輸入的關(guān)鍵字“張三”,進(jìn)行比對(duì),若相同,則依次輸出接下來(lái)的位置信息,若不同,則“張三”關(guān)鍵字不是姓名而且其他的內(nèi)容,用continue結(jié)束本次循環(huán),查找下一個(gè)目標(biāo)。具體到代碼中:wzName=result.indexOf(姓名:,0);wzfh=result.indexOf(;,wzName);String name=result.substring(wzName+3,wzfh); i
46、f(name.equals(keyword)tvResult.append(result.substring(wzName,wzfh)+n);elsecontinue;通過if語(yǔ)句判斷之前截圖的result是否為應(yīng)當(dāng)輸出的信息,如果不是,后面的代碼不執(zhí)行,如果判斷通過,后面的輸出代碼正常執(zhí)行,緊接著的輸出代碼如下:/顯示駕駛證號(hào)wzLicense=result.indexOf(駕駛證號(hào):,wzfh);wzfh=result.indexOf(;,wzLicense);tvResult.append(result.substring(wzLicense,wzfh)+n);/顯示行駛證號(hào)wzLice
47、nse1=result.indexOf(行駛證號(hào):,wzfh);wzfh=result.indexOf(;,wzLicense1);tvResult.append(result.substring(wzLicense1,wzfh)+n);/顯示車牌號(hào)wzNumber=result.indexOf(車牌號(hào):,wzfh);wzfh=result.indexOf(;,wzNumber);tvResult.append(result.substring(wzNumber,wzfh)+n);/顯示車型wzType=result.indexOf(車型:,wzfh);wzfh=result.indexOf(
48、;,wzType);tvResult.append(result.substring(wzType,wzfh)+n);/顯示違章地點(diǎn)wzAddress=result.indexOf(違章地點(diǎn):,wzfh);wzfh=result.indexOf(;,wzAddress);tvResult.append(result.substring(wzAddress,wzfh)+n);/顯示違章時(shí)間wzTime=result.indexOf(違章時(shí)間:,wzfh);wzfh=result.indexOf(;,wzTime);tvResult.append(result.substring(wzTime,w
49、zfh)+n);/顯示違章條款wzClause=result.indexOf(違章條款:,wzfh);wzfh=result.indexOf(;,wzClause);tvResult.append(result.substring(wzClause,wzfh)+n);/顯示罰款金額wzMoney=result.indexOf(罰款金額:,wzfh);wzfh=result.indexOf(;,wzMoney);tvResult.append(result.substring(wzMoney,wzfh)+n+n);以上代碼多次利用wzfh這個(gè)變量,依次確定每一個(gè)分號(hào)的位置,加強(qiáng)的變量的利用率,不
50、需要多次定義同一類型的變量,而且代碼結(jié)構(gòu)清晰,方便調(diào)試。之后的按駕駛證號(hào)查找和按車牌號(hào)查找的代碼與按姓名查找類似,不同之處在于:按姓名查找的姓名是第一項(xiàng)屬性,判定姓名是否是關(guān)鍵字是第一項(xiàng),尚未顯示其他內(nèi)容。而按駕駛證號(hào)和按車牌號(hào)查找時(shí),判定關(guān)鍵字是否為車牌號(hào)和駕駛證號(hào)時(shí),姓名等之前的屬性已經(jīng)輸出在屏幕上,牽涉到wzfh這個(gè)變量的值難以找回,所以要做特殊處理。在這里引入back這個(gè)字符串和positionlast記錄之前已經(jīng)輸出的字符串末尾的位置,即字符串的長(zhǎng)度,以返回之前的值。具體代碼如下:以按駕駛證號(hào)查找為例,按車牌號(hào)查找同理positionlast=tvResult.getText().t
51、oString().length();/顯示駕駛證號(hào)wzLicense=result.indexOf(駕駛證號(hào):,wzfh); wzfh=result.indexOf(;,wzLicense);String license=result.substring(wzLicense+5,wzfh);if(license.equals(keyword)tvResult.append(result.substring(wzLicense,wzfh)+n);else String back=tvResult.getText().toString().substring(0,positionlast); t
52、vResult.setText(back);continue;通過這種手段,當(dāng)駕駛證號(hào)或者車牌號(hào)與關(guān)鍵字并不對(duì)應(yīng)時(shí),可以通過返回該次循環(huán)之前的狀態(tài),來(lái)清除額外的信息。這樣,查詢的結(jié)果就不會(huì)有多余的結(jié)果。同樣以“張三”為例,在違章信息查詢界面,選擇按姓名查詢,在文本框內(nèi)輸入“張三”,再次點(diǎn)擊查找,便可以得出如圖3.7所示的結(jié)果:圖3.7 查詢的結(jié)果3.4違章數(shù)據(jù)分析模塊3.4.1 需要分析的數(shù)據(jù)交通管理人員在執(zhí)法的過程中,發(fā)現(xiàn)的違章行為,有可能是之前有過先例的。在對(duì)有違章前科的駕駛員和車輛進(jìn)行處理時(shí),應(yīng)加大懲罰和教育力度。而交通管理人員可以依靠本系統(tǒng),來(lái)得知這一次違章行為是第幾次發(fā)生,是否是初犯
53、等等。系統(tǒng)可以通過對(duì)違章數(shù)據(jù)庫(kù)的計(jì)算,得知累計(jì)違章記錄最多的駕駛員和違章的多發(fā)地帶,并把結(jié)果顯示在違章數(shù)據(jù)統(tǒng)計(jì)分析的屏幕當(dāng)中,為交通管理人員的執(zhí)法提供了便利。基于以上幾點(diǎn)考慮,本系統(tǒng)違章分析模塊設(shè)計(jì)的內(nèi)容包括統(tǒng)計(jì)違章次數(shù)最多的車牌號(hào)(不統(tǒng)計(jì)駕駛員姓名的原因是考慮到重名的情況不好分析),以及違章的多發(fā)地帶。系統(tǒng)將把統(tǒng)計(jì)出的結(jié)果前幾名一次顯示在違章數(shù)據(jù)分析模塊的屏幕上。3.4.2 違章數(shù)據(jù)分析模塊的界面設(shè)計(jì)之前已經(jīng)得出,違章數(shù)據(jù)界面僅僅需要顯示系統(tǒng)計(jì)算的結(jié)果違章次數(shù)最多的車輛和違章的多發(fā)地點(diǎn)。所以系統(tǒng)界面并不需設(shè)置其他空間,需要設(shè)置一個(gè)textview,用來(lái)顯示違章數(shù)據(jù)的結(jié)果即可。所以,數(shù)據(jù)分析頁(yè)面在設(shè)計(jì)可以放置一個(gè)按鈕并且設(shè)置了事件監(jiān)聽器,通過代碼計(jì)算,把統(tǒng)計(jì)后的結(jié)果顯示到屏幕當(dāng)中。界面如下圖3.6所示:圖3.6違章數(shù)據(jù)統(tǒng)計(jì)分析界面3.4.3違章數(shù)據(jù)分析的算法思路統(tǒng)計(jì)違章次數(shù)最多的車輛(通過車牌號(hào))的算法思路 通過交通管理人員查處違章事件,并通過之前的違章信息錄入系統(tǒng)錄入違章信息并保存到數(shù)據(jù)庫(kù)當(dāng)中,手機(jī)內(nèi)部存儲(chǔ)已經(jīng)以txt文檔的形式把所有的違章信息保存下來(lái)。要對(duì)違章信息進(jìn)行統(tǒng)計(jì),必須先讀取數(shù)據(jù)庫(kù),即存儲(chǔ)數(shù)據(jù)的txt文檔。用之前類型的讀取文檔中的文本的方法,把讀取出的內(nèi)容保
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融市場(chǎng)的財(cái)務(wù)分析方法論
- 跨行業(yè)項(xiàng)目評(píng)估框架從理論到實(shí)踐的轉(zhuǎn)變
- 湖北2025年02月湖北省大悟縣事業(yè)單位統(tǒng)一公開招考125名工作人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 購(gòu)物中心會(huì)員管理的數(shù)字化轉(zhuǎn)型之路
- 財(cái)務(wù)軟件在企業(yè)財(cái)務(wù)分析中的作用
- 高效動(dòng)線設(shè)計(jì)提升購(gòu)物體驗(yàn)
- 質(zhì)量管理體系在醫(yī)藥企業(yè)中的持續(xù)改進(jìn)路徑
- 超聲科醫(yī)生臨床實(shí)踐技能提升與案例分析
- 高中語(yǔ)文作文人生就是一條路
- 小學(xué)數(shù)學(xué)教師心得關(guān)注教學(xué)中的情感態(tài)度
- 2023年高三新高考英語(yǔ)復(fù)習(xí)備考策略及方法指導(dǎo)(深度課件)
- 數(shù)字信號(hào)處理(課件)
- 社會(huì)主義核心價(jià)值觀-團(tuán)課課件
- 城市社會(huì)學(xué)(2015)課件
- 年產(chǎn)2萬(wàn)噸馬來(lái)酸二乙酯技改建設(shè)項(xiàng)目環(huán)評(píng)報(bào)告書
- 中國(guó)古代文論教程完整版課件
- 中班美工區(qū)角活動(dòng)教案10篇
- SJG 103-2021 無(wú)障礙設(shè)計(jì)標(biāo)準(zhǔn)-高清現(xiàn)行
- 皇冠假日酒店智能化系統(tǒng)安裝工程施工合同范本
- 路面工程重點(diǎn)、關(guān)鍵、和難點(diǎn)工程的施工方案(技術(shù)標(biāo))
- 合肥市城市大腦·數(shù)字底座白皮書2020
評(píng)論
0/150
提交評(píng)論