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

正文內容

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

2025-07-27 12:36 本頁面
 

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