




免费预览已结束,剩余59页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
厦门大学软件学院毕业论文 - 1 - 现代化超市电子购物系统中顾客自动结账的实现现代化超市电子购物系统中顾客自动结账的实现 摘要摘要 当代超市自由,公开的经营方式在适应了人们新的消费需求同时也带来了很多诸如查询 商品不方便,排长队等候结账时间长,人力成本高,超市内定位困难等急需解决的问题。而 近年来逐渐成熟的 RFID 射频识别技术却为商家提供了一种取代传统超市中条码识别技术, 改良传统超市管理模式的可选方案。 本文以现代化超市为背景,使用嵌入式 Linux 操作系统和 Qt/Embedded 图形界面,采用 目前流行的 RFID 射频识别技术,嵌入式系统,TCP 网络编程,Qt 图形编程,数据库等技术。 实现了现代化超市电子购物系统中顾客自动结账的功能,旨在解决目前超市中存在的排长队 结账,顾客管理困难,服务和信息滞后等问题。 本系统由移动购物终端(UP-NETARM2410-S)和服务器两大部分组成,通过在移动终端上 安装射频识别模块来进行对商品的自动识别,通过连接局域网的方式实现系统两大部分之间 的数据传输。移动购物终端具有良好的图形用户界面,在实现商品自动识别的基础上,能够 实现顾客购物清单管理,会员身份识别和余额查询,会员和非会员的自动结账等功能,而服 务器端则能够处理简单的后台数据库管理。本毕业设计较好地解决了超市中顾客管理和结账 的问题,从而将理论与实现联系了起来。 关键词:关键词:电子购物 嵌入式系统 射频识别 自动结账; 厦门大学软件学院毕业论文 - 2 - The realization of auto-checkout in modern electronic supermarket Abstract While nowadays free and open supermarkets management fits the new shopping requirements, it also takes many disadvantages which need to be approved in fast, including the inconvenient searching for merchandise, the long queue for check out, the high expensive human resource, the difficult locating in supermarket and so on. But RFID (Radio Frequency Identification) which is becoming mature these year, gives a solution for merchants taking the position of bar code, which can improve the management of traditional supermarket. This content is based on modern supermarket, consists of the embedded Linux Operating System and Qt/Embedded graphic interface, using pop RFID(Radio Frequency Identification), Embedded System, TCP network programming, Qt graphic programming, Database and so on. It can serve the electronic modern supermarkets function, such as the auto-checkout for customers. It aims at the problem, such as the long queue for checkout, difficult management of customer, the lag of service and information and so on. The System consists of the shopping terminal and the server, with the installation of RFID, can identify the product automatic, using LAN for the data transformation for two parts. The shopping terminal includes fine graphic user interface with auto identification of products, can manage the shopping lists, identification of customer and checking balance, the auto-checkout and so on. The server can make the management of database. This Design server the problem of customers management and checkout in supermarket well. It puts the theory and practice together. Key Words: electronic shopping Embedded System RFID auto-checkout 厦门大学软件学院毕业论文 - 3 - 目录目录 第一章 绪论.5 11 论文的研究背景 5 12 论文的主要内容 6 13 论文的组织结构 7 第二章 嵌入式系统与嵌入式图形用户界面.8 2.1 嵌入式系统与嵌入式 LINUX.8 2.1.2 嵌入式 Linux 简介 .8 2.1.3 在嵌入式系统中使用 Linux 的优点和缺点 9 2.2 嵌入式开发平台简介 10 2.2.1 博创 UP-NetARM2410-S 简介 10 2.2.2 基于 UP-NETARM2410-S 的嵌入式 Linux 开发流程 14 2.3 嵌入式图形用户界面(GUI)简介 .15 2.3.1 几种主流嵌入式图形用户界面(GUI)研究与比较 .15 2.3.2 QT 和 QTE 16 第三章 RFID 射频识别技术19 3.1 RFID 技术简介 .19 第四章 现代化超市电子购物系统中的客户自动结账功能.22 4.1 系统总体功能设计 22 4.2 系统数据库设计 23 4.3 博创射频模块 WM-15T 硬件设计 .24 4.3.1 WM-15T 读写模块原理24 4.3.2 232 通讯指令协议.30 4.3.3 读卡模块的工作过程.30 4.4 自动结账子系统设计 32 4.4.1 QT 中信号和槽的机制833 4.4.2 用户自动结账的客户端详细设计 34 4.4.3 用户自动结账的服务器端详细设计.41 4. 5 自动结账后台管理的实现 .42 第五章 结论.44 致谢语45 参考文献46 附录47 厦门大学软件学院毕业论文 - 4 - Content CHAPTER 1 INTRODUCION5 1.1 RESEARCH BACKGROUND5 1.2 MAIN CONTENT6 1.3 ORGANIZING STRUCTRUE.7 CHAPTER 2 EMBEDDED SYSTEM AND EMBEDDED GUI8 2.1 EMBEDDED SYSTEM AND EMBEDDED LINUX8 2.1.2 Introduction of Embedded Linux .8 2.1.3 Good and weak point of Using Embedded Linux9 2.2 EMBEDDED SYSTEM EMPOLDER FLAT.10 2.2.1 BoChuang UP-NetARM2410-S.10 2.2.2 Flow of UP-NETARM2410-S Embedded Empolder14 2.3 EMBEDDED GUI.15 2.3.1 Compare between several pop Embedded GUI .15 2.3.2 QT中间层提供底层硬件的抽象接口,并进行窗口管理;最高层分别提供兼容于X Window和Windows CE (Win32子集)的API.该项目的主要特色在于提供了类似X的客户/服务器 体系结构,并提供了相对完善的图形功能,包括一些高级的功能,比如Alpha混合,三维支 持,TrueType字体支持等。但需要注意的是,MicroWindows的图形引擎存在许多问题,首先, MicroWindows无任何硬件加速能力:其次,图形引擎中存在许多示经任何优化的低效算法;第 三,MicroWindows代码质量较差。 MiniGUI Mini GUI 是一种面向嵌入式系统或者实时系统的图形用户界面支持系统。它主要运行 于Linux控制台,实际可以运行在任何一种具有POSIX线程支持的POSIX兼容系统上,对中文 的支持非常良好。MiniGU工同时也是国内最早出现的几个自由软件项目之一。Mini GUI 的 主要特色有:提供了完备的多窗口机制和消息传递机制;提供常的控件类;支持对话框和消息 框及其它GUI元素,如菜单、定时器等;通过两种不同的内部软件结构支持低端显示设备和高 端显示设备:支持Windows的资源文件:支持各种流行图像文件:支持多字符集和多字体,如 GB2312, BIG5等,其他字符集也可轻松加入;支持多种汉字输入法,如全拼、五笔等:针对嵌 入式系统的特殊的支持,包括一般性的工/0流操作,字节序相关函数等等。 Qt/Embedded Qt/Embedded是著名的QT库开放商Trolletch正在进行的面向嵌入式系统的QT版本。Qt采 用C+的语言编写,具有极好的跨平台特性。使用Qt编写的软件可以在MicrosoftWindows 95/98/2000, Microsoft Windows NT, MacOS X, Linux, Solaris, HP-UX, Tru64(Digital UNIX), Irix, FreeBSD, BSD/OS, SCO and AIX造些平台软行。而且Qt是KDE等项目使用的 GUI支持库,许多基于Qt的X Window程序可以非常方便地移植到Qt/Embedded版本上。因此. 自从Qt/Embedded以GP工条款形式发布以来。就有大量的嵌入式Linux开发商转到了 Qt/Embedded系统上。比如韩国的Mizi公司,台湾省的某些嵌入式linux应用开发商等。 Qt/ Embedded直接取代掉XServer及XLibrary,所有功能全部整合在一起,加快了 厦门大学软件学院毕业论文 - 17 - Qt/Embedded的运行速度。Qt/Embedded的尺寸最小可以裁剪到63OKb左右,最多可以扩充到 3Mb(for Intel x86),这样的弹性让Qt/Embedded更适合嵌入式环境。 2.3.2 QT 和 QTE Qt 是一个多平台的 C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术 级的图形用户界面所需的所用功能。Qt 是完全面向对象的很容易扩展,并且允许真正地组 件编程。 Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西,但是 Qt 具有下列优点: 优良的跨平台特性: Qt 支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等。 面向对象 Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说 是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使 得各个元件 之间的协同工作变得十分简单。 丰富的 API Qt 包括多达 250 个以上的 C+ 类,还替供基于模板的 collections, serialization, file, I/O device, directory management, date/time 类。甚至还 包括正则表达式的处理 功能。 支持 2D/3D 图形渲染,支持 OpenGL 大量的开发文档 XML 支持 Qt 是用于本地化跨平台应用开发的领先性框架。Qt 应用程序接口与工具兼容于所有支 持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置。通 过使用 Qt,开发小组们从主要的开发平台,可为主要操作系统创建本地化的应用程序。 Qt 对不同平台(Unix, Windows, and Mac)的专门 API 进行了封装,如文件处理、网络 (操作,协议) ,进程处理、线程、数据库访问等。 如图 2-4 厦门大学软件学院毕业论文 - 18 - 图 2-4 Qt 适用的不同平台 Qt 应用程序本地化运行 类似于本地化应用程序 在所有主要平台上,从单一源 代码中汇编而使用 Qt 进行精确的平台非相关运行编程后可在任何地方配置。确立新的平 台,仅需重新汇编一个单一源代码库而已。因此 Qt 开发人员仅需要学会一种 API 来写入应 用程序,该程序可在任何地方运行。统一的跨平台 API 让程序员们集中精力致力于可增值 的技术革新,而无须担心维护和管理现有应用程序多版本的基础结构与界面。Qt 已由成千 上成商业与开放源应用程序开发员,在多个操作系统与编译器上进行了战术测试,奠定了高 性能与资源性应用程序的基础。Qt 无须“虚拟器” ,模拟层或大容量的运行时间环境。它如 本地化的应用程序一样,直接写入低级的图形函数,因而 Qt 程序能以源代码速度执行。当 前,已有超过 4000 家公司正积极使用 Qt 开发众多的世界领先的商业应用程序。 Qt/Embedded 是著名的 Qt 库开发商 Trolltech 公司开发的面向嵌入式系统的 Qt 版本, 开发人员多为 KDE 项目的核心开发人员。许多基于 Qt 的 X Window 程序可以非常方便地移植 到 Qt/Embedded 上,与 X11 版本的 Qt 在最大程度上接口兼容,延续了在 X 上的强大功能, 在底层彻底摒弃了 X lib,仅采用 framebuffer 作为底层图形接口。Qt/Embedded 类库完全 采用 C+封装。丰富的控件资源和较好的可移植性是 Qt/Embedded 最为优秀的一方面,使用 X 下的开发工具 Qt Designer 可以直接开发基于 Qt/Embedded 的 UI(用户操作接口)界面。 越来越多的第三方软件公司也开始采用 Qt/Embedded 开发嵌入式 Linux 下的应用软件。其中 非常著名的 Qt Palmtop Environment(Qtopia)早期是一个第三方的开源项目,并已经成 功应用于多款高档 PDA。Trolltech 公司针对 Smart-Phone 中的应用需求,于 2004 年 5 月底 发布了 Qtopia 的 Phone 版本。 横向来看,由于发布的版权问题,Qt/Embedded 采用两种方式进行发布:在 GPL 协议下发布 的 free 版与专门针对商业应用的 commercial 版本。二者除了发布方式外,在源码上没有任 何区别。纵向看来,当前主流的版本为 Qtopia 的 2.x 系列与最新的 3.0x 系列。其中 2.0 版 厦门大学软件学院毕业论文 - 19 - 本系统较多地应用于采用 Qtopia 作为高档 PDA 主界面的应用中;3.x 版本系列则应用于功 能相对单一,但需要高级 GUI 图形支持的场合,如 Volvo 公司的远程公交信息系统。图 1 为 Qt/Embedded 的实现结构。 3.x 版本系列的 Qt/Embedded 相对于 2.x 版本系统增加了许多新的模块,如 SQL 数据库 查询模块等。几乎所有 2.x 版本中原有的类库,在 3.x 版本中都得到极大程度的增强。这就 极大地缩短了应用软件的开发时间,扩大了 Qt/Embedded 的应用范围。 在代码设计上,Qt/Embedded 巧妙地利用了 C+独有的机制,如继承、多态、模板等, 具体实现非常灵活。但其底层代码由于追求与多种系统、多种硬件的兼容,代码补丁较多, 风格稍显混乱。 第三章 RFID 射频识别技术 3.1 RFID 技术简介 520 世纪 80 年代,由于大规模集成电路技术的成熟,射频识别系统的体积大大缩小, 使得射频识别技术进入实用化的阶段,成为一种成熟的自动识别技术。 射频识别技术是利用射频方式进行非接触双向通信,以达到识别目的并交换数据。它与 同期或早期的接触式识别技术不同。RFID 系统的射频卡和读写器之间不用接触就可完成识 别,因此它可在更广泛的场合中应用。 典型的射频识别系统包括射频卡和读写器两部分。 射频卡是将几个主要模块集成到一块芯片中,完成与读写器的通信。芯片上有 EEPROM 用来储存识别码或其它数据。EEPROM 容量从几比特到几万比特。 芯片外围仅需连接天线 (和电池),可以作为人员的身份识别卡或货物的标识卡。卡封装可以有不同形式,比如常见 的信用卡及小圆片的形式等。与条码、磁卡、IC 卡等同期或早期的识别技术相比,射频卡 具有非接触、工作距离长、适于恶劣环境、可识别运动目标等优点。 最基本的 RFID 系统由三部分组成: 厦门大学软件学院毕业论文 - 20 - 1. 标签(Tag,即射频卡):由耦合元件及芯片组成,标签含有内置天线,用于和射频天线间 进行通信。 2. 阅读器:读取(在读写卡中还可以写入)标签信息的设备。 3. 天线:在标签和读取器间传递射频信号。 有些系统还通过阅读器的 RS232 或 RS485 接口与外部计算机(上位机主系统)连接,进行 数据交换。 系统的基本工作流程是:阅读器通过发射天线发送一定频率的射频信号,当射频卡进入 发射天线工作区域时产生感应电流,射频卡获得能量被激活;射频卡将自身编码等信息通过 卡内置发送天线发送出去;系统接收天线接收到从射频卡发送来的载波信号,经天线调节器 传送到阅读器,阅读器对接收的信号进行解调和解码然后送到后台主系统进行相关处理;主 系统根据逻辑运算判断该卡的合法性,针对不同的设定做出相应的处理和控制,发出指令信 号控制执行机构动作。 按照不同的方式,射频卡有以下几种分类: 1. 按供电方式分为有源卡和无源卡。有源是指卡内有电池提供电源,其作用距离较远,但 寿命有限、体积较大、成本高,且不适合在恶劣环境下工作;无源卡内无电池,它利用波束 供电技术将接收到的射频能量转化为直流电源为卡内电路供电,其作用距离相对有源卡短, 但寿命长且对工作环境要求不高。 2. 按载波频率分为低频射频卡、中频射频卡和高频射频卡。低频射频卡主要有 125kHz 和 134.2kHz 两种,中频射频卡频率主要为 13.56MHz,高频射频卡主要为 433MHz、915MHz、2.45GHz、5.8GHz 等。低频系统主要用于短距离、低成本的应用中,如多 数的门禁控制、校园卡、动物监管、货物跟踪等。中频系统用于门禁控制和需传送大量数据 的应用系统;高频系统应用于需要较长的读写距离和高读写速度的场合,其天线波束方向较 窄且价格较高,在火车监控、高速公路收费等系统中应用。 3. 按调制方式的不同可分为主动式和被动式。主动式射频卡用自身的射频能量主动地发送 数据给读写器;被动式射频卡使用调制散射方式发射数据,它必须利用读写器的载波来调制 自己的信号,该类技术适合用在门禁或交通应用中,因为读写器可以确保只激活一定范围之 内的射频卡。在有障碍物的情况下,用调制散射方式,读写器的能量必须来去穿过障碍物两 次。而主动方式的射频卡发射的信号仅穿过障碍物一次,因此主动方式工作的射频卡主要用 于有障碍物的应用中,距离更远(可达 30 米)。 厦门大学软件学院毕业论文 - 21 - 4. 按作用距离可分为密耦合卡(作用距离小于 1 厘米)、近耦合卡(作用距离小于 15 厘米)、 疏耦合卡(作用距离约 1 米)和远距离卡(作用距离从 1 米到 10 米,甚至更远)。 5. 按芯片分为只读卡、读写卡和 CPU 卡。 RFID 与其他自动识别技术的比较如表 3-1 信息载 体 信息 量 读/写性读取方 式 保密 性 抗干扰 性 寿命成本 条码纸,塑 料薄膜, 金属表 面 小只读CCD 或 激光束 扫描 差差较短很低 磁卡磁性物 质 一 般 读写电磁转 换 一般较差短低 IC 卡 EEPROM 大读写电擦除 写入 很好好长较高 RFID 卡 EEPROM 大读写无线通 信 很好很好很长较高 表 3-1 RFID 与其他自动识别技术的比较 作为一种全新的自动数据采集技术,RFID 具备下列优点:RFID 标签无需像条码标签那 样瞄准读取,只要被置于读取设备形成的电磁场内就可以准确读到,更加适合与各种自动化 的处理设备配合使用,同时减少甚至排除因人工干预数据采集而带来的人力资源、效率降低 和产生差错以及纠错的成本;RFID 每秒钟可进行上千次的读取,能同时处理许多标签,高 效且高度准确,从而使企业能够在既不降低(甚至提高)作业效率,又不增加(甚至减少) 管理成本的前提下,大幅度提高管理精细度,让整个作业过程实时透明,创造巨大的经济效 益;RFID 标签上的数据可反复修改,既可以用来传递一些关键数据,也使得 RFID 标签能够 在企业内部进行循环重复使用,将一 次性成本转化为长期摊销的成本,在进一步节约企业 运行成本的同时,降低企业采用 RFID 技术的风险成本。 厦门大学软件学院毕业论文 - 22 - 第四章 现代化超市电子购物系统中的客户自动结账功能 4.1 系统总体功能设计 系统采用博创射频模块的 IC 卡“电子标签”作为商品,会员和位置的信息载体。移动购 物终端获得由 RFID 读卡模块读取的 UID,通过局域网查询数据库信息后进行相应的处理。 将电子标签放在每个商品和会员卡中,移动购物终端就能自动识别并处理商品信息和顾客信 息;将电子标签放在超市的地面下,移动购物终端就能自动在超市内定位。系统功能如下: 1移动购物终端非接触地识别商品后,自动显示商品的价格等相关信息。 2移动购物终端能够实时地显示顾客的购物清单和商品总价。 3移动购物终端具有定位功能,顾客可以查看自己的当前位置和商品所在的位置,实现 商品的定位查找。 4顾客可在终端使用会员卡登陆,并可以查看余额信息。 5顾客在出口结账时,不需再次扫描商品,可以使用会员卡实现自动结账,解决出口结 厦门大学软件学院毕业论文 - 23 - 账排长队的问题。 6超市管理者可以使用后台管理程序,实时察看超市信息,进行会员管理等,提高超市 的运营效率。 移动购物终端软件总体结构流程如图 4-1: 购物清单 商品详细 信息 商品识 别显示 商品/会 员识别 会员登陆 商品名称 列表 自动结账 子系统 顾客与商品 定位子系统 定位标签 识别 图 4-1 软件总体结构流程图 4.2 系统数据库设计 我们采用了 MySQL-shared-5.1.7 作为服务器端的数据库,MySQL 是一个快速,多线程, 多用户,功能强大的关系型数据库系统。结合现代化超市电子购物系统的实际情况。系统数 据库包含了商品信息,会员信息和位置信息在内的三大方面信息。由于 UID 能够唯一确定这 些信息,故建立商品信息表格,顾客信息表格,位置信息表格,并以 UID 为主键,即通过主 键确定唯一的一条记录。例如会员信息部分包括用户 UID,会员 ID,用户名,用户密码,现 金余额等信息,就要以用户 UID 为主键来进行查询和识别,如下表所示(表中带*的字段名 为主键) 厦门大学软件学院毕业论文 - 24 - 表 格 名 称 商品表格 Goods 位置表格 areas 顾客表格 guests 商品 ID 位置 ID 会员 ID 商品 UID* 位置 UID* 会员卡号 UID* 商品名称 位置信息 用户名 商品信息 位置名称 用户密码 商品价格 现金余额 字 段 名 表 4-1 数据库设计 4.3 博创射频模块 WM-15T 硬件设计 4.3.1 WM-15T 读写模块原理 (1)概述: 15T 射频读写模块是采用最新Mifare 技术的微型嵌入式非接触式IC 卡读写模块。内嵌 ISO14443 Type A 协议解释器,并具有射频驱动及接收功能,可以简单实现对MifareOne 等卡 片的读写操作,读写距离最大可达100mm(与卡片及天线设计有关) 。该模块提供标准异步串 行通讯接口,输出TTL 电平。用户可不必了解非接触IC 卡读写模块的协议标准及底层驱动, 只需通过串行通讯发送相关指令,即可实现对卡片的所有操作。该模块适用于标准读写器 (只需进行电平转换即可直接连接到PC 机) 、手持机 、收费机、门禁器、考勤机及其它各 种收费系统及一卡通应用系统。射频模块基本参数如下: 工作电压: 5V DC 工作电流: addWidget(Key2Button,rn1,cn2);addWidget 三个参数分别是要添加的 QPushButton 的变 量名,该 Button 放置的行坐标,该 Button 放置的列坐标。因此,我们可以通过 rand()产 生随机数来确定各个 QpushButton 的位置。为了防止产生随机数的过程中,各个 Button 可 能出现的产生相同随机数而造成相互覆盖的局面。我们采用了先产生随机行,每行包括三个 按钮,共四行之后再产生随机列,将每一行上的三个按钮随机排列。从而实现了随即键盘的 产生。 下图显示了两次登陆随即产生的不同排列的键盘。 图 4-10 随机键盘 void UserClient:init() connect( connect( connect( connect( connect( connect( Init()函数的作用是对客户端程序运行时的初始化,我们把 Qsocket 的 connected(), connetionClosed(),ready_Read()和 error(int)信号以及两个定时器 timeout()信号与我们 自己的槽连接起来。当用户点击 Login 开始查询的时候,connectToServer()槽被执行。我 们在 Qsocket 对象上调用 connectToHost()连接到服务器,这个调用是异步的,它总是立即 返回的。连接通常会在稍后被建立。当连接被建立起来的时候,Qsocket 对象发射 connected()信号,或者如果连接失败,发射 error(int)(带有一个错误号)信号。 接下来我们更新用户界面并且开始两个定时器。定时器的作用是在界面右下角显示一个 不断更新的进度条,它给用户一个可视化的提示表明应用程序在工作。 最后我们设置 blockSize 变量为 0,blockSize 变量存储从服务器接收到的下一个块的 长度。我们之所以选择 0,是因为我们不知道下一个块的大小。同样的这种初始化 Init()我 们也可以用在用户清单管理界面上。 当 Qsocket 对象发射 connected()信号时,表明一个连接已经建立,sendRequest()槽 会被执行。这个槽的任务是生成一个到服务器的请求,其中包含用户输入的所有信息。 由于用户登陆界面有两种查询请求,一种是用户结账的请求,一种是用户余额的查询请 求,因为需要两种请求的格式,当请求类型为 G 时,服务器端接收到的是用户结账的请求, 当请求类型为 R 时,服务器端接收到的是用户余额查询的请求。 Q_UINT16 块大小的字节数(包括这个字段) Q_UINT8 请求类型(G 或 R) QString 用户 UID 厦门大学软件学院毕业论文 - 40 - QString 用户密码 QString 购物清单总额 我们首先把要把要发送的数据写到一个叫做 block 的 QbyteArray 中,而不能把数据写 到 Qsocket 中,因为我们不知道块的大小,所以必须先发送块的大小,直到我们把所有数据 都放到块中以后,才知道确切数值。 我们最初写入 0 作为块的大小,然后接着写入其他数据。在后台有一个 QdataStream 创 建的 Qbuffer 调用 at(0)重新移动到字节数组的开始处,并且使用块的数据的大小覆盖最初 的 0。这个大小是通过由块的大小减去 sizeof(Q_UINT16)得到的,也就是去掉前面块大小那 个字段所占用的空间。在这之后,我们在 Qsocket 上调用 writeBlock()向服务器发送这个 块。 updateListView()槽被连接到 Qsocket 的 readyRead()信号,只要 Qsocket 已经从服务 器受到新数据,该信号就会被发射。我们要做的第一件事情是重新开始但触发连接定时器。 只要我们从服务器接受一些数据,就知道该连接是活跃的,所以设置定时器再运行 30s。 服务器性我们发送一个和用户发送请求相匹配的数据,每一个数据都被发送为一个单一 的块,并且每一个块的开始都是块的大小。当客户端接收到这些块的时候首先查看 blockSize 变量,如果为 0,也就是说还没有读到下一个块的大小,我们尝试去读取它。服 务器会用一个大小为 0xFFFF 来表示没有更多的数据可以接收,所以如果读取到该值,就知 道已经到达结尾了。 如果块的大小不是 0xFFFF,我们尝试去读取下一个块。首先,检查看看是不是有块大 小这么多字节可以读取。如果没有,这次就在这里停止。当有更多数据可以读取的时候, readyRead()信号将会被再次发射,并且我们将可以再次尝试。 一旦我们确认一个完整的块已经到达,则可以在 QdataStream 上安全地使用操作符。 我们已设置 QdataStream 在 Qsocket 上提取有关一个旅行的信息。从服务器上接受的块具有 如下格式: Q_UINT16 块大小的字节数(包括这个字段) QString 查询结果 厦门大学软件学院毕业论文 - 41 - QString 用户账户余额 最后我们重置 blockSize 变量为 0 来表示下一个块的大小是未知的并且需要去读取。 closeConnection()私有函数关闭了到 TCP 服务器的连接,更新了用户界面,并且停止了两 个定时器,当 0xFFFF 被读取时,它会被 updateListView()调用。 stopSearch()槽被连接到 Stop 按钮的 clicked()信号。本质上来说它仅仅是调用 closeConnection()而已。 connectionTimeout()槽被连接到 connectionTimer 的 timeout()信号。 connectionClosedByServer()槽被连接到 socket 的 connectionClosed()信号。如果服务器 关闭这个连接并且我们还没有收到 0xFFFF 流终止符,则我们告诉用户有一个错误发生了, 我们像往常一样调用 closeConnection()来更新用户界面并且停止这些定时器。 error(int)槽被连接到 socket 的 error(int)信号。我们基于错误号生成一个错误信息。 4.4.3 用户自动结账的服务器端详细设计 服务器包含两个类:marketserver 和 clientSocket,marketserver 类继承了 QserverSocket,这是一个允许我们接收来访 TCP 的连接类。clientSocket 重新实现了 Qsocket 并且处理一个单独的连接。在任何时候,在内存中 clientSocket 对象的数量和正 在被服务的客户端数量都是一样的。Marketserver 类重新实现了 QserverSocket 中的 newConnection()函数。只要有一个客户端试图连接到服务器监听的端口,这个函数就会被 调用。在 marketserver 的构造函数中。我们传递端口号(6178)给基类的构造函数。第二个 参数为 1,使我们想允许等待连接的数量。在 newConnection 中,我们创建一个 clientSocket 对象作为 marketserver 对象的孩子,并且我们设置它的套接字 ID 为提供给 我们的数字。 clientSocket 类继承了 Qsocket 并且封装了一个单独客户端的状态。在构造函数中,我们 建立了需要信号和槽的连接,并且设置 blockSize 变量为 0,表示我们还不知道由客户端发 送的块的大小。 connectionClosed()和 delayedCloseFinished()信号被连接到 deleteLater(),这是一个 从 Qobject 继承的函数,当控制返回到 Qt 的事件循环时,它将会删除对象。这样就确保连 厦门大学软件学院毕业论文 - 42 - 接被另一端关闭时或者当一个定时的关闭完成时,clientSocket 对象就会被删除。 readClient()槽被连接到 Qsocket 的 readyRead()信号。如果 blockSize 为 0,我们从读 取 blockSize 开始;否则我们就已经读取到它了,并且检查看看是否一个完整的块已经到达。 一旦一个完整的块已经为读取做好准备,我们就读取它。我们直接在 Qsocket 对象(this 对象)上使用 QdataStream 并且使用操作符来读取各个字段。 一旦我们已经读取完客户的请求,我们就根据客户端传送过来的不同请求类型来做不同的 动作。我们查询 Linux 上的数据库并且返回一个相对应的信息。最后我们关闭这个连接。如 果这个套接字时空的,这个连接会被立即关闭并且当控制返回 Qt 的时间循环时我们调用 deleteLater()删除这个对象。否则,Qsocket 将会完成所有数据的发送,最后关闭这个连接 并且发送 delayedCloseFinished()信号。 在这个自动结账子系统的客户端部分,我们使用了一个基于块的协议,它允许我们使用 QdataStream 来读取和写入。 4. 5 自动结账后台管理的实现 后台程序采用 QdataTable 类,通过与 MySQL 数据库相连实现增添删改的基本功能。 程序界面如下图所示。 厦门大学软件学院毕业论文 - 43 - 图 4-11 后台管理程序 QDataTable 类是一个支持浏览和编辑的与数据库相关的 QTable 窗口不见。它通过 QSqlCursor 和数据库相互交互。我们分别创建了商品,定位和会员三张 QDataTable 的表格, 并且通过 Qt 中信号和槽的机制将他们紧密地连接在一起。 Qt 的 SQL 模块提供了与平台以及数据库无关的访问 SQL 数据库的接口,还提供了一套把数 据库集成到用户界面的类。为了执行 SQL 查询,我们首先必须建立数据库连接。我们将建立 数据库连接几个不同的函数写入头文件 connection.h,并且我们在应用程序的开始包含这 个头文件以保证我们能够正确的连接到数据库。在头文件中,我们调用 QSqlDatabase:addDatebase()来创建 QSqlDatabase 对象。addDatabase()的参数制定 Qt 必 须使用一个数据库驱动来访问这个数据库。这里我们使用 QMYSQL3,这是一个支持 MySQL 数 据库的驱动。接下来,我们设置数据库的主机名,数据库名,用户名和密码,并且试图打开 这个连接。如果连接失败,我们会显示错误信息。一旦连接建立,我们就可以使用 QSqlQuery 执行底层数据库支持的任何 SQL 语句了。例如 SELECT,INSERT,DELETE 等语句。 在后台程序的主界面,我们通过 QSplitter 将界面分为了上下两个部分,上面是 areaTable,负责查询超市内的定位信息,我们为这张表添加了四个列,分别显示定位 ID 的 ID 列,定位 UID 电子标签码的 UID 列,位置名称的 NAME 列和该位置的详细信息的 INFO 列。下面显示的是商品信息的 QTable, 我们给它取个名字叫 goodTable,它包含了三个列, 厦门大学软件学院毕业论文 - 44 - 分别用以显示商品名称,商品信息和商品价格。同时我们在主界面上添加了四个 QPushButton 并且通过 connect 将他们与相应的槽连接起来 connect(editButton, SIGNAL(clicked(),this, SLOT(editGuest(); 其中我们将 editButton 和函数 editGuest()连接起来,当用户单击 Guest 按钮的时候,就 触发了 editGuest()这个动作,这将导致后台管理程序单独弹出一个新的窗口,这就是后台 会员管理界面。 在这个管理界面中,我们同样生成了一张 QDataTable 表格,我们将它命名为 guestTable,在这张表格中包含了,用以显示会员 ID 的 ID 列,会员姓名的 NAME 列,会员 卡号 UID 列和会员余额的 MONEY 列。通过查询数据库我们将这些数据完整准确的显示在这张 guestTable 表格中。当我们需要进行增添删改会员信息的时候,我们只需将鼠标定位在想 应的单元格内,然后右键单击它们既可显示出相应的如 Insert, delete 等操作。 connect(guestTable, SIGNAL(beforeDelete(QSqlRecord *),this, SLOT(beforeDeleteGuest(QSqlRecord *); connect(guestTable, SIGNAL(beforeInsert(QSqlRecord *),this, SLOT(beforeInsertGuest(QSqlRecord *); 之所以能进行这样的数据库操作是因为我们同样将这些操作与相应的动作通过 connect 连接起来的。 第五章第五章 结结论论 随着嵌入式系统的高速发展和应用领域的不断扩大,嵌入式软件设计越来越收到人们 的重视。本毕业设计使用嵌入式 Linux 操作系统和 Qt/Embedded 图形界面, TCP 网络编程, Qt 图形编程,数据库等技术实现了基于 RFID 射频识别技术的现代化电子超市购物系统中的 顾客自动结账的功能。但是由于时间和个人能力的限制,在实现的系统中还存在一些尚待解 决的问题。 第一,RFID 射频识别模块还不能很好地与我们的购物系统配合使用。 第二,我们使用的服务器在有很多连接的时候,不能很好地工作。这个问题是 当我们处理一个请求的时候,没有把握住其他的连接。 针对以上不足,我将继续研究和完善我们的现代化超市电子购物系统。 厦门大学软件学院毕业论文 - 45 - 致谢致谢语语 感谢李咏梅教授给予我悉心的指导,没有她耐心的指教我将无法顺利完成这次毕业设计。 李老师平时平易近人的指导态度和高深的嵌入式知识给了我留下了极为深刻的印象。同时我 也要感谢同组的两位组员,张诗君,郑一镇同学的努力,在这几个月的时间内,我们不仅仅 是毕设中合作的团队,更重要的是我们建立了深深的友谊。最后我要感谢我的父母,以及在 校期间给予我帮助和指导的每一位老师和同学。是你们给了我前进的勇气和决心。 在此谨以此文献给李咏梅教授,我的父母和所有关心支持帮助过我的人。 厦门大学软件学院毕业论文 - 46 - 参考文献参考文献 1Bradbrook.Roy.Wal-Mart and RFIDJ.Folding Carton Industry,2004,31(4):30-33 2Navas.Dab RFID feeds the supply chainJ.ID Systems, 2001, 21(7):48-55 3纪竞舟,付宇卓 基于 ARM LINUX 的嵌入式 GUI 的研究与移植J.计算机仿真,2004,22(3):224-238 4罗从难,李小群,耿增强 嵌入式的图形用户界面J.测控技术, 2000, 5:12-14 5赵庆 RFID 技术应用领域分析及展望J.金卡工程,2005,9:45-48 6李进东,范琴秀 射频识别技术的发展与应用J.科技信息(学术版), 2006,1:46-47 7Evi Nemeth, Garth Snyder, Trent R.Hein. Linux 系统管理技术手册M,张辉译 北京:人民邮电版社,2003 8Gasmin Blanchette, Mark Summerfield.C+ GUI Programming with Qt 3M 2006 9W.Richard Stevens. UNIX 环境高级编程M. 北京:机械工业出版社 10 Robert Love. Linux Kernel Development Second EditionM 2006 厦门大学软件学院毕业论文 - 47 - 附录 安装 QT 和 QTE 的过程 1.下载 Qt 在 TrollTech 网站 /developer/ 上搜索下载 Qt 的相关包,包括 qt-embedded-free-3.3.4.tar.gz qt-x11-opensource-src-3.3.4.tar.gz tmake-1.8.tar.gz 2.安装与编译 假设我们把这些包都放在 /root/qt 下 解压 qt-x11-opensource-src-3.3.4.tar.gz tar vxzf qt-x11-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行爆款基金营销方案
- 医药公司的服务营销方案
- 商场会员纳新营销方案
- 重庆天友营销方案策划
- 福州建筑方案流程咨询
- 风险管理项目咨询方案
- 制度体系优化咨询方案
- 酒店营销数字化平台方案
- 民族文化村物业租赁及文化传承服务协议
- 男方赌博成瘾离婚赔偿及财产分配子女监护协议
- 北师大版七年级数学上册全册各章测试卷含答案解析
- 2023年药师技能竞赛
- 矿井通风工题库汇总
- TSZUAVIA 009.5-2019 多旋翼无人机系统实验室环境试验方法 第5部分:高温试验
- GB/T 23445-2009聚合物水泥防水涂料
- GB 10343-2008食用酒精
- 新员工入职安全培训ppt
- 房产证模板表格
- 小粒咖啡栽培技术措施课件
- 曲顶柱体的体积市公开课金奖市赛课一等奖课件
- 2022年东台市城市建设投资发展集团有限公司招聘笔试题库及答案解析
评论
0/150
提交评论