作為程序員该肴,從一無所知開始接觸情竹、熟練使用android控件、布局匀哄、活動秦效,自己開發(fā)的項目隨之越來越茁壯,功能越來越完善涎嚼,我們的內(nèi)心是由衷感到高興的阱州。
為了對兩個月的學(xué)習(xí)成果有一個檢驗,我把之前所學(xué)所講做了如下的綜合實例法梯;如果能對其他熱愛android開發(fā)的朋友有所幫助苔货,那簡直是再好不過。這也是我寫android開發(fā)系列文章的初衷立哑。
這個實例取名“我的12306”夜惭,顧名思義源自12306火車訂票系統(tǒng),實現(xiàn)了原版的部分功能铛绰。如簡單的車票預(yù)訂:
基本的線路查找:
列車詳細(xì)信息:
學(xué)習(xí)過程中借鑒一些優(yōu)秀實例诈茧,既是對編程開發(fā)能力的鍛煉,也利于活躍思維捂掰,有助于今后開發(fā)自己的創(chuàng)新產(chǎn)品若皱。
這一章就來簡明扼要的說明該實例的功能和開發(fā)過程。
一尘颓、實現(xiàn)基本的車次查詢
Android程序的設(shè)計講究邏輯和視圖分離走触,最好一個活動對應(yīng)一個布局,用來顯示界面的內(nèi)容疤苹。所以本實例都是通過修改 .xml中的代碼互广,完成界面的布局。再在activity中加入邏輯實現(xiàn)的代碼。
如下是第一個界面惫皱,具體布局代碼應(yīng)該可以直接略過了像樊,稍值一提的是“最近常用線路”往往不只一條,所以把它們存放在ListView中旅敷,方便用戶隨時調(diào)用髓抑。
關(guān)于Android號稱最難使用的控件ListView,您可以上網(wǎng)查閱資料或參考《android開發(fā)二 | 最常用和最難用的控件》我們需要為ListView定義一個適配器(如 ArrayAdapter)获印,將希望傳入顯示的數(shù)據(jù)和ListView關(guān)聯(lián)起來肝陪;同時定義一個實體類,作為適配器的適配類型晴音。
關(guān)于查詢界面柔纵,先給出點擊“查詢”跳轉(zhuǎn)的響應(yīng)代碼,如需完整代碼您可以在文末留言或私信“葉琛_”锤躁。這兒的常用線路我通過SharedPreferences存儲搁料、讀取,因為簡單方便系羞。
跳轉(zhuǎn)后顯示符合條件的車次郭计。從本界面開始的數(shù)據(jù)讀取、寫入椒振,都是是通過android系統(tǒng)內(nèi)置的數(shù)據(jù)庫SQLite實現(xiàn)的拣宏。
我已在數(shù)據(jù)庫中建了三張表,分別存放①列車(車次杠人、起點勋乾、終點)、②列車詳細(xì)信息(車次嗡善、時間辑莫、停靠站罩引、票價等)各吨、③票務(wù)管理(車次、余票等)袁铐,用于實現(xiàn)“12306”的基本功能揭蜒。表中變量車次是唯一的,即每張表通過車次關(guān)聯(lián)剔桨。
可以在dos界面下使用adb shell對數(shù)據(jù)庫和表的創(chuàng)建情況進(jìn)行檢查屉更。
現(xiàn)在,假設(shè)在起點洒缀、終點分別輸入“拉薩”和“北京西”瑰谜,點擊查詢后就會從數(shù)據(jù)庫逐條讀取出符合條件的車次:
我們要的結(jié)果出來了欺冀,每條記錄對應(yīng)于①列車這張表。我暫時在表中插入兩班車所以只有兩條記錄萨脑。
二隐轩、實現(xiàn)車次的新增和查找
上一界面還有兩個藍(lán)色按鈕,分別為增添和查找功能渤早。增添职车,就是往表中插入數(shù)據(jù);點擊后鹊杖,可按提示文字對新車次進(jìn)行編輯:
填寫完成后悴灵,點擊“確定”,執(zhí)行如下代碼仅淑,通過SQL語句向三張表插入數(shù)據(jù)并彈出“增加成功”的提示語:
至于“查找”就更簡單了称勋,點擊后頁面跳轉(zhuǎn)胸哥,輸入車次后涯竟,會通過Cursor對象與表中內(nèi)容進(jìn)行匹配,如果存在空厌,就會在列表中顯示列車信息庐船;否則提示“車次不存在”并返回上一界面。
三嘲更、實現(xiàn)增刪改和涂鹬樱靠站間的線路查詢
之前的界面,還有一個編輯按鈕沒有用到赋朦。其實這個按鈕經(jīng)過設(shè)置沒有實際功能篓冲,僅提示點擊具體班車再進(jìn)行后續(xù)步驟。
我們以“G501”為例宠哄,點擊后顯示出本班車的具體信息壹将,包括行駛時間、兔担靠站诽俯、車票等,對應(yīng)于表②“列車詳細(xì)信息”承粤。
這個界面顯示的信息相對比較全面了暴区,它包含了三個功能:購票、編輯和刪除辛臊∠闪唬“刪除”是最簡單的,它將執(zhí)行SQL的“delete”語句彻舰,在后臺三張表中這班車的信息就會全部刪光缰盏。
在“編輯”中我寫入了增加停靠站功能。新增后口猜,加入的透合靠站會被顯示在列表末尾,序列號自動+1济炎。我們在“拉薩”到“北京西”間增加一站“石家莊”川抡,再查看G501列車:
通過SQL語句“update”更新表须尚,將數(shù)據(jù)增添:
“購票”功能將放在下一節(jié)⊙碌蹋現(xiàn)在,還有一個隱含功能沒有體現(xiàn)耐床,就是不同城市間的線路查詢密幔。假設(shè)我們要查詢“西寧“到“石家莊”的列車,那"G501"肯定包含其中撩轰,因為這兩站都是它的涂杷Γ靠站。
進(jìn)入列車詳情堪嫂,唾梭铮靠站自然只剩了兩站:
這個功能的實現(xiàn),需要遍歷算法的支持皆串。即輸入起點淹办、終點后先遍歷數(shù)據(jù)庫,判斷有沒有列車的起始站恶复、終點站剛好與之相等怜森。若有直接取出;若無谤牡,再遍歷查找起始站等于“起點”副硅,停靠站等于“終點”的列車...
排查范圍依次增大拓哟,最大范圍就是起點和終點都是同一班車的兩個拖胄恚靠站,否則就沒有符合條件的車次了断序。附上遍歷算法的android代碼:
這一功能的實現(xiàn)流纹,標(biāo)志我們的項目和實際應(yīng)用又近了一步,是很好的趨勢违诗。
四漱凝、實現(xiàn)票數(shù)的銷售
這一步是最困難的,因為要考慮的因素很多诸迟。例如一班車從北京經(jīng)南京開往上海茸炒,現(xiàn)在賣出了一張北京到上海的全程車票愕乎,這是最理想的;但如果賣出了一張北京到南京的車票壁公,那有人想從北京去上海感论,就買不到這張票了;除非有人買下南京到上海的車票紊册,不然這個位置就被閑置浪費了比肄。
時間倉促,本案例中我沒有完整寫出正常售票的算法囊陡,只實現(xiàn)購買全程車票的情況芳绩。
還是拉薩到北京西的例子,假設(shè)某人購買了一張“商務(wù)座”撞反,原來商務(wù)座余票2張妥色,購票成功后余票變?yōu)?。依舊通過SQL語句實現(xiàn)表中數(shù)據(jù)的更新遏片。
本案例所有功能嘹害、步驟到此介紹完了,關(guān)鍵部分代碼已給出丁稀。當(dāng)然部分功能是不全或有缺陷的吼拥,這說明我們學(xué)習(xí)的道路依舊路漫漫其修遠(yuǎn)倚聚,蘊藏著很大的潛能线衫。
本章小節(jié):
本實例是對之前android知識的綜合運用,涉及基本控件惑折、布局授账、活動的跳轉(zhuǎn)、數(shù)據(jù)的傳遞惨驶,也充分運用了android內(nèi)置數(shù)據(jù)庫的查詢白热、更新、添加粗卜、刪除各個功能屋确,還對SQL語句進(jìn)行了很好的回顧。
通過今后學(xué)習(xí)续扔,改進(jìn)一些算法使功能更加完善攻臀,再加上網(wǎng)絡(luò)和多線程技術(shù),我們的應(yīng)用就蠻像一回事了纱昧∨傩ィ“編程尚未成功,大伙仍需努力识脆∩枇”
接下來善已,我還會對聯(lián)網(wǎng)技術(shù)、多線程編程等剖文講解离例。每周一更新换团,歡迎您持續(xù)關(guān)注!
點贊的人 是善良的大多數(shù):)
作者:葉琛
一只癡迷旅行的 IT程序狗