毕业论文-基于QT的电子点餐系统的设计与实现_第1页
毕业论文-基于QT的电子点餐系统的设计与实现_第2页
毕业论文-基于QT的电子点餐系统的设计与实现_第3页
毕业论文-基于QT的电子点餐系统的设计与实现_第4页
毕业论文-基于QT的电子点餐系统的设计与实现_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 太原理工大学毕业设计(论文)用纸 绪论引言编写目的本文档是餐饮点餐管理系统的项目需求说明书,对餐饮点餐管理系统的发展进行简要回顾,分析当前的业务流程,总结此类管理系统的基本特点以及总体功能,尽可能完整的概括提取出需求方的全部想法。本文档对项目开发人员、设计人员及系统实施人员具有很重要的指导意义。项目背景项目名称:餐饮点餐管理系统;中国是举世闻名的美食大国,拥有五千年的饮食文化和巨大的餐饮市场,随着人民生活水平和生活方式的转变,餐饮业具有巨大的投资市场,被称为中国的黄金产业,但同样也应看到,餐饮业不仅面临着巨大的发展机遇,也面临着前所未有的挑战和考验。餐饮业的不断发展,在经营管理上也逐步向电子

2、化迈进,通过电脑信息系统管理餐饮业的内部事务,使得作业更加简单化、高效。以财务为中心,减轻一线操作人员的劳动强度,节省营业人员的交班时间,加强财务审核管理。提供多种点菜、结算、统计报表功能,提供分厨房直接打印前台点菜数据。在餐饮经营中,传统的纸制作业流程无法满足现代客户在信息娱乐及服务安保等方面的要求。而此系统的使用,使餐厅管理者便捷的进行经营娱乐的管理,大大增加的各店成本控制及销售额现实背景我国的餐饮市场经过30多年的改革开放及发展,可以说我国正迎来一个餐饮业大发展的时期,市场潜在力量巨大,远景很是广阔。根据中国烹饪协会发布的2009年度餐饮业发展报告显示,即便在经济遭受重创的2009年,全

3、社会餐饮业零售额达依然到17998亿元,同比增长16.8%。其中,每月的零售额均超过1300亿元,增长率稳定在14.4%至21.6%。在各类消费性支出中增幅居前,仅次于交通和通信支出。并且预计2012年餐饮市场还将继续增长,营业额也将达到20000亿元。 与此同时,我国餐饮业发展的质量和内涵也发生了重大变化。行业的经营领域和市场空间不断拓宽,经营档次和企业管理水平不断提高,经营业态日趋丰富,投资主体和消费需求多元化特点更加突出,网点数量和人员队伍继续扩大;餐饮市场更加繁荣,消费的个性化和特色化的趋势明显,追求健康营养和连锁规模发展成为主题。集团化、品牌化、产业化和国际化的发展步伐加快,餐饮现代

4、化的进程不断推进。 近几年来,中国餐饮业的发展一直保持强劲快速增长同时,也看到目前餐饮行业普遍存在的问题。餐饮企业的发展一直处于自我摸索、自我运作、自我积累和自我完善为主的状态,利润低、承载重、支撑小、发展难的特点突出。餐饮企业在产品标准化技术设备开发、连锁管理体系的建立、专业人才的培养、吸纳资本投入、理论指导和信息交流等方面的条件十分不足,存在着技术开发与设备配套难、管理与人才难、配送渠道与发展资金难、沟通交流与合作难等深层次因素的制约,行业平台和基础支持力量不强,对企业发展产生较大的影响。术语定义所谓”翻台率”是指在某期间里,指餐桌座位坐满及餐桌空荡的速度。 一个高翻台率意味更多用餐者吃了

5、并且走了,而一个低的翻台率意味同样用餐者是在一段长时间里使用餐桌,或者餐桌座位是空的。参考资料1餐饮点餐管理系统项目开发计划_v1.00研究目的和意义目的在我们这个“食文化”高度发达的国度里,餐饮业毋庸置疑地成为第一大传统产业。然而,正是这历史悠久、规模庞大的产业,却也是信息化程度最慢和最低的产业之一。至今为止,绝大多数餐饮企业的经营方式仍然停留在“一张纸、一支笔、经理喊破嗓、员工跑断腿”的境地;而会计工作,也仍然是以一支笔或一个算盘,或最好的情况下一个计算器进行加减乘除,其本质仍然是以人脑计算为基础,不但工作量巨大,而且极易出错。笔者曾经见过生意极好的大排档,服务员进进出出地飞奔于户外桌台、

6、大堂吧台和厨房之间,而经理则用计算器算得满头大汗的场景,蔚为壮观。且不说这种日复一日的重复、单调的劳动意义何在,单就消费计算方面的出错而引发的与客户之间的矛盾纠纷,就不可胜计。其实在人类文明已经进入电子信息的时代,绝大多数重复、单调、可程式化的工作都已经可以交由计算机来完成。面对复杂和庞大的计算任务,计算机在效率和准确度方面是人脑所不能望其项背的。作为传统产业的餐饮业,同其他很多传统产业一样,同样可以引入信息化改造。餐饮业的信息化改造内容,主要有:由传统的笔和纸点餐,改用电子点餐;由传统的人工计算、统计、管理,改用电脑进行计算、统计和管理;将现代的电子技术、无线技术、计算机技术和网络技术引入到

7、餐饮行业中来,替代部分人工操作,加快餐饮企业的运转效率,提升餐饮企业的管理水平,使餐饮企业运作更规范、更科学、更高效。在餐饮企业的信息化改造当中,无线点餐(点菜)系统,成为其核心内容,也是餐饮企业进行信息化改造的必由之路。因此本论文研究的目的在于通过餐饮企业的信息化改造暨利用无线技术,替代传统的纸和笔进行电子点餐(点菜)操作,实现远距离地进行信息即时传递。当然,无线点餐(点菜)系统不只是可以进行点餐操作,同时通过配套的餐饮管理软件,还可以实现强大的统计和管理功能,使餐饮企业真正实现信息化。意义 能够有效地的提升 餐饮企业的档次和管理水平,做到科学管理、科学决策、高效运转、降低成本,进行信息化是

8、必由之路。而采用无线点餐(点菜)系统取代传统的手工点餐,采用餐饮管理软件取代传统的人工统计和粗放型管理又是信息化当中的核心内容。餐饮企业引进一套无线点餐(点菜)系统,成本大约在一万元左右(视配置情况而不同),大约相当于一个服务员一年的工资,但带来的便利性和管理水平的升级则是无与伦比的。无线点餐(点菜)系统所带来的运营效率的大幅度提高和人力成本的节约,远超其投资成本,对于餐饮企业信息化,可以说是不二的选择。开发平台及核心技术简介开发语言介绍 Qt介绍Qt是一个1991年由奇趣科技开发的跨平台C+图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器

9、。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。2008年,奇趣科技被诺基亚公司收购,QT也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。Qt是一个跨平台的C+图形用户界面库,由挪威TrollTech公司出品,目前包括Qt/X11, 基于Framebuffer的Qt Embedded,快速开发工具Qt Designer,国际化工具Qt Linguist 等,Qt支持Unix系统及Linux,还支持WinNT/Win2k,Win95/98平台。Qt的良好封装机制使得Q

10、t的模块化程度非常高,可重用性 较好,对于用户开发来说是非常方便的。Qt API和开发工具对所有支持平台都是一致的,从而可以进行独立于平台的程序开发和配置。它使得跨平台软件编程直观、简易和方便。Qt 提供了一种称为signals/slots 的安全类型来替代 callback回调函数,这使得各个控件之间的协同工作变得十分简单。Qt在Linux下有GPL版,可方便用户的学习及开发。如果用户使用 C+,对库的稳定性,健壮性要求比较高,并且希望跨平台开发的话,那么使用Qt是较好的选择,Qt还支持 2D/3D图形渲染、OpenGL、XML等。 Qt Script for Applications (Q

11、SA)是Trolltech的跨平台脚本工具箱。Qt为静态的Qt/C+程序提供了一个脚本界面,可以定制和扩展程序。 Qtopia是为基于Linux的PDA,智能电话和其他移动设备设计的一个全面的,可以用户化的应用程序平台和用户界面。 Qt/Embedded是面向嵌入式系统的Qt版本,是Qt的嵌入式Linux窗口,是完整的自包含C+ GUI和基于Linux的嵌入式平台开发工具。Qt/Embedded API可用于多种开发项目。许多基于Qt的X Window程序可以非常方便地移植到嵌入式版本,适用于高端PDA等产品。Qt/Embedded内部对于字符集的处理采用了UNICODE编码标准。Qt是基于面

12、向对象的C+语言,Qt提供了signal和slot的对象通信机制,具有可查询和可设计的属性以及强大的事件和事件过滤 器,同时,还具有字符国际化,即支持根据上下文进行国际化的字符串翻译。许多Qt的特性是基于QObject的继承,通过标准C+技术实现的优良的跨平台特性: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 等等。面向对

13、象: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信号槽机制简介信号和槽是

14、一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方。信号和槽是QT自行定义的一种通信机制,它独立于标准的C/C+语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具,该工具是一个C+预处理程序,它为高层次的事件处理自动生成所需要的附加代码。在我们所熟知的很多GUI工具包中,窗口小部件(widget)都有一个回调函数用于响应它们能触发的每个动作,这个回调函数通常是一个指向某个函数的指针。但是,在QT中信号和槽取代了这些凌乱的函数指针,使得我们编写这些通信程序更为简洁明了。 信号和槽能携带任意数量和任意

15、类型的参数,他们是类型完全安全的,不会像回调函数那样产生core dumps。所有从QObject或其子类(例如Qwidget)派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射(emit)出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。我们可以将很多信号与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至于将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号

16、什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。(1)信号当某个信号对其客户或所有者发生的内部状态发生改变,信号被一个对象发射。只有 定义过这个信号的类及其派生类能够发射这个信号。当一个信号被发射时,与其相关联的槽将被立刻执行,就象一个正常的函数调用一样。信号-槽机制完全独立于任何GUI事件循环。只有当所有的槽返回以后发射函数(emit)才返回。 如果存在多个槽与某个信号相关联,那么,当这个信号被发射时,这些槽将会一个接一个地 执行,但是它们执行的顺序将会是随机的、不确定的,我们不能人为地指定哪个先执行、哪个后执行。信号的声明是在头文件中进行的,QT的sig

17、nals关键字指出进入了信号声明区,随后即可 声明自己的信号。例如,下面定义了三个信号:signals: void mySignal();void mySignal(int x); void mySignalParam(int x,int y);在上面的定义中,signals是QT的关键字,而非C/C+的。接下来的一行void mySignal() 定义了信号mySignal,这个信号没有携带参数;接下来的一行void mySignal(int x)定义 了重名信号mySignal,但是它携带一个整形参数,这有点类似于C+中的虚函数。从形式上 讲信号的声明与普通的C+函数是一样的,但是信号却没

18、有函数体定义,另外,信号的返回 类型都是void,不要指望能从信号返回什么有用信息。信号由moc自动产生,它们不应该在.cpp文件中实现。(2)槽槽是普通的C+成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。当与其关联的信号被发射时,这个槽就会被调用。槽可以有参数,但槽的参数不能有缺省值。既然槽是普通的成员函数,因此与其它的函数一样,它们也有存取权限。槽的存取权限决定了谁能够与其相关联。同普通的C+成员函数一样,槽函数也分为三种类型,即public slots、private slots和protected slots:public slots:在这个区内声明的槽意味着任

19、何对象都可将信号与之相连接。这对于组件编程非常有用,你可以创建彼此互不了解的对象,将它们的信号与槽进行连接以便信息能够正确的传递。protected slots:在这个区内声明的槽意味着当前类及其子类可以将信号与之相连接。这适用于那些槽,它们是类实现的一部分,但是其界面接口却面向外部。private slots:在这个区内声明的槽意味着只有类自己可以将信号与之相连接。这适用于联系非常紧密的类。槽也能够声明为虚函数,这也是非常有用的。槽的声明也是在头文件中进行的。例如,下面声明了三个槽:public slots:void mySlot();void mySlot(int x);void mySi

20、gnalParam(int x,int y);(3)信号与槽的关联建立连接:通过调用QObject对象的connect函数来将某个对象的信号与另外一个对象的槽函数相关联,这样当发射者发射信号时,接收者的槽函数将被调用。该函数的定义如下:bool QObject:connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) static这个函数的作用就是将发射者sender对象中的信号signal与接收者receiver中的member槽函数联系起来。当

21、指定信号signal时必须使用QT的宏SIGNAL(),当指定槽函数时必须使用宏SLOT()。如果发射者与接收者属于同一个对象的话,那么在connect调用中接收者参数可以省略。断开连接:disconnect函数来断开连接。其定义如下:bool QObject:disconnect ( const QObject * sender, const char * signal, const Object * receiver, const char * member ) static这个函数断开发射者中的信号与接收者中的槽函数之间的关联。属性介绍Qt的属性也基于元对象系统,在类声明中用宏Q_PRO

22、PERTY来声明。属性只能在继承于QObject的子类中声明。宏Q_OVERRIDE用来覆盖一些子类中由继承得到的属性。属性也是一个类的成员。元对象系统中设置属性和得到属性的成员函数列出如下:QObject:setProperty()可以让你控制类中那些在编译时不可用的属性。QMetaObject:propertyNames()返回所有可用属性的名称。QMetaObject:property()返回一个指定属性的属性数据:一个QMetaProperty对象。下面两个设置函数是等效的:/ QButton *b和QObject *o指向同一个按钮时 b-setDown( TRUE ); o-set

23、Property( down, TRUE );开发环境VisioStudio2008简介Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和MicrosoftSilverlight及Windows Phone。Vis

24、ual Studio 2008 在三个方面为开发人员提供了关键改进:1、快速的应用程序开发。2、高效的团队协作。3、突破性的用户体验。Visual Studio 2008 提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序。Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用 .NET Framework 3.5加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持

25、AJAX 的 Web 应用程序。开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web 应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP NET应用程序服务和 Microsoft 平台。2程序开发为了帮助开发人员迅速创建先进的软件,Visual Studio 2008 提供了改进的语言和数据功能,例如语言集成的查询 (LINQ),各个编程人员可以利用这些功能更轻松地构建解决方案以分析和处理信息。Visual Studio 2008 还使开发人员能够从同一开发环境内创建面向多个 .NET Framework 版本的应用程序。开发人

26、员能够构建面向 .NET Framework 2.0、3.0 或 3.5 的应用程序,意味他们可以在同一环境中支持各种各样的项目。Visual Studio 2008为开发人员提供了在最新平台上加速创建紧密联系的应用程序的新工具,这些平台包括Web、Windows Vista、Office 2007、SQL Server 2008和Windows Server 2008。对于 Web,ASP NET AJAX 及其他新技术使开发人员能够迅速创建更高效、交互式更强和更个性化的新一代 Web 体验。3高效的团队协作Visual Studio 2008 提供了帮助开发团队改进协作的扩展的和改进的服务

27、项目,包括帮助将数据库专业人员和图形设计人员加入到开发流程的工具。3VC2008与Qt4.7的开发环境搭建VC2008与Qt开发环境搭建是十分简单的事情,Qt授权模式有三种授权协议,分别是GPL, LGPL和Commercial,选择GPL协议即可。1下载并安装Vc2008专业版。2下载并安装Qt 安装包qt-win-opensource-4.7.0-vs2008.exe 。3下载并安装qt-vs-addin-1.1.7.exe。 4. 在系统环境变量中添加D:QT4.7.0。核心技术介绍UDP协议UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那

28、些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传

29、输数据。UDP协议的全称是用户数据报协议2,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。与所熟知的TCP(传输控制协议)协议一

30、样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。UDP

31、协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 TCP协议Transmission Control Protocol传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。TCP在IP报文的协议号是6。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协TCP/IP协议并不完全符合OSI的七层参考模型。传统的开

32、放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一

33、层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。在因特网协议族(Internet protocol suite)四层协议中,TCP层是位于IP层之上,应用层之下的传输层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割

34、成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算和校验。首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,它是全双工的;在保证可靠性上,采用超时重传

35、和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法),该算法主要包括三个主要部分:1,加性增、乘性减;2,慢启动;3,对超时事件做出反应。Qt 数据库支持Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作。这里我们所说的“平台独立”,既包括操作系统平台,有包括各个数据库平台。另外,我们强调了“基于 SQL”,因为 NoSQL 数据库至今没有一个通用查询方法,所以不可能提供一种通用的 NoSQL 数据库的操作。Qt 的数据库操作还可以很方便的与 model/view

36、架构进行整合。通常来说,对数据库的操作更多地在于对数据库表的操作,而这正是 model/view 架构的长项。不过,由于受到协议的限制,Qt 开源版本并没有提供上面所有驱动的二进制版本,而仅仅以源代码的形式提供。通常,Qt 只默认搭载 QSqlite 驱动(这个驱动实际还包括 Sqlite 数据库,也就是说,如果需要使用 Sqlite 的话,只需要该驱动即可)。我们可以选择把这些驱动作为 Qt 的一部分进行编译,也可以当作插件编译。如果习惯于使用 SQL 语句,我们可以选择QSqlQuery类;如果只需要使用高层次的数据库接口(不关心 SQL 语法)。Qt为数据库访问提供的QtSql模块实现了

37、数据库和Qt应用程序的无缝集成,同时为开发人员提供了一套与平台无关和具体所用数据库均无关的调用接口。这使得开发人员只需掌握基本的SQL语句,就能进行简单的数据库应用程序开发。如下表所示,QtSql模块由3部分组成。驱动层:驱动层实现了特定数据库与SQL接口的底层桥接。SQL接口层:SQL接口层提供了数据库类的访问用户接口层:用户接口层提供从数据库数据到用于数据库表示的窗体的映射QtSql模块提供了一个平台无关且数据库无关的访问SQL数据库的接口。Qt中的每个数据库连接用一个QSqlDatabase对象来表示;Qt使用不同driver来和各种不同数据库的API进行通讯。QSqlQuery提供了直

38、接执行任意SQL语句的特性;此外还提供了两个高层次的无需SQL命令的数据库接口:QSqlTableModel和QSqlRelationalTableModelSection 1. Connecting and Querying在执行SQL命令前,必须先建立好同数据库的连接。静态函数QSqlDatabase:addDatabase()用于创建一个新的QSqlDatabase对象,函数的第一个参数指定了Qt该选择哪个Driver来访问数据库。在对创建的QSqlDatabase对象设定好host name,database name ,username和password后,需要调用open()函数来

39、建立到数据库的连接。一旦到数据库的链接建立好后,就可以通过QSqlQuery:exec()来执行底层数据库所支持的任意SQL语句了。QSqlQuery:next()返回查询结果集中的下一行,而QSqlQuery:value()则返回当前行中的某一项的值,以QVariant的形式返回。可以使用QSqlQuery:isActive()来检查SQL语句的执行是否出现错误。placeholder QSqlQuery:prepare() QSqlQuery:bindValue() or QSqlQuery:addBindValue() QSqlQuery:exec()Qt支持数据库中transactio

40、n(事务)这个概念。transaction()用于启动transaction,而commit()或rollback()用于结束transaction。静态函数QSqlDatabase:database(),返回指定连接所对应的QSqlDatabase对象。 QSqlDatabase:driver() 返回该连接底层所使用的dirver QSqlDatabase:hasFeature()可用来查询底层数据库是否支持某项特性。 Qt允许在一个程序中创建多个数据库连接,这中情况下在执行SQL语句时,需要为QSqlQuery的构造函数传入要执行该语句的数据库对应的QSqlDatabase对象。与QSq

41、lQuery相比,QSqlTableModel提供了一个更高层次、更抽象的接口,可以避免使用原始的SQL命令。 QSqlTableModel:record() & QSqlTableModel:value() QSqlTableModel:insertRow() & QSqlTableModel:setData() QSqlTableModel:submitAll() ,于其他model不同,在使用QSqlTableModel时,必须调用submitAll()来强制所有的修改都写入数据库。当需要处理外键(foreign key)时,需要使用QSqlRelationalTableModel而不是

42、QSqlTableModel。对于使用了SQL相关类的应用程序,需要在对应的.pro中添加下面一行:QT +=sql,这样在链接时会将QtSql库链入。需求分析目前餐饮企业工作流程目前的中小餐饮企业采用最多的手工记账形式,其业务流程如图2.1所示客人点餐客人点餐服务员登记厨师加工处理客人点餐收银台服务员登记 图3-1手工业务流程分析流程图简介:顾客到达餐厅有引领员引导到座位后,承上菜谱并登记客人所点食品,完毕后唱菜谱并由客人确认,征得客人同意后交给后台厨师及配餐人员,配餐人员根据大厅服务员提交的菜谱为客人配齐所有饮料、酒水、甜点等食物,厨师根据大厅服务员提供的菜谱按照先凉后热的顺序快速加工出美

43、味可口的食物交友送餐人员及时送到指定的餐桌。客人用餐完毕后有服务员或者客户到收银处办理结算手续,客人如有会员卡的话,收银员应给予相应的优惠,结算完毕后有引领员送客人出餐厅,这样的工作方式当客流量增加的时候,必然会出现争抢菜谱,上错菜,漏上菜、忘记上菜以及计算失误等现象,轻则引起客户的不满,重则引起纠纷,因此有必要采用新的工作模式,来避免上述情况的发生。所建议系统的工作流程基于传统餐饮企业手工操作所带来的种种弊端,一种新的利用计算机来管理信息的系统餐饮点餐管理系统也就应运而生,那么该系统的工作流程如图2.2所示图3-2自动化的点餐系统产品功能根据所建议系统的业务流程图,分析出新系统的功能模块图如

44、2.3所示用户登录用户登录点餐管理配餐管理结算管理系统管理图3-3功能模块图软件需求描述1用户登陆:用户输入用户名及密码后,系统自动验证有效性及用户角色,根据用户拥有的角色自动进入不同的子系统2客户点餐子系统:当客人落座后,服务员手持IPAD登陆点餐子系统后,首先输入相应的桌号,然后由客人根据不同的服务类别(特价、凉菜、热菜、汤、酒水、饮料)选择不同的食物及数量,系统根据不同的食物计算出总价格,方便客人控制总价格,如果输入错误系统提供删除的功能,最后提交到后厨配餐子系统中.3配餐管理子系统:配餐员或者厨师根据最新的配餐信息,按照时间先后顺序配置食品,完成后提交给结算管理子系统中4结算管理子系统

45、:收银员根据服务员或者客人提供的桌号计算出总价格,客人如果提供会员卡或者会员号,系统自动验证卡号及会员身份并计算出相应的折扣及实付金额,根据相应的金额出具对应的发票5系统管理子系统:经理登陆子系统后,上传菜谱,管理菜谱及特价。在此子系统中,还实现了会员及用户、留言、桌位的管理。系统用例图系统用例【9】图是按照场景的形式对系统的功能做清晰地设计,具体用例有:登陆用例图、点餐用例图、配餐用例图、结账用例图、管理用例。用户通过餐饮管理系统可以实现用户登陆,如图:图3-4登陆用例服务员通过餐饮管理系统可以实现客人点餐,如图:图3-5点餐用例厨师通过餐饮管理系统实现厨师配餐,如图:图3-6配餐用例收银员

46、通过餐饮管理系统实现替客人结账功能,如图:图3-7结算用例经理通过餐饮管理系统实现对系统的设置等操作,如图:图3-8系统设置用例软件接口Windows操作系统所提供的各种API:1.基础服务(Base Services),提供对Windows系统可用的基础资源的访问接口。比如象:文件系统(file system)、外部设备(device)、,进程(process)、线程(thread)以及访问注册表(Windows registry)和错误处理机制(error handling)。这些功能接口位于,16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系统

47、文档中;以及32位Windows下的 kernel32.dll和advapi32.dll中。2.图形设备接口(GDI),提供功能为:输出图形内容到显示器、打印机以及其他外部输出设备。它位于16位Windows下的gdi.exe;以及32位Windows下的gdi32.dll。3.图形化用户界面(GUI),提供的功能有创建和管理屏幕和大多数基本控件(control),比如按钮和滚动条。接收鼠标和键盘输入,以及其他与GUI有关的功能。这些调用接口位于:16位Windows下的user.exe,以及32位Windows下的user32.dll。从Windows XP版本之后,基本控件和通用对话框控件

48、(Common Control Library)的调用接口放在comctl32.dll中。4.通用对话框链接库(Common Dialog Box Library),为应用程序提供标准对话框,比如打开/保存文档对话框、颜色对话框和字体对话框等等。这个链接库位于:16位Windows下的commdlg.dll中,以及32位Windows下comdlg32.dll中。它被归类为User Interface API之下。5.通用控件链接库(Common Control Library),为应用程序提供接口来访问操作系统提供的一些高级控件。比如像:状态栏(status bar)、进度条(progres

49、s bars)、工具栏(toolbar)和标签(tab)。这个链接库位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。它被归类为User Interface API之下。6.Windows外壳(Windows Shell),作为Windows API的组成部分,不仅允许应用程序访问Windows外壳提供的功能,还对之有所改进和增强。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows 95则在 shlwapi.dll中)。 它被归类为User Interface A

50、PI之下。7.网络服务(Network Services),为访问操作系统提供的多种网络 功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。 总体设计与实现系统架构设计本系统采用流行的C/S结构,既客户端/服务器端结构,客户端是基于.Net FrameWork平台的应用程序,服务器端是基于Sql Server 2005的数据库存储应用系统,采用面向对象【12】的开发语言C#【13】作为编程语言,使用Visual studio 2010作为开发工具以及应用流行的软件开发模型瀑布模型系统编码规范系统编码实现采用目前流行的面向对象的编程语言C#,因此为了今后的系统扩展及测试

51、维护,所以按照微软统一发布的C#编码规范,具体内容如下:类型的命名1.类名,以Class声明的类,都必须以名词或名词短语命名,体现类的作用。如:Class Indicator当类是一个特性(Attribute)时,以Attribute结尾,当类是一个异常(Exception)时,以Exception结尾:Class ColorSetException Class CauseExceptionAttribute 当类只需有一个对象实例(全局对象,比如Application等),必须以Class结尾,如 Class ScreenClass Class SystemClass。当类只用于作为其他类的

52、基类,根据情况,以Base结尾:MustInherit Class IndicatorBase,如果定义的类是一个窗体,那么名字的后面必须加后缀Form,如果是Web窗体,必须加后缀Page:Class PrintForm : Inherits Form * Windows窗体Class StartPage : Inherits Page * Web窗体2.枚举和结构:同样必须以名词或名词短语命名。最好体现枚举或结构的特点,如:Enum ColorButtons 以复数结尾,表明这是一个枚举Structure CustomerInfoRecord 以Record结尾,表明这是一个结构体3.委派

53、类型:普通的委派类型以描述动作的名词命名,以体现委派类型实例的功能:Delegate Sub DataSeeker (ByVal SeekString As String),用于事件处理的委派类型,必须以EventHandler结尾,如:Delegate Sub DataChangedEventHandler (ByVal Sender As Object, ByVal e As DataChangedEventArgs)4.接口:与其他类型不同,接口必须要由I作为前缀,并用形容词命名,突出表现实现接口的类将具有什么能力:Interface ISortable5.模块:模块不是类型,他的名称除

54、了必须以名词命名外,必须加以后缀Module:Module SharedFunctionsModule,上述所有规则的共同特点是,每个组成名称的词语都必须是大写开头,禁止完全大写或小写的名称。方法和属性的命名1.方法:无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。Sub Open(ByVal CommandString As String),Function SetCopyNumber(ByVal CopyNumber As Integer),参数需要指明ByVal还是ByRef,这一点写起来会让程序边长,但非常必要。如果没有特别情况,都使用B

55、yVal。参数的命名方法,参考后面“变量的命名方法”。需要重载的方法,一般不写Overloads,根据需要编写重载的方法。2.属性:原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。属性以简洁清晰的名词命名:Property Concentration As Single,Property Customer As CustomerTypes3.事件:事件是特殊的属性,只能在事件处理上下文中使用。命名的原则一般是动词或动词的分词,通过时态表明事件发生的时间:Event Click As ClickEventHandler,Event ColorChanged As Color

56、ChangedEventHangler变量和常数常数以表明常数意义的名词命名,一般不区分常数的类型:Const DefaultConcentration As Single = 0.01,在严格要求的代码中,常数以c_开头,如c_DefaultConcentration,但最好不要用它,它会带来输入困难。普通类型的变量,只要用有意义的名字命名即可,不可使用简称和无意义的名称诸如A,x1等,下面给出了良好的例子:Dim Index As IntegerDim NextMonthExpenditure As DecimalDim CustomerName As String不能起太长的名字,应该尽

57、量简洁,如下面的例子:Dim VariableUsedToStoreSystemInformation As String * 错误,太复杂了Dim SystemInformation As String * 正确,简单明了Dim sysInfo As String * 错误,过于简单特殊情况可以考虑一个字母的变量:Dim g As Graphic对于控件,应该指明控件的类型,方法是直接在变量后面加以类名:Friend WithEvents NextPageButton As Button * 按钮Friend WithEvents ColorChoicerPanel As Panel * 面

58、版Friend WithEvents CardFileOpenDialog As FileOpenDialog * 文件打开对话框等等,无需规定某种类型的变量的前缀,只需把类型写在后面就行了,试对比下列代码:btnCancel.Text = &CancelCancelButton.Text = &Cancel显然后者更能使阅读者明白变量的类型是一个按钮。Main函数代码int main(int argc, char *argv)QApplication a(argc, argv);QApplication:addLibraryPath(./plugins);QTextCodec:setCode

59、cForTr(QTextCodec:codecForName(GB2312); QTextCodec:setCodecForLocale(QTextCodec:codecForName(GB2312); QTextCodec:setCodecForCStrings(QTextCodec:codecForName(GB2312); QApplication:addLibraryPath(./sqldrivers);QDataBase* p = QDataBase:GetInstance();p-ConnectDataBase();QLoadManger dlg;if( dlg.exec() !=

60、 QDialog:Accepted )return 0;QMeal w;w.show();return a.exec(); 详细设计数据库模块功能设 数据库模块主要包括用户管理、菜品管理、会员管理三大部分,这三大部分都需要将数据保存到数据库,所以都归结到了数据库模块中。其中用户管理模块主要是包括用户的注册和用于用户登录的验证功能;而菜品管理模块主要是实现对菜品的添加,对菜品的修改,对菜品的删除三大功能;同样会员管理也主要是实现对会员添加,对会员的修改,以及对会员的删除。 图5-1登录模块功能设计登录模块主要实现的功能就是对系统管理员用户的注册以及对已经注册的用户进行用户信息验证,用来完成用户登

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论