目录

1 概述

1.1 课程设计目的与要求

1.2课程设计内容

1.3课程设计总体思想

2系统需求分析

2.1 系统总体设计

2.2主体功能及流程图

3系统概要分析

3.1系统特色与不足

3.2系统调试遇到的问题及解决办法

3.3设计心得总结

3.4参考资料

1概述

1.1 课程设计目的与要求

1.1.1目的

《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用C++语言进行面向对象设计的基本方法,提高运用面向对象方法分析实际问题、解决实际问题的能力。

1、巩固并加深学生对与C++语言程序设计的理解。

2、培养学生的面向对象编程的编程思想,充分理解面向过程与面向对象两种设计方法的区别。

3、提高学生的编程能力,自我学习能力。

4、增加学生写程序设计开发文档的能力。

5、鼓励学生进行创新设计,训练学生创新思维。

1.1.2要求

本设计采用教师指导、学生自学和独立编程操作方式,先由学生查阅与本设计有关的书籍和资料,在两周时间内,完成课程设计内容中的一个管理系统,具体要求如下:

  1. 独立思考:独立完成课程设计中各任务的设计和调试。

  2. 数据管理:管理系统中的数据可用数据库的形式保存,也可用普通文件(文本文件或二进制文件)的形式保存。

  3. 面向对象编程要求:要求使用类和对象进行程序设计,并能够合理设计类(包括对不同类的设计以及同一类的成员的设计),要求在程序中体现出函数重载、运算符重载、类的继承与派生等语法。

  4. 尽量避免使用全局变量

  5. 用户管理功能:所设计的系统要求能用于多个用户,每个用户管理自己的数据和登录密码。

程序要求:界面美观、可操作性强、稳定性好。

1.2课程设计内容

1.2.1设计要求
  1. 独立思考:独立完成课程设计中各任务的设计和调试。

  2. 数据管理:管理系统中的数据可用数据库的形式保存,也可用普通文件(文本文件或二进制文件)的形式保存。

  3. 面向对象编程要求:要求使用类和对象进行程序设计,并能够合理设计类(包括对不同类的设计以及同一类的成员的设计),要求在程序中体现出函数重载、运算符重载、类的继承与派生等语法。

  4. 尽量避免使用全局变量

  5. 用户管理功能:所设计的系统要求能用于多个用户,每个用户管理自己的数据和登录密码。

  6. 程序要求:界面美观、可操作性强、稳定性好。

1.2.2 题目:

[1] 编写一个外卖点餐系统,实现对客户、店铺、订单及配送人员等信息的管理。

[2] 客户信息包括:客户姓名、联系方式、地址等;店铺信息包括:其菜品和价格,评分等;配送人员信息包括:姓名,联系方式、评分等;订单信息包括:编号、客户、菜品及价格、价格合计、配送人员等信息。

1.2.3 基本管理功能

[1] 客户、店铺、外卖人员管理:对店铺和客户信息进行管理。包括:

添加:添加客户、店铺、配送人员信息。

显示:查询店铺信息。

删除:删除相应信息。

[2] 点餐:模拟实际点餐过程,客户选择店铺,然后选择菜品,提交则安排配送人员,生成订单

[3] 订单管理:

添加:新订单添加;

删除:取消一个订单;

显示:显示所有订单。

查询:查询某一个订单

[4] 统计功能:根据需要设计合理的统计功能,比如:每天店铺的营业额、每个客户的月消费额等。

[5] 退出功能:要求点击退出,可以退出系统。

1.2.4其他要求及说明

[1] 需要定义的类、类的成员变量、成员函数不限于以上的要求,自己进行需求分析,进行合理的设计。 店铺和客户信息数量不少于30条,其他根据需要添加。

[2] 鼓励大家模拟实际订餐系统,设计更多的系统功能。

1.3课程设计总体思想

本应用程序使用C++的主流窗体应用框架Qt进行界面设计,MySQL数据库进行后端数据存储处理。

Qt的几点优势:

1:Qt是基于C++的一种语言拓展。Qt的类都是用C++来写的,很多类功能非常强大,调用起来方便易懂,并且帮助文档也非常容易理解,并且继承了C++的快速,简易,面向对象等诸多优点。

2:Qt具有非常好的移植性。Qt是一种跨平台的窗体应用框架。用Qt写出来的程序不只是可以在Windows上运行,在Linux,Mac等平台上也可以流畅运行,不会出现版本不支持现象。

3:Qt使用起来简洁高效。Qt统一的跨平台API 让程序员们集中精力致力于可增值的技术革新,而无须担心维护和管理现有应用程序多版本的基础结构与界面。 因此Qt开发人员仅需要学会一种API来写入应用程序,该程序便可在任何地方运行。Qt Software投入了相当大的努力使得Qt使用起来尽可能简单和直观。来自世界各地的客户反馈普遍认为Qt编程简单而有趣;而对于商务应用而言,Qt可以转换为更多的功能,并且在保持质量性能的情况下,只需更少的维护工作。

MySQL的几点优势:

1:运行速度快,MySQL体积小,命令执行的速度快。
2:使用成本低。MySQL是开源的,且提供免费版本,对大多数用户来说大大降低了使用成本。
3:使用容易。与其他大型数据库的设置和管理相比,其复杂程度较低,易于使用。
4:可移植性强。MySQL能够运行与多种系统平台上,如windouws,Linux,Unix等。
5:适用更多用户。MySQL支持最常用的数据管理功能,适用于中小型企业甚至大型网站应用。

2系统需求分析

2.1 系统总体设计

think

图1 总体架构

程序思想如图1所示,由登陆注册开始程序,注册可注册商家,骑手,顾客三种身份,登录增加了一个管理员身份,来管理所有的数据信息,每个人可以根据自己的账号与密码登录然后执行相应具体功能。

2.2主体功能及流程图

2.2.1登陆注册界面设计

登录

图2 登陆效果图

注册

图3 注册效果图

登陆注册

图4 登陆注册流程图
登录:

​ 登录需要输入三个内容,账号,密码,身份。当点击登录按钮的时候,触发鼠标点击事件QPushuButton::click(),此时通过信号与槽的关系,用一个函数来进行对这个鼠标点击事件的相应。

​ 进入testLogin函数后,连接数据库,通过对身份信息的比对:骑手,商家,顾客,管理员四种身份,查询数据库中相应的表单进行逐一比对,如果账号和密码与数据库中的匹配,此时登录成功,出现弹窗提示,跳转到相应界面。

注册:

​ 每个身份需要注册的信息都不同,但做多个注册界面又显得繁琐冗杂没有必要,于是就简化成一个注册界面。

​ 当确认按钮被点击后,触发QPushuButton::click()事件,通过后端函数进行处理,根据身份的不同,向数据库相应的表单插入相应的信息。如果插入成功则出现弹窗提示注册成功自动返回到登录界面,插入失败则出现弹窗提示注册失败。

2.2.2顾客界面设计
顾客界面
图5 顾客界面
顾客界面流程图
图6 顾客界面流程图

顾客这里主要有两个主要功能,订餐,统计消费信息。

订餐

​ 这里主要运用了几个输入框,用户根据信息面板上的店铺信息及评分进行点餐,依次输入店名,菜品以及住址三个信息。保证信息无误之后点击订餐按钮,此时调用函数进行处理。

​ 这里先会对输入的信息进行判断,是否未完成输入或者输入有问题,然后根据输入的菜品名称再去和数据库中对应店铺的菜单进行比对,将对应菜品的价格相加,再加上配送费5元,算出总价格。此时再去数据库中查询骑手的忙碌状态,若有骑手处于空闲状态,则进行订单分配,订餐成功,店铺增加相应的收入,顾客增加相应的花销。

统计消费信息

​ 点击统计按钮后,执行函数,根据登录的账号密码去数据库的顾客表单中查询到相应的数据,在此调用此顾客消费总额,进行数据处理,然后通过ui对前端显示面板进行数据绑定。

2.2.3骑手界面设计

骑手界面

图7 骑手界面

骑手流程图

图8 骑手流程图

骑手主要有两个功能,修改信息和统计订单信息

信息修改

当点击修改按钮的时候,执行函数,把输入框中输入的名字,电话,密码与数据库中原有的数据进行替换,完成信息修改

统计订单信息

​ 点击统计按钮后,执行函数,根据登录的账号密码去数据库的骑手表单中查询到相应的订单号,按照此订单号再去订单表单中进行查询,找到订单信息,进行数据处理,然后通过ui对前端显示面板进行数据绑定。

2.2.4商家界面设计

商家界面

图9 店铺界面

骑手流程图

图10 店铺流程图

商家主要有两个功能,修改信息和统计盈利信息

信息修改

当点击修改按钮的时候,执行函数,把输入框中输入的名字,菜单,评分,密码与数据库中原有的数据进行替换,完成信息修改

统计订单信息

​ 点击统计按钮后,执行函数,根据登录的账号密码去数据库的商家表单中查询到相应的数据,在此调用此商家盈利总额,进行数据处理,然后通过ui对前端显示面板进行数据绑定。

2.2.5管理员界面设计

管理员菜单

管理员界面

管理员流程图

管理员主要功能即是对每一种身份以及订单信息进行增删改查等后台操作。通过使用可视化数据库的技术,将数据库中的表单直接呈现在Qt中的一个表单容器中,然后通过对其进行设置即可进行增删改差等操作。

3系统概要分析

3.1系统特色与不足

3.1.1系统特色
1:编程方式创新。

本系统使用可视化编程Qt框架及MySQL数据库,敢于尝试窗体框架,使用Qt Creator做编译器,提高开发效率,通过在网上寻找教学视频以及自己查看官方文档进行编程。存储方式使用数据库存储,而不是使用文件,方便进行各类的增删改查。处理数据的时候多次使用字符串拼接与拆分思想,以整齐的方式呈现数据。

2:功能及数据封装严密

系统没有用到全局变量,所有类的数据成员均为私有数据成员,数据成员及函数命名规范,函数功能书写规范,未使用友元函数,增强了对于数据和操作的封装性,使得代码可扩充性强,可方便进行二次开发。main函数简洁高效,只有几句话,不繁琐。所有类与函数全部分开定义,每个文件行数都不冗长,代码可读性强。

3:界面整洁,可操作性强

界面布局整齐简洁,使用水平布局,垂直布局,网格布局相结合,使得界面不那么杂乱无章。许多操作都是使用按钮等可视化组件进行显示,提示性强,方便用户进行操作。数据显示通过文本框,文本框支持富文本显示形式,可调节字体大小颜色等。

3.1.2系统不足

点餐界面不是很智能。

管理员详情界面第一次进入会出现不展现表格信息的bug,点击确认之后才能正常展示,暂时没有解决此bug。

对一些用户输入的非法字符串暂时没有做过多的匹配处理。

3.2系统调试遇到的问题及解决办法

问题:

1:MySQL数据库连接Qt失败

2:写sql语句时无法将变量对应的值带入到sql里面进行替换。

3:界面布局凌乱不齐。

解决办法:

1:当查出有可能是两个应用的版本位数不同而导致的这个问题之后,通过控制台来查看两个应用的版本信息,发现确实不匹配,一个是32位,另一个是64位的。最后把MySQL数据库彻底卸载之后装了一个32位的数据库完美解决问题。

2:通过网上查阅发现Qt对于字符串操作有很多方法,通过了解后进行调用其中的方法,很容易便把变量插入到sql语句中了。

3:通过使用水平布局,垂直布局,网格布局以及弹簧,将界面进行重新排版后解决问题。

3.3设计心得总结

​ 最开始的时候是想用微信小程序来写这个课程设计,但是经过询问后不让用除C++以外的语言进行编写。于是后面想用Qt和MySQL来进行编写,当时很犹豫,不知道能不能在短期之内入门Qt并完成一个课程设计作业,最开始有点想要放弃使用Qt。后来在年级大群里找到有同学用Qt写的课设,与其进行交流,听说入门并不是非常难,通过几天的学习Qt教学视频之后,对Qt有了一定的认识,知道如何去开发窗体应用,便开始了我的开发过程。

​ 因为之前有写过Java,了解一些开发窗体应用程序的主体思想,所以看教学视频来入门还是非常快的,当了解了Qt的一些基本组件以及如何触发组件的监听事件之后,基本就可以进行开发了。因为东西是很多的,不能一个一个进行学习,这样的话进度实在是太慢,所以了解主体框架之后后面的学习就轻松很多,Qt有专门的开发者文档,写的也是非常清晰,内容也很充实,不过开发文档是用英文来写的,所以对个人的英语水平能力也有一定的考察。

​ 经过磕磕绊绊将近10天的时间里,终于把课设从无到有,从丑陋到美观。这个过程虽然艰辛,但总归还是学到了很多知识,正好复习了C++基础语法,就当为期末C++考试做了复习准备。还掌握了Qt框架以及C++对于数据库的基本操作。

3.4参考资料

Qt帮助文档

https://www.bilibili.com/video/BV1XW411x7NU?from=search&seid=10292686057260723702

b站Qt教程

https://www.cnblogs.com/du-hong/p/10899327.html Mysql配置教程

https://blog.csdn.net/weixin_42046850/article/details/88970049 Qt安装教程

https://mirrors.tuna.tsinghua.edu.cn/qt/ 清华软件镜像源下载