Android開(kāi)發(fā)(七)| “我的12306”實(shí)例

作為程序員,從一無(wú)所知開(kāi)始接觸、熟練使用android控件、布局、活動(dòng),自己開(kāi)發(fā)的項(xiàng)目隨之越來(lái)越茁壯,功能越來(lái)越完善,我們的內(nèi)心是由衷感到高興的。

為了對(duì)兩個(gè)月的學(xué)習(xí)成果有一個(gè)檢驗(yàn),我把之前所學(xué)所講做了如下的綜合實(shí)例;如果能對(duì)其他熱愛(ài)android開(kāi)發(fā)的朋友有所幫助,那簡(jiǎn)直是再好不過(guò)。這也是我寫android開(kāi)發(fā)系列文章的初衷。

這個(gè)實(shí)例取名“我的12306”,顧名思義源自12306火車訂票系統(tǒng),實(shí)現(xiàn)了原版的部分功能。如簡(jiǎn)單的車票預(yù)訂:

購(gòu)票

基本的線路查找:

查詢線路

列車詳細(xì)信息:

車次詳情

學(xué)習(xí)過(guò)程中借鑒一些優(yōu)秀實(shí)例,既是對(duì)編程開(kāi)發(fā)能力的鍛煉,也利于活躍思維,有助于今后開(kāi)發(fā)自己的創(chuàng)新產(chǎn)品。

這一章就來(lái)簡(jiǎn)明扼要的說(shuō)明該實(shí)例的功能和開(kāi)發(fā)過(guò)程。

一、實(shí)現(xiàn)基本的車次查詢

Android程序的設(shè)計(jì)講究邏輯和視圖分離,最好一個(gè)活動(dòng)對(duì)應(yīng)一個(gè)布局,用來(lái)顯示界面的內(nèi)容。所以本實(shí)例都是通過(guò)修改 .xml中的代碼,完成界面的布局。再在activity中加入邏輯實(shí)現(xiàn)的代碼。

如下是第一個(gè)界面,具體布局代碼應(yīng)該可以直接略過(guò)了,稍值一提的是“最近常用線路”往往不只一條,所以把它們存放在ListView中,方便用戶隨時(shí)調(diào)用。

儲(chǔ)備了多條常用線路 方便用戶選擇

關(guān)于Android號(hào)稱最難使用的控件ListView,您可以上網(wǎng)查閱資料或參考《android開(kāi)發(fā)二 | 最常用和最難用的控件》我們需要為L(zhǎng)istView定義一個(gè)適配器(如 ArrayAdapter),將希望傳入顯示的數(shù)據(jù)和ListView關(guān)聯(lián)起來(lái);同時(shí)定義一個(gè)實(shí)體類,作為適配器的適配類型。

關(guān)于查詢界面,先給出點(diǎn)擊“查詢”跳轉(zhuǎn)的響應(yīng)代碼,如需完整代碼您可以在文末留言或私信“葉琛_”。這兒的常用線路我通過(guò)SharedPreferences存儲(chǔ)、讀取,因?yàn)楹?jiǎn)單方便。

“查詢”跳轉(zhuǎn)按鈕

跳轉(zhuǎn)后顯示符合條件的車次。從本界面開(kāi)始的數(shù)據(jù)讀取、寫入,都是是通過(guò)android系統(tǒng)內(nèi)置的數(shù)據(jù)庫(kù)SQLite實(shí)現(xiàn)的。

我已在數(shù)據(jù)庫(kù)中建了三張表,分別存放①列車(車次、起點(diǎn)、終點(diǎn))、②列車詳細(xì)信息(車次、時(shí)間、停靠站、票價(jià)等)、③票務(wù)管理(車次、余票等),用于實(shí)現(xiàn)“12306”的基本功能。表中變量車次是唯一的,即每張表通過(guò)車次關(guān)聯(lián)。

可以在dos界面下使用adb shell對(duì)數(shù)據(jù)庫(kù)和表的創(chuàng)建情況進(jìn)行檢查。

現(xiàn)在,假設(shè)在起點(diǎn)、終點(diǎn)分別輸入“拉薩”和“北京西”,點(diǎn)擊查詢后就會(huì)從數(shù)據(jù)庫(kù)逐條讀取出符合條件的車次:

我們要的結(jié)果出來(lái)了,每條記錄對(duì)應(yīng)于①列車這張表。我暫時(shí)在表中插入兩班車所以只有兩條記錄。

二、實(shí)現(xiàn)車次的新增和查找

上一界面還有兩個(gè)藍(lán)色按鈕,分別為增添和查找功能。增添,就是往表中插入數(shù)據(jù);點(diǎn)擊后,可按提示文字對(duì)新車次進(jìn)行編輯:

新增車次編輯

填寫完成后,點(diǎn)擊“確定”,執(zhí)行如下代碼,通過(guò)SQL語(yǔ)句向三張表插入數(shù)據(jù)并彈出“增加成功”的提示語(yǔ):

至于“查找”就更簡(jiǎn)單了,點(diǎn)擊后頁(yè)面跳轉(zhuǎn),輸入車次后,會(huì)通過(guò)Cursor對(duì)象與表中內(nèi)容進(jìn)行匹配,如果存在,就會(huì)在列表中顯示列車信息;否則提示“車次不存在”并返回上一界面。

通過(guò)cursor匹配表中信息

三、實(shí)現(xiàn)增刪改和??空鹃g的線路查詢

之前的界面,還有一個(gè)編輯按鈕沒(méi)有用到。其實(shí)這個(gè)按鈕經(jīng)過(guò)設(shè)置沒(méi)有實(shí)際功能,僅提示點(diǎn)擊具體班車再進(jìn)行后續(xù)步驟。

我們以“G501”為例,點(diǎn)擊后顯示出本班車的具體信息,包括行駛時(shí)間、??空?、車票等,對(duì)應(yīng)于表列車詳細(xì)信息”

列車詳情

這個(gè)界面顯示的信息相對(duì)比較全面了,它包含了三個(gè)功能:購(gòu)票、編輯和刪除。“刪除”是最簡(jiǎn)單的,它將執(zhí)行SQL的“delete”語(yǔ)句,在后臺(tái)三張表中這班車的信息就會(huì)全部刪光。

刪除車次

在“編輯”中我寫入了增加??空?/b>功能。新增后,加入的??空緯?huì)被顯示在列表末尾,序列號(hào)自動(dòng)+1。我們?cè)凇袄_”到“北京西”間增加一站“石家莊”,再查看G501列車:

??空拘略?/div>

通過(guò)SQL語(yǔ)句“update”更新表,將數(shù)據(jù)增添:

“購(gòu)票”功能將放在下一節(jié)?,F(xiàn)在,還有一個(gè)隱含功能沒(méi)有體現(xiàn),就是不同城市間的線路查詢。假設(shè)我們要查詢“西寧“到“石家莊”的列車,那"G501"肯定包含其中,因?yàn)檫@兩站都是它的??空尽?/p>

進(jìn)入列車詳情,??空咀匀恢皇A藘烧荆?/p>

這個(gè)功能的實(shí)現(xiàn),需要遍歷算法的支持。即輸入起點(diǎn)、終點(diǎn)后先遍歷數(shù)據(jù)庫(kù),判斷有沒(méi)有列車的起始站、終點(diǎn)站剛好與之相等。若有直接取出;若無(wú),再遍歷查找起始站等于“起點(diǎn)”,??空镜扔凇敖K點(diǎn)”的列車...

排查范圍依次增大,最大范圍就是起點(diǎn)和終點(diǎn)都是同一班車的兩個(gè)??空?,否則就沒(méi)有符合條件的車次了。附上遍歷算法的android代碼:

便利查詢算法
接上頁(yè)

這一功能的實(shí)現(xiàn),標(biāo)志我們的項(xiàng)目和實(shí)際應(yīng)用又近了一步,是很好的趨勢(shì)。

四、實(shí)現(xiàn)票數(shù)的銷售

這一步是最困難的,因?yàn)橐紤]的因素很多。例如一班車從北京經(jīng)南京開(kāi)往上海,現(xiàn)在賣出了一張北京到上海的全程車票,這是最理想的;但如果賣出了一張北京到南京的車票,那有人想從北京去上海,就買不到這張票了;除非有人買下南京到上海的車票,不然這個(gè)位置就被閑置浪費(fèi)了。

時(shí)間倉(cāng)促,本案例中我沒(méi)有完整寫出正常售票的算法,只實(shí)現(xiàn)購(gòu)買全程車票的情況。

還是拉薩到北京西的例子,假設(shè)某人購(gòu)買了一張“商務(wù)座”,原來(lái)商務(wù)座余票2張,購(gòu)票成功后余票變?yōu)?。依舊通過(guò)SQL語(yǔ)句實(shí)現(xiàn)表中數(shù)據(jù)的更新。

本案例所有功能、步驟到此介紹完了,關(guān)鍵部分代碼已給出。當(dāng)然部分功能是不全或有缺陷的,這說(shuō)明我們學(xué)習(xí)的道路依舊路漫漫其修遠(yuǎn),蘊(yùn)藏著很大的潛能。


本章小節(jié):

本實(shí)例是對(duì)之前android知識(shí)的綜合運(yùn)用,涉及基本控件、布局、活動(dòng)的跳轉(zhuǎn)、數(shù)據(jù)的傳遞,也充分運(yùn)用了android內(nèi)置數(shù)據(jù)庫(kù)的查詢、更新、添加、刪除各個(gè)功能,還對(duì)SQL語(yǔ)句進(jìn)行了很好的回顧。

通過(guò)今后學(xué)習(xí),改進(jìn)一些算法使功能更加完善,再加上網(wǎng)絡(luò)和多線程技術(shù),我們的應(yīng)用就蠻像一回事了?!熬幊躺形闯晒?,大伙仍需努力?!?/p>

接下來(lái),我還會(huì)對(duì)聯(lián)網(wǎng)技術(shù)、多線程編程等剖文講解。每周一更新,歡迎您持續(xù)關(guān)注!


點(diǎn)贊的人 是善良的大多數(shù):)

作者:葉琛

一只癡迷旅行的 IT程序狗

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容