畢業(yè)設(shè)計(jì)---現(xiàn)代化超市電子購(gòu)物系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  本科畢業(yè)論文</b></p><p>  題 目:現(xiàn)代化超市電子購(gòu)物系統(tǒng)</p><p>  現(xiàn)代化超市電子購(gòu)物系統(tǒng)</p><p>  摘要: 本作品以現(xiàn)代化超市為背景,旨在解決目前超市中存在的查詢商品不便、排長(zhǎng)隊(duì)結(jié)賬、超市內(nèi)定位困難、服務(wù)和信息滯后等問(wèn)題,采用嵌入式系統(tǒng)、射頻識(shí)別(RFID)、網(wǎng)絡(luò)通信、數(shù)據(jù)庫(kù)

2、等技術(shù),實(shí)現(xiàn)了現(xiàn)代化超市電子購(gòu)物系統(tǒng)。系統(tǒng)由移動(dòng)購(gòu)物終端和服務(wù)器端組成,具有友好的圖形界面,能夠?qū)崿F(xiàn)商品的自動(dòng)識(shí)別和詳細(xì)信息顯示、購(gòu)物清單管理、顧客定位與商品定位、自動(dòng)結(jié)賬、會(huì)員身份識(shí)別與管理等功能。</p><p>  RFID又稱射頻識(shí)別是英文“Radio Frequency Identification”的縮寫,是基于無(wú)線電基礎(chǔ)之上的,利用射頻信號(hào)對(duì)靜止或者移動(dòng)的物體進(jìn)行自動(dòng)識(shí)別和數(shù)據(jù)交換的技術(shù)。RFID是

3、自動(dòng)識(shí)別領(lǐng)域目前最熱門的技術(shù)。它在物料跟蹤、運(yùn)載工具和貨架識(shí)別等要求非接觸數(shù)據(jù)采集和交換和頻繁改變數(shù)據(jù)內(nèi)容的場(chǎng)合很有發(fā)展?jié)摿εc發(fā)展前景,它區(qū)別于條形碼等其它識(shí)別技術(shù)的特性與優(yōu)勢(shì)能夠滿足目前庫(kù)存管理的需要。所以,研究基于RFID技術(shù)的庫(kù)存管理適應(yīng)了目前社會(huì)的需求。</p><p>  關(guān)鍵字:電子購(gòu)物,嵌入式系統(tǒng),射頻識(shí)別,Qt/Embedded</p><p>  The System o

4、f Electronic Shopping for Modem Supermarket</p><p>  Abstract: This project aims at developing an electronic shopping system to solve the problems existing in current supermarket, including the inconvenient

5、searching for merchandise, the long queue for checkout, the difficult locating in supermarket, the lag of service and information and so on. The system is implemented by incorporating embedded system, FID(Radio Frequency

6、 Identification),Web and database technology,etc. This system, with a friendly graphic user interface, consists of this shoppi</p><p>  RFID stands for radio frequency identification. It uses radio waves to

7、record media literacy. RFID is the hottest technology in automatic identification field. It has high potential and prospects in materials tracking, carriers and shelf identification that require non-contact data collecti

8、on and frequent exchange of data content.</p><p>  Keywords: Electronic shopping, Embedded system, RFID, Qt/Embedded</p><p><b>  目錄</b></p><p><b>  第1章引言1</b&

9、gt;</p><p>  1.1設(shè)計(jì)背景1</p><p>  1.2設(shè)計(jì)目標(biāo)1</p><p>  1.3系統(tǒng)功能2</p><p>  1.4文章結(jié)構(gòu)和說(shuō)明2</p><p>  第2章系統(tǒng)總體設(shè)計(jì)4</p><p>  2.1系統(tǒng)的總體結(jié)構(gòu)4</p>

10、<p>  2.2系統(tǒng)技術(shù)5</p><p>  2.3系統(tǒng)硬件6</p><p>  2.4開發(fā)環(huán)境8</p><p>  第3章系統(tǒng)硬件設(shè)計(jì)9</p><p>  3.1硬件總體設(shè)計(jì)9</p><p>  3.2開發(fā)步驟9</p><p>  3.2.1

11、讀卡模塊的工作過(guò)程9</p><p>  3.2.2單片機(jī)程序的工作過(guò)程10</p><p>  3.2.3通訊指令協(xié)議11</p><p>  第4章系統(tǒng)軟件設(shè)計(jì)14</p><p>  4.1軟件總體設(shè)計(jì)14</p><p>  4.2應(yīng)用程序設(shè)計(jì)15</p><p>

12、  4.2.1網(wǎng)絡(luò)通信設(shè)計(jì)15</p><p>  4.2.2表格顯示設(shè)計(jì)17</p><p>  4.2.3數(shù)據(jù)庫(kù)模塊設(shè)計(jì)19</p><p>  4.2.4自動(dòng)結(jié)賬子系統(tǒng)設(shè)計(jì)19</p><p>  4.2.5定位子系統(tǒng)設(shè)計(jì)20</p><p>  第5章服務(wù)器端設(shè)計(jì)22</p>

13、<p>  5.1數(shù)據(jù)庫(kù)設(shè)計(jì)22</p><p>  5.2后臺(tái)管理22</p><p><b>  第6章總結(jié)24</b></p><p><b>  致謝語(yǔ)25</b></p><p><b>  參考文獻(xiàn)26</b></p>&

14、lt;p>  附錄一:Qt/Embedded平臺(tái)搭建27</p><p><b>  Contents</b></p><p>  Chapter 1Introduction1</p><p>  1.1Background1</p><p>  1.2Design Goals1</p>

15、<p>  1.3Function2</p><p>  1.4Structure and Notes2</p><p>  Chapter 2System Design4</p><p>  2.1System Architecture4</p><p>  2.2System Technology5<

16、/p><p>  2.3System Hardware6</p><p>  2.4Development Environment8</p><p>  Chapter 3System Hardware Design9</p><p>  3.1Hardware Design9</p><p>  3.2

17、Development Steps9</p><p>  3.2.1Reader Module9</p><p>  3.2.2SCM Process Procedures10</p><p>  3.3Communications Command Protocaol11</p><p>  Chapter 4System S

18、oftware Design14</p><p>  4.1Software Design14</p><p>  4.2Application Design15</p><p>  4.2.1Network Communication Design15</p><p>  4.2.2Table Design17</p

19、><p>  4.2.3Database Module Design19</p><p>  4.2.4Automatic Closure Subsystem Design19</p><p>  4.2.5Positioning Module20</p><p>  Chapter 5Server Design22</p&

20、gt;<p>  5.1Database Design22</p><p>  5.2Background Management22</p><p>  Chapter 6Aggregate24</p><p><b>  Thanks25</b></p><p>  References2

21、6</p><p>  Appendix 1:Qt/Embedded Platform27</p><p><b>  引言</b></p><p><b>  設(shè)計(jì)背景</b></p><p>  在我國(guó)超市形成在20世紀(jì)90年代初期,現(xiàn)在已經(jīng)成為我國(guó)零售業(yè)的一種重要形態(tài),為國(guó)民經(jīng)濟(jì)的發(fā)展發(fā)揮了

22、重要的作用。隨著超市高速的發(fā)展,其經(jīng)營(yíng)管理也變得愈加復(fù)雜,早期的售貨員站柜臺(tái)的形式早已不能滿足現(xiàn)有銷售也的發(fā)展,這樣就迫切地需要引入新的管理技術(shù)。</p><p>  超市形態(tài)具有種種優(yōu)點(diǎn),但在目前狀況下,它仍存在零售業(yè)企業(yè)所共有的落后的一面,如:不能有效地管理每種商品,收款結(jié)算速度慢,容易出現(xiàn)營(yíng)業(yè)差錯(cuò),不宜進(jìn)行商品調(diào)價(jià),盤點(diǎn)效率低等,而且在超市日常管理中,商品的進(jìn)、銷、存等決策以經(jīng)驗(yàn)為主,缺乏實(shí)時(shí)分析功能,管理

23、人員對(duì)及時(shí)傳遞資料的要求始終得不到滿足。蘇轍超市形態(tài)的高速發(fā)展,其經(jīng)營(yíng)管理也變得愈加復(fù)雜,日常所需要處理的數(shù)據(jù)量也逐漸增大,商業(yè)運(yùn)轉(zhuǎn)的中間環(huán)節(jié)也越來(lái)越多,原始的人工管理已無(wú)法應(yīng)對(duì)這復(fù)雜的市場(chǎng)。為此,在選題過(guò)程中,我選擇了超市管理系統(tǒng)設(shè)計(jì)題目,依靠現(xiàn)代化的計(jì)算機(jī)信息處理技術(shù)來(lái)管理超市,一方面,方便了顧客能夠準(zhǔn)確的獲得商品的詳細(xì)信息,節(jié)省了購(gòu)物時(shí)間,提高了顧客購(gòu)物的滿意度和對(duì)超市的認(rèn)同感。另一方面又為超市本身節(jié)省了大量的人力、物力,改善了員

24、工的工作條件,減輕了勞動(dòng)強(qiáng)度,并且能夠快速反映出商品的進(jìn)、銷、存等狀況和各種反饋信息分析,使管理人員快速對(duì)市場(chǎng)的變化做出相應(yīng)的決策,加快超市經(jīng)營(yíng)管理效率。</p><p><b>  設(shè)計(jì)目標(biāo)</b></p><p>  隨著現(xiàn)代科學(xué)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)技術(shù)已經(jīng)滲透到各個(gè)領(lǐng)域,成為各行業(yè)必不可少的工具,特別是Internet技術(shù)的推廣和信息高速公路的建立,使IT產(chǎn)業(yè)

25、在市場(chǎng)競(jìng)爭(zhēng)中越發(fā)顯示出其獨(dú)特的優(yōu)勢(shì),步入信息化時(shí)代,有巨大的數(shù)據(jù)信息等待加工處理和傳輸,這使得對(duì)數(shù)據(jù)庫(kù)的進(jìn)一步開發(fā)和利用顯得尤為迫切。作為國(guó)內(nèi)市場(chǎng)的一些中小型超市,它們?cè)谛畔⒒^(guò)程中的步伐要落后于大中型超市,而對(duì)于這些企業(yè)的資源管理,信息的存儲(chǔ)和處理也顯得迫切需要,要適應(yīng)市場(chǎng)競(jìng)爭(zhēng),就需要有高效的處理方式和管理方法,因此加快超市的信息化進(jìn)程是必可少的。</p><p>  本畢業(yè)設(shè)計(jì)以現(xiàn)代化超市為背景,為方便顧客購(gòu)

26、物,所開發(fā)的一個(gè)電子購(gòu)物平臺(tái)。旨在縮短顧客的結(jié)賬時(shí)間,方便顧客查詢超市商品信息和定位;降低超市的人力成本,提高運(yùn)營(yíng)效率。同時(shí),提供一個(gè)后臺(tái)管理系統(tǒng)對(duì)超市中的商品和超市會(huì)員信息進(jìn)行有效的管理。</p><p>  畢業(yè)設(shè)計(jì)以博創(chuàng)科技UP-NETARM2410-S(S3C2410芯片)控制板為平臺(tái),使用嵌入式Linux操作系統(tǒng)和QT/Embedded圖形界面,采用嵌入式系統(tǒng)技術(shù)、射頻識(shí)別(RFID)技術(shù)、數(shù)據(jù)庫(kù)技術(shù)等

27、實(shí)現(xiàn)以移動(dòng)購(gòu)物終端為核心的自動(dòng)化、信息化的“現(xiàn)代化超市電子購(gòu)物系統(tǒng)”。</p><p>  通過(guò)本畢業(yè)設(shè)計(jì)主要學(xué)習(xí)在Linux環(huán)境下的嵌入式系統(tǒng)開發(fā)和對(duì)RFID原理的實(shí)現(xiàn)。</p><p><b>  系統(tǒng)功能</b></p><p>  系統(tǒng)采用具有全球唯一UID的“電子標(biāo)簽”作為商品、會(huì)員和位置的信息載體。移動(dòng)購(gòu)物終端獲得由RFID讀卡模塊

28、讀取的UID。通過(guò)網(wǎng)絡(luò)查詢數(shù)據(jù)庫(kù)信息后進(jìn)行相應(yīng)的處理。處理后的信息借由網(wǎng)絡(luò)返回給移動(dòng)購(gòu)物終端。顧客可以很直觀的獲取商品信息,便利了購(gòu)物;移動(dòng)購(gòu)物終端能夠自動(dòng)識(shí)別并處理商品信息和顧客信息;將電子標(biāo)簽放在超市的地面下,移動(dòng)購(gòu)物終端就能自動(dòng)在超市內(nèi)定位。系統(tǒng)功能如下:</p><p>  移動(dòng)購(gòu)物終端非接觸地識(shí)別商品,自動(dòng)顯示商品的價(jià)格、介紹等詳細(xì)信息;</p><p>  移動(dòng)購(gòu)物終端能夠?qū)崟r(shí)

29、地顯示顧客的購(gòu)物清單和商品總價(jià);</p><p>  移動(dòng)購(gòu)物終端具有定位功能,顧客可以查看自己當(dāng)前的位置和商品的所在位置,實(shí)現(xiàn)商品的定位查找;</p><p>  顧客通過(guò)終端使用會(huì)員登錄,并可以查看余額;</p><p>  顧客在出口結(jié)賬時(shí),不用再次掃描商品,可以使用會(huì)員卡實(shí)現(xiàn)自動(dòng)結(jié)賬,整個(gè)過(guò)程在很短的時(shí)間內(nèi)完成;</p><p>  

30、超市管理者可以實(shí)時(shí)的查看商品信息、進(jìn)行會(huì)員管理。</p><p><b>  文章結(jié)構(gòu)和說(shuō)明</b></p><p>  本文的第一部分是引言部分,初步介紹了目前該研究領(lǐng)域的現(xiàn)狀和本畢業(yè)設(shè)計(jì)的主要目標(biāo)及實(shí)現(xiàn)的功能。</p><p>  第二部分是系統(tǒng)總體設(shè)計(jì)的詳細(xì)介紹,包括系統(tǒng)的總體結(jié)構(gòu)及系統(tǒng)特點(diǎn),簡(jiǎn)要介紹了系統(tǒng)所采用的部分技術(shù),以及系統(tǒng)的開發(fā)

31、環(huán)境;</p><p>  第三部分是系統(tǒng)硬件設(shè)計(jì)的詳細(xì)介紹,包括系統(tǒng)所選硬件電氣規(guī)格、讀卡模塊和非接觸式IC卡間的通訊傳輸指令。同時(shí)闡述了讀卡模塊和單片機(jī)程序的工作流程。</p><p>  第四部分是系統(tǒng)軟件部分的設(shè)計(jì)概要。介紹系統(tǒng)軟件部分的開發(fā)流程,詳細(xì)介紹了系統(tǒng)中網(wǎng)絡(luò)通信設(shè)計(jì)、表格顯示設(shè)計(jì)、客戶端數(shù)據(jù)庫(kù)模塊設(shè)計(jì)以及讀卡模塊在軟件部分中的應(yīng)用。</p><p>

32、;  第五部分是介紹了系統(tǒng)客戶端部分。包括系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)和一個(gè)后臺(tái)管理程序。</p><p>  第六部分是總結(jié)部分。</p><p><b>  系統(tǒng)總體設(shè)計(jì)</b></p><p><b>  系統(tǒng)的總體結(jié)構(gòu)</b></p><p>  系統(tǒng)由移動(dòng)購(gòu)物終端和服務(wù)器兩大部分組成,均采用Linux操

33、作系統(tǒng),通過(guò)Web網(wǎng)絡(luò)技術(shù)連接。移動(dòng)購(gòu)物終端以博創(chuàng)科技UP-NETARM2410-S(S3C2410芯片)為核心,外接WM-15T讀寫模塊。將移動(dòng)購(gòu)物終端安裝在超市的購(gòu)物小車上,實(shí)現(xiàn)在超市中的移動(dòng)購(gòu)物。服務(wù)器端由PC機(jī)組成,通過(guò)設(shè)計(jì)服務(wù)程序,為終端提供數(shù)據(jù)庫(kù)服務(wù)、自動(dòng)結(jié)賬服務(wù),實(shí)現(xiàn)系統(tǒng)的各個(gè)功能。如[圖 1]所示</p><p>  圖 1 信息處理流程圖</p><p><b>

34、;  系統(tǒng)技術(shù)</b></p><p>  系統(tǒng)的軟件部分是基于Linux操作系統(tǒng)。普通Linux擁有自己標(biāo)準(zhǔn)的GUI系統(tǒng)X-Windows,但是X-Windows過(guò)于龐大和臃腫,極耗系統(tǒng)資源,而且其中不少功能對(duì)于嵌入式系統(tǒng)來(lái)說(shuō)是多余的,不適于資源有限的嵌入式系統(tǒng)使用。嵌入式系統(tǒng)與傳統(tǒng)計(jì)算機(jī)系統(tǒng)相比更專門化,其軟硬件設(shè)計(jì)直接從具體應(yīng)用出發(fā),嵌入式Linux是應(yīng)用于嵌入式設(shè)備開發(fā)上的一種操作系統(tǒng)。通常嵌

35、入式設(shè)備中的GUI系統(tǒng)占據(jù)資源較多,因此對(duì)GUI的篩選顯得很重要。由于嵌入式GUI需要高性能、輕量級(jí)的GUI系統(tǒng),在這里我們選用Qt/Embedded進(jìn)行軟件圖形界面的設(shè)計(jì),并采用Qt中的QSocket類進(jìn)行網(wǎng)絡(luò)通訊部分的編程。</p><p>  Qt/Embedded是著名的QT庫(kù)開發(fā)商TrollTech正在進(jìn)行的基于framebuffer的面向嵌入式系統(tǒng)的Qt 版本。由于KDE等項(xiàng)目使用Qt作為支持庫(kù),所以

36、由許多基于Qt的X-Windows程序可以非常方便地移植到Qt/Embedded版本上。因其面向?qū)ο蟆⒖缙脚_(tái)和界面設(shè)計(jì)更美觀而得到廣泛的應(yīng)用。</p><p>  Qt/Embedded開放了源代碼,使得開發(fā)人員可以在GPL許可協(xié)議下自由地使用Qt/Embedded進(jìn)行嵌入式Linux 應(yīng)用系統(tǒng)的開發(fā)。而且在Tmake、Qmake、QVFB和Qt Designer等眾多強(qiáng)大開發(fā)工具的支持下,大大提高了Linux系

37、統(tǒng)的開發(fā)效率和項(xiàng)目進(jìn)度。具體的開發(fā)步驟如下:</p><p>  Qt Designer是設(shè)計(jì)窗口組件(Widget)的應(yīng)用程序,在安裝Qt的bin目錄下鍵入./designer可以啟動(dòng)一個(gè)包含很多Qt組件的可視化界面。在此組織應(yīng)用程序的各組件分布很方便,最后可以生產(chǎn)一個(gè).ui和main.cpp文件;.ui是用XML語(yǔ)言寫的一個(gè)文本。如果熟悉QT程序設(shè)計(jì)可以拋棄Qt Designer,手動(dòng)編寫圖形界面;</

38、p><p>  uic(User Interface Compiler)是從XML文件生成代碼的用戶界面編輯器,用來(lái)將.ui文件生產(chǎn).h和.cpp文件,但生成的這兩個(gè)文件不是標(biāo)準(zhǔn)的純C++代碼,通常稱為Qt的C++擴(kuò)展,因?yàn)镼t的對(duì)象間中運(yùn)用了信號(hào)/槽的通信機(jī)制,在文件用Q_OBJECT宏來(lái)標(biāo)識(shí);</p><p>  用qmake工具生成.pro文件,在設(shè)置好環(huán)境變量后,用tmake工具生成M

39、akefile文件(tmake是跨平臺(tái)Makefile生成器)。在Qt/Embedded 3.X以上版本中qmake已經(jīng)全面取代tmake;</p><p>  moc(元對(duì)象編譯器)用來(lái)解析一個(gè)C++文件中的類聲明并且生成初始化對(duì)象的C++代碼,moc在讀取C++源文件,如果發(fā)現(xiàn)其中一個(gè)或多個(gè)類的聲明中含有Q_OBLECT宏,就給出這個(gè)使用Q_OBJECT宏的類生成另外一個(gè)包含元對(duì)象代碼的C++元文件;元對(duì)象代

40、碼對(duì)信號(hào)/槽機(jī)制、運(yùn)行時(shí)類型信息和動(dòng)態(tài)屬性系統(tǒng)是需要的;</p><p>  用make命令生成可執(zhí)行的二進(jìn)制代碼文件。</p><p>  此外Qt/Embedded使系統(tǒng)獲得高效的工作性能是它擁有一個(gè)重要機(jī)制--信號(hào)與槽機(jī)制(signals/slots)。信號(hào)和槽是一種高級(jí)接口,應(yīng)用于對(duì)象之間的通信,是Qt的核心特性,這也使得各個(gè)元件之間的協(xié)調(diào)變得簡(jiǎn)單。信號(hào)和槽能攜帶任意數(shù)量和類型的參

41、數(shù),它們是類型完全安全的,不像回調(diào)函數(shù)那樣會(huì)產(chǎn)生內(nèi)核泄露。所有從QObject或其子類派生的類都能夠包含信號(hào)和槽。當(dāng)對(duì)象改變其狀態(tài)時(shí),信號(hào)就由該對(duì)象發(fā)射出去,接收方未知。這就是真正的信息封裝,它確保對(duì)象被當(dāng)作一個(gè)真正的軟件組件來(lái)使用。槽用于接收信號(hào),但它們是普通的對(duì)象成員函數(shù)。一個(gè)槽并不知道是否有任何信號(hào)與自己相連接??梢詫⒑芏嘈盘?hào)與單個(gè)的槽進(jìn)行連接,也可以將單個(gè)的信號(hào)與很多的槽進(jìn)行連接,甚至將一個(gè)信號(hào)與另外一個(gè)信號(hào)相連接也是可能的,這

42、時(shí)無(wú)論第一個(gè)信號(hào)什么時(shí)候發(fā)射系統(tǒng)都將立刻發(fā)射第二個(gè)信號(hào)。</p><p><b>  系統(tǒng)硬件</b></p><p>  RFID( Radio Frequency Identification,射頻識(shí)別)技術(shù)是20世紀(jì)90年代開始興起的一種非接觸的自動(dòng)識(shí)別技術(shù),射頻識(shí)別技術(shù)是一項(xiàng)利用射頻信號(hào)通過(guò)空間禍合(交變磁場(chǎng)或電磁場(chǎng))實(shí)現(xiàn)無(wú)接觸信息傳遞并通過(guò)所傳遞的信息達(dá)到識(shí)

43、別目的的技術(shù)。</p><p>  現(xiàn)今的RFID技術(shù)是AEI(Automatic Equipment Identification,自動(dòng)識(shí)別)在射頻技術(shù)方面的具體應(yīng)用與發(fā)展。RFID技術(shù)利用射頻信號(hào)的空間禍合,實(shí)現(xiàn)了無(wú)接觸式的信息雙向通信,并且利用所接收到的信息完成了對(duì)目標(biāo)物體的自動(dòng)識(shí)別。與早期的識(shí)別技術(shù)相比,RFID技術(shù)因其特有的非接觸性以及可對(duì)多個(gè)目標(biāo)物體同時(shí)識(shí)別的特性,得到了眾多行業(yè)的青睞。</p&

44、gt;<p>  依據(jù)電子標(biāo)簽工作所需能量的供給方式的不同,RFID系統(tǒng)可分為無(wú)源、有源以及半有源系統(tǒng)。無(wú)源系統(tǒng)所使用的無(wú)源標(biāo)簽又稱被動(dòng)標(biāo)簽,標(biāo)簽自身不需要電源供電,而是通過(guò)閱讀器發(fā)送的射頻信號(hào)供電,它重量輕、體積小、壽命長(zhǎng)、成本低廉,在工程實(shí)現(xiàn)中得到了廣泛的應(yīng)用。有源系統(tǒng)的標(biāo)簽使用標(biāo)簽內(nèi)的電池來(lái)供電,系統(tǒng)識(shí)別距離較長(zhǎng),可達(dá)幾十米,但其壽命有限并且成本較高。另外,由于標(biāo)簽內(nèi)載電池,因此有源標(biāo)簽的體積較大,無(wú)法制成薄卡。半有

45、源系統(tǒng)的標(biāo)簽也帶有電池,但是此電池只起到激活系統(tǒng)的作用,標(biāo)簽一旦被閱讀器激活,即無(wú)需標(biāo)簽內(nèi)的電池供電,進(jìn)入無(wú)源標(biāo)簽工作模式。</p><p>  在我們的設(shè)計(jì)中,系統(tǒng)硬件部分采用15T射頻讀寫模塊。該讀寫模塊是采用最新Mifare技術(shù)的微型嵌入式非接觸式IC卡讀寫模塊。內(nèi)嵌ISO14443 Type A協(xié)議解釋器,并具有射頻驅(qū)動(dòng)及接收功能,可以簡(jiǎn)單實(shí)現(xiàn)對(duì)MifareOne等卡片的讀寫操作,讀寫距離最大可達(dá)100m

46、m(與卡片及天線設(shè)計(jì)有關(guān)) 。該非接觸型IC卡上設(shè)有射頻信號(hào)接收器或紅外線收發(fā)器,在一定距離內(nèi)即可收發(fā)讀寫器的信號(hào),實(shí)現(xiàn)非接觸讀寫。</p><p>  非接觸式IC卡主要指標(biāo)</p><p>  卡片的電氣部分只由一個(gè)天線和ASIC組成。</p><p>  天線:卡片的天線是只有幾組繞線的線圈,很適于封裝到IS0卡片中。</p><p>

47、  ASIC:卡片的ASIC由一個(gè)高速(106KB波特率)的RF接口,一個(gè)控制單元和一個(gè)8K位(或32K位)EEPROM組成,分為16個(gè)扇區(qū)(Mpro為40扇區(qū)),每個(gè)扇區(qū)為4 塊(Mpro 后8個(gè)區(qū)為16 塊),每塊16個(gè)字節(jié),以塊為存取單位。每個(gè)扇區(qū)有獨(dú)立的一組密碼及訪問(wèn)控制。每張卡有唯一序列號(hào),為32 位。</p><p><b>  存儲(chǔ)結(jié)構(gòu)</b></p><p

48、>  M1卡分為16個(gè)扇區(qū),每個(gè)扇區(qū)由4塊(塊0、塊1、塊2、塊3)組成,(我們也將16個(gè)扇區(qū)的64個(gè)塊按絕對(duì)地址編號(hào)為0~63),存貯結(jié)構(gòu)如表 1所示:</p><p><b>  表 1 存儲(chǔ)結(jié)構(gòu)</b></p><p>  第0 扇區(qū)的塊0(即絕對(duì)地址0 塊),它用于存放廠商代碼,已經(jīng)固化,不可更改。每個(gè)扇區(qū)的塊0、塊1、塊2 為數(shù)據(jù)塊,可用于存貯數(shù)據(jù)。數(shù)

49、據(jù)塊可作兩種應(yīng)用:一是用作一般的數(shù)據(jù)保存,可以進(jìn)行讀、寫操作。二是用作數(shù)據(jù)值,可以進(jìn)行初始化值、加值、減值、讀值操作。</p><p><b>  開發(fā)環(huán)境</b></p><p>  硬件:PC機(jī)Pentumn500以上,硬盤10G以上</p><p>  軟件:PC機(jī)操作系統(tǒng)RedHat Linux9.0 MinicomMysql-5

50、.1.7</p><p>  平臺(tái):博創(chuàng)科技UP-NETARM2410-S(S3C2410芯片)</p><p>  工具:tmake-1.8 qt-x11-3.3.4 qt-embedded-3.3.4</p><p><b>  系統(tǒng)硬件設(shè)計(jì)</b></p><p><b>  硬件總體設(shè)計(jì)</b

51、></p><p>  系統(tǒng)終端中的讀卡模塊采用的是15T射頻讀寫模塊。15T射頻讀寫模塊是采用最新Mifare 技術(shù)的微型嵌入式非接觸式IC 卡讀寫模塊。內(nèi)嵌ISO14443 Type A 協(xié)議解釋器,并具有射頻驅(qū)動(dòng)及接收功能,可以簡(jiǎn)單實(shí)現(xiàn)對(duì)MifareOne 等卡片的讀寫操作,讀寫距離最大可達(dá)100mm(與卡片及天線設(shè)計(jì)有關(guān))。該模塊提供標(biāo)準(zhǔn)異步串行通訊接口,輸出TTL 電平。用戶可不必了解非接觸IC卡

52、讀寫模塊的協(xié)議標(biāo)準(zhǔn)及底層驅(qū)動(dòng),只需通過(guò)串行通訊發(fā)送相關(guān)指令,即可實(shí)現(xiàn)對(duì)卡片的所有操作。該模塊適用于標(biāo)準(zhǔn)讀寫器(只需進(jìn)行電平轉(zhuǎn)換即可直接連接到PC 機(jī)) 、手持機(jī) 、收費(fèi)機(jī)、門禁器、考勤機(jī)及其它各種收費(fèi)系統(tǒng)及一卡通應(yīng)用系統(tǒng)。</p><p><b>  開發(fā)步驟</b></p><p><b>  讀卡模塊的工作過(guò)程</b></p>

53、<p>  可以給讀卡模塊事先設(shè)定了一個(gè)塊(缺省是塊2),當(dāng)卡片靠近時(shí),讀卡模塊主動(dòng)驗(yàn)證這個(gè)區(qū)及讀出這個(gè)塊的數(shù)據(jù),并向單片機(jī)發(fā)出中斷信號(hào),等待單片機(jī)來(lái)取,當(dāng)單片機(jī)取走時(shí),讀卡模塊并不關(guān)閉這張卡,這時(shí)單片機(jī)可以發(fā)命令直接讀寫此卡的其它塊,直到單片機(jī)發(fā)關(guān)卡的命令,讀卡模塊又回到開始時(shí)的尋卡讀指定塊的狀態(tài);讀卡模塊的設(shè)定的塊和尋卡方式可以由單片機(jī)設(shè)定,并斷電不保存;如[圖 2]所示。</p><p>  尋卡

54、模式位(00 或01),如果以00 模式尋卡,再執(zhí)行了關(guān)閉指令后,卡片必須離開感應(yīng)區(qū)再進(jìn)入感應(yīng)區(qū)才能尋卡成功,如果以01 模式尋卡,那么在執(zhí)行了停機(jī)指令后,即使卡片未離開感應(yīng)區(qū)也能尋卡成功。</p><p>  圖 2 讀卡模塊工作流程</p><p>  單片機(jī)程序的工作過(guò)程</p><p>  單片機(jī)向模塊連接的232 口發(fā)送命令來(lái)控制模塊的讀寫操作,當(dāng)模塊讀到

55、卡時(shí),可以通過(guò)讀卡模塊對(duì)卡進(jìn)行讀寫操作,操作完成后,一定要關(guān)閉卡片。對(duì)卡片控制區(qū)的讀寫與數(shù)據(jù)讀寫相同,只是控制方式不同,同時(shí)要注意一定不要寫錯(cuò)或記住所寫內(nèi)容,否則有可能會(huì)無(wú)法再對(duì)該區(qū)進(jìn)行操作。在剛開始編程時(shí),為了不寫錯(cuò)卡片造成不能讀寫的壞區(qū),在對(duì)卡片密碼區(qū)進(jìn)行讀寫之前請(qǐng)將要寫入密碼區(qū)的16個(gè)字節(jié)先寫入一個(gè)數(shù)據(jù)塊,再讀出,如果寫入正確,說(shuō)明寫入操作正確,就可以對(duì)密碼區(qū)進(jìn)行寫操作了。模塊取到卡號(hào)與密碼無(wú)關(guān),也就是不用驗(yàn)證密碼就可以通過(guò)讀數(shù)據(jù)

56、記錄得到卡號(hào)。在每一個(gè)命令執(zhí)行后在執(zhí)行下一個(gè)命令前應(yīng)有不少于10ms 的延時(shí)。</p><p><b>  通訊指令協(xié)議</b></p><p><b>  接口規(guī)格:</b></p><p>  使用單片機(jī)對(duì)讀寫模塊進(jìn)行控制,單片機(jī)為主控制機(jī)(主機(jī)),讀寫模塊為從機(jī)(分機(jī))。</p><p>  

57、1、通訊方法:232異步通訊 </p><p>  2、波特率:57600bps</p><p>  3、控制字方式:1位開始位,8個(gè)數(shù)據(jù)位,一個(gè)停止位,無(wú)奇偶校驗(yàn)</p><p><b>  通訊協(xié)議格式:</b></p><p>  ------------------------------------------

58、-----------------------------------</p><p>  |開始標(biāo)志|模塊地址|信息長(zhǎng)度|命令和參數(shù)/叢機(jī)返回|校驗(yàn)|</p><p>  -----------------------------------------------------------------------------</p><p>  [開始標(biāo)志]:長(zhǎng)度

59、2個(gè)字節(jié),主機(jī)給模塊:AAH FFH;</p><p>  模塊給主機(jī):BBH FFH</p><p>  [模塊地址]:長(zhǎng)度1個(gè)字節(jié),固定值01H。 </p><p>  [廣播地址]:FFH</p><p>  [信息長(zhǎng)度]:表示命令和參數(shù)的總字節(jié)數(shù),不包括開始標(biāo)志、地址和校驗(yàn)的長(zhǎng)度。</p><p>  [校

60、 驗(yàn)]:長(zhǎng)度1個(gè)字節(jié),是開始標(biāo)志、地址、信息長(zhǎng)度、命令和參數(shù)中所有字節(jié)的異或值。</p><p><b>  [命令和數(shù)據(jù)]:</b></p><p><b>  通訊測(cè)試0XA1</b></p><p>  [功能]:測(cè)試單片機(jī)與模塊通訊是否正常</p><p><b>  [命令]:

61、A1H</b></p><p><b>  [參數(shù)]:無(wú)</b></p><p>  模塊送回尋卡方式,讀卡塊號(hào)。若命令校驗(yàn)出錯(cuò),送回33H。</p><p>  設(shè)置尋卡方式,清讀寫器狀態(tài)到上電時(shí)的狀態(tài)</p><p><b>  [命令]:A3H</b></p><

62、;p><b>  [參數(shù)]:無(wú)</b></p><p>  [功能]設(shè)置模塊尋卡方式,讀卡塊號(hào),數(shù)據(jù)區(qū)密碼到上電時(shí)的狀態(tài), 數(shù)據(jù)區(qū)密碼在上電時(shí)為FF FF FF FF FF FF。模塊返回01、成功標(biāo)志55H;若命令校驗(yàn)出錯(cuò),送回33H。若命令校驗(yàn)出錯(cuò),送回33H,</p><p>  設(shè)置尋卡方式、讀寫數(shù)據(jù)塊號(hào)數(shù)據(jù)區(qū)密碼</p><p>

63、;<b>  [命令]:A4H</b></p><p>  [參數(shù)]:尋卡方式:0或1;</p><p>  讀寫數(shù)據(jù)塊號(hào):0-63(S50)/0-255(S70);</p><p>  數(shù)據(jù)區(qū)密碼:6 Bytes。模塊返回01、成功標(biāo)志55H;若命令校驗(yàn)出錯(cuò),送回33H。</p><p><b>  讀數(shù)據(jù)記

64、錄</b></p><p>  [功能] 在讀卡器已經(jīng)讀好缺省塊號(hào)的數(shù)據(jù)后,上位機(jī)從讀卡器讀該數(shù)據(jù)記錄,并決定是否關(guān)卡。</p><p><b>  [命令]A7H</b></p><p>  [參數(shù)] 是否需要關(guān)卡標(biāo)志:0(不需要關(guān)卡)或者1(需要關(guān)卡)</p><p>  讀卡器送回:是否已經(jīng)下載過(guò)的標(biāo)志

65、(該字節(jié)若為00,表示還沒(méi)下載,若為1,表示已經(jīng)下載)、缺省的塊號(hào),以及從讀卡器里讀取的一條記錄,共4個(gè)字節(jié)(卡號(hào))+16 字節(jié)數(shù)據(jù),如果讀卡器此時(shí)沒(méi)有刷卡記錄可以送給主機(jī),發(fā)送尋到的卡號(hào)(4 個(gè)字節(jié))和77h 給主機(jī),如果尋卡失敗,那么4 字節(jié)的卡號(hào)為 0 0 0 0。</p><p><b>  讀指定數(shù)據(jù)塊</b></p><p>  [功能]從卡上讀取指定塊的

66、數(shù)據(jù)。</p><p><b>  [命令]A8H</b></p><p>  [參數(shù)]所要讀塊號(hào):0-63(S50)/0-255(S70);</p><p>  訪問(wèn)的密碼: M1…M6</p><p>  驗(yàn)證密碼:0-密碼A,1-密碼B</p><p>  是否需要關(guān)卡的標(biāo)志:0(不需要關(guān)卡

67、)或者1(需要關(guān)卡)</p><p>  讀卡器送回:4個(gè)字節(jié)(卡號(hào))+16 字節(jié)數(shù)據(jù),如果讀卡器此時(shí)讀卡失敗,發(fā)送33h給主機(jī)。</p><p><b>  寫數(shù)據(jù)</b></p><p>  [功能]往卡上缺省指定塊寫數(shù)據(jù)。</p><p><b>  [命令]A9H</b></p>

68、<p>  [參數(shù)]所要寫入的卡號(hào):4 字節(jié)</p><p>  所要寫入的數(shù)據(jù):16 字節(jié)</p><p>  是否需要關(guān)卡的標(biāo)志:0(不需要關(guān)卡)或者1(需要關(guān)卡)</p><p>  讀卡器送回:返回01、成功標(biāo)志55H、當(dāng)前尋卡方式,如果讀卡器此時(shí)寫卡失敗,發(fā)送33h</p><p><b>  寫指定數(shù)據(jù)塊&

69、lt;/b></p><p>  [功能]往卡上指定塊的寫數(shù)據(jù)。</p><p><b>  [命令]AAH</b></p><p>  [參數(shù)]所要寫卡的卡號(hào):4 字節(jié)。</p><p>  所要寫入的塊號(hào):0-63(S50)/0-255(S70)。</p><p>  訪問(wèn)該塊需要的密碼

70、:6 字節(jié)</p><p>  驗(yàn)證密碼:0-密碼A,1-密碼B</p><p>  所要寫入的數(shù)據(jù):16 字節(jié)</p><p>  是否需要關(guān)卡的標(biāo)志:0(不需要關(guān)卡)或者1(需要關(guān)卡)</p><p>  讀卡器送回:返回01、成功標(biāo)志55H、當(dāng)前尋卡方式,如果讀卡器此時(shí)寫卡失敗,發(fā)送33h給主機(jī)。</p><p>

71、;<b>  關(guān)卡</b></p><p>  [功能]關(guān)掉的M1 卡片,這個(gè)命令不僅僅是關(guān)卡,還讓讀卡電路恢復(fù)到主動(dòng)尋卡狀態(tài)。</p><p><b>  [命令]ABH</b></p><p><b>  [參數(shù)]無(wú)</b></p><p>  讀卡器送回:返回01、成功標(biāo)

72、志55H、當(dāng)前尋卡方式,如果接收命令失敗,發(fā)送33h 給主機(jī)。</p><p><b>  查詢模塊狀態(tài)</b></p><p>  [功能]查詢模塊是否已經(jīng)下載過(guò)塊號(hào)和密碼,以及尋卡方式。</p><p><b>  [命令]ACH</b></p><p><b>  [參數(shù)]無(wú)<

73、/b></p><p>  讀卡器送回:返回01、是否已經(jīng)下載過(guò)的標(biāo)志(該字節(jié)若為00,表示還沒(méi)下載,若為1,表示已經(jīng)下載)、已下載密碼塊號(hào)狀態(tài),當(dāng)前尋卡方式,如果接收命令失敗,發(fā)送33h 給主機(jī)。</p><p><b>  系統(tǒng)軟件設(shè)計(jì)</b></p><p><b>  軟件總體設(shè)計(jì)</b></p>

74、<p>  系統(tǒng)的軟件是基于UP-NETARM2410-S(S3C2410芯片)和Linux操作系統(tǒng),通過(guò)模塊化的設(shè)計(jì),完成對(duì)商品信息、會(huì)員信息、位置信息的識(shí)別、查詢、管理、操作與顯示。軟件系統(tǒng)流程圖如圖 3所示。系統(tǒng)的圖形界面使用Linux平臺(tái)的Qt/Embedded Version 3.3.4開發(fā),采用Qt特有的信號(hào)和槽(Signals and Slot) 機(jī)制設(shè)計(jì)全新的圖形界面和應(yīng)用程序。各個(gè)圖形界面采用模擬“窗口棧

75、”的形式管理,將所有界面通過(guò)QWidget類reparent函數(shù)轉(zhuǎn)換為主窗口的子窗口,并限定所有子窗口都不擁有自我顯示的權(quán)限,而是在需要顯示的時(shí)候向主窗口發(fā)出信號(hào)申請(qǐng)顯示,由主窗口進(jìn)行統(tǒng)一調(diào)度。</p><p><b>  圖 3 系統(tǒng)流程圖</b></p><p>  該系統(tǒng)按照CS模式設(shè)計(jì)。在Client端用一個(gè)主窗口類來(lái)顯示所查詢的商品信息。顧客結(jié)賬和超市定位窗

76、口在主窗口基礎(chǔ)上,通過(guò)QButton類的clicked()信號(hào)觸發(fā)。在客戶端通過(guò)讀卡模塊獲取非接觸式IC卡上的UID后,通過(guò)QSocket類來(lái)實(shí)現(xiàn)TCP客戶端和服務(wù)器端的連接。同時(shí)在server端獲取UID后,將根據(jù)UID在數(shù)據(jù)庫(kù)中查詢相關(guān)的信息。最后將所查詢信息封裝成數(shù)據(jù)塊向Client端返回。</p><p><b>  應(yīng)用程序設(shè)計(jì)</b></p><p>&l

77、t;b>  網(wǎng)絡(luò)通信設(shè)計(jì)</b></p><p>  我們使用Socket類來(lái)實(shí)現(xiàn)TCP客戶端和服務(wù)器。TCP是一個(gè)傳輸協(xié)議,他成為包括FTP和HTTP的很多應(yīng)用程序?qū)拥幕ヂ?lián)網(wǎng)協(xié)議基礎(chǔ),也可以用于自定義協(xié)議。TCP是一個(gè)基于流的協(xié)議。對(duì)于應(yīng)用程序,數(shù)據(jù)表現(xiàn)為一個(gè)長(zhǎng)長(zhǎng)的流,而不是一個(gè)平面文件?;赥CP的高層協(xié)議通常是基于行的或者基于塊的。</p><p>  基于行的協(xié)議

78、把數(shù)據(jù)作為一行文本進(jìn)行傳輸,每一行都以一個(gè)換行符結(jié)尾。</p><p>  基于塊的協(xié)議把數(shù)據(jù)作為二進(jìn)制塊進(jìn)行傳輸。每一個(gè)塊都又是一個(gè)Size大小字段和緊跟它的一個(gè)Size字節(jié)的數(shù)據(jù)組成。</p><p>  QSocket繼承了QIODevice,所以它可以通過(guò)使用QDataStream或者QTextStream來(lái)進(jìn)行讀取和寫入。當(dāng)我們從網(wǎng)絡(luò)中讀取數(shù)據(jù)和從文件中讀取數(shù)據(jù)時(shí),有一個(gè)需要注意

79、的不同是,我們?cè)谑褂眠@個(gè)>>操作符之前必須確認(rèn)我們已經(jīng)從另一段接受了足夠多的數(shù)據(jù)。</p><p>  以系統(tǒng)軟件中商品信息模塊為例。在系統(tǒng)中我們?yōu)樯唐沸畔⒛K設(shè)計(jì)了兩個(gè)類:MarketClient和ClientSocket。其中MarketClient是移動(dòng)終端中商品信息的窗口類,我們?cè)谶@個(gè)窗口類上實(shí)現(xiàn)了通過(guò)QSocket與服務(wù)器間的通信。同時(shí)我們將設(shè)置一個(gè)blockSize變量來(lái)解析從服務(wù)器接受的

80、塊數(shù)據(jù)。這一流程分為以下幾個(gè)步驟:</p><p>  當(dāng)MarketClient通過(guò)讀卡模塊讀取非接觸式IC卡中的商品UID信息信號(hào)時(shí),MarketClient類中的connectionServer()槽被執(zhí)行。我們?cè)赒Socket對(duì)象上調(diào)用connectionToHost()連接到服務(wù)器。connectionToHost()調(diào)用是異步的,總是立即返回的。連接通常會(huì)在稍后被建立。當(dāng)連接被建立起來(lái)并且運(yùn)行的時(shí)候,

81、QSocket對(duì)象發(fā)射connected()信號(hào),或者如果連接失敗,發(fā)射error(int)(帶有一個(gè)錯(cuò)誤號(hào))信號(hào)。最后我們?cè)O(shè)置blockSize變量為0。blockSize變量存儲(chǔ)從服務(wù)器接受的下一個(gè)塊的長(zhǎng)度。這里設(shè)置為0,說(shuō)明我們不知道下一個(gè)塊的大小。</p><p>  當(dāng)QSocket對(duì)象發(fā)射connection()信號(hào)時(shí),表示一個(gè)連接已經(jīng)建立。sendRequest()槽將被執(zhí)行。這個(gè)槽的任務(wù)是生成一個(gè)

82、到服務(wù)器的請(qǐng)求,其中包括通過(guò)讀卡模塊獲的商品UID信息。請(qǐng)求格式如[表 2]所示。</p><p>  表 2 sendRequest()請(qǐng)求的數(shù)據(jù)格式</p><p>  我們最初寫入0作為塊的大小,然后一次寫入其他數(shù)據(jù)。然后在輸入輸出設(shè)備上(后臺(tái)是由一個(gè)QDataStream創(chuàng)建的QBuffer)調(diào)用at(0)重新移動(dòng)道字節(jié)數(shù)組的開始處,并且使用塊的數(shù)據(jù)大小覆蓋最初的0。這個(gè)大小是通過(guò)

83、塊的大小減去sizeof(Q_UINT16)得到的,也就是去掉最前面塊大小那個(gè)字段所占用的空間。在這之后,我們?cè)赒Socket上調(diào)用writeBlock()向服務(wù)器發(fā)送這個(gè)塊。</p><p>  發(fā)送請(qǐng)求到服務(wù)器端后,MarketClient類還將負(fù)責(zé)接受從服務(wù)器端傳輸?shù)臄?shù)據(jù)。這時(shí)MarketClient中的updataListView()槽被連接到QSocket的readyRead()信號(hào),只要QSocket

84、以及從服務(wù)器收到新數(shù)據(jù),該信號(hào)就會(huì)被發(fā)射。</p><p>  如果blockSize變量為0,這也就是說(shuō)還沒(méi)有讀取到下一個(gè)塊的大小。我們嘗試去讀取它。服務(wù)器使用一個(gè)大小為0xFFFF來(lái)表示沒(méi)有跟多的數(shù)據(jù)可以接收,所以如果讀取到該值,就知道已經(jīng)達(dá)到結(jié)尾。如果塊的大小不是0xFFFF,我們嘗試去讀取下一個(gè)塊。首先,檢查看看是不是有塊的大小這么多字節(jié)可以讀取。如果沒(méi)有,這次就在這里停止。當(dāng)有更多數(shù)據(jù)可以讀取的時(shí)候,r

85、eadyRead()信號(hào)將會(huì)被再次發(fā)射,并且我們將可以再次嘗試。</p><p>  一旦我們確認(rèn)一個(gè)完整的塊已經(jīng)到達(dá),則可以在QDataStream上安全地使用>>操作符。通過(guò)設(shè)置QDataStream在QSocket上提取有關(guān)的商品信息。從服務(wù)器端上接收的塊具有如[表 3]所示:</p><p>  表 3 接收的塊的數(shù)據(jù)格式</p><p>  最

86、后我們重置blockSize變量為0來(lái)表示下一個(gè)塊的大小是未知的并且需要去讀取。</p><p>  上面簡(jiǎn)要介紹了移動(dòng)購(gòu)物終端中所實(shí)現(xiàn)的Client部分,下面將主要介紹系統(tǒng)的服務(wù)器。商品信息模塊的服務(wù)器包含兩個(gè)類:MarketServer類和ClientSocket類。MarketServer類繼承了QServerSocket,這是一個(gè)允許接收來(lái)訪TCP連接類。ClientSocket重新實(shí)現(xiàn)了QSocket并

87、且處理一個(gè)單獨(dú)的連接。在這個(gè)設(shè)計(jì)中我們?cè)贑lientSocket類中實(shí)現(xiàn)了QSocket,而且可以處理多個(gè)連接,通過(guò)對(duì)請(qǐng)求類型的設(shè)置,我們?cè)贑lientSocket類中可以處理商品、顧客和定位信息的連接請(qǐng)求。</p><p>  MarketServer類重新實(shí)現(xiàn)了QServerSocket中的newConnection() 函數(shù)。只要一個(gè)客戶端試圖連接到服務(wù)器,這個(gè)函數(shù)就會(huì)被調(diào)用。在newConnection(

88、)的構(gòu)造函數(shù)中,我們可以傳遞端口號(hào)給基類的構(gòu)造函數(shù),同時(shí)創(chuàng)建一個(gè)ClientSocket對(duì)象作為MarketServer對(duì)象的孩子,并且我們?cè)O(shè)置它的套接字ID為提供給我們的數(shù)字。</p><p>  ClientSocket類繼承了QSocket并且封裝了一個(gè)客戶端的狀態(tài)。在構(gòu)造函數(shù)中,我們建立了需要的信號(hào)和槽的連接,并且設(shè)置blockSize變量為0,表示還不知道由客戶端發(fā)送的塊的大小。其中connection

89、Closed()和delayFinished()信號(hào)被連接到deleteLater()。這是一個(gè)從QObject繼承的函數(shù),當(dāng)控制返回到Qt的事件循環(huán)時(shí),它將會(huì)刪除對(duì)象。這樣就確保當(dāng)連接被另一端關(guān)閉時(shí)或者當(dāng)一個(gè)定時(shí)的關(guān)閉完成時(shí),ClientSocket對(duì)象會(huì)被刪除。readClient()槽被連接到QSocket的readyRead()信號(hào),如果blockSize為0,我們從讀取blockSize開始,否則我們就已經(jīng)讀取到它了,并且檢查

90、看看是否一個(gè)完整的塊已經(jīng)到達(dá)。一旦一個(gè)完整的塊已經(jīng)為讀取做好準(zhǔn)備,我們就讀取它。我們直接在QSocket對(duì)象上使用QDataStream并且使用>>操作符來(lái)讀取各個(gè)字段。</p><p>  一旦讀取完客戶端的請(qǐng)求后,我們準(zhǔn)備好一個(gè)回復(fù)。在這個(gè)畢業(yè)設(shè)計(jì)中我們實(shí)現(xiàn)了幾個(gè)函數(shù)從數(shù)據(jù)庫(kù)中獲得所要的數(shù)據(jù)。這些函數(shù)同客戶端程序中的sendRequest()函數(shù)十分類似。再一次,我們把這個(gè)塊寫入QByteArre

91、y,這樣就可以使用writeBlock()發(fā)送數(shù)據(jù)之前知道它的大小。最后發(fā)送0xFFFF表示數(shù)據(jù)的結(jié)束。</p><p><b>  表格顯示設(shè)計(jì)</b></p><p>  在主窗口中使用QListView類來(lái)顯示所要查詢的商品信息[圖 4]。在QListView中每一個(gè)非空的單元格都被作為一個(gè)獨(dú)立的QListViewItem對(duì)象保存到內(nèi)存中。這種項(xiàng)類可以在外面被當(dāng)

92、作數(shù)據(jù)持有者。通過(guò)子類化這個(gè)項(xiàng)類,我們可以存儲(chǔ)更多的數(shù)據(jù)并且重新實(shí)現(xiàn)虛函數(shù)來(lái)使用那些數(shù)據(jù)。因此我們可以對(duì)QListView中的每一項(xiàng)單元進(jìn)行操作。在這個(gè)QListView中,我們通過(guò)使用QlistViewItem::text()來(lái)讀取所選中項(xiàng)中的商品價(jià)格,在觸發(fā)顧客信息窗口前完成對(duì)所選擇商品的總價(jià)的計(jì)算。而后將總價(jià)向顧客信息窗口傳送。同時(shí),用戶可在購(gòu)物清單中雙擊所選商品,查詢商品的詳細(xì)信息。由于在QListView類中提供了對(duì)QList

93、ViewItem對(duì)象良好的支持,因此通過(guò)傳遞QListViewItem,我們可以在新觸發(fā)窗口中對(duì)QListViewItem進(jìn)行一些簡(jiǎn)單的操作,并與主窗口QListView對(duì)象中所顯示信息進(jìn)行交互。例如,用戶可以點(diǎn)擊“Up”和“down”按鈕,系統(tǒng)將通過(guò)調(diào)用QlistViewItem::ItemAbove()和QlistViewItem::ItemBelow()來(lái)顯</p><p><b>  圖 4 信

94、息主窗口</b></p><p>  圖 5 商品詳細(xì)信息</p><p><b>  數(shù)據(jù)庫(kù)模塊設(shè)計(jì)</b></p><p>  Qt的SQL模塊提供了與平臺(tái)以及數(shù)據(jù)庫(kù)無(wú)關(guān)的訪問(wèn)SQL數(shù)據(jù)庫(kù)的接口,還提供了一套把數(shù)據(jù)庫(kù)集成到用戶界面中的類。由于在客戶端中我們只要通過(guò)讀卡模塊獲得UID信息,再通過(guò)QSocket向服務(wù)器發(fā)送請(qǐng)求,服務(wù)

95、器端響應(yīng)后從服務(wù)器數(shù)據(jù)庫(kù)獲得相應(yīng)的數(shù)據(jù)信息。因此在客戶端中我們沒(méi)有過(guò)多得涉及到有關(guān)數(shù)據(jù)庫(kù)模塊的具體操作。這一部分是在服務(wù)器端完成的。由于在后面一章節(jié)中將詳細(xì)介紹Qt下數(shù)據(jù)庫(kù)的使用,這里只是簡(jiǎn)要得介紹Qt環(huán)境下的數(shù)據(jù)庫(kù)連接。</p><p>  為了便于系統(tǒng)設(shè)計(jì),我們單獨(dú)設(shè)計(jì)了一個(gè)connection.h用以連接數(shù)數(shù)據(jù)庫(kù)。在這個(gè)connection.h中我們聲明了createOneConnection()和crea

96、teConnects()兩個(gè)內(nèi)聯(lián)函數(shù)并且在每次我們需要它的時(shí)候包含它。</p><p>  在createOneConnection()中我們調(diào)用QSqlDatabase::addDatabase()來(lái)創(chuàng)建QsqlDatabase對(duì)象。addDatabase()的參數(shù)指定Qt必須使用一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)來(lái)訪問(wèn)這個(gè)數(shù)據(jù)庫(kù)。在這里我們使用的Mysql。Qt包含的驅(qū)動(dòng)有:</p><p>  QODB

97、C3(ODBC)、QMYSQL3(MYSQL)、QOCI8(Oracle)、QTDS7(Sybase Adaptive Server)、QPSQL7(PostgreSQL)和QDB2(IBM DB2)。相應(yīng)的驅(qū)動(dòng)可以在編譯Qt/Embedded的過(guò)程中通過(guò)./configure –sql-driver的命令獲得。然后就可以設(shè)置數(shù)據(jù)的主機(jī)名、數(shù)據(jù)庫(kù)名、用戶名和密碼,并且試圖打開連接。</p><p>  在crea

98、teConnections()中,我們創(chuàng)建了3個(gè)到Market數(shù)據(jù)庫(kù)的相同連接。我們沒(méi)有給第一個(gè)連接起名字;當(dāng)我們不指定數(shù)據(jù)庫(kù)名稱時(shí)他將會(huì)被默認(rèn)使用。另外兩個(gè)的名字分別為PRODUCT和GUEST。它們會(huì)被商品信息模塊和顧客信息模塊所使用。</p><p><b>  自動(dòng)結(jié)賬子系統(tǒng)設(shè)計(jì)</b></p><p>  在用戶完成商品選購(gòu)后,系統(tǒng)將自動(dòng)計(jì)算出所選購(gòu)商品的總

99、額。如果此時(shí)接收到移動(dòng)購(gòu)物終端的結(jié)賬請(qǐng)求和出口信息,系統(tǒng)將自動(dòng)調(diào)用顧客窗口進(jìn)行結(jié)賬(在我們?cè)O(shè)計(jì)的測(cè)試中顧客窗口的激發(fā)是通過(guò)一個(gè)QButton類的clicked()信號(hào)觸發(fā)的)。</p><p>  在顧客窗口中我們?cè)O(shè)計(jì)一個(gè)小鍵盤供用戶輸入密碼來(lái)登錄。通過(guò)讀卡模塊獲得的顧客UID將會(huì)和用戶輸入密碼,商品總額通過(guò)QSocket一同發(fā)往客戶端。客戶端將接受這些信息,并查詢數(shù)據(jù)庫(kù)來(lái)驗(yàn)證顧客身份。如果驗(yàn)證通過(guò),系統(tǒng)將會(huì)在該

100、用戶的賬戶余額上自動(dòng)扣除商品總額,并向客戶端放送交易成功的信息和當(dāng)前用戶的賬戶余額。同時(shí)原購(gòu)物清單將清空,一次購(gòu)物的過(guò)程將結(jié)束。Client端將重新等待顧客選購(gòu)商品。</p><p>  如果驗(yàn)證顧客身份失敗,服務(wù)器將向Client端發(fā)送錯(cuò)誤信息,Client端提示出錯(cuò)并且重新等待顧客登錄,如圖 6所示。直到購(gòu)物完成或者用戶退出購(gòu)物終端。</p><p><b>  圖 6 顧客

101、窗口</b></p><p><b>  定位子系統(tǒng)設(shè)計(jì)</b></p><p>  顧客在進(jìn)行購(gòu)物時(shí),可通過(guò)移動(dòng)購(gòu)物終端實(shí)現(xiàn)在超市內(nèi)的定位。我們?cè)谙到y(tǒng)設(shè)計(jì)時(shí)僅僅模擬了超市定位的動(dòng)作。我們假設(shè)購(gòu)物終端從讀卡模塊中獲得遍布超市內(nèi)的定位標(biāo)簽中的數(shù)據(jù),可以在移動(dòng)終端中將當(dāng)前的區(qū)域位置顯示出來(lái),這和我們通過(guò)讀卡模塊獲得商品信息的流程類似。當(dāng)定位模塊獲得從讀卡模塊傳

102、來(lái)的定位信息時(shí),定位模塊中的connectionServer()槽將被執(zhí)行,模塊也將通過(guò)在QSocket對(duì)象上調(diào)用connectionToHost()來(lái)連接與服務(wù)器進(jìn)行交互,而后服務(wù)器端將處理所得信息,將查詢得到的定位區(qū)域告知移動(dòng)終端(client端)。這一步驟可以參照上文4.2.1章節(jié)中的內(nèi)容。定位子系統(tǒng)模塊如[圖 7]所示。在定位模塊中Merchandise Orientation將顯示從商品購(gòu)物清單中所選擇的商品的位置。</

103、p><p>  圖 7 定位模塊設(shè)計(jì)</p><p><b>  服務(wù)器端設(shè)計(jì)</b></p><p><b>  數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  本系統(tǒng)采用Mysql-server-5.1.7作為服務(wù)器端數(shù)據(jù)庫(kù)。系統(tǒng)數(shù)據(jù)庫(kù)包含商品信息、會(huì)員信息和位置信息。而且電子標(biāo)簽中的UID能夠唯一地確定這

104、些信息,因此建立了商品信息表格(goods)、顧客信息表格(guests)、位置信息表格(areas),并以商品編號(hào)、顧客編號(hào)和位置信息編號(hào)作為主鍵確定唯一的記錄。在設(shè)計(jì)中,我們?cè)O(shè)定一個(gè)區(qū)域內(nèi)存放多個(gè)商品,因此在商品信息表格(goods)中設(shè)置areaid字段作為鏈接位置信息表格(areas)的外鍵。設(shè)計(jì)的關(guān)系型數(shù)據(jù)庫(kù)結(jié)構(gòu)如表 4 數(shù)據(jù)庫(kù)結(jié)構(gòu)所示(表中帶*的字段名為主鍵)。</p><p><b>  

105、表 4 數(shù)據(jù)庫(kù)結(jié)構(gòu)</b></p><p><b>  后臺(tái)管理</b></p><p>  為便于對(duì)系統(tǒng)數(shù)據(jù)庫(kù)進(jìn)行管理,我們制作了一個(gè)簡(jiǎn)單的后臺(tái)管理程序[圖 8],這樣就可以對(duì)系統(tǒng)數(shù)據(jù)庫(kù)進(jìn)行增、刪、修改等操作。該后臺(tái)管理程序的主界面是由Qt類庫(kù)中的QDataTable類實(shí)現(xiàn)的。QDataTable類是一個(gè)支持瀏覽和編輯的與數(shù)據(jù)庫(kù)相關(guān)的QTable窗口部件

106、。它通過(guò)QSqlCursor和數(shù)據(jù)庫(kù)進(jìn)行交互。通過(guò)QDataTable類的支持,可以在表格中的上下文菜單中插入、更新或者刪除表格項(xiàng),當(dāng)確認(rèn)操作后,這些修改將會(huì)被應(yīng)用到數(shù)據(jù)庫(kù)中。如果需要我們也可以為相關(guān)的游標(biāo)創(chuàng)建一個(gè)只讀的QDataTable。這時(shí),基于QSqlCursor的QDataTable類是只讀的,并不提供上下文菜單。</p><p>  圖 8 后臺(tái)管理程序</p><p>  在

107、后臺(tái)管理程序中提供兩個(gè)QDataTable表,其中一個(gè)表goodtable,顯示商品信息;另一個(gè)表areatable顯示區(qū)域信息。當(dāng)我選擇areatable中的區(qū)域選項(xiàng)時(shí),QDataTable類的currentChanged()信號(hào)將被觸發(fā),goodtable將調(diào)用setFilter()來(lái)刷新表格顯示所選區(qū)域中的商品信息,并且調(diào)用refresh()來(lái)強(qiáng)制表格使用相關(guān)數(shù)據(jù)重新組裝自己。</p><p>  為了管理

108、區(qū)域信息和顧客信息,我們提供了GoodForm和AreaForm兩個(gè)窗口類對(duì)區(qū)域和顧客信息進(jìn)行管理。兩個(gè)窗口類通過(guò)QButton類的clicked()信號(hào)觸發(fā)。在窗口類中同樣使用QDataTable來(lái)顯示信息。</p><p>  在程序中我們使用Qt/Embedded庫(kù)中的QSqlCursor類,這是一個(gè)繼承了QSqlQuery的高層類并且擴(kuò)展了一些很方便的函數(shù),這樣我們就可以避免直接敲入SQL語(yǔ)句來(lái)執(zhí)行最常用

109、的SQL操作:Select、Insert、Update和Delete。QSqlCursor還可以把QDataTable和數(shù)據(jù)庫(kù)綁定起來(lái)。</p><p><b>  總結(jié)</b></p><p>  本畢業(yè)設(shè)計(jì)是以現(xiàn)代化超市為背景,將RFID技術(shù)與嵌入式技術(shù)相結(jié)合的一個(gè)實(shí)踐,充分利用了博創(chuàng)開發(fā)板的資源和嵌入式系統(tǒng)的特點(diǎn)。實(shí)現(xiàn)了現(xiàn)代化超市電子購(gòu)物系統(tǒng)的實(shí)時(shí)商品查詢、方便

110、顧客購(gòu)物、縮短購(gòu)物時(shí)間、改善顧客購(gòu)物體驗(yàn)等一些重要的特征。在測(cè)試過(guò)程中,購(gòu)物終端能夠正確地識(shí)別商品和會(huì)員信息、維護(hù)購(gòu)物清單、提供商品詳細(xì)信息查詢,并與服務(wù)器共同實(shí)現(xiàn)了自動(dòng)結(jié)賬、數(shù)據(jù)庫(kù)維護(hù)等功能,達(dá)到了畢業(yè)設(shè)計(jì)的預(yù)期目標(biāo)</p><p>  我們?cè)谕瓿僧厴I(yè)設(shè)計(jì)的過(guò)程中,學(xué)習(xí)了Linux環(huán)境下的圖形界面編程,使用Qt/Embedded制作多窗口的系統(tǒng)平臺(tái),并在Qt類庫(kù)的支持下實(shí)現(xiàn)數(shù)據(jù)與系統(tǒng)數(shù)據(jù)庫(kù)之間的交互。我們建立系

111、統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)并實(shí)現(xiàn)了對(duì)數(shù)據(jù)信息的處理。在Qt工具包的支持下我們學(xué)習(xí)了基于CS模式網(wǎng)絡(luò)通信,實(shí)現(xiàn)了數(shù)據(jù)在客戶端和服務(wù)器間的有效傳輸。而且通過(guò)在博創(chuàng)開發(fā)板上的開發(fā)實(shí)踐,掌握了嵌入式環(huán)境下的交叉編譯和開發(fā)方式。</p><p>  由于系統(tǒng)硬件設(shè)備不能及時(shí)到位,我們?cè)跍y(cè)試系統(tǒng)的過(guò)程中采用在Linux下搭建Virtual framebuffer虛擬平臺(tái)來(lái)模擬軟件運(yùn)行,因此沒(méi)有通過(guò)讀卡模塊獲取所要信息是我們?cè)诋厴I(yè)設(shè)計(jì)過(guò)

112、程中比較遺憾的一點(diǎn)。</p><p><b>  致謝語(yǔ)</b></p><p>  在我們開發(fā)這個(gè)現(xiàn)代化超市電子購(gòu)物系統(tǒng)中,始終得到許多人的幫助,我首先要感謝的是我們的指導(dǎo)老師xx教授。xx老師給予了我們極大的幫助和支持,她在百忙之中為我們小組講解了這次項(xiàng)目的整體設(shè)計(jì)要求,每周抽出時(shí)間聽取我們項(xiàng)目進(jìn)展情況,并對(duì)系統(tǒng)的開發(fā)提出了自己的意見和項(xiàng)目改進(jìn)上的建議,讓我們?cè)陧?xiàng)

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論