版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要中国是举世闻名的美食大国,拥有五千年的饮食文化和巨大的餐饮市场。随着人民生活水平和生活方式的转变,渐渐的人们发现餐饮业具有巨大的投资市场。中国市场的竞争尤为剧烈,而且随着餐饮业的迅速扩展,其中所暴露的问题也是不容无视的,如餐饮业管理人才的专业化程度不够导致内供缺乏,餐厅缺少一套现代企业制度和监督管理体制,效劳管理应变能力差,缺乏先进的信息工具等。所以,餐饮业管理从观念意识、经营思想和管理水平还有待专业化。因此,开发实用型点菜系统是餐饮业开展的必然趋势。本系统是基于Linux系统下开发的餐厅点菜系统,运用效劳器/客户端开发模式,采用的是RedHat企业版5,图形界面功能由QT类开发,后台数据库采用SQLITE3,网络编程使用的协议是Linux支配的SocketTCP/IP协议。前台划分为前台管理,点菜管理,后厨管理,数据库管理,效劳器五个功能模块。本系统的主要作业流程,从顾客在前台查看餐桌空闲空闲状态,入桌点菜,可以加菜、删菜等,提交菜单,后厨按照菜单做菜,顾客到前台结账,前台打印账单,顾客结账,实现了开台、点菜、加菜、删菜等系统设计功能。关键词:餐厅点菜系统;Linux;QT;SQLITE3AbstractChinaisworld-famouscatebigcountry,withfivethousandyearsofdietcultureandgreatfoodmarket.Asthepeople'slivingstandardandlifetransitions,graduallypeoplefoundrestaurantindustryhasgreatinvestmentmarket.Chinawasparticularlyintensemarketcompetition,andwiththerapidexpansionofcateringindustry,whichisexposedtotheproblemisalsonotallowtoignore,suchascateringmanagementpersonnelofprofessionalenoughtoleadtointernalforshortage,lackofarestaurantmodernenterprisesystemandsupervisionandmanagementsystem,servicemanagementstrainabilityispoor,lackofadvancedinformationtoolsetc.So,cateringmanagementfromtheideaconsciousness,managementthoughtandmanagementlevelremainstobeprofessional.Therefore,thedevelopmentofpracticalordersystemisaninevitabletrendinthedevelopmentofcateringindustry.ThissystemisbasedonLinuxsystemofdevelopmentordersystemrestaurant,usingserver/clientdevelopmentmode,useisRedHatenterpriseversion5,graphicinterfacefunctionsbyQTkindofdevelopment,thebackenddatabaseusingSQLITE3,networkprogramminguseagreementisLinuxdominateSocketoftheTCP/IPprotocol.Thefrontdeskisdividedintothefrontdeskmanagement,ordermanagement,managementafterhutch,databasemanagement,serverfivefunctionmodule.Thesystem'smainoperationprocess,fromthecustomerinthefrontdeskchecktablefreeidlestate,intothetabletoorder,canaddfood,deletevegetablesetc,submitthemenu,kitchenaccordingtomenuaftercooking,thecustomertofrontdeskcheck,frontdeskprintbill,customercheckout,realizethefounding,order,andfood,deletevegetablesetcsystemdesignfunctions.Keywords:Restaurantordersystem;Linux;QT;SQLITE3目录摘要 IAbstract II第1章绪论 11.1选题目的和意义 11.2国内外综述 11.3论文研究内容 2第2章相关知识概述 32.1系统开发环境 32.2系统的结构 42.3应用的相关技术 52.3.1QT图形界面 52.3.2SQLite数据库 52.3.3Linux系统支配的TCP/IP协议 6本章小结 8第3章系统分析及设计 9系统需求分析 9功能需求 9性能需求 9系统开发环境 10系统总体功能模块 103.4数据库结构设计 12本章小结 12第4章软件设计 13数据库表结构设计 13各功能模块的详细设计 13效劳器管理模块 134.2.2前台管理模块 144.2.3顾客点菜端管理模块 154.2.4后厨管理系统 20数据库管理模块 20本章小结 22第5章系统测试 23测试方法与原那么 235.1.1黑盒测试 235.1.2测试根本原那么 235.2系统测试 235.3测试小结 26结论 27致谢 28参考文献 29附录A 30附录B 35第1章绪论1.1选题目的和意义面对餐饮业多元化的经营现状,经营的特色、规模、出品这些因素的不同,带给餐饮企业的那么是不同的标准和工作流程和方法,面对着这解决方法不一的情况,对人才的专业化程度的要求也相应地提高了,然而在国内市场上,餐饮业人才供给缺乏,在这样的两难情况下,信息系统得出现暂缓了这一紧张局面。首先,餐饮管理信息系统不是单纯的用于结帐计算的工具,它有着科学的、标准的管理体系,它是通过对目前餐饮市场的具体情况科学的调研分析后设计而成的,它能够针对中餐因其菜品的多样化和特色化的效劳很难实现标准化管理,使中餐企业的本钱控制很难实现这些问题给与解决。其次,餐饮管理信息系统能够给出具体的相应的符合企业自身要求的较科学的标准化管理流程,这暂时缓解了专业人才的需求,通过使用该系统就能完成专业人员所要做的事。最后,餐饮管理信息系统可以针对企业的经营现状而做出科学的分析,使得企业对市场的应变能力得到了提高,从而通过餐饮管理信息系统来实现强化管理、降低本钱、堵漏节流等作用。更好的完善企业的经营管理,提高企业自身的竞争实力。另一方面,基于ARM和Linux的嵌入式系统,具有成熟的嵌入式硬件结构和丰富的开放软件资源,优良的性能和广泛的市场定位,这无疑对开发工作和学习研究是一个重大帮助;在GUI〔图形用户界面〕的选用上,使用基于C++语言面向对象编程的应用程序开发软件库Qt,它聚集了丰富的C++类提供开发应用程序用户界面所需要的全部内容,具有优良的跨平台性能和丰富的API函数及开发文档。另外,当前量产的普通PDA和PC机硬件上已经根本满足点菜需求,使自行研究的专用硬件设备不再具有明显的本钱优势,为此,本课题集合嵌入式Linux和Qt开发应用等技术,以程序软件的通用性和易用性为方向,构造能够方便移植的软件。提高餐饮业的效劳质量,并为自身研究学习嵌入式系统和GUI应用开发提供一个良好的平台。国内外综述餐厅点菜系统代表着当今餐饮业解决方案中最尖端的领先科技,它集网络通信技术与移动电脑终端技术与一身,此高端技术应用在餐饮行业中,即使在美国也是2001年才在洛杉矶的一家高档餐厅中诞生;国内于2002年3月份方有一例高档的餐馆在上海露面,开中国餐饮管理真正数字化之先河,在餐饮业轰动一时。自此,点菜系统市场上豪杰并起,全面促进了餐饮业信息化管理的普及和开展。目前,国内已经有不少公司开发出电子点菜系统,例如上海工理电子的点菜通、餐饮通等,北京辰森计算机系统的手持点菜宝等。有些大型的餐饮企业已经采用了这两个公司的产品,例如,花雨大酒店、上海美林阁等采用了上海工理电子的点菜通或餐饮通;向阳渔港集团、中国全聚集团、四川文杏大酒楼那么采用了北京辰森计算机系统的手持点菜系统。但是由于本钱等原因使电子点菜系统的餐馆还比拟少,市场需求很大。随着技术的进步及餐饮业的剧烈竞争,电子点菜系统将会越来越普遍,并越做越好。市场上出现的点菜系统都是作为餐厅信息化管理系统的一局部出现的,它们除了实现根本的点菜功能外,为了便于客户及管理者的使用,还添加了许多其他的功能,例如,查询当前餐馆的资源使用情况,记录营业历史,当前工作状态等。由此可见,开发餐厅点菜系统具有重大的意义。首先,提高运营效率与降低运营本钱,使用餐厅点菜系统可以加快点菜速度,减少人力资源的投入,防止跑、冒、漏;其次,提升餐厅品牌与形象,餐厅点菜系统是一个高科技产品,它代替传统的纸笔式点菜方式给人一种高贵的感觉;最后,营造一个安静、舒服的就餐环境,传统的餐厅点菜方式在某些环节中出现大声喧哗的场面,餐厅点菜系统那么可以防止这类情况的发生。如今开源的嵌入式Linux操作系统已经开展的非常成熟,其性能并不亚于很多商业操作系统,而且,它支持的上层软件非常多,数据库方面的有MySQL、Sqlite等,用户图形界面系统有Qt、MiniGUI和Microwindows等。因此,构造一个基于嵌入式Linux的点菜系统在技术上来说已经不是困难的事。论文研究内容本文设计并实现了一个功能简单的餐厅点菜系统,基于该系统可以容易过渡到实用的点菜系统。在该系统的实现过程中设计到许多技术,其中主要有嵌入式技术、数据库技术、用户图形界面编程技术等。餐厅点菜系统一般都涉及很多数据,而且还要对数据进行各种处理,因而绝大局部餐厅点菜系统都用数据库管理系统来管理数据。数据库管理系统一般依赖与某种操作系统,因此,也要选择一个适宜的操作系统。另外,为了方便用户的使用,还要设计一个人性化的图形界面。餐厅点菜系统中,管理数据的地方与使用数据的地方往往不在同一个站点上,需要用到计算机网络将二者联系起来。在本文设计的系统中使用了MySQL来管理数据,操作系统选用了Linux,用户图形界面引入了Qt。本课题通过研究现有的电子点菜系统的解决方案,以当代广泛应用的Linux系统、Qt图形界面、SQLite数据库、系统支持的TCP/IP网络通信协议来实现的点菜系统的终端。具体包括以下内容:1.Linux系统开发平台的构建:使用是全球应用最广泛的RedHatLinux,建立根本的开发环境,建立编译工具,安装用于程序开发的Qt,用于数据管理的SQLite3。2.点菜终端程序设计:首先利用Qt设计器规划点菜终端的程序的大致界面,然后遵循Qt编程一般规那么编写代码,主要为主窗口类的实现,实现开台、点菜、加菜、删菜等功能,并在主程序中添加国际化和中文支持,编译后进行测试。3.数据库的设计:首先利用Qt设计器规划数据库管理程序的大致界面,然后遵循Qt编程一般规那么编写代码,主要为主窗口类的实现,数据库的管理功能,包括删除菜单列表、添加菜单列表,查询菜单等功能,并在主程序中添加中文支持。第2章相关知识概述本系统主要运用到的开发系统环境是Linux系统,选择的是RedHat企业版5,该系统是采用C/S〔客户端/效劳器〕架构开发的,其中运用到的技术有QT图形界面的开发、SQLITE3数据库的开发及socket编程。系统开发环境Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。:Linux操作系统是UNIX操作系统的一种克隆系统。Linux于1991年8月在Usenet新闻组上正式发布〔Freeminx-likekernelsourcesfor386-AT〕。其创始人是林纳斯·本纳第克特·托瓦兹〔LinesBenedictTornados〕,出生于芬兰赫尔辛基市。他毕业于赫尔辛基大学计算机科学系。早期的版本内核发布于1994年3月14日,两年之后版本发布,此时,Linux功能已经非常强大,只是界面设计不是很理想。Linux被群众所关注是在1998年3月,当Netscape承诺在GNU方案的GPL〔GeneralPublicLicense,通用公共许可证〕的一个修订版本的根底上公开NetscapeCommunicatorInternet套件的源代码的时候。同年7月,世界上最大的两家关系数据库厂商Informix和Oracle宣布把他们的数据库产品移植到了Linux上。一个月后,Intel和Netscape公司购置了Linux发布商中的领头羊RedHat公司的少量股票,专项资金投入了Linux世界。次年,Linux成为了IT市场的年青分子,随着RedHat和Valium成为上市的Linux公司,Linux得到了软硬件厂商的投资支持,很快便众所周知,公众对Linux的兴趣与日俱增,相关的群众媒体也蜂拥而至,几乎每周都有与Linux相关的消息发布,此时的Linux已经不仅仅是爱好者的玩具了。如今Linux已经是软件开发人员的首选开发环境,其发行版超过了三百个,最普遍被使用的发行版有大约十二个,例如Bantu,RedHat,Defiant,Fedora等。通常来讲,一个Linux发行版包括Linux内核,将整个软件安装到电脑上的一套安装工具,各种GNU软件,其他的一些自由软件,在一些特定的Linux发行版中也有一些专有软件。发行版为许多不同的目的而制作,包括对不同计算机结构的支持,对一个具体区域或语言的本地化,实时应用,和嵌入式系统。Linux主要作为Linux发行版〔通常被称为"distort"〕的一局部而使用2.Linux操作系统特点:Linux是一款开放源代码的操作系统。用户可以通过任何途径免费获得它的源代码,并可以任意修改其源代码。这是其他的操作系统所做不到的。由于它的开放性使无数程序员积极的参与了Linux的修改、编写工作,使得Linux吸收了无数程序员在根据自己的兴趣和灵感对其所做的精华改变,并不断壮大。Linux支持多任务、多用户。多任务使得Linux可以同时独立运行多个程序而互不影响,为大型的多任务工程提供保障。多用户使得各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。Linux提供了先进的网络支持。它的网络功能和其内核紧密相连,用户可以轻松实现网页浏览、文件传输、远程登陆等网络工作。并且可以作为效劳器提供WWW、FTP、E-Mail等效劳。Linux完全运行于保护模式,其中有对读、写进行权限控制、审计跟踪、核心授权等技术。Linux以它较高的稳定性在网络效劳器上利于不败之地。Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,业界归纳为什么Linux嵌入式操作系统开展如此之快的三大原因是:第一,Linux在嵌入式系统所需的实时性、电源管理等核心技术不断开展,成熟可期。第二,国际标准组织OSDL、CELF等,持续建立嵌入式Linux相关标准,有效解决版本分歧与兼容性问题。第三,业界主导组织、开发厂商等不断推出嵌入式Linux相关开发工具、维护系统。2001年1月份发布的Linux2.4版内核已经能够完全支持Intel64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。Linux支持数十种文件系统格式。普通文件,纯文本文件,二进制文件,数据格式文件,目录,连接文件,设备与设备文件,块设备文件,字符设备文件,套接字和管道等。采用先进的内存管理机制,更加有效的利用物理内存。主要有页面、连续内存区管理和非连续存储区管理机制。inux的根本思想:Linux的根本思想有两点,第一,一切都是文件;第二,每个软件都有确定的用途。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的根本思想十分相近。2.2系统的结构传统的C/S体系结构常采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统开发不同版本的软件,加之产品的更新换代快,已经很难适应百台电脑以上局域网用户同时使用。而且代价高,效率低。目前,C/S结构的根本原那么是将计算机任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布〞原那么。客户端完成数据处理,数据表示以及用户接口功能;效劳器端完成DBMS的核心功能。这种客户请求效劳、效劳器提供效劳的处理方式是一种新型的计算机应用模式。C/S结构的优点是能充分发挥出客户端PC的处理能力,很多工作可以在客户端处理后再提交给效劳器。对应的优点就是客户端响应速度非常快。缺点主要反映以下3个方面:1.只适用于局域网。而随着互联网的飞速开展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。2.客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级本钱非常高。3.对客户端的操作系统一般也会有限制。可能适应于Win98,但不能用于win2000或WindowsXP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。2.3应用的相关技术本系统应用的相关技术主要有QT的图形界面的开发、数据库的SQLITE的应用、还有运用到了TCP/IP协议。2.3.1QT图形界面1.Qt概念:Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。QT是完全面向对象的,很容易扩展,并且允许真正地组件编程。所以说QT的进步开展将会推进诺基亚桌面等方面的大幅度进步。2.Qt的特点:Qt是一款面向对象的图形界面开发工具。Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的平安类型来替代callback,这使得各个元件之间的协同工作变得十分简单。它具有丰富的API。Qt包括多达250个以上的C++类,还提供基于模板的collections,serialization,file,I/Odevice,directorymanagement,date/time类。甚至还包括正那么表达式的处理功能。Qt支持2D/3D图形渲染,支持OpenGL。真正使得Qt在自由软件界的众多Widgets(如Lesstif,Gtk,EZWGL,Xforms,fltk等等)中脱颖而出的还是基于Qt的重量级软件KDE。3.QtCreator:在发布Qt4.6的同时,作为Qt开发跨平台IDE的QtCreator也发布了更新版本。QtCreator1.3和Qt4.6共同构成的QtSDK,包含了开发跨平台应用程序所需的全部功能。QtCreator是一个用于Qt开发的轻量级跨平台集成开发环境。QtCreator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。QtCreator包含了一套用于创立和测试基于Qt应用程序的高效工具,包括:一个高级的C++代码编辑器上下文感知帮助系统可视化调试器源代码管理工程和构建管理工具。2.3.2SQLite数据库SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比方Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月,至今已经有10个年头,SQLite也迎来了一个版本SQLite3已经发布。SQLite的具有以下特性:1.ACID事务;–无需安装和管理配置;3.储存在单一磁盘文件中的一个完整的数据库;4.数据库文件可以在不同字节顺序的机器间自由的共享;5.支持数据库大小至2TB;6.足够小,大致3万行C代码,250K;7.比一些流行的数据库在大局部普通数据库操作要快;8.简单,轻松的API;9.包含TCL绑定,同时通过Wrapper支持其他语言的绑定。;10.良好注释的源代码,并且有着90%以上的测试覆盖率;11.独立:没有额外依赖;12.Source完全的Open,你可以用于任何用途,包括出售它;13.支持多种开发语言,C,PHP,Perl,Java,C#,Python。基于SQLITE有诸多特性,我在设计该点菜系统时应用的数据库选择了它,它虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,同时还支持事务处理功能等待。2.3.3Linux系统支配的TCP/IP协议TCP/IP是一个网络协议族的名字,协议是所有软件产品必须遵守的、能够保证各种软件产品能够正确通讯的规那么。协议还定义了每一局部数据块怎样管理所传输的数据。精确一点说,一个协议定义了两个应用程序或是计算机之间能够进行互相通讯,对于其中的每一个〔应用程序或计算机〕都保证使用同样的标准。TCP/IP代表传输控制协议/网络协议,它是做为软件的网络组成部件而设计的。每个TCP/IP的协议都有他专门的工作,比方万维网〔WWW〕,发送电子邮件〔E-mail〕,传输文件〔Ftp〕,提供远程登陆效劳等。从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。TCP/IP协议并不完全符合OSI的七层参考模型。OSI是传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。由于ARPNET的设计者注重的是网络互联,允许通信子网〔网络接口层〕采用已有的或是将来有的各种协议,所以这个层次中没有提供专门的协议。实际上,TCP/IP协议可以通过网络接口层连接到任何网络上,例如X.25交换网或IEEE802局域网。TCP/IP协议的具有以下3个特点:1.对数据可靠性的要求:对数据要求高可靠性的应用需选择TCP协议,如验证、密码字段的传送都是不允许出错的,而对数据的可靠性要求不那么高的应用可选择UDP传送。2.应用的实时性:TCP协议在传送过程中要使用三次握手、重传确认等手段来保证数据传输的可靠性。使用TCP协议会有较大的时延,因此不适合对实时性要求较高的应用,如VOIP、视频监控等。相反,UDP协议那么在这些应用中能发挥很好的作用。3.网络的可靠性:由于TCP协议的提出主要是解决网络的可靠性问题,它通过各种机制来减少错误发生的概率。因此,在网络状况不是很好的情况下需选用TCP协议〔如在广域网等〕,但是假设在网络状况很好的情况下〔如局域网等〕就不需要再采用TCP协议,而建议选择UDP协议来减少网络负荷。TCP/IP协议的运作机制是IP层负责接收由更低层〔网络接口层例如以太网设备驱动程序〕发来的数据包,并把该数据包发送到更高层TCP层,相反,IP层也把从TCP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址〔源地址〕和接收它的主机的地址〔目的地址〕。高层的TCP效劳在接收数据包时,通常假设包中的源地址是有效的。也可以这样说,IP地址形成了许多效劳的认证根底,这些效劳相信数据包是从一个有效的主机发送来的。IP确认包含一个选项,叫作IPsourcerouting,可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的效劳来说,使用了该选项的IP包好似是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。许多依靠IP源地址做确认的效劳将产生问题并且会被非法入侵。TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要撤除连接,由于TCP是面向连接的所以只能用于点对点的通讯。TCP提供的是一种可靠的数据流效劳,采用“带重传的肯定确认〞技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口〞的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向上传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的效劳程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。面向连接的效劳〔例如Telnet、FTP、rlogin、XWindows和SMTP〕需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP〔发送和接收域名数据库〕,但使用UDP传送有关单个主机的信息。基于TCP/IP有诸多特点,它的数据可靠性刚好符合本系统设计的要求数据的平安性,同时它具有很好的网络的平安性,保证餐厅点菜系统能够很好的运行,所以我在设计该系统的时候选择了该协议来实现通信。TCP/IP协议的实现的流程图如下列图2-1所示。客户端客户端效劳器端socketsocketrecv/recvfromsend/sendtoclosesend/sendtoclosebindlistenacceptconnectrecv/recvfrom图2-1TCP/IP协议流程图本章小结本章主要详细介绍了该点菜系统应用的相关的技术,主要介绍了开发的系统环境Linux系统和用到的数据库SQLITE3,运用到的图形界面开发工具QT,运用到的网络技术TCP/IP协议等概念,并且介绍了相关技术的特点。第3章系统分析及设计系统需求分析随着局域网技术与电子商务的深入开展,餐厅自助点菜系统也在国内外蓬勃开展,并日益深入到人们的生活当中。餐厅自助自助点菜在国外早已成为一种时尚。餐厅每日消费人数的巨大,自助点菜是一种必不可少的工具,而国内的点菜系统还不成熟,所以本课题将设计实现一个餐厅自助点菜系统。本系统根据一般餐厅的需要,分析本系统的业务流程如下:1.效劳器负责前台、厨房、数据库管理、点菜终端的通信;2.点菜终端从数据库获取菜品信息;3.前台负责查询餐台的空闲状态和结账并打印账单;4.顾客点菜,并填入数据库;5.效劳器接受点菜信息并发送给后厨;6.后厨开始按照菜单信息做菜;7.用户到前台结账;8.结果被显示给用户,顾客结账。功能需求用户在客户端点菜,通过局域网传送到效劳器,后厨接受从效劳器接受到菜单信息,客户在前台结账。同时有个数据库管理界面可以实现菜品信息的管理。根据系统功能的需求,分析了所需要的系统总功能结构如表3-1所示。表3-1功能需求名称功能客户端设置根底信息,更新菜谱,点菜,结账,打印账单;效劳器负责各终端间的通信;性能需求本系统性能要求主要是以下5个方面。1.系统处理的准确性和及时性:系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足信息处理的需求。由于餐厅自助点菜系统客户端的点菜对于整个系统的功能和性能完成举足轻重。作为客户自助点菜的模块,其准确性很大程度上决定了系统的成败。在系开发过程中,必须保证系统的准确性。2.系统的开放性和系统的可扩充性:餐厅自助点菜系统在开发过程中,应该充分考虑以后的可扩充性。例如新增菜品,会员充值等。所有这些,都要求系统提供足够的手段进行功能的调整和扩充。而要实现这一点,应通过系统的开放性来完成。3.系统的易用性:餐厅自助点菜系统是直接面对用户的,而用户往往对计算机并不是非常熟悉。这就要求系统能够提供良好的用户接口,易用的人机交互界面。要实现这一点,就要求系统应该尽量使用用户熟悉的术语和中文信息的界面。4.系统的标准性:系统在设计开发使用过程中都要涉及到很多计算机硬件、软件。所有这些都要符合主流国际、国家和行业标准。例如在开发中使用的操作系统、网络系统、开发工具都必须符合通用标准。如标准的数据库操纵界面、作为业界标准的TCP/IP网络协议及ISO9002标准所要求的质量标准等;同时,在自主开发本系统时,要进行良好的设计工作,制订行之有效的软件工程标准,保证代码的易读性、可操作性和可移植性。5.系统的先进性:目前计算系统的技术开展相当快,做为餐厅管理系统工程,应该在系统的生命周期尽量做到系统的先进。这一方面通过系统的开放性和可扩充性,不断改善系统的功能完成。另一方面,在系统设计和开发的过程中,应在考虑本钱的根底上尽量采用当前主流并先进且有良好开展前途的工具。系统开发环境本系统是基于Linux系统中Qt来设计前台应用系统的可视化界面,而后台局部数据库的实现采用SQLite3来构建。Linux系统采用了可视化的程序设计,具有面向对象的可视化设计工具,结构化的程序设计语言,提供了易学易用的应用程序集成开发环境,支持多种数据库系统的访问,Linux系统中的Qt提供了可视化的界面。用QtCreator可以动态的调整用户风格图形界面,直到满意为止。系统总体功能模块根据对餐厅点菜系统需要实现的功能进行需求分析,将本系统的前台划分为前台管理,点菜管理,后厨管理,数据库管理,效劳器五个功能模块;系统功能模块如图3-1所示。查询查询餐台信息结账查询餐台信息结账打印账单前台管理模块效劳器后厨管理模块删菜询问接收菜单做完顾客点菜模块点菜加菜退菜开始图3-1系统总功能模块餐厅点菜系统的功能模块概要描述如表3-2所示。表3-2功能模块描述表名称功能效劳器负责前台,点菜终端,后厨终端间的通信;前台终端负责查询餐台空闲信息,顾客结账,并打印账单信息;点菜终端设置根底信息,更新菜谱,点菜,加菜,删菜;后厨终端接收顾客点菜的菜单信息进行做菜;数据库管理负责管理数据库的菜菜品信息;1.效劳器功能:效劳器功能是整个系统的传输通道,是系统的重中之重。当顾客点菜客户端与效劳器连接后,可通过此将点菜信息发送到后厨。后厨和效劳器连接后,可以将做完的菜发送到效劳器,效劳器将信息发送到点菜客户端和前台。2.前台终端管理:前台是本系统重要组成局部之一。本模块可以查询当前餐台的空闲信息、接收效劳器发送过来顾客点菜的消费菜单信息,并打印菜单给客户。细分的功能模块如图3-2。结账前台管理模块结账前台管理模块查询餐台信息打印账单查询餐台信息打印账单图3-2前台终端模块3.点菜终端:点菜终端是本系统给顾客的使用的,是本系统的重要组成局部。本模块将用户点菜单菜肴发送到效劳器,并将数据信息添加到数据库。细分的功能模块如图3-3所示。选择菜肴功能是将用户选择的菜肴存与表中,用户可以添加与删除。点菜信息发送功能是将用户点菜信息以结构体的形式发送到效劳器,并添加到相应的数据库中。点菜点菜点菜信息发送点菜终端选择菜肴删菜加菜图3-3点菜终端模块4.后厨终端:后厨终端从效劳器接收到顾客点的菜肴,可以继续接受顾客加菜的菜单、按照菜单做菜,并可以询问菜是否需要退菜。细分功能如图3-4所示。询问删菜询问删菜做完接收菜单后厨管理模块图3-4后厨终端模块5.数据库管理:数据库管理管理菜单数据库信息,包括删除菜单列表、添加菜单列表,查询菜单等功能。细分数据库管理功能模块如图3-5所示。删除菜单列表功能是将删除不做的菜肴信息。添加菜单列表功能是允许可以添加新的菜肴信息。查询菜单功能是查询是否有哪道菜肴信息。数据库管理模块查询菜谱信息添加菜谱信息删除菜谱信息数据库管理模块查询菜谱信息添加菜谱信息删除菜谱信息图3-5数据库管理模块3.4数据库结构设计根据对本系统数据的分析,系统的数据库设计了一个表:菜肴信息表。该表用于存放菜肴的信息,包括菜肴的名字、菜肴的类别、菜肴的价格、菜肴的描述。本章小结本章主要对该系统设计进行了需求分析、功能分析,最后做出详细设计方案。设计中主要将餐厅点菜系统分为五个模块,每个模块的需求和实现的功能进行了阐述和详细设计过程分析。第4章软件设计软件采用面向对像的设计方法,考虑到对计算效率的要求,采用C++编程语言,开发环境为LinuxRedHat企业版5,效劳器编译工具为gcc,其余编程工具为g++编译器,采用C++标准库函数和QT类库。数据库表结构设计本系统数据库中建立了一张菜单信息表,该表详细结构如图表4-1所示。表4-1菜单信息表名称类型(长度)空属性Idvarchar(20)nouniqueIddvarchar(20)yesNamevarchar(20)yesPricevarchar(20)yesImagepathvarchar(20)yesAboutvarchar(20)yes各功能模块的详细设计本系统有五个模块组成,分别为server〔效劳器〕,前台管理模块,顾客点菜管理模块,后厨管理模块,数据库管理模块等。效劳器管理模块效劳器模块主要是用C语言编写的,主要是为其他模块间的通信。其中主要运用到TCP/IP协议通信的。运用到了TCP/IP协议函数,首先socket()函数获得套接字描述符,然后用bind()函数将描述符捆绑到IP上,监听listen()函数,其中可以设置客户端的个数。然后就是等待客户端的请求连接用accept()函数,其中运用到了线程,创立线程函数pthread_create()用来处理客户的的请求。主要实现代码如下:if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("Socketerror!");exit(0);}/*效劳器端填充sockaddr_in结构*/bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=inet_addr("");server_addr.sin_port=htons(portnumber);/*捆绑sockfd描述符到IP地址*/if(bind(sockfd,(structsockaddr*)&server_addr,sizeof(server_addr))==-1){perror("Binderror!");exit(0);}/*设置允许连接的最大客户端数*/if(listen(sockfd,10)==-1){perror("Listenerror!");exit(0);}address_size=sizeof(client_addr);while(1){inti=0;/*效劳器阻塞,等待客户程序建立连接*/if((accefd=accept(sockfd,(structsockaddr*)&client_addr,&address_size))==-1){perror("Accepterror!");exit(0);}sock_accept[i]=accefd;i++;/*创立线程,处理客户端请求*/pthread_ttid;pthread_create(&tid,0,run,&accefd);/*效劳器主程序返回继续等待下一次客户端连接*/}close(sockfd);4.2.2前台管理模块前台管理模块主要查看餐台空闲信息,和打印账单两局部组成。餐台空闲信息主要是根据Button组件文本显示判断的是否是空闲状态,空闲时,当顾客来时如空闲点击按钮就connect()触发了槽函数table1(),其中槽函数中用到Button类的成员函数setText(),将button的文本信息设置为“1号有人〞。同样,当顾客结账时点击按钮触发槽函数打印账单给顾客查看,同时将Button的文本信息设置为“2人桌〞,账单是用QListWidget类来显示。主要实现代码如下:voidforegroundDialog::table1(){ QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));staticboola=true;if(a){button1->setText(tr("1号有人"));a=false;}else//结帐{shou();inti=0;doublesum=0;//将客人消费情况添加到账单列表QListWidget*list=newQListWidget;QStringstr1=QString(tr("菜名价格数量"));list->insertItem(0,str1);while(menu1[i].num!=0){chara[50];memset(a,0,sizeof(a));sprintf(a,"%d%d",menu1[i].price,menu1[i].num);list->insertItem(i+1,QString(tr(menu1[i].name)+tr("")+tr(a)));sum+=menu1[i].price*menu1[i].num;i++;}QStringa;charaf[10];sprintf(af,"%d",menu1[0].buff[1]);a.append(QString("%1").arg(sum));QStringstr2=QString(tr("桌号:")+tr(af)+tr("共计"));list->insertItem(i+1,str2+a);list->show();//添加当前时间到账单time_tlt;lt=time(NULL);charaa[80];memset(aa,0,sizeof(aa));sprintf(aa,"%s",ctime(<));list->insertItem(i+2,QString(tr(aa)));button1->setText(tr("1号(2人桌)"));a=true;}4.2.3顾客点菜端管理模块点菜端是顾客从前台获知该餐桌空闲,那么开台,并开始点菜,点菜界面可以根据菜谱信息点击选择按钮,如果需要删除可以点击删除按钮,当确认后点击提交按钮就将顾客点菜信息发送到效劳器,效劳器并发送到后厨。首先创立套接字描述符Socket()函数,然后连接效劳器connect()。主要代码实现如下:/*客户程序建立sockfd描述符*/if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)/*客户程序填充效劳端的资料*/bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=inet_addr("");server_addr.sin_port=htons(portnumber);/*客户程序发起连接请求*/if(connect(sockfd,(structsockaddr*)&server_addr,sizeof(structsockaddr))==-1)开台界面有两个选择都是用QComboBox类,可以选择现在是几号桌和人数,点击开台Button同样触发槽函数slotOkButton()的发生,会让点菜界面显示用到QWidget类中的成员show()函数。再send()将开台信息发送到效劳器。点击主要实现代码如下:voidwelcomeDialog::slotOkButton()//开台{ if(star==true) { QStringst=numberComboBox->currentText(); tableNumber=st.toInt(); diancaiDialog*dianc=newdiancaiDialog; dianc->show(); SeleteList[0].buffer[0]=1; SeleteList[0].buffer[1]=tableNumber; send(sockfd,SeleteList,sizeof(SeleteList),0); star=false; } else {;}}菜单列表是从数据库列表中获取的,首先用QSqlDatabase类中的addDatabase()成员函数加载数据库驱动,然后用setDatabaseName()成员函数指明的数据库名称,在用open()成员函数翻开并获取菜单信息用QLable类组件显示。主要实现代码如下:QSqlDatabasedata=QSqlDatabase::addDatabase("QSQLITE");//加载数据库驱动 data.setDatabaseName("database");//指明数据库名称 //翻开数据库if(!data.open()){ QMessageBox::critical(0,QObject::tr("Datebaseerror"), data.lastError().text());}QSqlQueryquery;query.exec("select*frommenubook");点菜功能实现主要是中选择按钮按下时,触发的槽函数slotImButton(),实现菜品选择功能,将选择菜的信息添参加已选列表,并存入SeleteList中,分为提交前选菜和提交后加菜两局部。主要代码实现如下:voiddiancaiDialog::slotImButton()//选择{ staticintn=0; QStringlistText=imLabel->text(); QStringlistText1=im1Label->text(); QStringlistText2=spinBox->text(); QStringtext; text=listText1+listText; text+="\t"; text+=listText2; okList->insertItem(n,text); spinBox->setValue(1); okList->setCurrentRow(0); ints=okList->count()-1; //遍历MenuBook,查找与宣传显示相同名称的菜,并将其信息存入SeleteList或additem for(intj=0;j<m;j++) { if(listText==MenuBook[j].Name) { QByteArrayba=MenuBook[j].Name.toUtf8(); strcpy(SeleteList[s].nam,ba.data()); SeleteList[s].num=listText2.toInt(); SeleteList[s].pric=MenuBook[j].Price; printf("add:%s\n",SeleteList[s].nam); if(pro==false)//加菜 { staticintss=0; strcpy(additem[ss].addnam,ba.data()); additem[ss].addnum=listText2.toInt(); additem[ss].addpric=MenuBook[j].Price; printf("name:%snum:%d\n",additem[ss].addnam,additem[ss].addnum); ss++; } } }}当删除按钮按下时,触发的槽函数slotDelete(),实现提交前从已选列表及SeleteList中删除,提交后删菜功能。主要实现代码如下:voiddiancaiDialog::slotDelete()//删除{ if(okList->count()==0) del=false; else del=true; if(del==true) { QStringtext=okList->currentItem()->text(); intcou=okList->count(); introw=okList->currentRow(); //获取当前选择工程,并将其从已选列表和SeleteList中删除QListWidgetItem*item=okList->takeItem(okList->currentRow()); deleteitem; intf; for(f=cou-row-1;f<cou;f++) { SeleteList[f]=SeleteList[f+1]; memset(SeleteList[cou].nam,0,sizeof(SeleteList[cou].nam)); SeleteList[cou].num=0; ipric-=SeleteList[cou].num*SeleteList[cou].pric; } //提交后删菜 if(pro==false) { intm; ipric=0; for(m=0;m<okList->count();m++) ipric+=SeleteList[m].pric*SeleteList[m].num; printf("ipric:%d\n",ipric); QByteArrayba=text.toUtf8(); strcpy(additem[0].addnam,ba.data()); additem[0].bufer[0]=4; additem[0].bufer[1]=tableNumber; additem[0].addnum=1; for(m=0;m<6;m++) additem[0].addnam[m]=''; send(sockfd,additem,sizeof(additem),0); } } else//del==false {;}}当提交按钮按下时,触发的槽函数on_listOkButton_clicked(),实现将选择的菜品信息seletelist结构体send()发送至效劳器的功能。主要代码实现如下:voiddiancaiDialog::on_listOkButton_clicked()//提交{ QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8")); //将选择的菜发送至效劳器 if(pro==true) { SeleteList[0].buffer[0]=2; SeleteList[0].buffer[1]=tableNumber; send(sockfd,SeleteList,sizeof(SeleteList),0); } //将添加的菜发送至效劳器 elseif(pro==false) { additem[0].bufer[0]=5; additem[0].bufer[1]=tableNumber; send(sockfd,additem,sizeof(additem),0); intii=0; for(ii=0;additem[ii].addnum!=0;ii++) printf("%s%d\n",additem[ii].addnam,additem[ii].addnum); memset(additem,0,sizeof(additem)); } //计算消费金额 intm; ipric=0; for(m=0;m<okList->count();m++) ipric+=SeleteList[m].pric*SeleteList[m].num; QMessageBox::about(this,"ok",tr("提交完成")); pro=false;}当结账按钮按下时,触发此槽函数on_listPayButton_clicked(),结算清单,send()发送至效劳器。结账功能代码实现如下:voiddiancaiDialog::on_listPayButton_clicked()//结帐{if(pro==true){;}else{//建立消息框QDialog*dlg= newQDialog;dlg->setWindowTitle(tr("消费金额"));QStringstr;str.append(QString("%1").arg(ipric));str=tr("RMB:")+str+tr("元");QLabel*label=newQLabel;label->setText(str);QPushButton*btn=newQPushButton(tr("确定"));QVBoxLayout*layout=newQVBoxLayout(dlg);layout->addWidget(label);layout->addWidget(btn);connect(btn,SIGNAL(clicked()),dlg,SLOT(close()));dlg->show();quitButton->show();//添加桌号、消费金额SeleteList[0].buffer[0]=3;SeleteList[0].buffer[1]=tableNumber;SeleteList[0].buffer[2]=ipric;send(sockfd,SeleteList,sizeof(SeleteList),0);}}后厨管理系统后厨首先连接效劳器,同样连接效劳器函数socket(),connect(),厨师点击接受Button触发槽函数slotrec(),槽函数中用TCP/IP协议中的recv()函数将顾客点菜信息接收到并用QListWidget类中insertItem()成员函数将菜单显示出,其中用到time_t类将时间显示出并按照其做菜,当做完一个菜时点击做完按钮时将菜单信息删除该做完了菜用QListWidgetItem类中takeItem()成员函数delete删除一行,并将其添加到做完菜单列表中用QListWidget类中的insertItem()成员函数。主要实现如下:hhDialog::hhDialog(QWidget*parent,Qt::WindowFlagsf):QDialog(parent,f){QHBoxLayout*btnLayout=newQHBoxLayout;btnLayout->addWidget(rec);btnLayout->addWidget(recDel);btnLayout->addWidget(finishButton);btnLayout->addWidget(clearButton);btnLayout->addWidget(btn);QHBoxLayout*listLayout=newQHBoxLayout;listLayout->addWidget(list);listLayout->addWidget(finishList);QVBoxLayout*layout=newQVBoxLayout(this);layout->addLayout(listLayout);layout->addLayout(btnLayout);connect(rec,SIGNAL(clicked()),this,SLOT(slotrec()));connect(btn,SIGNAL(clicked()),this,SLOT(close()));connect(finishButton,SIGNAL(clicked()),this,SLOT(on_finishButton_clicked()));connect(clearButton,SIGNAL(clicked()),this,SLOT(on_clearButton_clicked()));connect(recDel,SIGNAL(clicked()),this,SLOT(on_recDelButton_clicked()));client();}数据库管理模块数据库管理模块主要是管理菜单信息的,可以添加菜品信息有添加Button、删除菜品信息有删除Button、并能够查询菜品有查询Button。首先用QT中的QSqlTableModel类中的成员函数setTable(),setEditStrategy(),select(),连数据库列表,用QTableView类组件中的setMode()成员函数将数据库列表显示出来。主要实现代码如下:model=newQSqlTableModel(view);model->setTable("menubook");model->setEditStrategy(QSqlTableModel::OnManualSubmit);model->select();view->setModel(model);当需要删除某一菜肴时,中选择某一行时可以根据QTableView类中的currentIndex().row()成员函数得知,用QSqlTableModel中的revertAll()成员函数将其删除,并且删除时给出QMessageBox提示框提示。主要实现代码如下:voidWidget::on_deleteButton_clicked(){ intcurRow=view->currentIndex().row();model->removeRow(curRow);//获取当前行 //删除当前行intok=QMessageBox::warning(this,tr("删除当前行内容!"),tr("确定删除?"),QMessageBox::Yes,QMessageBox::No);if(ok==QMessageBox::No)model->revertAll();elsemodel->submitAll();}当需要添加菜肴信息时,用QSqlTableModel类中的insertRow()成员函数添加信息,同时用setData()成员函数添加菜肴信息数据。主要实现代码如下:voidWidget::on_addButton_clicked(){introwNum=model->rowCount();//获得表的行数intid=10;model->insertRow(rowNum);//添加一行model->setData(model->index(rowNum,0),id);//参加数据}当删除、修改数据库内容完后,需要点击提交修改Button,才难保存到数据中,主要用到QSqlTableModel类中的database()mit()成员函数。主要代码实现如下:voidWidget::on_put_inButton_clicked(){model->database().transaction();//开始事务操作if(model->submitAll()) //提交所有更改model->database()mit(); //提交else{model->database().rollback()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 彩灯控制课程设计原理
- 旅游课程设计方案
- 微机测温课程设计
- 文献检索 课程设计
- 戏剧和电影课程设计
- 文字的演变课程设计
- 《档案学慕课建设现状与策略研究》
- 宿舍门禁系统课程设计
- 《九一八事变前沈阳电灯业研究》
- 影视学校课程设计
- 动车组-动车组的基本结构及特点
- 中医护理技术的质量与安全管理
- 螺栓安装施工方案
- YB-4001.1-2007钢格栅板及配套件-第1部分:钢格栅板(中文版)
- 2023年政府采购评审专家考试题库
- 三战课件(舆论战、法律战、心理战)
- 第12课+明朝的兴亡-【中职专用】《中国历史》(高教版2023基础模块)
- 统编版语文三年级上册第三单元培优试卷(含答案)
- 生产效率统计表
- 医疗机构药品自查报告(3篇)
- 钢板切割施工方案
评论
0/150
提交评论