基于android的esl管理系統(tǒng)的設計與開發(fā)【畢業(yè)設計】_第1頁
已閱讀1頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  本科畢業(yè)論文</b></p><p><b> ?。?0 屆)</b></p><p>  基于Android的ESL管理系統(tǒng)的設計與開發(fā)</p><p><b>  摘要</b></p><p>  本文是闡述電子標簽管理系統(tǒng)是如何在安卓操作系

2、統(tǒng)上實現(xiàn)的。首先是介紹本系統(tǒng)用到的相關技術:Java、Android、ORMLite框架等;接著是介紹本系統(tǒng)是如何設計的,系統(tǒng)的需求分析、系統(tǒng)的功能模塊、系統(tǒng)的流程、數(shù)據(jù)表的設計;最后是介紹系統(tǒng)關鍵模塊的實現(xiàn)。</p><p>  本系統(tǒng)存儲數(shù)據(jù)主要是安卓系統(tǒng)自帶的數(shù)據(jù)庫SQLite,SQLite是一款安卓系統(tǒng)自帶的輕量級數(shù)據(jù)庫,而用到的Java對象關系映射持久層框架是ORMLite框架。</p>

3、<p>  對于本Android電子貨架標簽系統(tǒng),能夠非常有效地提高超市管理人員的工作效率,解決大量的商品標簽難以管理的問題,再之,由于本系統(tǒng)是基于移動設備的,利用其優(yōu)勢,使用戶操作更加簡單,更人性化。</p><p>  關鍵詞:安卓,SQLite,電子貨架標簽</p><p><b>  Abstract</b></p><p>

4、  This is said that how the ESL(electronic shelf label) system implemented on the android operating system. Is first introduced related technologies of this system used: Java, Android, ORMLite framework, etc.Then is intr

5、oduced this system is how to design, system requirement analysis, system function module, system process, the design of the data table.The last is the realization of the system key module.</p><p>  The syste

6、m storage data is mainly the database system at android SQLite, SQLite is a lightweight database system at the android, and use a Java object relational mapping is ORMLite persistence layer framework.</p><p>

7、;  For this ESL(electronic shelf label) system based on Android, can be effectively improved the supermarket management personnel's work efficiency and solve the problem of a large number of labels that are difficult

8、 to manage, again, because this system is based on mobile devices, use of its advantages, the user operation more simple, more human.</p><p>  Keyword: Android,SQLite,ESL</p><p><b>  目

9、錄</b></p><p><b>  1緒論1</b></p><p>  1.1關于ESL(電子貨架標簽)1</p><p>  1.2傳統(tǒng)紙價簽與電子貨架標簽1</p><p><b>  2相關技術2</b></p><p>  2.1J

10、ava技術與JavaBean2</p><p>  2.2Android2</p><p>  2.3ORMLite框架4</p><p>  2.4開發(fā)工具4</p><p><b>  3系統(tǒng)設計5</b></p><p>  3.1需求分析5</p>&l

11、t;p>  3.2系統(tǒng)功能模塊5</p><p>  3.3系統(tǒng)流程7</p><p>  3.4數(shù)據(jù)表設計8</p><p>  4系統(tǒng)關鍵模塊實現(xiàn)16</p><p>  4.1數(shù)據(jù)庫工具類的實現(xiàn)16</p><p>  4.2登錄模塊的實現(xiàn)18</p><p>

12、;  4.3標簽管理模塊的實現(xiàn)18</p><p>  4.3.1標簽列表模塊18</p><p>  4.3.2模板列表模塊23</p><p>  4.3.3型號列表模塊24</p><p>  4.4商品管理模塊的實現(xiàn)25</p><p>  4.4.1商品列表模塊25</p>

13、<p>  4.4.2快速綁定模塊28</p><p>  4.4.3商品替換模塊29</p><p>  4.5銷售管理模塊的實現(xiàn)30</p><p><b>  總結32</b></p><p><b>  參考文獻33</b></p><p&g

14、t;<b>  致謝34</b></p><p><b>  緒論</b></p><p>  關于ESL(電子貨架標簽)</p><p>  ESL(Electronic Shelf Label)電子貨架標簽[1]是一種放在商品貨架上可替代傳統(tǒng)紙質價格標簽的電子顯示裝置,電子貨架標簽通過網(wǎng)絡與商場計算機相連,并將商品名

15、稱及最新的商品價格等信息通過電子貨架標簽上的屏顯示出來。電子貨架標簽擺脫了手動更換價格標簽的狀況,實現(xiàn)了收銀臺與貨架之間的價格一致性。</p><p>  一套完整的電子貨架標簽系統(tǒng)包括主計算機、電子貨架標簽和智能手持終端設備幾部分組成。首先數(shù)據(jù)庫里的商品信息由主計算機通過電子貨架標簽系統(tǒng)應用軟件作編碼處理,然后將需要更新的價格等信息通過無線信號發(fā)送至整個賣場;電子貨架標簽是一個個帶身份識別碼的無線數(shù)據(jù)接收器,它

16、們能夠將接收到的信息顯示出來,電子貨架標簽系統(tǒng)具有點對點和群發(fā)兩種通訊功能,即:主計算機既可以對某個指定標簽進行傳送數(shù)據(jù),也可以一次性地對所有標簽進行控制。每個電子貨架標簽內(nèi)部都存儲有對應商品的多條信息,營業(yè)員可以借助智能手持終端設備方便地查詢核對。</p><p>  貨架標簽放置在特制的PVC導軌內(nèi)(導軌固定在貨架上),也可以設置為懸掛式或者致力式多種結構。電子貨架標簽系統(tǒng)還支持遠程控制,總部可以通過網(wǎng)絡對其

17、連鎖分部的商品統(tǒng)一標價管理。</p><p>  傳統(tǒng)紙價簽與電子貨架標簽</p><p>  傳統(tǒng)紙價簽:1頻繁的商品信息更改,消耗大量人工且錯出錯率高(人工更換一個價簽至少兩分鐘);2更換錯誤率為6%,標簽丟失率為2%;3變價效率導致商品價簽和收銀系統(tǒng)價格不統(tǒng)一造成的價格“欺詐”;4紙質價簽涉及的紙張、油墨、打印等人工成本;5國內(nèi)人工成本的提高迫使零售業(yè)尋找新的銷售增長點。</p

18、><p>  電子貨架標簽:1變價快速及時:可以在很短的時間內(nèi)完成幾萬個價簽的變價,同時完成與收銀系統(tǒng)的對接電子貨架標簽優(yōu)勢;2可增加變價促銷頻率;3變價錯誤率為0.00001%;4單個電子價簽可一次使用6年左右;5提升店面形象及客戶滿意度;6降低人力成本、管理成本及或有成本。[11]</p><p><b>  相關技術</b></p><p>

19、  Java技術與JavaBean</p><p>  1、JAVA[2-4]是由SUN公司推出的一種優(yōu)秀的程序設計語言。它最大的特點是一次編寫即可以在不同的系統(tǒng)上運行(Write once run anywhere),與操作系統(tǒng)無關,在Microsoft Windows、UNIX、Linux以及MacOS等多種操作系統(tǒng)上,都可以使用相同的代碼。JAVA有以下基本特點:簡單、面向對象、分布式、解釋型、健壯性、安全

20、性、可移植性、多線程、動態(tài)等。由于JAVA的跨平臺特性而且適合網(wǎng)絡環(huán)境,因此,被視為開發(fā)服務器端應用程序的最理想的程序語言。</p><p>  2、JavaBean[2,3] 是一種基于JAVA語言寫成的可重用組件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數(shù)的構造器。JavaBean 通過提供符合一致性設計模式的公共方法將內(nèi)部域暴露成員屬性。眾所周知,屬性名稱符合這種模式,其他Java 類可

21、以通過自身機制發(fā)現(xiàn)和操作這些JavaBean 的屬性。</p><p><b>  Android</b></p><p>  Android[5-7]是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設備,如智能手機和平板電腦,由Google公司和開放手機聯(lián)盟領導及開發(fā)。</p><p>  1、Android 系統(tǒng)架構<

22、/p><p>  Android 大致可以分為四層架構,五塊區(qū)域。</p><p>  (1)Linux 內(nèi)核層:Android 系統(tǒng)是基于Linux 2.6 內(nèi)核的,這一層為Android 設備的各種硬件提供了底層的驅動,如顯示驅動、音頻驅動、照相機驅動、藍牙驅動、Wi-Fi 驅動、電源管理等。</p><p>  (2)系統(tǒng)運行庫層:這一層通過一些C/C++庫來為A

23、ndroid 系統(tǒng)提供了主要的特性支持。如SQLite 庫提供了數(shù)據(jù)庫的支持,OpenGL|ES 庫提供了3D 繪圖的支持,Webkit 庫提供了瀏覽器內(nèi)核的支持等。同樣在這一層還有Android 運行時庫,它主要提供了一些核心庫,能夠允許開發(fā)者使用Java 語言來編寫Android 應用。另外Android 運行時庫中還包含了Dalvik 虛擬機,它使得每一個Android 應用都能運行在獨立的進程當中,并且擁有一個自己的Dalvik

24、 虛擬機實例。相較于Java 虛擬機,Dalvik 是專門為移動設備定制的,它針對手機內(nèi)存、CPU 性能有限等情況做了優(yōu)化處理。</p><p>  (3)應用框架層:這一層主要提供了構建應用程序時可能用到的各種API,Android 自帶的一些核心應用就是使用這些API完成的,開發(fā)者也可以通過使用這些API來構建自己的應用程序。</p><p>  (4) 應用層:所有安裝在手機上的應用

25、程序都是屬于這一層的,比如系統(tǒng)自帶的聯(lián)系人、短信等程序,或者是你從Google Play 上下載的小游戲,當然還包括你自己開發(fā)的程序。</p><p>  2、Android 應用開發(fā)特色</p><p>  (1)四大組件:Android 系統(tǒng)四大組件分別是活動(Activity)、服務(Service)、廣播接收器(BroadcastReceiver)和內(nèi)容提供器(Content Pr

26、ovider)。其中活動是所有Android 應用程序的門面,凡是在應用中你看得到的東西,都是放在活動中的。而服務就比較低調(diào)了,你無法看到它,但它會一直在后臺默默地運行,即使用戶退出了應用,服務仍然是可以繼續(xù)運行的。廣播接收器可以允許你的應用接收來自各處的廣播消息,比如電話、短信等,當然你的應用同樣也可以向外發(fā)出廣播消息。內(nèi)容提供器則為應用程序之間共享數(shù)據(jù)提供了可能,比如你想要讀取系統(tǒng)電話簿中的聯(lián)系人,就需要通過內(nèi)容提供器來實現(xiàn)。<

27、;/p><p>  (2)豐富的系統(tǒng)控件:Android 系統(tǒng)為開發(fā)者提供了豐富的系統(tǒng)控件,使得我們可以很輕松地編寫出漂亮的界面。當然如果你品味比較高,不滿足于系統(tǒng)自帶的控件效果,也完全可以定制屬于自己的控件。</p><p>  (3)SQLite 數(shù)據(jù)庫:Android 系統(tǒng)還自帶了這種輕量級、運算速度極快的嵌入式關系型數(shù)據(jù)庫。它不僅支持標準的SQL 語法,還可以通過Android 封裝好

28、的API 進行操作,讓存儲和讀取數(shù)據(jù)變得非常方便。</p><p>  (4)地理位置定位:移動設備和PC 相比起來,地理位置定位功能應該可以算是很大的一個亮點?,F(xiàn)在的Android 手機都內(nèi)置有GPS,走到哪兒都可以定位到自己的位置,發(fā)揮你的想象就可以做出創(chuàng)意十足的應用,如果再結合上功能強大的地圖功能,LBS 這一領域潛力無限。</p><p>  (5) 強大的多媒體:Android

29、系統(tǒng)還提供了豐富的多媒體服務,如音樂、視頻、錄音、拍照、鬧鈴等等,這一切你都可以在程序中通過代碼進行控制,讓你的應用變得更加豐富多彩。</p><p>  (6) 傳感器:Android 手機中都會內(nèi)置多種傳感器,如加速度傳感器、方向傳感器等,這也算是移動設備的一大特點。通過靈活地使用這些傳感器,你可以做出很多在PC 上根本無法實現(xiàn)的應用。</p><p><b>  ORMLi

30、te框架</b></p><p>  ORMLite[8]是一個輕量級的Java對象關系映射持久層框架。支持包括 MySQL、Postgres、Microsoft SQL Server、H2、Derby、HSQLDB和Sqlite等在內(nèi)的數(shù)據(jù)庫。提供靈活的QueryBuilder來構建復雜的數(shù)據(jù)查詢。強大的抽象 DAO類,只需5行代碼便能夠自動生成SQL來創(chuàng)建和刪除數(shù)據(jù)庫表格。</p>

31、<p><b>  開發(fā)工具</b></p><p><b>  1.Eclipse</b></p><p>  相信所有Java 開發(fā)者都一定會對這個工具非常地熟悉,它是Java 開發(fā)神器,最好用的IDE 工具之一。Eclipse 是開源的,這使得有很多基于Eclipse 制作的優(yōu)秀IDE 得以問世,如MyEclipse、Aptana

32、 等。但我覺得它最吸引人的地方并不在這兒,而是它超強的插件功能。Eclipse 支持極多的插件工具,使得它不僅僅可以用來開發(fā)Java,還可以很輕松地支持幾乎所有主流語言的開發(fā),當然也非常適合Android 開發(fā)。</p><p>  除了Eclipse 外,同樣適合開發(fā)Android 程序的IDE 還有IntelliJ IDEA、Android Studio等。其中Android Studio 是谷歌官方近期推出

33、的新IDE,由于是專門為開發(fā)Android 程序定制的,在Android 領域大有要取代Eclipse 的勢頭。不過本書中還是決定暫時繼續(xù)使用Eclipse,因為Android Studio 才推出不久,恐怕還不夠穩(wěn)定。另外你將來的同事大多數(shù)應該還是用的Eclipse,如果跟他們選擇不同的IDE,在工作效率上可能要打點折扣了。</p><p><b>  2.ADT</b></p>

34、;<p>  ADT 全稱Android Development Tools,是谷歌提供的一個Eclipse 插件,用于在Eclipse 中提供一個強大的、高度集成的Android 開發(fā)環(huán)境。安裝了ADT,你不僅可以聯(lián)機調(diào)試,而且還能夠模擬各種手機事件、分析你的程序性能等等。</p><p><b>  系統(tǒng)設計</b></p><p><b>

35、;  需求分析</b></p><p>  電子貨架標簽是為了更好地顯示商品名稱和價格,而電子貨架標簽系統(tǒng)是為了更好地管理這些標簽。而這個基于Android的ESL管理系統(tǒng)是為小型超市而設計,小超市可以選擇移動APP的管理系統(tǒng)原因是,一個小型超市商品的數(shù)量相對是比較少,種類也是比較少的,所以所需要的電子貨架標簽的數(shù)量相對于大型的超市就少了很多,這是一個優(yōu)勢;再之,由于現(xiàn)在目前移動互聯(lián)網(wǎng)的火熱,移動互聯(lián)

36、網(wǎng)相對于傳統(tǒng)互聯(lián)網(wǎng)的優(yōu)勢在于它的移動便捷性——用戶可以隨時隨地接入互聯(lián)網(wǎng),個性化——通過手機號碼或其它方式,可以唯一辨識用戶,便于為用戶提供特有的個性化服務。因此可以知道這個電子貨架標簽管理系統(tǒng)的APP與PC端的管理系統(tǒng)的優(yōu)勢在于,能夠更加方便地管理商場的商品,管理商品的標簽;更加及時地處理各種問題,最終使商場工作人員的工作效率大大地提高。</p><p>  對于一個完善的電子貨架標簽系統(tǒng)需要提供的主要功能有:

37、標簽管理功能:包括標簽的定義、更新、刪除、查看等功能,商品管理功能:包括商品的定義、更新、刪除、查看等功能,購買功能:商品的購買、購物車的查看以及結賬等功能。</p><p><b>  系統(tǒng)功能模塊</b></p><p>  系統(tǒng)功能主要有這幾大模塊:用戶登錄模塊、系統(tǒng)設置模塊、標簽管理模塊、商品管理模塊、銷售管理模塊、監(jiān)控管理模塊。</p><

38、;p>  圖3.1系統(tǒng)功能模塊圖</p><p><b>  1、用戶登錄模塊</b></p><p>  用戶登錄模塊為用戶登錄系統(tǒng)所設計的,用戶的賬號存在以及該賬號所對應密碼輸入正確時,用戶才可以登錄系統(tǒng)。</p><p><b>  2、系統(tǒng)設置模塊</b></p><p>  系統(tǒng)設置

39、模塊主要有用戶定義、參數(shù)配置兩個小的模塊。用戶定義功能是用于用戶的添加、修改、刪除、查看;參數(shù)配置主要是用于一些系統(tǒng)參數(shù)的配置管理。</p><p><b>  3、標簽管理模塊</b></p><p>  標簽管理模塊主要有標簽列表、模板列表、型號列表三個小的模塊。標簽列表主要是用于標簽的管理、模板列表主要是用于標簽的模板的管理、型號列表主要是用于標簽型號的管理。&

40、lt;/p><p><b>  4、商品管理模塊</b></p><p>  商品管理模塊主要有商品列表、類別管理、快速綁定、商品替換四個小的模塊。商品列表模塊主要是用于商品的管理、類別管理主要是用于商品類別的管理、快速綁定主要用于標簽和商品還有要顯示的模板的快速綁定、商品替換主要是用于新舊商品之間的快速替換。</p><p>  5、銷售管理主要

41、有商品銷售、訂單管理兩個小的功能模塊。</p><p>  商品銷售主要功能是實現(xiàn)商品的查找選擇,可以輸入購買的數(shù)量,并且添加到購物車里面,購物車功能實現(xiàn)購物的結賬,找回零錢等功能。訂單管理主要是對客戶購買商品所產(chǎn)生的訂單的簡單管理。</p><p>  6、監(jiān)控管理主要有成功顯示的標簽、商品修改歷史兩個小的功能模塊。</p><p>  成功顯示的標簽模塊主要是用

42、于管理成功顯示的標簽、商品修改歷史主要是用于商品修改歷史的查看管理等。</p><p><b>  系統(tǒng)流程</b></p><p>  系統(tǒng)總流程如圖3.2,系統(tǒng)流程同樣可以按照系統(tǒng)功能模塊中所述的六個大模塊來作圖的。 </p><p><b>  圖3.2系統(tǒng)流程圖</b></p><p>&l

43、t;b>  數(shù)據(jù)表設計</b></p><p>  本系統(tǒng)共設計了10個表,先將各表參數(shù)列出如下</p><p>  esl信息表(esls_esl)本表主要用于記錄電子標簽的信息表:</p><p>  表 1 esl信息表</p><p>  esl型號信息表(sls_esl_model),用于記錄電子貨架標簽型號信息:

44、</p><p>  表 3.2 esl型號信息表</p><p>  模板信息表(esls_patterns),用于記錄電子標簽模板信息:</p><p>  表 3.3模板信息表</p><p>  商品信息表(esls_goods),用于記錄商品的信息:</p><p><b>  表3.4商品信息表&

45、lt;/b></p><p>  商品信息修改記錄表(esls_goods_update),用于記錄商品信息修改記錄的信息表結構如下:</p><p>  表3.5商品信息修改記錄表</p><p>  商品類別表(esls_kinds),用于記錄商品類別的信息,表結構如下:</p><p>  表 3.6商品類別表</p>

46、<p>  用戶信息表(esls_users),用于記錄用戶的信息,表結構如下:</p><p><b>  表3.7用戶信息表</b></p><p>  系統(tǒng)配置表(esls_sys_config),記錄系統(tǒng)配置的信息,表結構如下:</p><p>  表3.8系統(tǒng)配置表</p><p>  esl顯

47、示內(nèi)容歷史表(esls_esl_disp_his),記錄esl顯示內(nèi)容歷史的信息,表結構如下:</p><p>  表3.9 esl顯示內(nèi)容歷史表</p><p>  商品訂單表(esls_order),記錄用戶購買的訂單信息,表結構如下:</p><p>  表3.10 商品訂單表</p><p><b>  系統(tǒng)關鍵模塊實現(xiàn)&l

48、t;/b></p><p><b>  數(shù)據(jù)庫工具類的實現(xiàn)</b></p><p>  Android 系統(tǒng)內(nèi)置了數(shù)據(jù)庫SQlite,SQLite 是一款輕量級的關系型數(shù)據(jù)庫,它的運算速度非??欤加觅Y源很少,通常只需要幾百K 的內(nèi)存就足夠了,因而特別適合在移動設備上使用。SQLite不僅支持標準的SQL 語法,還遵循了數(shù)據(jù)庫的ACID 事務。</p>

49、;<p>  雖然SQlite數(shù)據(jù)庫為開發(fā)者的開發(fā)提供很大的便利,加之Android 為了讓開發(fā)者能夠更加方便地管理數(shù)據(jù)庫,專門提供了一個SQLiteOpenHelper 幫助類,借助這個類就可以非常簡單地對數(shù)據(jù)庫進行創(chuàng)建和升級;但是這對開發(fā)者更方便地操作數(shù)據(jù)庫還是有點難度的,因為必須寫SQL語句,系統(tǒng)中共有10張表而且有的表的字段多達20個,這對編寫SQL語句帶來了很大的麻煩,所以借助了ORMLite這個輕量級的ORM(

50、對象關系映射)框架,它使編碼量大大地減少,并且更方便地操作數(shù)據(jù)庫。</p><p>  本系統(tǒng)封裝一個繼承OrmLiteSqliteOpenHelper的數(shù)據(jù)類工具類ESLDatebaseHelper,這個工具類中開發(fā)者能夠非常方便地對數(shù)據(jù)庫進行創(chuàng)建和升級。這個工具類還提供操作實體的Dao工具類。</p><p><b>  創(chuàng)建數(shù)據(jù)庫:</b></p>

51、<p>  private ESLDatebaseHelper(Context context) {</p><p>  super(context, DATABASE_NAME, null, DATABASE_VERSION);</p><p><b>  }</b></p><p>  取得工具類對象(這是一個單例方法)<

52、/p><p>  public static synchronized ESLDatebaseHelper getHelper(Context context) {</p><p>  if (helper == null) {</p><p>  helper = new ESLDatebaseHelper(context);</p><p>

53、<b>  }</b></p><p>  usageCounter.incrementAndGet();</p><p>  return helper;}</p><p>  創(chuàng)建表:其中Label類對應的是esls_esl表,用注解定義表,以及表的字段,如:</p><p>  注解類名:@DatabaseTab

54、le(tableName = "esls_esl")public class Label implements Serializable</p><p>  注解字段:@DatabaseField(columnName = "esl_id", generatedId = true, canBeNull = false)private int eslId; // EID<

55、;/p><p>  建立表:TableUtils.createTable(connectionSource, Label.class);</p><p><b>  創(chuàng)建Dao對象:</b></p><p>  public Dao<Label, Integer> getLabelDao() throws SQLException {&

56、lt;/p><p>  if (labelDao == null) {</p><p>  labelDao = getDao(Label.class);</p><p><b>  }</b></p><p>  return labelDao;</p><p><b>  }</b

57、></p><p>  Dao類對數(shù)據(jù)庫的操作,這里把不同的Dao類的增刪查改封裝了一下:</p><p>  public LabelDao(Dao<Label, Integer> labelDao) {</p><p>  this.labelDao = labelDao;</p><p><b>  }<

58、;/b></p><p>  public List<Label> queryAll() throws SQLException{</p><p>  return labelDao.queryForAll();</p><p><b>  }</b></p><p>  public void del

59、ete(Label label) throws SQLException{</p><p>  labelDao.delete(label);</p><p><b>  }</b></p><p>  public void insert(Label label) throws SQLException{</p><p&g

60、t;  labelDao.create(label);</p><p><b>  }</b></p><p>  public void update(Label label) throws SQLException{</p><p>  labelDao.update(label);}</p><p><b&

61、gt;  登錄模塊的實現(xiàn)</b></p><p>  為了保證一個電子貨架標簽系統(tǒng)的安全,本系統(tǒng)必須設計一個登錄的界面來讓用戶有條件的地對系統(tǒng)進行訪問。本系統(tǒng)的做法先在數(shù)據(jù)庫創(chuàng)建一個系統(tǒng)管理員,這樣第一次進入就可以根據(jù)系統(tǒng)管理員的賬戶密碼進行登錄。當輸入的賬戶錯誤時,就會提示賬戶不存在的字樣,當密碼錯誤就會提示密碼錯誤的字樣。當賬戶密碼都正確時就會進入系統(tǒng)的主界面,這樣就能夠對系統(tǒng)進行操作。</

62、p><p>  圖4.1 登錄與系統(tǒng)主界面</p><p>  這個功能的實現(xiàn)主要是數(shù)據(jù)庫查詢,分為兩步查詢:</p><p>  首先取得用戶輸入的賬戶去數(shù)據(jù)庫查看是否有這個賬戶,沒有的話提示賬戶不存在字樣,有的話進行下一步——賬戶和密碼的一起查詢。</p><p>  取得用戶的賬戶和密碼去數(shù)據(jù)庫進行查詢,如果賬戶和密碼都匹配的話就跳轉到系統(tǒng)

63、的主頁面,不匹配的話就提示密碼錯誤的字樣。</p><p><b>  標簽管理模塊的實現(xiàn)</b></p><p>  標簽管理模塊主要分為標簽列表,模板列表,型號列表三個模塊。</p><p><b>  標簽列表模塊</b></p><p>  在這個模塊中,可以看到標簽列表布局有一個標簽編號的

64、輸入框和一個工作狀態(tài)的下拉框和三個按鈕分別是:查詢、重置、添加標簽,下面是一個Listview控件,用來顯示所有的標簽列表。</p><p>  圖4.2 標簽管理界面</p><p>  1.查詢模塊的實現(xiàn)是根據(jù)用戶輸入的標簽編號和工作狀態(tài)去數(shù)據(jù)庫查詢對應的標簽,然后展示在標簽列表上面,對應的數(shù)據(jù)操作如下:</p><p>  public List<Lab

65、el> queryByEslIdOrWorkStatus(int eslId, int workStatus) throws SQLException{</p><p>  Map<String, Object> map = new HashMap<String, Object>();</p><p>  if(eslId != -1){</p>

66、<p>  map.put("esl_id", eslId);</p><p><b>  }</b></p><p>  if(workStatus != -2){</p><p>  map.put("work_status", workStatus);</p><p&

67、gt;<b>  }</b></p><p>  List<Label> list = labelDao.queryForFieldValues(map);</p><p>  for(Label l : list){</p><p>  l.setGood(this.getGood(l.getGoodsId()));</p&

68、gt;<p>  l.setPattern(this.getPattern(l.getPatternId()));</p><p>  l.setModel(this.getModel(l.getModelId()));</p><p><b>  }</b></p><p>  return list;</p>&

69、lt;p><b>  }</b></p><p>  2.添加標簽,當點擊添加標簽按鈕是,就會跳到下一個Activity,然后輸入合法的數(shù)據(jù),就可以對添加想對應的標簽。</p><p>  圖4.3 標簽添加界面</p><p>  其中下拉框(Spinner)的實現(xiàn)比較復雜,所以介紹一下下拉框的實現(xiàn)原理:每一個下拉框都有其對應的設配器(

70、Adapter),設配器能為Spinner提供數(shù)據(jù)。本系統(tǒng)封裝了Android自帶的設配器,把需要的數(shù)據(jù)傳給設配器,讓設配器把數(shù)據(jù)展示在Spinner上面。最后我們需要給Spinner添加監(jiān)聽器,用于監(jiān)聽用戶的選擇,這是一個匿名類,當用戶選擇時,本系統(tǒng)就能通過選擇的位置,拿到對應的對象。</p><p>  spinGoods.setAdapter(new GoodArrayAdapter(this, goodL

71、ist));</p><p>  spinGoods.setOnItemSelectedListener(new OnItemSelectedListener() {</p><p><b>  @Override</b></p><p>  public void onItemSelected(AdapterView<?> par

72、ent, View view,</p><p>  int position, long id) {</p><p>  good = goodList.get(position);</p><p><b>  }</b></p><p><b>  .......</b></p>&

73、lt;p><b>  });</b></p><p>  其他輸入框比較簡單,就不做解釋,當用戶輸入正確時,即可將輸入的內(nèi)容插入到數(shù)據(jù)庫中。輸入不合法時,就會提示用戶修改。</p><p>  3.標簽列表的實現(xiàn)的原理是先從數(shù)據(jù)庫拿出標簽列表,然后通過listview展示出來的。我們首先在布局文件中添加listview控件:</p><p&g

74、t;<b>  <ListView</b></p><p>  android:id="@+id/label_list"</p><p>  android:layout_width="match_parent"</p><p>  android:layout_height="match

75、_parent" ></p><p>  </ListView></p><p>  每一個item需要展示數(shù)據(jù)的布局如下:</p><p><b>  圖4.4 標簽布局</b></p><p>  要把數(shù)據(jù)展示在listview上面,需要借助適配器來完成。Android 中提供了很多適配器

76、的實現(xiàn)類,其中最好用的就是ArrayAdapter。它可以通過泛型來指定要適配的數(shù)據(jù)類型,然后在構造函數(shù)中把要適配的數(shù)據(jù)傳入即可。這里本系統(tǒng)封裝了一個ArrayAdapter(LabelAdapter是繼承了ArrayAdapter,并且重寫了getView方法):</p><p>  public LabelAdapter(Context context, int textViewResourceId,Lis

77、t<Label> objects) {</p><p>  super(context, textViewResourceId, objects);</p><p>  resourceId = textViewResourceId;</p><p><b>  }</b></p><p>  其中getVi

78、ew方法:</p><p>  public View getView(int position, View convertView, ViewGroup parent) {</p><p>  Label label = getItem(position);</p><p>  View view;</p><p>  ViewHolder

79、 viewHolder;</p><p>  if (convertView == null) {</p><p>  view = LayoutInflater.from(getContext()).inflate(resourceId, null);</p><p>  viewHolder = new ViewHolder();</p><

80、p>  viewHolder.eslId = (TextView) view.findViewById(R.id.esl_id);</p><p><b>  ......</b></p><p>  view.setTag(viewHolder);</p><p><b>  } else {</b></p&

81、gt;<p>  view = convertView;</p><p>  viewHolder = (ViewHolder) view.getTag();</p><p><b>  }</b></p><p>  viewHolder.eslId.setText(STR_ESL_ID + label.getEslId());

82、</p><p><b>  ......</b></p><p>  return view;</p><p><b>  }</b></p><p>  在getView 方法中,首先通過getItem()方法得到當前項的Label 實例,然后使用LayoutInflater 來為這個子項加載我

83、們傳入的布局,接著調(diào)用View 的findViewById()方法獲取到不同的View 實例,并分別調(diào)用它們的set...... ()方法來設置顯示的內(nèi)容,最后將布局返回。</p><p>  ViewHolder:</p><p>  class ViewHolder {</p><p>  TextView eslId;</p><p>

84、  TextView goodsName;</p><p>  TextView patternName;</p><p>  TextView workStatus;</p><p>  TextView mycode;</p><p>  TextView modelName;</p><p><b> 

85、 }</b></p><p>  為了提高listview的運行效率,因為getView()方法中每次都將布局重新加載了一遍,當ListView 快速滾動的時候這就會成為性能的瓶頸。所以我提供了一個內(nèi)部類ViewHolder來緩存加載過的listview每一個item。可以看到,我們在getView()方法中進行了判斷,如果convertView 為空,則使用LayoutInflater 去加載布局,

86、如果不為空則直接對convertView 進行重用。這樣就大大提高了ListView 的運行效率,在快速滾動的時候也可以表現(xiàn)出更好的性能。</p><p>  3.最后我們對這一個listview設置一個監(jiān)聽器用于設置每一個item被按下產(chǎn)生的的事件。</p><p><b>  圖4.5 標簽操作</b></p><p>  每次按下list

87、view的一個item時就會彈出一個選擇框,可以分別對該item(也就是一個標簽對象)進行不同的操作。</p><p>  其中查看標簽是彈出一個頁面顯示該標簽的所有詳細信息。刪除標簽是指在數(shù)據(jù)庫刪除該標簽對應的記錄,然后重新刷新標簽列表。編輯標簽和添加標簽的原理類似,只是編輯標簽時需要將原來該標簽的數(shù)據(jù)先顯示到布局上面,方便用戶對其進行更新。</p><p><b>  模板列

88、表模塊</b></p><p>  圖4.6 模板管理界面</p><p>  模板列表模塊的實現(xiàn)與標簽列表模塊的實現(xiàn)非常類似,具體的增刪查改都是類似的原理,這里不做解釋。</p><p>  模板查看是將模板的代碼(html)通過webview展示的,這樣非常方便地看到用戶輸入的代碼展示的效果。如:</p><p><b&

89、gt;  圖4.7 模板查看</b></p><p>  實現(xiàn)的原理就是通過webview加載用戶輸入的HTML代碼,然后顯示在網(wǎng)頁上,具體的的代碼如下:</p><p>  setContentView(R.layout.pattern_webview);</p><p>  Intent intent = getIntent();</p>

90、<p>  pattern = (Pattern) intent.getSerializableExtra("pattern");</p><p>  StringstrHtml="<html><head><metahttp-equiv='content-type' content='text/html;charse

91、t=UTF-8'></head><body>"+pattern.getCode()+"</body></html>";</p><p>  WebView webView = (WebView)findViewById(R.id.webview_pattern);</p><p>  webVie

92、w.loadDataWithBaseURL("", strHtml, "text/html", "UTF-8", null);</p><p><b>  型號列表模塊</b></p><p>  模板列表模塊的實現(xiàn)與標簽列表模塊的實現(xiàn)非常類似,具體的增刪查改都是類似的原理,這里我不做解釋。</p&g

93、t;<p>  圖4.8 型號管理界面</p><p><b>  商品管理模塊的實現(xiàn)</b></p><p>  商品管理模塊主要分為商品列表,類別管理,快速綁定,商品替換四個小模塊。下面主要闡述商品列表、快速綁定、商品替換三個小模塊。</p><p><b>  商品列表模塊</b></p>

94、<p>  圖4.9 商品管理界面</p><p>  在這個小模塊中我們可以知道該模塊可以根據(jù)商品條碼、商品名稱、商品狀態(tài)、商品類別來對商品進行查詢;可以添加商品;商品listview是顯示商品的圖片還有商品的名稱以及商品的原價和現(xiàn)價。</p><p>  每個item的布局如下圖:</p><p>  圖4.10 商品顯示布局</p>

95、<p>  而添加商品的界面如下</p><p>  圖4.11 添加商品界面</p><p>  這個界面雖然輸入框雖然很多,但是類似于其他模塊的實現(xiàn),只是里面有一個文件的文件的選擇的實現(xiàn)比較復雜,下面我對其進行簡單的解釋。</p><p>  圖4.12 文件選擇器</p><p>  用戶點擊選擇圖片是就會彈出一個文件選擇的對

96、話框,這樣我們就可以選擇我們事先準備好的圖片文件,選擇完成后,就把對應的絕對路徑顯示在輸入框上面。具體實現(xiàn)的代碼如下:</p><p>  protected Dialog onCreateDialog(int id) {</p><p>  if (id == openfileDialogId) {</p><p>  Map<String, Integer

97、> images = new HashMap<String, Integer>();</p><p>  // 下面幾句設置各文件類型的圖標, 需要你先把圖標添加到資源文件夾</p><p>  images.put(OpenFileDialog.sRoot, R.drawable.filedialog_root); // 根目錄圖標</p><p&g

98、t;  images.put(OpenFileDialog.sParent, R.drawable.filedialog_folder_up); // 返回上一層的圖標</p><p>  images.put(OpenFileDialog.sFolder, R.drawable.filedialog_folder); // 文件夾圖標</p><p>  images.put("

99、;png", R.drawable.filedialog_img); // 圖片文件圖標</p><p>  images.put("jpg", R.drawable.filedialog_img); // 圖片文件圖標</p><p>  images.put("jpeg", R.drawable.filedialog_img); //

100、圖片文件圖標</p><p>  images.put(OpenFileDialog.sEmpty, R.drawable.filedialog_root);</p><p>  Dialog dialog = OpenFileDialog.createDialog(id, this, "打開文件",</p><p>  new Callback

101、Bundle() {</p><p><b>  @Override</b></p><p>  public void callback(Bundle bundle) {</p><p>  String filepath = bundle.getString("path");</p><p>  

102、etImgSrc.setText(filepath); // 把文件路徑顯示在標題上</p><p><b>  }</b></p><p>  }, ".png;.jpg;.jpeg;", images);</p><p>  return dialog;</p><p><b>  }&

103、lt;/b></p><p>  return null;}</p><p>  另外一個比較復雜的就是日期時間選擇器的實現(xiàn),當用戶點擊日期時間對話框時,就會彈出一個時間日期選擇器時,用戶可以選擇自己想要的日期和時間,然后顯示在輸入框上面。</p><p>  圖4.13 日期時間選擇器</p><p><b>  快速綁定

104、模塊</b></p><p>  快速綁定模塊是用于ESL標簽和商品以及顯示的模板之間進行快速的綁定,其界面如下圖:</p><p>  圖4.14 快速綁定界面</p><p>  實現(xiàn)的原理是根據(jù)三個下拉框的選擇來進行快速的綁定,分別有三個下拉框:標簽的下拉框、商品的下拉框、模板的下拉框。每個下拉框都有自己對應的設配器(Adapter),用于設置里面

105、的對象,每個下拉框有對應的監(jiān)聽器,監(jiān)聽用戶的選擇,當用戶選擇某一項時,就會取得那個項對應的對象。</p><p>  當用戶三個下拉框都選擇完成后,點擊確定按鈕是就會更新該標簽綁定的商品以及模板。關鍵代碼如下:</p><p>  public void onClick(View v) {</p><p>  if(label != null){</p>

106、<p>  if(good != null)</p><p>  label.setGoodsId(good.getGoodsId());</p><p>  if(pattern != null)</p><p>  label.setPatternId(pattern.getPatternId());</p><p><

107、;b>  try {</b></p><p>  labelDao.update(label);</p><p>  } catch (SQLException e) {</p><p>  e.printStackTrace();</p><p><b>  }</b></p><

108、p><b>  }</b></p><p><b>  商品替換模塊</b></p><p>  商品替換模塊是對新舊不同商品進行快速的替換。替換時能夠將該商品綁定的所有標簽也一并替換掉。</p><p>  圖4.15 商品替換界面</p><p>  public void onClick

109、(View v) {</p><p>  List<Label> labelList = null;</p><p><b>  try {</b></p><p>  labelList = labelDao.findLabelByGoodId(good1.getGoodsId());</p><p>  

110、for(Label l : labelList){</p><p>  l.setGoodsId(good2.getGoodsId());</p><p>  labelDao.update(l);</p><p><b>  }</b></p><p>  } catch (SQLException e) {</

111、p><p>  e.printStackTrace();</p><p><b>  }</b></p><p>  Toast.makeText(GoodReplaceActivity.this, "商品替換成功",</p><p>  Toast.LENGTH_SHORT).show();</p

112、><p><b>  }</b></p><p><b>  銷售管理模塊的實現(xiàn)</b></p><p>  銷售管理模塊主要有兩個小的模塊:商品銷售以及訂單管理兩個小的模塊,商品銷售模塊比較復雜,下面做詳細的解釋說明,訂單管理比較簡單不做說明。</p><p>  商品銷售是用于商品的銷售,有商品的搜

113、索,商品加入購物車,購物車的查看,購買結賬等功能。</p><p>  圖4.16 商品銷售界面</p><p>  上面是商品銷售的主界面,我們可以看到我們能夠根據(jù)商品條碼、商品的名稱、片劑對商品進行搜索。</p><p>  當用戶點擊商品時,會彈出一個對話框,要求輸入購買的數(shù)量,這樣就能將商品添加到購物車里面。購物車其實就是維持一個購買項(SaleItem)的

114、列表。購買項(SaleItem)封裝了商品和該商品購買的數(shù)量的一個類。</p><p>  當我們點擊查看購物車時就跳轉到購物車的界面,其實就將我們的購物項列表傳遞到下一個界面由下一個界面進行處理。購物車界面如下:</p><p>  圖4.17 購物車界面</p><p>  點擊結賬時,就根據(jù)用戶購買的商品的現(xiàn)價以及商品的數(shù)量進行價格的計算,然后算出一個總價,接

115、著根據(jù)用輸入的支付金額進行結賬,算出需要找回給用戶的零錢以及生成幾個訂單插入到數(shù)據(jù)庫里面。</p><p><b>  總結</b></p><p>  本次畢業(yè)設計是自己第一次使用Android作為開發(fā)工具,也是自己開發(fā)的第一個移動App。大學以來,本人都是學Java后臺為主,沒有接觸過Android的開發(fā),雖然說Android開發(fā)也是使用Java語言,但是對于第一

116、次接觸的人來說,難免還是遇到很多的問題,一開始的界面怎么設計都是非常地頭疼,但是通過自己不斷地找資料不斷地學習,在老師的幫助,最終把ESL管理系統(tǒng)給完成了。</p><p>  本系統(tǒng)基本實現(xiàn)一個電子貨架標簽管理系統(tǒng)的基本功能,并且還加入商品銷售的功能,使我的系統(tǒng)更加具有實用性。</p><p>  在實現(xiàn)方面,本人引入了數(shù)據(jù)庫ORM框架,使代碼量大大地減少,并且代碼看起來更加清晰。對于大

117、量用到的listview,我很好地利用了緩存的原理,大大地提高系統(tǒng)的性能。</p><p>  在實用方面,本系統(tǒng)的模塊分配清晰合理,用戶操作簡單,用戶體驗性相對良好。</p><p>  當然本系統(tǒng)還是存在一些問題,比如數(shù)據(jù)都存在于本機,沒有做更好的容災處理,如果移動設備丟失,或者該APP被惡意刪除將帶來無法挽回的結果,所以更好的做法就是有一個服務端,然后客戶端的數(shù)據(jù)都是從服務端拿過來的

118、,這樣我們就可以方便地對數(shù)據(jù)進行備份,以防萬一。</p><p><b>  參考文獻</b></p><p>  [1]電子貨架標簽系統(tǒng)[M]. http://baike.baidu.com/view/8204512.htm.</p><p>  [2] Cay S. Horstmann,Cray Cornell. Java核心技術(原書第9

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論