时间过来的真快,不知不觉已经来到了2024年5月份了,有两周时间没有更新博客信息。随着春天的深入,5月的天气逐渐变暖,不再像初春那样寒冷。这种温暖的气候让人感到舒适,也更容易激发人们外出活动的欲望。今天是五一放假的第一天,继续为为大家介绍合适用来做毕业设计的::在线订餐系统(506)。在线点餐系统分两类用户:普通用户和系统管理员。普通用户具备的主要功能包括:登陆、注册、浏览美食、购买、生成订单、修改个人信息、评价;系统管理员具备的功能包括:登陆、用户管理、分类管理、菜品管理、订单管理,评价管理。目前系统功能已经很全面,界面也很漂亮,整个有完整得源码,可以直接用来做毕业设计、希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步。
软件架构
本系统采用SSM的系统进行架构。SSM架构实现了View层,控制层,服务层,数据库访问层相互分离独立,Spring MVC负责请求的处理,Spring负责事务的管理,MyBatis负责数据库的持久化。
1 轻量级与高效性:SSM框架是轻量级的,不会占用过多的内存和系统资源,部署简单且启动速度快。同时,它采用了优秀的设计模式和算法,从而提高了系统的运行效率。
模块化设计:SSM框架采用了模块化的设计,将业务逻辑分成多个模块,这便于开发、测试和维护。模块化的设计使得开发人员可以更加专注于特定的功能或业务逻辑,提高了开发效率和代码的可维护性。
2 灵活性:SSM框架支持依赖注入(DI)和面向切面编程(AOP),这使得开发人员可以更加灵活地组织和管理代码。依赖注入降低了代码之间的耦合度,提高了代码的可重用性和可维护性;而面向切面编程则使得开发人员能够更方便地处理横切关注点,如日志、事务管理等。
3 可扩展性:SSM框架提供了丰富的扩展点和插件机制,可以方便地扩展和定制框架的功能。这使得SSM框架能够根据不同的项目需求进行灵活调整,满足各种复杂的业务需求。
4 易于集成:SSM框架与其他第三方库和工具的集成比较容易,例如与数据库、缓存、消息队列等的集成。这降低了技术集成的难度,提高了系统的整体性能和稳定性。
5 良好的社区支持:SSM框架拥有庞大的用户社区和丰富的技术文档,这为开发人员提供了有力的技术支持和学习资源。社区中的经验分享和技术讨论可以帮助开发人员快速解决遇到的问题,提高开发效率.
主要功能
上面介绍了整个系统的主要功能,下面就用简单的图表来本系统,通过图表一目了然各个用户具备的主要功能:

数据库设计
本次项目和毕业设计的复杂程度左右,系统涉及到12个表,他们分别是order、customer、review、orderitem、product、user、user_role、category、permission、zixun、role、role_2_permission,他们的关联关系如下:

运行效果
1 主页界面

2 商品详情

3 用户登陆

4 用户注册

5 推荐菜品

6 购物车

7 填写收货地址

8 我的订单

9 管理员登陆

10 管理员主界面

11 商品管理

12 评价管理

13 权限管理

14 资讯管理

关键代码
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
/**
* 不需要登录也可以访问的
* 注册,登录,产品,首页,分类,查询等等
* 需要登录才能够访问的
* 购买行为,加入购物车行为,查看购物车,查看我的订单等等
* 不需要登录也可以访问的已经确定了,但是需要登录才能够访问,截止目前为止还不能确定,所以这个过滤器就判断如果不是注册,登录,产品这些,就进行登录校验
* 1. 准备字符串数组 noNeedAuthPage,存放哪些不需要登录也能访问的路径
* 2. 获取uri
* 3. 去掉前缀/fore
* 4. 如果访问的地址是/fore开头
* 4.1 取出fore后面的字符串,比如是forecart,那么就取出cart
* 4.2 判断cart是否是在noNeedAuthPage
* 4.2 如果不在,那么就需要进行是否登录验证
* 4.3 从session中取出"cst"对象
* 4.4 如果对象不存在,就客户端跳转到login.jsp
* 4.5 否则就正常执行
*/
HttpSession session = request.getSession();
String contextPath=session.getServletContext().getContextPath()+"/fore";
//准备字符串数组 noNeedAuthPage,存放哪些不需要登录也能访问的路径
String[] noNeedAuthPage = new String[]{
"Index", //首页
"DetailUI", //商品详情页
"RegisterUI", //注册页
"Register", //注册
"LoginUI", //登陆页
"Login", //登陆
"IsLogin", //判断是否登陆
"MtLogin", //模态登陆验证
"CstLoginOut", //退出
"DelOrderItem",//删除购物车项
"CreateOrder", //提交订单
"Payed", //支付成功
"NameLike", //模糊搜索商品
"FindCategory", //查看分类下的商品
"Zixunadd", //添加资讯
"LoginMsg", //登陆返回信息
};
//获取uri
String uri = request.getRequestURI(); //访问首页 /fore/foreIndex
//去掉前缀/fore
uri = uri.substring(5,uri.length()); //去掉前缀后 /foreIndex
//如果访问的地址是/fore开头
if(uri.startsWith("/fore")){
//判断是否是在noNeedAuthPage
String method = StringUtils.substringAfterLast(uri,"/fore" ); // 取出/fore后的字符串:Index
//如果不在,那么就需要进行是否登录验证
if(!Arrays.asList(noNeedAuthPage).contains(method)){
Customer customer =(Customer) session.getAttribute("cst");
if(null==customer){
response.sendRedirect("foreLoginUI");
return false;
}
}
}
return true;
}
项目总结
(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。
(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。
(3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂程序,提高效率。
838

被折叠的 条评论
为什么被折叠?



