基于qt的电子点菜系统论文内容摘要:

同时,持有这种观念的人,通常也是受到了某种误导(罪魁祸首当然就是那些财大气粗的公司)。 随着 CPU 性能的快速提升,性能问题已不为人们所关心。 这叫“李代桃僵”。 很多涉世不深的程序员,也就相信了 他们。 于是,大公司们的阴谋也就得逞了。 一般认为,使用 Java 或 C的开发成本比 C++低。 但是,如果能够充分分析C++与这些语言的差异,就会猛然发现这句话的成立是有条件的。 这个条件就是:软件规模和复杂度都比较小。 如果程序是 3 万行左右的有效代码(不包括生成器产生的代码),这句话基本上是还可以成立的。 但是,一旦增加代码量和复杂度,C++的优势就会更加明显的体现出来。 造成这种差别的就是 C++的软件工程性。 在 Java 和 C大谈软件工程的时候, C++实际上已经悄悄地将软件工程性提升到一个前所未有的高度。 这一点被 多数人忽视,并且被大公司竭力掩盖。 语言在软件工程上的好坏,依赖于语言的抽象能力。 从面向过程到面向对象,语言的抽象能力有了一个质的飞跃。 但在实践中,人们发现面向对象无法解决所有软件工程中的问题。 于是,精英们逐步引入、并拓展泛型编程,解决更高层次的软件工程问题。 (实际,面向对象和泛型编程都可以追溯到 1967 年,但由于泛型编程的抽象程度之高,所以应用远落后于面向对象)。 开发工具 1)开发工具 Qt Creater Qt 是由奇趣科技于 1991 年开发的一个跨平台 C++图形用户界面应用程序的开发框架。 它不但可以开发 GUI 程序,也可以用于开发非 GUI 的程序,例如控制台工具和服务器。 Qt 是面向对象框架,利用特殊代码生成可扩展 (称为元对象编译器 (Meta Object Compiler, moc))以及一些宏,以方便扩展,允许对组件进行编程。 2020 年,诺基亚公司收购奇趣科技, QT 成为了诺基亚旗下的一个编程语言工具。 2020 年, Qt 又被 Digia 收购。 于 2020 年 4 月,跨平台集成的开发环境Qt Creator 正式发布,实现了对 iOS 的完全支持,并新增了 WinRT、Beautifier 等插件,摒弃了 无 Python 接口的 GDB 调试功能,新集成了基于 Clang 7 的 C/C++代码模块,并对 Android 支持做出了相应的调整,实现了全面支持 iOS、Android 以及 WP。 Qt 给应用程序开发者提供了建立艺术级的图形用户界面所需的一切功能。 Qt 易扩展的特性,并允许真正意义上地组件编程实现。 大部分情况下, Qt 同 X Window 上的 Motif, Openwin, GTK 等图形界面库和 Windows 平台上的 MFC,OWL, VCL, ATL 属于同类型的东西。 信号和槽作为 QT 的核心机制,要想精通 QT 编程就 必须对信号和槽有一定的了解和掌握。 信号和槽是一种高级的函数接口,应用于对象与对象之间的通信,这一机制是 QT 的中心特征,也是 QT 区别于其它同类工具包的主要地方。 信号和槽是由 QT 自定义的一种对象之间通信机制,它是独立于标准 C/C++ 语言的,因此若要正确的处理信号和槽,则需要借助一个名为 moc( Meta Object Compiler)的 QT 开发工具,该工具是一个 C++ 的预处理程序,专门为高层次的事件作相应处理,自动生成工程所需的附加代码。 我们所熟悉的很多 GUI 工具包,例如窗口部件 (widget) 都会有一个回调函数,用来响应它们所能触发运行的每一个动作,通常该回调函数是一个函数指针,即一个指向函数的指针。 但是,在 QT 中信号和槽取代了这些凌乱的回调函数,使得我们编写这些通信程序更加的简洁明了。 信号和槽有着能够携带任意数量和任意类型的参数的能力,它是类型完全安全,不会像回调函数那样会产生 core dumps。 所有的从 QObject 或其子类 ( 例如 Qwidget) 继承的类都能够包含信号和槽。 当对象状态改变时,信号会就由该对象发射 (emit) 出去,这就是对象需要做的 全部事情,它并不用知道另一端是谁在接收这个信号。 这才是真正的信息封装,它确保了,对象被当作一个真正的软件组件来使用。 槽是用来接收信号的,但它们是普通对象的成员函数。 一个槽并不知道是否有任何信号与自己连接。 而且,对象也并不了解具体的通信机制。 多信号可以与单个的槽进行连接,也可以将单个的信号与很多的槽进行连接,甚至将一个信号与另外一个信号的连接也是可以的,此时无论第一个信号什么时候发射,系统都将立刻发射第二个信号。 总而言之,信号与槽的机制构造了一个强大的部件编程机制。 2) 数据库 SQlite SQLite( )是一个微型的嵌入式数据库管理系统,符合大部分 SQL 92 的标准,它本身仅是一个数百 KB 的动态链接库。 它使用是一个文件作为存放全部数据的场所。 在应用程序中使用的话不需要任何额外的配置,十分方便。 8 QLite 是具有一个小巧,快速和可靠等的优点数据库管理系统,它是源于其四大简单:管理简单、操作简单、嵌入简单以及维护自定义简单。 同时, SQLite 也并不是最优的数据库管理系统, SQLite 也有一些缺点,这取决于用户对数据的需求, SQLite 不具有高度的并发性,以及良好的存取权限控制,还 没有内置的函数集,并且不支持存储过程以及深奥的 SQL 语言特性(SQLite 并不完全支持 SQL92),不支持 XML/Java 的扩展,不具有 terabyte 或者 petabyte 的可伸缩性等等。 所以,当需要以上列举的这些功能时, SQLite就不在适合当下用户了。 SQLite 并不是企业级的 RDBMS。 SQLite 的功能特性: A ACID 事务 B 零配置 – 无需安装和管理配置 C 储存于单一磁盘文件中的一个完整数据库 D 支持数据库大小至 2TB E 足够小 , 大致 13 万行 C 代码 , F 比一些当下 流行的数据库在大部分普通数据库操作要快 G 简单 , 轻松的 API H 包含 TCL 绑定 , 通过 Wrapper 支持其他语言的绑定 I 良好注释的源代码 , 有着 90%以上的测试覆盖率 J 独立 : 没有额外依赖 K 源码完全开源 , 可以用于任何用途 L 支持多种开发语言, C, C++, PHP, Perl, Java, C,Python, Ruby 等 9 3 基于 Qt 的电子点菜系统概要设计 系统设计目标 该系统是一个酒店管理菜单信息的软件,可以记录大量的菜单信息,并满足不同的用户对菜单的使用需求,方便菜单的查 看,分析和处理。 系统采用 C/C++高级语言模块化编程,为将来的信息处理的功能扩展提供了良好的接口,有利于二次开发和后期程序的移植与维护。 系统将具有良好的系统使用稳定性和对用户友好的交互设计,使客户有良好的用户体验。 系统有两类用户群体,分别是管理员和普通用户,对不同身份的用户提供对应的信息服务。 总体而言,系统实现的主要目标包括:点餐模块、已选菜单、更改菜单、反馈评价、买单管理、营业状态、菜品添加。 系统功能规定 系统主要实现功能: 客户端: A 欢迎界面:客人选择开始点菜,并自动安排桌号,进入点菜模块。 B 本店菜单:在该模块中主要实现菜肴以及酒水饮料的点餐等功能,根据食品的分类界面分为热菜,凉菜,汤类,酒水不同的区域,客人根据需要进行点菜。 C 已点菜单:该模块显示客人当前已点菜品,可根据意愿对已选菜单进行删减。 D 反馈评价:为客户提供一个餐后的反馈。 服务端: A 现有菜单:即本酒店已有的菜品,管理员可对总菜单进行增删改查的功能。 B 桌子情况:查看当前店里的就餐情况。 D 今日营业:显示今日一天的营业情况。 10 系统设计方案 系统结构图 1)点菜系统客户端组织结构图。 客户端由三大 部分组成,本店菜单、已点菜单、评价反馈。 本店菜单实现菜品分类以及菜品的简介和点菜功能。 已点菜单实现查看已点菜品及酒水,可更改已点菜单,并实现菜单的提交。 评价反馈它的功能是客人可查看其他用餐者的评价反馈,并在用餐完毕后选择性的对菜品进行评价。 图 1 客户端组织结构图 点菜系统客户端 本店菜单 已点菜单 评价反馈 客人用完餐添加评价 查看其他客人评价反馈 查看已点菜饮 更改已点餐饮 提交订单 菜品分类 菜品简介 点菜功能 11 2)点菜系统服务端组织结构图 服务端由三大部分组成,现 有菜单、桌子情况、本日营业状况。 现有菜单是本店目前已有菜单,可以实现对本店菜单进行查看、添加、删除等功能。 桌子情况主要体现本店所有桌子的情况,即某桌是否有人,并可查看有客人桌的已点菜品及消费总金额。 本日营业状况体现本店当天的销售量及收入。 图 2 点菜系统服务端组织结构图 点菜系统服务端 现有菜单 桌子情况 本日营业状况 查 看 现 有 菜 单 对现有菜单添加或删除 查看桌位是否有人 对有客人的桌位可查看菜单 查看销量 查看总收入 12 13 否 是 图 3 点餐系统模块流程图 查看本店菜单,添加菜品,可参考评价反馈栏 在当前菜单下查看已点菜单,对已点菜单更改 是否提交已点菜单。 完成点 菜与下单,等待上餐,吃完大餐可对菜品评价 结束 当服务端按下“客人已走”按钮,返回欢迎界面 开始 进入点餐系统 14 4 基于 Qt 的电子点菜系统设计与实现 数据库设计 建立数据库 在 DOS 窗口下创建数据库 ,并在该数据库添加表,数据库共建三个表,表信息如下: 表格 1 数据库表 表名 存放信息 YdMenu 表 存放已点菜单信息 Advise 表 存放客人 评论信息 cMenu 表 存放菜单信息 建数据库表主要语句: create table cmenu ( id int primary key, name varchar(20) not null, info varchar(100), class int not null, price double not nu。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。