freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

現(xiàn)代化超市電子購物系統(tǒng)畢業(yè)設(shè)計(jì)(編輯修改稿)

2025-07-27 12:36 本頁面
 

【文章內(nèi)容簡介】 卡方式,讀卡塊號。若命令校驗(yàn)出錯(cuò),送回33H。n 設(shè)置尋卡方式,清讀寫器狀態(tài)到上電時(shí)的狀態(tài)[命令]:A3H[參數(shù)]:無[功能]設(shè)置模塊尋卡方式,讀卡塊號,數(shù)據(jù)區(qū)密碼到上電時(shí)的狀態(tài), 數(shù)據(jù)區(qū)密碼在上電時(shí)為FF FF FF FF FF FF。模塊返回0成功標(biāo)志55H;若命令校驗(yàn)出錯(cuò),送回33H。若命令校驗(yàn)出錯(cuò),送回33H,n 設(shè)置尋卡方式、讀寫數(shù)據(jù)塊號數(shù)據(jù)區(qū)密碼[命令]:A4H[參數(shù)]:尋卡方式:0或1。讀寫數(shù)據(jù)塊號:063(S50)/0255(S70)。數(shù)據(jù)區(qū)密碼:6 Bytes。模塊返回0成功標(biāo)志55H;若命令校驗(yàn)出錯(cuò),送回33H。n 讀數(shù)據(jù)記錄[功能] 在讀卡器已經(jīng)讀好缺省塊號的數(shù)據(jù)后,上位機(jī)從讀卡器讀該數(shù)據(jù)記錄,并決定是否關(guān)卡。[命令]A7H[參數(shù)] 是否需要關(guān)卡標(biāo)志:0(不需要關(guān)卡)或者1(需要關(guān)卡)讀卡器送回:是否已經(jīng)下載過的標(biāo)志(該字節(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。n 讀指定數(shù)據(jù)塊[功能]從卡上讀取指定塊的數(shù)據(jù)。[命令]A8H[參數(shù)]所要讀塊號:063(S50)/0255(S70)。訪問的密碼: M1…M6驗(yàn)證密碼:0-密碼A,1-密碼B是否需要關(guān)卡的標(biāo)志:0(不需要關(guān)卡)或者1(需要關(guān)卡)讀卡器送回:4個(gè)字節(jié)(卡號)+16 字節(jié)數(shù)據(jù),如果讀卡器此時(shí)讀卡失敗,發(fā)送33h給主機(jī)。n 寫數(shù)據(jù)[功能]往卡上缺省指定塊寫數(shù)據(jù)。[命令]A9H[參數(shù)]所要寫入的卡號:4 字節(jié)所要寫入的數(shù)據(jù):16 字節(jié)是否需要關(guān)卡的標(biāo)志:0(不需要關(guān)卡)或者1(需要關(guān)卡)讀卡器送回:返回0成功標(biāo)志55H、當(dāng)前尋卡方式,如果讀卡器此時(shí)寫卡失敗,發(fā)送33hn 寫指定數(shù)據(jù)塊[功能]往卡上指定塊的寫數(shù)據(jù)。[命令]AAH[參數(shù)]所要寫卡的卡號:4 字節(jié)。所要寫入的塊號:063(S50)/0255(S70)。訪問該塊需要的密碼:6 字節(jié)驗(yàn)證密碼:0-密碼A,1-密碼B所要寫入的數(shù)據(jù):16 字節(jié)是否需要關(guān)卡的標(biāo)志:0(不需要關(guān)卡)或者1(需要關(guān)卡)讀卡器送回:返回0成功標(biāo)志55H、當(dāng)前尋卡方式,如果讀卡器此時(shí)寫卡失敗,發(fā)送33h給主機(jī)。n 關(guān)卡[功能]關(guān)掉的M1 卡片,這個(gè)命令不僅僅是關(guān)卡,還讓讀卡電路恢復(fù)到主動(dòng)尋卡狀態(tài)。[命令]ABH[參數(shù)]無讀卡器送回:返回0成功標(biāo)志55H、當(dāng)前尋卡方式,如果接收命令失敗,發(fā)送33h 給主機(jī)。n 查詢模塊狀態(tài)[功能]查詢模塊是否已經(jīng)下載過塊號和密碼,以及尋卡方式。[命令]ACH[參數(shù)]無讀卡器送回:返回0是否已經(jīng)下載過的標(biāo)志(該字節(jié)若為00,表示還沒下載,若為1,表示已經(jīng)下載)、已下載密碼塊號狀態(tài),當(dāng)前尋卡方式,如果接收命令失敗,發(fā)送33h 給主機(jī)。第4章 系統(tǒng)軟件設(shè)計(jì) 軟件總體設(shè)計(jì)系統(tǒng)的軟件是基于UPNETARM2410S(S3C2410芯片)和Linux操作系統(tǒng),通過模塊化的設(shè)計(jì),完成對商品信息、會員信息、位置信息的識別、查詢、管理、操作與顯示。軟件系統(tǒng)流程圖如圖 3所示。系統(tǒng)的圖形界面使用Linux平臺的Qt/Embedded Version ,采用Qt特有的信號和槽(Signals and Slot) 機(jī)制設(shè)計(jì)全新的圖形界面和應(yīng)用程序。各個(gè)圖形界面采用模擬“窗口?!钡男问焦芾恚瑢⑺薪缑嫱ㄟ^QWidget類reparent函數(shù)轉(zhuǎn)換為主窗口的子窗口,并限定所有子窗口都不擁有自我顯示的權(quán)限,而是在需要顯示的時(shí)候向主窗口發(fā)出信號申請顯示,由主窗口進(jìn)行統(tǒng)一調(diào)度。圖 3 系統(tǒng)流程圖該系統(tǒng)按照CS模式設(shè)計(jì)。在Client端用一個(gè)主窗口類來顯示所查詢的商品信息。顧客結(jié)賬和超市定位窗口在主窗口基礎(chǔ)上,通過QButton類的clicked()信號觸發(fā)。在客戶端通過讀卡模塊獲取非接觸式IC卡上的UID后,通過QSocket類來實(shí)現(xiàn)TCP客戶端和服務(wù)器端的連接。同時(shí)在server端獲取UID后,將根據(jù)UID在數(shù)據(jù)庫中查詢相關(guān)的信息。最后將所查詢信息封裝成數(shù)據(jù)塊向Client端返回。 應(yīng)用程序設(shè)計(jì) 網(wǎng)絡(luò)通信設(shè)計(jì)我們使用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è)平面文件。基于TCP的高層協(xié)議通常是基于行的或者基于塊的。n 基于行的協(xié)議把數(shù)據(jù)作為一行文本進(jìn)行傳輸,每一行都以一個(gè)換行符結(jié)尾。n 基于塊的協(xié)議把數(shù)據(jù)作為二進(jìn)制塊進(jìn)行傳輸。每一個(gè)塊都又是一個(gè)Size大小字段和緊跟它的一個(gè)Size字節(jié)的數(shù)據(jù)組成。QSocket繼承了QIODevice,所以它可以通過使用QDataStream或者QTextStream來進(jìn)行讀取和寫入。當(dāng)我們從網(wǎng)絡(luò)中讀取數(shù)據(jù)和從文件中讀取數(shù)據(jù)時(shí),有一個(gè)需要注意的不同是,我們在使用這個(gè)操作符之前必須確認(rèn)我們已經(jīng)從另一段接受了足夠多的數(shù)據(jù)。以系統(tǒng)軟件中商品信息模塊為例。在系統(tǒng)中我們?yōu)樯唐沸畔⒛K設(shè)計(jì)了兩個(gè)類:MarketClient和ClientSocket。其中MarketClient是移動(dòng)終端中商品信息的窗口類,我們在這個(gè)窗口類上實(shí)現(xiàn)了通過QSocket與服務(wù)器間的通信。同時(shí)我們將設(shè)置一個(gè)blockSize變量來解析從服務(wù)器接受的塊數(shù)據(jù)。這一流程分為以下幾個(gè)步驟:當(dāng)MarketClient通過讀卡模塊讀取非接觸式IC卡中的商品UID信息信號時(shí),MarketClient類中的connectionServer()槽被執(zhí)行。我們在QSocket對象上調(diào)用connectionToHost()連接到服務(wù)器。connectionToHost()調(diào)用是異步的,總是立即返回的。連接通常會在稍后被建立。當(dāng)連接被建立起來并且運(yùn)行的時(shí)候,QSocket對象發(fā)射connected()信號,或者如果連接失敗,發(fā)射error(int)(帶有一個(gè)錯(cuò)誤號)信號。最后我們設(shè)置blockSize變量為0。blockSize變量存儲從服務(wù)器接受的下一個(gè)塊的長度。這里設(shè)置為0,說明我們不知道下一個(gè)塊的大小。當(dāng)QSocket對象發(fā)射connection()信號時(shí),表示一個(gè)連接已經(jīng)建立。sendRequest()槽將被執(zhí)行。這個(gè)槽的任務(wù)是生成一個(gè)到服務(wù)器的請求,其中包括通過讀卡模塊獲的商品UID信息。請求格式如[表 2]所示。表 2 sendRequest()請求的數(shù)據(jù)格式Q_UINT16塊大小的字節(jié)數(shù)(包括這個(gè)字段)Q_UINT8請求類型QString商品UID(轉(zhuǎn)換為QString型)我們最初寫入0作為塊的大小,然后一次寫入其他數(shù)據(jù)。然后在輸入輸出設(shè)備上(后臺是由一個(gè)QDataStream創(chuàng)建的QBuffer)調(diào)用at(0)重新移動(dòng)道字節(jié)數(shù)組的開始處,并且使用塊的數(shù)據(jù)大小覆蓋最初的0。這個(gè)大小是通過塊的大小減去sizeof(Q_UINT16)得到的,也就是去掉最前面塊大小那個(gè)字段所占用的空間。在這之后,我們在QSocket上調(diào)用writeBlock()向服務(wù)器發(fā)送這個(gè)塊。發(fā)送請求到服務(wù)器端后,MarketClient類還將負(fù)責(zé)接受從服務(wù)器端傳輸?shù)臄?shù)據(jù)。這時(shí)MarketClient中的updataListView()槽被連接到QSocket的readyRead()信號,只要QSocket以及從服務(wù)器收到新數(shù)據(jù),該信號就會被發(fā)射。如果blockSize變量為0,這也就是說還沒有讀取到下一個(gè)塊的大小。我們嘗試去讀取它。服務(wù)器使用一個(gè)大小為0xFFFF來表示沒有跟多的數(shù)據(jù)可以接收,所以如果讀取到該值,就知道已經(jīng)達(dá)到結(jié)尾。如果塊的大小不是0xFFFF,我們嘗試去讀取下一個(gè)塊。首先,檢查看看是不是有塊的大小這么多字節(jié)可以讀取。如果沒有,這次就在這里停止。當(dāng)有更多數(shù)據(jù)可以讀取的時(shí)候,readyRead()信號將會被再次發(fā)射,并且我們將可以再次嘗試。一旦我們確認(rèn)一個(gè)完整的塊已經(jīng)到達(dá),則可以在QDataStream上安全地使用操作符。通過設(shè)置QDataStream在QSocket上提取有關(guān)的商品信息。從服務(wù)器端上接收的塊具有如[表 3]所示:表 3 接收的塊的數(shù)據(jù)格式Q_UINT16塊的大小的字節(jié)數(shù)(包括這個(gè)字段)QString商品UIDQString商品名稱QString商品信息QString商品價(jià)格QString商品所在區(qū)域最后我們重置blockSize變量為0來表示下一個(gè)塊的大小是未知的并且需要去讀取。上面簡要介紹了移動(dòng)購物終端中所實(shí)現(xiàn)的Client部分,下面將主要介紹系統(tǒng)的服務(wù)器。商品信息模塊的服務(wù)器包含兩個(gè)類:MarketServer類和ClientSocket類。MarketServer類繼承了QServerSocket,這是一個(gè)允許接收來訪TCP連接類。ClientSocket重新實(shí)現(xiàn)了QSocket并且處理一個(gè)單獨(dú)的連接。在這個(gè)設(shè)計(jì)中我們在ClientSocket類中實(shí)現(xiàn)了QSocket,而且可以處理多個(gè)連接,通過對請求類型的設(shè)置,我們在ClientSocket類中可以處理商品、顧客和定位信息的連接請求。MarketServer類重新實(shí)現(xiàn)了QServerSocket中的newConnection() 函數(shù)。只要一個(gè)客戶端試圖連接到服務(wù)器,這個(gè)函數(shù)就會被調(diào)用。在newConnection()的構(gòu)造函數(shù)中,我們可以傳遞端口號給基類的構(gòu)造函數(shù),同時(shí)創(chuàng)建一個(gè)ClientSocket對象作為MarketServer對象的孩子,并且我們設(shè)置它的套接字ID為提供給我們的數(shù)字。ClientSocket類繼承了QSocket并且封裝了一個(gè)客戶端的狀態(tài)。在構(gòu)造函數(shù)中,我們建立了需要的信號和槽的連接,并且設(shè)置blockSize變量為0,表示還不知道由客戶端發(fā)送的塊的大小。其中connectionClosed()和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)讀取到它了,并且檢查看看是否一個(gè)完整的塊已經(jīng)到達(dá)。一旦一個(gè)完整的塊已經(jīng)為讀取做好準(zhǔn)備,我們就讀取它。我們直接在QSocket對象上使用QDataStream并且使用操作符來讀取各個(gè)字段。一旦讀取完客戶端的請求后,我們準(zhǔn)備好一個(gè)回復(fù)。在這個(gè)畢業(yè)設(shè)計(jì)中我們實(shí)現(xiàn)了幾個(gè)函數(shù)從數(shù)據(jù)庫中獲得所要的數(shù)據(jù)。這些函數(shù)同客戶端程序中的sendRequest()函數(shù)十分類似。再一次,我們把這個(gè)塊寫入QByteArrey,這樣就可以使用writeBlock()發(fā)送數(shù)據(jù)之前知道它的大小。最后發(fā)送0xFFFF表示數(shù)據(jù)的結(jié)束。 表格顯示設(shè)計(jì)在主窗口中使用QListView類來顯示所要查詢的商品信息[圖 4]。在QListView中每一個(gè)非空的單元格都被作為一個(gè)獨(dú)立的QListViewItem對象保存到內(nèi)存中。
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1