2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

3、自動識別領(lǐng)域目前最熱門的技術(shù)。它在物料跟蹤、運(yùn)載工具和貨架識別等要求非接觸數(shù)據(jù)采集和交換和頻繁改變數(shù)據(jù)內(nèi)容的場合很有發(fā)展?jié)摿εc發(fā)展前景,它區(qū)別于條形碼等其它識別技術(shù)的特性與優(yōu)勢能夠滿足目前庫存管理的需要。所以,研究基于RFID技術(shù)的庫存管理適應(yīng)了目前社會的需求。</p><p>  關(guān)鍵字:電子購物,嵌入式系統(tǒng),射頻識別,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)和說明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、讀卡模塊的工作過程9</p><p>  3.2.2單片機(jī)程序的工作過程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ù)庫模塊設(shè)計(jì)19</p><p>  4.2.4自動結(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ù)庫設(shè)計(jì)22</p><p>  5.2后臺管理22</p><p><b>  第6章總結(jié)24</b></p><p><b>  致謝語25</b></p><p><b>  參考文獻(xiàn)26</b></p>&

14、lt;p>  附錄一:Qt/Embedded平臺搭建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>  在我國超市形成在20世紀(jì)90年代初期,現(xiàn)在已經(jīng)成為我國零售業(yè)的一種重要形態(tài),為國民經(jīng)濟(jì)的發(fā)展發(fā)揮了

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

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

24、工的工作條件,減輕了勞動強(qiáng)度,并且能夠快速反映出商品的進(jìn)、銷、存等狀況和各種反饋信息分析,使管理人員快速對市場的變化做出相應(yīng)的決策,加快超市經(jī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、在市場競爭中越發(fā)顯示出其獨(dú)特的優(yōu)勢,步入信息化時(shí)代,有巨大的數(shù)據(jù)信息等待加工處理和傳輸,這使得對數(shù)據(jù)庫的進(jìn)一步開發(fā)和利用顯得尤為迫切。作為國內(nèi)市場的一些中小型超市,它們在信息化過程中的步伐要落后于大中型超市,而對于這些企業(yè)的資源管理,信息的存儲和處理也顯得迫切需要,要適應(yīng)市場競爭,就需要有高效的處理方式和管理方法,因此加快超市的信息化進(jìn)程是必可少的。</p><p>  本畢業(yè)設(shè)計(jì)以現(xiàn)代化超市為背景,為方便顧客購

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

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

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

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

30、超市管理者可以實(shí)時(shí)的查看商品信息、進(jìn)行會員管理。</p><p><b>  文章結(jié)構(gòu)和說明</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),簡要介紹了系統(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ù)庫模塊設(shè)計(jì)以及讀卡模塊在軟件部分中的應(yīng)用。</p><p>

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

33、作系統(tǒng),通過Web網(wǎng)絡(luò)技術(shù)連接。移動購物終端以博創(chuàng)科技UP-NETARM2410-S(S3C2410芯片)為核心,外接WM-15T讀寫模塊。將移動購物終端安裝在超市的購物小車上,實(shí)現(xiàn)在超市中的移動購物。服務(wù)器端由PC機(jī)組成,通過設(shè)計(jì)服務(wù)程序,為終端提供數(shù)據(jù)庫服務(wù)、自動結(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過于龐大和臃腫,極耗系統(tǒng)資源,而且其中不少功能對于嵌入式系統(tǒng)來說是多余的,不適于資源有限的嵌入式系統(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ù)資源較多,因此對GUI的篩選顯得很重要。由于嵌入式GUI需要高性能、輕量級的GUI系統(tǒng),在這里我們選用Qt/Embedded進(jìn)行軟件圖形界面的設(shè)計(jì),并采用Qt中的QSocket類進(jìn)行網(wǎng)絡(luò)通訊部分的編程。</p><p>  Qt/Embedded是著名的QT庫開發(fā)商TrollTech正在進(jìn)行的基于framebuffer的面向嵌入式系統(tǒng)的Qt 版本。由于KDE等項(xiàng)目使用Qt作為支持庫,所以

36、由許多基于Qt的X-Windows程序可以非常方便地移植到Qt/Embedded版本上。因其面向?qū)ο?、跨平臺和界面設(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可以啟動一個(gè)包含很多Qt組件的可視化界面。在此組織應(yīng)用程序的各組件分布很方便,最后可以生產(chǎn)一個(gè).ui和main.cpp文件;.ui是用XML語言寫的一個(gè)文本。如果熟悉QT程序設(shè)計(jì)可以拋棄Qt Designer,手動編寫圖形界面;</

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

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

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

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

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

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

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

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

46、m(與卡片及天線設(shè)計(jì)有關(guān)) 。該非接觸型IC卡上設(shè)有射頻信號接收器或紅外線收發(fā)器,在一定距離內(nèi)即可收發(fā)讀寫器的信號,實(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ú)立的一組密碼及訪問控制。每張卡有唯一序列號,為32 位。</p><p><b>  存儲結(jié)構(gòu)</b></p><p

48、>  M1卡分為16個(gè)扇區(qū),每個(gè)扇區(qū)由4塊(塊0、塊1、塊2、塊3)組成,(我們也將16個(gè)扇區(qū)的64個(gè)塊按絕對地址編號為0~63),存貯結(jié)構(gòu)如表 1所示:</p><p><b>  表 1 存儲結(jié)構(gòu)</b></p><p>  第0 扇區(qū)的塊0(即絕對地址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>  平臺:博創(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ū)動及接收功能,可以簡單實(shí)現(xiàn)對MifareOne 等卡片的讀寫操作,讀寫距離最大可達(dá)100mm(與卡片及天線設(shè)計(jì)有關(guān))。該模塊提供標(biāo)準(zhǔn)異步串行通訊接口,輸出TTL 電平。用戶可不必了解非接觸IC卡

52、讀寫模塊的協(xié)議標(biāo)準(zhǔn)及底層驅(qū)動,只需通過串行通訊發(fā)送相關(guān)指令,即可實(shí)現(xiàn)對卡片的所有操作。該模塊適用于標(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>  讀卡模塊的工作過程</b></p>

53、<p>  可以給讀卡模塊事先設(shè)定了一個(gè)塊(缺省是塊2),當(dāng)卡片靠近時(shí),讀卡模塊主動驗(yàn)證這個(gè)區(qū)及讀出這個(gè)塊的數(shù)據(jù),并向單片機(jī)發(fā)出中斷信號,等待單片機(jī)來取,當(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ī)程序的工作過程</p><p>  單片機(jī)向模塊連接的232 口發(fā)送命令來控制模塊的讀寫操作,當(dāng)模塊讀到

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

56、記錄得到卡號。在每一個(gè)命令執(zhí)行后在執(zhí)行下一個(gè)命令前應(yīng)有不少于10ms 的延時(shí)。</p><p><b>  通訊指令協(xié)議</b></p><p><b>  接口規(guī)格:</b></p><p>  使用單片機(jī)對讀寫模塊進(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è)停止位,無奇偶校驗(yàn)</p><p><b>  通訊協(xié)議格式:</b></p><p>  ------------------------------------------

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

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

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

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

62、;p><b>  [參數(shù)]:無</b></p><p>  [功能]設(shè)置模塊尋卡方式,讀卡塊號,數(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ù)塊號數(shù)據(jù)區(qū)密碼</p><p>

63、;<b>  [命令]:A4H</b></p><p>  [參數(shù)]:尋卡方式:0或1;</p><p>  讀寫數(shù)據(jù)塊號: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)讀好缺省塊號的數(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)下載過的標(biāo)志

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

66、數(shù)據(jù)。</p><p><b>  [命令]A8H</b></p><p>  [參數(shù)]所要讀塊號:0-63(S50)/0-255(S70);</p><p>  訪問的密碼: 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é)(卡號)+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ù)]所要寫入的卡號: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ù)]所要寫卡的卡號:4 字節(jié)。</p><p>  所要寫入的塊號:0-63(S50)/0-255(S70)。</p><p>  訪問該塊需要的密碼

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ù)到主動尋卡狀態(tài)。</p><p><b>  [命令]ABH</b></p><p><b>  [參數(shù)]無</b></p><p>  讀卡器送回:返回01、成功標(biāo)

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

73、/b></p><p>  讀卡器送回:返回01、是否已經(jīng)下載過的標(biāo)志(該字節(jié)若為00,表示還沒下載,若為1,表示已經(jīng)下載)、已下載密碼塊號狀態(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),通過模塊化的設(shè)計(jì),完成對商品信息、會員信息、位置信息的識別、查詢、管理、操作與顯示。軟件系統(tǒng)流程圖如圖 3所示。系統(tǒng)的圖形界面使用Linux平臺的Qt/Embedded Version 3.3.4開發(fā),采用Qt特有的信號和槽(Signals and Slot) 機(jī)制設(shè)計(jì)全新的圖形界面和應(yīng)用程序。各個(gè)圖形界面采用模擬“窗口棧

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

76、口在主窗口基礎(chǔ)上,通過QButton類的clicked()信號觸發(fā)。在客戶端通過讀卡模塊獲取非接觸式IC卡上的UID后,通過QSocket類來實(shí)現(xiàn)TCP客戶端和服務(wù)器端的連接。同時(shí)在server端獲取UID后,將根據(jù)UID在數(shù)據(jù)庫中查詢相關(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類來實(shí)現(xiàn)TCP客戶端和服務(wù)器。TCP是一個(gè)傳輸協(xié)議,他成為包括FTP和HTTP的很多應(yīng)用程序?qū)拥幕ヂ?lián)網(wǎng)協(xié)議基礎(chǔ),也可以用于自定義協(xié)議。TCP是一個(gè)基于流的協(xié)議。對于應(yīng)用程序,數(shù)據(jù)表現(xiàn)為一個(gè)長長的流,而不是一個(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,所以它可以通過使用QDataStream或者QTextStream來進(jìn)行讀取和寫入。當(dāng)我們從網(wǎng)絡(luò)中讀取數(shù)據(jù)和從文件中讀取數(shù)據(jù)時(shí),有一個(gè)需要注意

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

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

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

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

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

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

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

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

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

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

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

90、看看是否一個(gè)完整的塊已經(jīng)到達(dá)。一旦一個(gè)完整的塊已經(jīng)為讀取做好準(zhǔn)備,我們就讀取它。我們直接在QSocket對象上使用QDataStream并且使用>>操作符來讀取各個(gè)字段。</p><p>  一旦讀取完客戶端的請求后,我們準(zhǔn)備好一個(gè)回復(fù)。在這個(gè)畢業(yè)設(shè)計(jì)中我們實(shí)現(xiàn)了幾個(gè)函數(shù)從數(shù)據(jù)庫中獲得所要的數(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類來顯示所要查詢的商品信息[圖 4]。在QListView中每一個(gè)非空的單元格都被作為一個(gè)獨(dú)立的QListViewItem對象保存到內(nèi)存中。這種項(xiàng)類可以在外面被當(dāng)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

109、的SQL操作:Select、Insert、Update和Delete。QSqlCursor還可以把QDataTable和數(shù)據(jù)庫綁定起來。</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)代化超市電子購物系統(tǒng)的實(shí)時(shí)商品查詢、方便

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

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

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

溫馨提示

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

評論

0/150

提交評論