




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
现代化超市电子购物系统摘要: 本作品以现代化超市为背景,旨在解决目前超市中存在的查询商品不便、排长队结账、超市内定位困难、服务和信息滞后等问题,采用嵌入式系统、射频识别(RFID)、网络通信、数据库等技术,实现了现代化超市电子购物系统。系统由移动购物终端和服务器端组成,具有友好的图形界面,能够实现商品的自动识别和详细信息显示、购物清单管理、顾客定位与商品定位、自动结账、会员身份识别与管理等功能。RFID又称射频识别是英文“Radio Frequency Identification”的缩写,是基于无线电基础之上的,利用射频信号对静止或者移动的物体进行自动识别和数据交换的技术。RFID是自动识别领域目前最热门的技术。它在物料跟踪、运载工具和货架识别等要求非接触数据采集和交换和频繁改变数据内容的场合很有发展潜力与发展前景,它区别于条形码等其它识别技术的特性与优势能够满足目前库存管理的需要。所以,研究基于RFID技术的库存管理适应了目前社会的需求。关键字:电子购物,嵌入式系统,射频识别,Qt/EmbeddedThe System of Electronic Shopping for Modem SupermarketAbstract: This project aims at developing an electronic shopping system to solve the problems existing in current supermarket, including the inconvenient 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 Identification),Web and database technology,etc. This system, with a friendly graphic user interface, consists of this shopping terminal and server. It can serve various functions, such as merchandises automatic identification and detailed information display, shopping list management, searching for merchandise by category, locating of customers and merchandise, auto-checkout, membership identification and management,etc.RFID stands for radio frequency identification. It uses radio waves to 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 collection and frequent exchange of data content.Keywords: Electronic shopping, Embedded system, RFID, Qt/Embedded目录第1章引言11.1设计背景11.2设计目标11.3系统功能21.4文章结构和说明2第2章系统总体设计42.1系统的总体结构42.2系统技术52.3系统硬件62.4开发环境8第3章系统硬件设计93.1硬件总体设计93.2开发步骤93.2.1读卡模块的工作过程93.2.2单片机程序的工作过程103.2.3通讯指令协议11第4章系统软件设计144.1软件总体设计144.2应用程序设计154.2.1网络通信设计154.2.2表格显示设计174.2.3数据库模块设计194.2.4自动结账子系统设计194.2.5定位子系统设计20第5章服务器端设计225.1数据库设计225.2后台管理22第6章总结24致谢语25参考文献26附录一:Qt/Embedded平台搭建27ContentsChapter 1Introduction11.1Background11.2Design Goals11.3Function21.4Structure and Notes2Chapter 2System Design42.1System Architecture42.2System Technology52.3System Hardware62.4Development Environment8Chapter 3System Hardware Design93.1Hardware Design93.2Development Steps93.2.1Reader Module93.2.2SCM Process Procedures103.3Communications Command Protocaol11Chapter 4System Software Design144.1Software Design144.2Application Design154.2.1Network Communication Design154.2.2Table Design174.2.3Database Module Design194.2.4Automatic Closure Subsystem Design194.2.5Positioning Module20Chapter 5Server Design225.1Database Design225.2Background Management22Chapter 6Aggregate24Thanks25References26Appendix 1:Qt/Embedded Platform27第1章 引言1.1 设计背景在我国超市形成在20世纪90年代初期,现在已经成为我国零售业的一种重要形态,为国民经济的发展发挥了重要的作用。随着超市高速的发展,其经营管理也变得愈加复杂,早期的售货员站柜台的形式早已不能满足现有销售也的发展,这样就迫切地需要引入新的管理技术。超市形态具有种种优点,但在目前状况下,它仍存在零售业企业所共有的落后的一面,如:不能有效地管理每种商品,收款结算速度慢,容易出现营业差错,不宜进行商品调价,盘点效率低等,而且在超市日常管理中,商品的进、销、存等决策以经验为主,缺乏实时分析功能,管理人员对及时传递资料的要求始终得不到满足。苏辙超市形态的高速发展,其经营管理也变得愈加复杂,日常所需要处理的数据量也逐渐增大,商业运转的中间环节也越来越多,原始的人工管理已无法应对这复杂的市场。为此,在选题过程中,我选择了超市管理系统设计题目,依靠现代化的计算机信息处理技术来管理超市,一方面,方便了顾客能够准确的获得商品的详细信息,节省了购物时间,提高了顾客购物的满意度和对超市的认同感。另一方面又为超市本身节省了大量的人力、物力,改善了员工的工作条件,减轻了劳动强度,并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。1.2 设计目标随着现代科学技术的迅猛发展,计算机技术已经渗透到各个领域,成为各行业必不可少的工具,特别是Internet技术的推广和信息高速公路的建立,使IT产业在市场竞争中越发显示出其独特的优势,步入信息化时代,有巨大的数据信息等待加工处理和传输,这使得对数据库的进一步开发和利用显得尤为迫切。作为国内市场的一些中小型超市,它们在信息化过程中的步伐要落后于大中型超市,而对于这些企业的资源管理,信息的存储和处理也显得迫切需要,要适应市场竞争,就需要有高效的处理方式和管理方法,因此加快超市的信息化进程是必可少的。本毕业设计以现代化超市为背景,为方便顾客购物,所开发的一个电子购物平台。旨在缩短顾客的结账时间,方便顾客查询超市商品信息和定位;降低超市的人力成本,提高运营效率。同时,提供一个后台管理系统对超市中的商品和超市会员信息进行有效的管理。毕业设计以博创科技UP-NETARM2410-S(S3C2410芯片)控制板为平台,使用嵌入式Linux操作系统和QT/Embedded图形界面,采用嵌入式系统技术、射频识别(RFID)技术、数据库技术等实现以移动购物终端为核心的自动化、信息化的“现代化超市电子购物系统”。通过本毕业设计主要学习在Linux环境下的嵌入式系统开发和对RFID原理的实现。1.3 系统功能系统采用具有全球唯一UID的“电子标签”作为商品、会员和位置的信息载体。移动购物终端获得由RFID读卡模块读取的UID。通过网络查询数据库信息后进行相应的处理。处理后的信息借由网络返回给移动购物终端。顾客可以很直观的获取商品信息,便利了购物;移动购物终端能够自动识别并处理商品信息和顾客信息;将电子标签放在超市的地面下,移动购物终端就能自动在超市内定位。系统功能如下:(1) 移动购物终端非接触地识别商品,自动显示商品的价格、介绍等详细信息;(2) 移动购物终端能够实时地显示顾客的购物清单和商品总价;(3) 移动购物终端具有定位功能,顾客可以查看自己当前的位置和商品的所在位置,实现商品的定位查找;(4) 顾客通过终端使用会员登录,并可以查看余额;(5) 顾客在出口结账时,不用再次扫描商品,可以使用会员卡实现自动结账,整个过程在很短的时间内完成;(6) 超市管理者可以实时的查看商品信息、进行会员管理。1.4 文章结构和说明本文的第一部分是引言部分,初步介绍了目前该研究领域的现状和本毕业设计的主要目标及实现的功能。第二部分是系统总体设计的详细介绍,包括系统的总体结构及系统特点,简要介绍了系统所采用的部分技术,以及系统的开发环境;第三部分是系统硬件设计的详细介绍,包括系统所选硬件电气规格、读卡模块和非接触式IC卡间的通讯传输指令。同时阐述了读卡模块和单片机程序的工作流程。第四部分是系统软件部分的设计概要。介绍系统软件部分的开发流程,详细介绍了系统中网络通信设计、表格显示设计、客户端数据库模块设计以及读卡模块在软件部分中的应用。第五部分是介绍了系统客户端部分。包括系统数据库设计和一个后台管理程序。第六部分是总结部分。第2章 系统总体设计2.1 系统的总体结构系统由移动购物终端和服务器两大部分组成,均采用Linux操作系统,通过Web网络技术连接。移动购物终端以博创科技UP-NETARM2410-S(S3C2410芯片)为核心,外接WM-15T读写模块。将移动购物终端安装在超市的购物小车上,实现在超市中的移动购物。服务器端由PC机组成,通过设计服务程序,为终端提供数据库服务、自动结账服务,实现系统的各个功能。如图 1所示图 1 信息处理流程图2.2 系统技术系统的软件部分是基于Linux操作系统。普通Linux拥有自己标准的GUI系统X-Windows,但是X-Windows过于庞大和臃肿,极耗系统资源,而且其中不少功能对于嵌入式系统来说是多余的,不适于资源有限的嵌入式系统使用。嵌入式系统与传统计算机系统相比更专门化,其软硬件设计直接从具体应用出发,嵌入式Linux是应用于嵌入式设备开发上的一种操作系统。通常嵌入式设备中的GUI系统占据资源较多,因此对GUI的筛选显得很重要。由于嵌入式GUI需要高性能、轻量级的GUI系统,在这里我们选用Qt/Embedded进行软件图形界面的设计,并采用Qt中的QSocket类进行网络通讯部分的编程。Qt/Embedded是著名的QT库开发商TrollTech正在进行的基于framebuffer的面向嵌入式系统的Qt 版本。由于KDE等项目使用Qt作为支持库,所以由许多基于Qt的X-Windows程序可以非常方便地移植到Qt/Embedded版本上。因其面向对象、跨平台和界面设计更美观而得到广泛的应用。Qt/Embedded开放了源代码,使得开发人员可以在GPL许可协议下自由地使用Qt/Embedded进行嵌入式Linux 应用系统的开发。而且在Tmake、Qmake、QVFB和Qt Designer等众多强大开发工具的支持下,大大提高了Linux系统的开发效率和项目进度。具体的开发步骤如下:(1) Qt Designer是设计窗口组件(Widget)的应用程序,在安装Qt的bin目录下键入./designer可以启动一个包含很多Qt组件的可视化界面。在此组织应用程序的各组件分布很方便,最后可以生产一个.ui和main.cpp文件;.ui是用XML语言写的一个文本。如果熟悉QT程序设计可以抛弃Qt Designer,手动编写图形界面;(2) uic(User Interface Compiler)是从XML文件生成代码的用户界面编辑器,用来将.ui文件生产.h和.cpp文件,但生成的这两个文件不是标准的纯C+代码,通常称为Qt的C+扩展,因为Qt的对象间中运用了信号/槽的通信机制,在文件用Q_OBJECT宏来标识;(3) 用qmake工具生成.pro文件,在设置好环境变量后,用tmake工具生成Makefile文件(tmake是跨平台Makefile生成器)。在Qt/Embedded 3.X以上版本中qmake已经全面取代tmake;(4) moc(元对象编译器)用来解析一个C+文件中的类声明并且生成初始化对象的C+代码,moc在读取C+源文件,如果发现其中一个或多个类的声明中含有Q_OBLECT宏,就给出这个使用Q_OBJECT宏的类生成另外一个包含元对象代码的C+元文件;元对象代码对信号/槽机制、运行时类型信息和动态属性系统是需要的;(5) 用make命令生成可执行的二进制代码文件。此外Qt/Embedded使系统获得高效的工作性能是它拥有一个重要机制-信号与槽机制(signals/slots)。信号和槽是一种高级接口,应用于对象之间的通信,是Qt的核心特性,这也使得各个元件之间的协调变得简单。信号和槽能携带任意数量和类型的参数,它们是类型完全安全的,不像回调函数那样会产生内核泄露。所有从QObject或其子类派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射出去,接收方未知。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。2.3 系统硬件RFID( Radio Frequency Identification,射频识别)技术是20世纪90年代开始兴起的一种非接触的自动识别技术,射频识别技术是一项利用射频信号通过空间祸合(交变磁场或电磁场)实现无接触信息传递并通过所传递的信息达到识别目的的技术。现今的RFID技术是AEI(Automatic Equipment Identification,自动识别)在射频技术方面的具体应用与发展。RFID技术利用射频信号的空间祸合,实现了无接触式的信息双向通信,并且利用所接收到的信息完成了对目标物体的自动识别。与早期的识别技术相比,RFID技术因其特有的非接触性以及可对多个目标物体同时识别的特性,得到了众多行业的青睐。依据电子标签工作所需能量的供给方式的不同,RFID系统可分为无源、有源以及半有源系统。无源系统所使用的无源标签又称被动标签,标签自身不需要电源供电,而是通过阅读器发送的射频信号供电,它重量轻、体积小、寿命长、成本低廉,在工程实现中得到了广泛的应用。有源系统的标签使用标签内的电池来供电,系统识别距离较长,可达几十米,但其寿命有限并且成本较高。另外,由于标签内载电池,因此有源标签的体积较大,无法制成薄卡。半有源系统的标签也带有电池,但是此电池只起到激活系统的作用,标签一旦被阅读器激活,即无需标签内的电池供电,进入无源标签工作模式。在我们的设计中,系统硬件部分采用15T射频读写模块。该读写模块是采用最新Mifare技术的微型嵌入式非接触式IC卡读写模块。内嵌ISO14443 Type A协议解释器,并具有射频驱动及接收功能,可以简单实现对MifareOne等卡片的读写操作,读写距离最大可达100mm(与卡片及天线设计有关) 。该非接触型IC卡上设有射频信号接收器或红外线收发器,在一定距离内即可收发读写器的信号,实现非接触读写。n 非接触式IC卡主要指标卡片的电气部分只由一个天线和ASIC组成。天线:卡片的天线是只有几组绕线的线圈,很适于封装到IS0卡片中。ASIC:卡片的ASIC由一个高速(106KB波特率)的RF接口,一个控制单元和一个8K位(或32K位)EEPROM组成,分为16个扇区(Mpro为40扇区),每个扇区为4 块(Mpro 后8个区为16 块),每块16个字节,以块为存取单位。每个扇区有独立的一组密码及访问控制。每张卡有唯一序列号,为32 位。n 存储结构M1卡分为16个扇区,每个扇区由4块(块0、块1、块2、块3)组成,(我们也将16个扇区的64个块按绝对地址编号为063),存贮结构如表 1所示:表 1 存储结构块0 数据块0扇区0 块1数据块1块2数据块2块3密码A 存取控制 密码B控制块3 块0数据块4扇区1块1数据块5块2数据块6块3密码A 存取控制 密码B控制块7 0数据块60扇区15 1数据块61 2数据块62 3密码A 存取控制 密码B控制块63第0 扇区的块0(即绝对地址0 块),它用于存放厂商代码,已经固化,不可更改。每个扇区的块0、块1、块2 为数据块,可用于存贮数据。数据块可作两种应用:一是用作一般的数据保存,可以进行读、写操作。二是用作数据值,可以进行初始化值、加值、减值、读值操作。2.4 开发环境硬件:PC机Pentumn500以上,硬盘10G以上软件:PC机操作系统RedHat Linux9.0 MinicomMysql-5.1.7平台:博创科技UP-NETARM2410-S(S3C2410芯片)工具:tmake-1.8 qt-x11-3.3.4 qt-embedded-3.3.4第3章 系统硬件设计3.1 硬件总体设计系统终端中的读卡模块采用的是15T射频读写模块。15T射频读写模块是采用最新Mifare 技术的微型嵌入式非接触式IC 卡读写模块。内嵌ISO14443 Type A 协议解释器,并具有射频驱动及接收功能,可以简单实现对MifareOne 等卡片的读写操作,读写距离最大可达100mm(与卡片及天线设计有关)。该模块提供标准异步串行通讯接口,输出TTL 电平。用户可不必了解非接触IC卡读写模块的协议标准及底层驱动,只需通过串行通讯发送相关指令,即可实现对卡片的所有操作。该模块适用于标准读写器(只需进行电平转换即可直接连接到PC 机) 、手持机 、收费机、门禁器、考勤机及其它各种收费系统及一卡通应用系统。3.2 开发步骤3.2.1 读卡模块的工作过程可以给读卡模块事先设定了一个块(缺省是块2),当卡片靠近时,读卡模块主动验证这个区及读出这个块的数据,并向单片机发出中断信号,等待单片机来取,当单片机取走时,读卡模块并不关闭这张卡,这时单片机可以发命令直接读写此卡的其它块,直到单片机发关卡的命令,读卡模块又回到开始时的寻卡读指定块的状态;读卡模块的设定的块和寻卡方式可以由单片机设定,并断电不保存;如图 2所示。寻卡模式位(00 或01),如果以00 模式寻卡,再执行了关闭指令后,卡片必须离开感应区再进入感应区才能寻卡成功,如果以01 模式寻卡,那么在执行了停机指令后,即使卡片未离开感应区也能寻卡成功。图 2 读卡模块工作流程3.2.2 单片机程序的工作过程单片机向模块连接的232 口发送命令来控制模块的读写操作,当模块读到卡时,可以通过读卡模块对卡进行读写操作,操作完成后,一定要关闭卡片。对卡片控制区的读写与数据读写相同,只是控制方式不同,同时要注意一定不要写错或记住所写内容,否则有可能会无法再对该区进行操作。在刚开始编程时,为了不写错卡片造成不能读写的坏区,在对卡片密码区进行读写之前请将要写入密码区的16个字节先写入一个数据块,再读出,如果写入正确,说明写入操作正确,就可以对密码区进行写操作了。模块取到卡号与密码无关,也就是不用验证密码就可以通过读数据记录得到卡号。在每一个命令执行后在执行下一个命令前应有不少于10ms 的延时。3.2.3 通讯指令协议接口规格:使用单片机对读写模块进行控制,单片机为主控制机(主机),读写模块为从机(分机)。1、通讯方法:232异步通讯 2、波特率:57600bps3、控制字方式:1位开始位,8个数据位,一个停止位,无奇偶校验通讯协议格式:-|开始标志|模块地址|信息长度命令和参数/丛机返回|校验|-开始标志:长度2个字节,主机给模块:AAH FFH;模块给主机:BBH FFH模块地址:长度1个字节,固定值01H。 广播地址:FFH信息长度:表示命令和参数的总字节数,不包括开始标志、地址和校验的长度。校 验:长度1个字节,是开始标志、地址、信息长度、命令和参数中所有字节的异或值。命令和数据:n 通讯测试0XA1功能:测试单片机与模块通讯是否正常命令:A1H参数:无模块送回寻卡方式,读卡块号。若命令校验出错,送回33H。n 设置寻卡方式,清读写器状态到上电时的状态命令:A3H参数:无功能设置模块寻卡方式,读卡块号,数据区密码到上电时的状态, 数据区密码在上电时为FF FF FF FF FF FF。模块返回01、成功标志55H;若命令校验出错,送回33H。若命令校验出错,送回33H,n 设置寻卡方式、读写数据块号数据区密码命令:A4H参数:寻卡方式:0或1;读写数据块号:0-63(S50)/0-255(S70);数据区密码:6 Bytes。模块返回01、成功标志55H;若命令校验出错,送回33H。n 读数据记录功能 在读卡器已经读好缺省块号的数据后,上位机从读卡器读该数据记录,并决定是否关卡。命令A7H参数 是否需要关卡标志:0(不需要关卡)或者1(需要关卡)读卡器送回:是否已经下载过的标志(该字节若为00,表示还没下载,若为1,表示已经下载)、缺省的块号,以及从读卡器里读取的一条记录,共4个字节(卡号)+16 字节数据,如果读卡器此时没有刷卡记录可以送给主机,发送寻到的卡号(4 个字节)和77h 给主机,如果寻卡失败,那么4 字节的卡号为 0 0 0 0。n 读指定数据块功能从卡上读取指定块的数据。命令A8H参数所要读块号:0-63(S50)/0-255(S70);访问的密码: M1M6验证密码:0密码A,1密码B是否需要关卡的标志:0(不需要关卡)或者1(需要关卡)读卡器送回:4个字节(卡号)+16 字节数据,如果读卡器此时读卡失败,发送33h给主机。n 写数据功能往卡上缺省指定块写数据。命令A9H参数所要写入的卡号:4 字节所要写入的数据:16 字节是否需要关卡的标志:0(不需要关卡)或者1(需要关卡)读卡器送回:返回01、成功标志55H、当前寻卡方式,如果读卡器此时写卡失败,发送33hn 写指定数据块功能往卡上指定块的写数据。命令AAH参数所要写卡的卡号:4 字节。所要写入的块号:0-63(S50)/0-255(S70)。访问该块需要的密码:6 字节验证密码:0密码A,1密码B所要写入的数据:16 字节是否需要关卡的标志:0(不需要关卡)或者1(需要关卡)读卡器送回:返回01、成功标志55H、当前寻卡方式,如果读卡器此时写卡失败,发送33h给主机。n 关卡功能关掉的M1 卡片,这个命令不仅仅是关卡,还让读卡电路恢复到主动寻卡状态。命令ABH参数无读卡器送回:返回01、成功标志55H、当前寻卡方式,如果接收命令失败,发送33h 给主机。n 查询模块状态功能查询模块是否已经下载过块号和密码,以及寻卡方式。命令ACH参数无读卡器送回:返回01、是否已经下载过的标志(该字节若为00,表示还没下载,若为1,表示已经下载)、已下载密码块号状态,当前寻卡方式,如果接收命令失败,发送33h 给主机。第4章 系统软件设计4.1 软件总体设计系统的软件是基于UP-NETARM2410-S(S3C2410芯片)和Linux操作系统,通过模块化的设计,完成对商品信息、会员信息、位置信息的识别、查询、管理、操作与显示。软件系统流程图如图 3所示。系统的图形界面使用Linux平台的Qt/Embedded Version 3.3.4开发,采用Qt特有的信号和槽(Signals and Slot) 机制设计全新的图形界面和应用程序。各个图形界面采用模拟“窗口栈”的形式管理,将所有界面通过QWidget类reparent函数转换为主窗口的子窗口,并限定所有子窗口都不拥有自我显示的权限,而是在需要显示的时候向主窗口发出信号申请显示,由主窗口进行统一调度。图 3 系统流程图该系统按照CS模式设计。在Client端用一个主窗口类来显示所查询的商品信息。顾客结账和超市定位窗口在主窗口基础上,通过QButton类的clicked()信号触发。在客户端通过读卡模块获取非接触式IC卡上的UID后,通过QSocket类来实现TCP客户端和服务器端的连接。同时在server端获取UID后,将根据UID在数据库中查询相关的信息。最后将所查询信息封装成数据块向Client端返回。4.2 应用程序设计4.2.1 网络通信设计我们使用Socket类来实现TCP客户端和服务器。TCP是一个传输协议,他成为包括FTP和HTTP的很多应用程序层的互联网协议基础,也可以用于自定义协议。TCP是一个基于流的协议。对于应用程序,数据表现为一个长长的流,而不是一个平面文件。基于TCP的高层协议通常是基于行的或者基于块的。n 基于行的协议把数据作为一行文本进行传输,每一行都以一个换行符结尾。n 基于块的协议把数据作为二进制块进行传输。每一个块都又是一个Size大小字段和紧跟它的一个Size字节的数据组成。QSocket继承了QIODevice,所以它可以通过使用QDataStream或者QTextStream来进行读取和写入。当我们从网络中读取数据和从文件中读取数据时,有一个需要注意的不同是,我们在使用这个操作符之前必须确认我们已经从另一段接受了足够多的数据。以系统软件中商品信息模块为例。在系统中我们为商品信息模块设计了两个类:MarketClient和ClientSocket。其中MarketClient是移动终端中商品信息的窗口类,我们在这个窗口类上实现了通过QSocket与服务器间的通信。同时我们将设置一个blockSize变量来解析从服务器接受的块数据。这一流程分为以下几个步骤:当MarketClient通过读卡模块读取非接触式IC卡中的商品UID信息信号时,MarketClient类中的connectionServer()槽被执行。我们在QSocket对象上调用connectionToHost()连接到服务器。connectionToHost()调用是异步的,总是立即返回的。连接通常会在稍后被建立。当连接被建立起来并且运行的时候,QSocket对象发射connected()信号,或者如果连接失败,发射error(int)(带有一个错误号)信号。最后我们设置blockSize变量为0。blockSize变量存储从服务器接受的下一个块的长度。这里设置为0,说明我们不知道下一个块的大小。当QSocket对象发射connection()信号时,表示一个连接已经建立。sendRequest()槽将被执行。这个槽的任务是生成一个到服务器的请求,其中包括通过读卡模块获的商品UID信息。请求格式如表 2所示。表 2 sendRequest()请求的数据格式Q_UINT16块大小的字节数(包括这个字段)Q_UINT8请求类型QString商品UID(转换为QString型)我们最初写入0作为块的大小,然后一次写入其他数据。然后在输入输出设备上(后台是由一个QDataStream创建的QBuffer)调用at(0)重新移动道字节数组的开始处,并且使用块的数据大小覆盖最初的0。这个大小是通过块的大小减去sizeof(Q_UINT16)得到的,也就是去掉最前面块大小那个字段所占用的空间。在这之后,我们在QSocket上调用writeBlock()向服务器发送这个块。发送请求到服务器端后,MarketClient类还将负责接受从服务器端传输的数据。这时MarketClient中的updataListView()槽被连接到QSocket的readyRead()信号,只要QSocket以及从服务器收到新数据,该信号就会被发射。如果blockSize变量为0,这也就是说还没有读取到下一个块的大小。我们尝试去读取它。服务器使用一个大小为0xFFFF来表示没有跟多的数据可以接收,所以如果读取到该值,就知道已经达到结尾。如果块的大小不是0xFFFF,我们尝试去读取下一个块。首先,检查看看是不是有块的大小这么多字节可以读取。如果没有,这次就在这里停止。当有更多数据可以读取的时候,readyRead()信号将会被再次发射,并且我们将可以再次尝试。一旦我们确认一个完整的块已经到达,则可以在QDataStream上安全地使用操作符。通过设置QDataStream在QSocket上提取有关的商品信息。从服务器端上接收的块具有如表 3所示:表 3 接收的块的数据格式Q_UINT16块的大小的字节数(包括这个字段)QString商品UIDQString商品名称QString商品信息QString商品价格QString商品所在区域最后我们重置blockSize变量为0来表示下一个块的大小是未知的并且需要去读取。上面简要介绍了移动购物终端中所实现的Client部分,下面将主要介绍系统的服务器。商品信息模块的服务器包含两个类:MarketServer类和ClientSocket类。MarketServer类继承了QServerSocket,这是一个允许接收来访TCP连接类。ClientSocket重新实现了QSocket并且处理一个单独的连接。在这个设计中我们在ClientSocket类中实现了QSocket,而且可以处理多个连接,通过对请求类型的设置,我们在ClientSocket类中可以处理商品、顾客和定位信息的连接请求。MarketServer类重新实现了QServerSocket中的newConnection() 函数。只要一个客户端试图连接到服务器,这个函数就会被调用。在newConnection()的构造函数中,我们可以传递端口号给基类的构造函数,同时创建一个ClientSocket对象作为MarketServer对象的孩子,并且我们设置它的套接字ID为提供给我们的数字。ClientSocket类继承了QSocket并且封装了一个客户端的状态。在构造函数中,我们建立了需要的信号和槽的连接,并且设置blockSize变量为0,表示还不知道由客户端发送的块的大小。其中connectionClosed()和delayFinished()信号被连接到deleteLater()。这是一个从QObject继承的函数,当控制返回到Qt的事件循环时,它将会删除对象。这样就确保当连接被另一端关闭时或者当一个定时的关闭完成时,ClientSocket对象会被删除。readClient()槽被连接到QSocket的readyRead()信号,如果blockSize为0,我们从读取blockSize开始,否则我们就已经读取到它了,并且检查看看是否一个完整的块已经到达。一旦一个完整的块已经为读取做好准备,我们就读取它。我们直接在QSocket对象上使用QDataStream并且使用操作符来读取各个字段。一旦读取完客户端的请求后,我们准备好一个回复。在这个毕业设计中我们实现了几个函数从数据库中获得所要的数据。这些函数同客户端程序中的sendRequest()函数十分类似。再一次,我们把这个块写入QByteArrey,这样就可以使用writeBlock()发送数据之前知道它的大小。最后发送0xFFFF表示数据的结束。4.2.2 表格显示设计在主窗口中使用QListView类来显示所要查询的商品信息图 4。在QListView中每一个非空的单元格都被作为一个独立的QListViewItem对象保存到内存中。这种项类可以在外面被当作数据持有者。通过子类化这个项类,我们可以存储更多的数据并且重新实现虚函数来使用那些数据。因此我们可以对QListView中的每一项单元进行操作。在这个QListView中,我们通过使用QlistViewItem:text()来读取所选中项中的商品价格,在触发顾客信息窗口前完成对所选择商品的总价的计算。而后将总价向顾客信息窗口传送。同时,用户可在购物清单中双击所选商品,查询商品的详细信息。由于在QListView类中提供了对QListViewItem对象良好的支持,因此通过传递QListViewItem,我们可以在新触发窗口中对QListViewItem进行一些简单的操作,并与主窗口QListView对象中所显示信息进行交互。例如,用户可以点击“Up”和“down”按钮,系统将通过调用QlistViewItem:ItemAbove()和QlistViewItem:ItemBelow()来显示该选中商品的上一项和下一项。图 4 信息主窗口图 5 商品详细信息4.2.3 数据库模块设计Qt的SQL模块提供了与平台以及数据库无关的访问SQL数据库的接口,还提供了一套把数据库集成到用户界面中的类。由于在客户端中我们只要通过读卡模块获得UID信息,再通过QSocket向服务器发送请求,服务器端响应后从服务器数据库获得相应的数据信息。因此在客户端中我们没有过多得涉及到有关数据库模块的具体操作。这一部分是在服务器端完成的。由于在后面一章节中将详细介绍Qt下数据库的使用,这里只是简要得介绍Qt环境下的数据库连接。为了便于系统设计,我们单独设计了一个connection.h用以连接数数据库。在这个connection.h中我们声明了createOneConnection()和createConnects()两个内联函数并且在每次我们需要它的时候包含它。在createOneConnection()中我们调用QSqlDatabase:addDatabase()来创建QsqlDatabase对象。addDatabase()的参数指定Qt必须使用一个数据库驱动来访问这个数据库。在这里我们使用的Mysql。Qt包含的驱动有:QODBC3(ODBC)、QMYSQL3(MYSQL)、QOCI8(Oracle)、QTDS7(Sybase Adaptive Server)、QPSQL7(PostgreSQL)和QDB2(IBM DB2)。相应的驱动可以在编译Qt/Embedded的过程中通过./configure sql-driver的命令获得。然后就可以设置数据的主机名、数据库名、用户名和密码,并且试图打开连接。在createConnections()中,我们创建了3个到Market数据库的相同连接。我们没有给第一个连接起名字;当我们不指定数据库名称时他将会被默认使用。另外两个的名字分别为PRODUCT和GUEST。它们会被商品信息模块和顾客信息模块所使用。4.2.4 自动结账子系统设计在用户完成商品选购后,系统将自动计算出所选购商品的总额。如果此时接收到移动购物终端的结账请求和出口信息,系统将自动调用顾客窗口进行结账(在我们设计的测试中顾客窗口的激发是通过一个QButton类的clicked()信号触发的)。在顾客窗口中我们设计一个小键盘供用户输入密码来登录。通过读卡模块获得的顾客UID将会和用户输入密码,商品总额通过QSocket一同发往客户端。客户端将接受这些信息,并查询数据库来验证顾客身份。如果验证通过,系统将会在该用户的账户余额上自动扣除商品总额,并向客户端放送交易成功的信息和当前用户的账户余额。同时原购物清单将清空,一次购物的过程将结束。Client端将重新等待顾客选购商品。如果验证顾客身份失败,服务器将向Client端发送错误信息,Client端提示出错并且重新等待顾客登录,如图 6所示。直到购物完成或者用户退出购物终端。图 6 顾客窗口4.2.5 定位子系统设计顾客在进行购物时,可通过移动购物终端实现在超市内的定位。我们在系统设计时仅仅模拟了超市定位的动作。我们假设购物终端从读卡模块中获得遍布超市内的定位标签中的数据,可以在移动终端中将当前的区域位置显示出来,这和我们通过读卡模块获得商品信息的流程类似。当定位模块获得从读卡模块传来的定位信息时,定位模块中的connectionServer()槽将被执行,模块也将通过在QSocket对象上调用connectionToHost()来连接与服务器进行交互,而后服务器端将处理所得信息,将查询得到的定位区域告知移动终端(client端)。这一步骤可以参照上文4.2.1章节中的内容。定位子系统模块如图 7所示。在定位模块中Merchandise Orientation将显示从商品购物清单中所选择的商品的位置。图 7 定位模块设计第5章 服务器端设计5.1 数据库设计本系统采用Mysql-server-5.1.7作为服务器端数据库。系统数据库包含商品信息、会员信息和位置信息。而且电子标签中的UID能够唯一地确定这些信息,因此建立了商品信息表格(goods)、顾客信息表格(guests)、位置信息表格(areas),并以商品编号、顾客编号和位置信息编号作为主键确定唯一的记录。在设计中,我们设定一个区域内存放多个商品,因此在商品信息表格(goods)中设置areaid字段作为链接位置信息表格(areas)的外键。设计的关系型数据库结构如表 4 数据库结构所示(表中带*的字段名为主键)。表 4 数据库结构表格名称商品表格(goods)顾客表格(guests)位置表格(areas)字段名商品编号*顾客编号*区域编号*商品UID顾客UID区域UID商品名称顾客姓名区域名商品信息顾客密码区域信息商品价格余额商品区域编号5.2 后台管理为便于对系统数据库进行管理,我们制作了一个简单的后台管理程序图 8,这样就可以对系统数据库进行增、删、修改等操作。该后台管理程序的主界面是由Qt类库中的QDataTable类实现的。QDataTable类是一个支持浏览和编辑的与数据库相关的QTable窗口部件。它通过QSqlCursor和数据库进行交互。通过QDataTable类的支持,可以在表格中的上下文菜单中插入、更新或者删除表格项,当确认操作后,这些修改将会被应用到数据库中。如果需要我们也可以为相关的游标创建一个只读的QDataTable。这时,基于QSqlCursor的QDataTable类是只读的,并不提供上下文菜单。图 8 后台管理程序在后台管理程序中提供两个QDataTable表,其中一个表goodtable,显示商品信息;另一个表areatable显示区域信息。当我选择areatable中的区域选项时,QDataTable类的currentChanged()信号将被触发,goodtable将调用setFilter()来刷新表格显示所选区域中的商品信息,并且调用refresh()来强制表格使用相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地形适应性测试-洞察及研究
- 绿色生产标准竞争-洞察及研究
- 虚拟营销效果评估-洞察及研究
- 交通工程咨询方案
- 江苏橡皮坝施工方案
- 建筑咨询顾问方案
- 建筑方案咨询报告
- 教师招聘之《小学教师招聘》题库及答案详解(各地真题)
- 教师招聘之《幼儿教师招聘》练习题附参考答案详解(预热题)
- 投标文件建筑方案设计内容
- 2025年高级粮油保管员技能鉴定理论考试题库-含答案
- 高一年级数学上册(人教版)《教材全解全析》1
- 2025年机场集团工作人员招聘考试笔试试题(含答案)
- 特种设备安全风险管控清单
- 酒店从业人员禁毒知识宣讲
- 割草机知识培训课件图片
- 设备事故培训课件
- 岐黄天使中医药理论和中医护理技术专项培训考核答案
- 江西省上进联考2024-2025 学年高三2月统一调研测试历史试卷(含答案解析)
- 高中物理电路的基本概念及电路分析课件
- 癫痫患者自我管理现状及其影响因素分析
评论
0/150
提交评论