一、设计要求\n本次课程设计要求在 SpringMVC 框架上实现简单的网上网络购物网站。\n1.技术要求\n(1)数据库:MySQL;\n(2)服务端开发:JAVA 语言和 SrpingMVC 框架;\n(3)客户端开发:应用 HTML、JavaScript、JQuery 和 Bootstrap 等语言和工具;\n(4)可以使用其他前端框架如 VUE,React 等前端框架\n2.功能要求\n(1)管理员用户登录功能(管理员账户提前内置在数据库中);(2)普通用户注册和登录功能;\n(3)商品维护:在系统中添加和维护商品,商品除基本信息外还要包括商品照片,本功能需要管理员权限;\n(4)商品展示:显示商品列表和某件商品详细信息,需要展示商品图片;\n(5)购物车功能:用户可以将商品加入购物车并对购物车内商品进行维护。\n(6)生成订单功能:在购物车商品中选择确定要购买的商品生成订单,已经生成订单的商品要在购物车中删除\n(7)生成订单时相关商品的库存数量减少,库存数量少于用户购买数量的商品提示用户库存不足\n(8)普通用户可以查看自己的所有订单(分页显示)\n(9)管理员可以查看系统中的所有订单(分页显示)\n(10)管理员用户可以查看系统中的所有用户(分页显示),可以禁用某个用户,禁用以后该用户不能登录。\n(11)管理员登录以后页面左侧显示功能菜单,包括商品管理,订单\n管理和用户管理,普通用户登录后直接展示所有商品,并在页面顶部显示\n购物车和我的订单链接;\n3.课程设计报告撰写要求\n(1)报告分为技术介绍、设计内容和总结三部分(参照下页);\n(2)设计内容部分针对功能要求中的每一点详细说明实现思路,并配以实现程序(包括前端和后端)和网页截图,每小节一个功能点;\n(3)提交课程设计报告的电子版(WORD 文件,以学号+姓名命名)和\n打印版,项目所有程序压缩成一个压缩文件,与报告的电子版一起提交;\n(4)按时提交设计报告。\n二、技术介绍\nSpringMVC 包括视图层(view)、控制层(controller)、数据层(model)View:视图层,展示数据内容;\nController:控制层,一般用“controller”关键字定义;\nModel:数据层,一般用“.model”、“.dao”、“.service”等关键字定义\nController:控制层,接收和返回客户端的参数,作用是整个工程对外访问的地方。\nServie:业务层,存放与具体业务相关的的方法,作用是上接控制层(controller) 下衔数据库访问层(dao)。一般在 service 的实现类会出现在 controller 中。这些 service 提供了包含逻辑的数据访问。\nImpl: 以 IMPL 结尾的类一般是实现了某个或多个接口(service)的类。这些类的接口定义了一些规范的类,通常是数据访问和实现逻辑。\nDao: 数据库访问层(dao、repository),工程中与数据库交互的地\n方和方法。作用是降低工程结构之间的耦合,使业务逻辑与数据库交互耦\n合降低;提供应用程序与数据库之间的操作规范和操作,用于通常数据库\n的增删查改。\nModel : 实体类(model、entity、domain)。作用是将数据库字段\n与 Java 操作进行对象化操作联系起来,为了便于理解业务和代码可读美观通常将数据库表作为对象封装,一般操作 DAO 类的时传入的是 Model 通过\nhibernate 的映射文件,映射到数据库字段也就是通常说的通过实体类操作数据库。\n三、设计内容\n1、管理员登录:管理员的 ID 为 1,其他的都是非管理员。\nfunction login()//登录管理商品和购物\n{\n$.ajax({\nurl: “user/login”,\ntype: ‘post’,\ndataType: ‘json’,\ndata: KaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲loginForm”).ser….ajax({\nurl: “user/usermanage”,\ntype: ‘post’,\ndataType: ‘json’,\ndata: KaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲loginForm”).ser…(“#saveConfirmBtn”).click(function() {//保存新账号信息\nKaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲saveModal”).mod….ajax({\nurl : “user/save”,\ntype : ‘post’,\ndataType:‘json’,\ndata : KaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲userForm”).seri…(“#table”).bootstrapTable(“refresh”);\n}\n});\n});\n4、商品管理:管理员可以管理商品\n5、普通用户购物:普通用户只能查看商品和加入购物和\n6、生成订单\norder.setTotalMoney(total);//总金额赋值到订单当中\nproductOrderService.save(order, items);//\nshopCartItems.clear();//清空当前购物车\n7、用户管理:管理员可以管理用户,把用户的 banned 属性设置为非空就不能登录了\n四、总结\n通过这次课程设计,我对 web 开发技术有了更深的理解和掌握。这次\n课程设计提高了我的 web 开发能力。我一开始觉得课程设计很难,在做课\n程设计的过程中,我遇到问题和困难查阅了有关资料,我也得到了同学们的帮助。课程设计做完的时候我就觉得很有成就感。\n三、系统详细设计\n(说明自定义数据结构每个成员的含义和每个自定义函数的主要作用,对于拓展内容中的每个要求结合实现代码详细说明实现过程)\nfunction login()\n{\n$.ajax({\nurl: “user/login”,\ntype: ‘post’,\ndataType: ‘json’,\ndata: KaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲loginForm”).ser…("#saveConfirmBtn").click()函数:主要用于提交添加用户信息的表单。\n拓展内容:\n\n自定义数据结构可以根据项目的实际需要进行更改或者扩展。\n第一个参数为接口地址,可以根据实际需要进行修改,如更改为绝对路径。\ntype字段表示请求类型,可选值有:GET、POST、PUT、DELETE等,根据实际需要进行修改。\ndataType字段表示返回数据类型,可选值有:xml、html、text、json、jsonp、script等。需要根据实际情况进行修改。例如返回JSON数据时,设为’json’。\ndata字段表示发送给服务器的数据,可以是字符串或者JavaScript对象,如KaTeX parse error: Expected 'EOF', got '#' at position 3: (“#̲loginForm”).ser…("#saveConfirmBtn").click()是jquery的事件委托函数,用于处理添加用户表单的提交事件,该函数中使用ajax向服务端发送添加用户请求,并在返回成功后重新加载表格。\n服务端:\n//在User类中添加banned\nprivate Integer banned;\npublic Integer getBanned() {\nreturn banned;\n}\npublic void setBanned(Integer banned) {\nthis.banned = banned;\n}\n以上代码是一个Java Bean中的属性banned及其相应的getter和setter方法,用于表示用户是否被禁止登录。private Integer banned表示用户是否被禁止登录的状态,可以用0表示未被禁止,1表示已被禁止。getBanned()方法用于获取用户是否被禁止登录的状态,setBanned()方法用于设置用户是否被禁止登录的状态。这样,可以在业务逻辑中方便地获取和设置用户是否被禁止登录的状态。\nUserController.java:\n@PostMapping(value = “/login”)\npublic Result login(String username, String password, HttpSession session)\n{\nUser u=userService.login(username,password);\nResult r=new Result();\nif(u!=null&&u.getBanned()==null)\n{\nr.setCode(“succ”);\nr.setMessage(“成功”);\nr.setEntity(u);\nsession.setAttribute(“loginUser”,u);\n}\nelse\n{\nr.setMessage(“失败”);\nr.setCode(“fail”);\n}\nreturn r;\n}\n\n其具体实现如下:\n使用@PostMapping注解表示该方法处理HTTP POST请求。value = “/login"表示该方法处理的请求路径为“/login”。public Result login(String username, String password, HttpSession session)方法包含三个参数:(1)username:请求中包含的用户名。(2)password:请求中包含的用户密码。(3)session:用户登录成功后的会话信息,用于保存用户相关信息。(1)userService.login(username,password)调用userService的login()方法,判断用户是否登录成功。(2)r=new Result()实例化一个Result对象,用于表示接口返回的数据,其中Result是一个自定义的Java Bean。(3)判断用户是否登录成功,如果成功并且未被禁止,则设置接口返回状态为"succ”,返回信息为"成功",并将登录用户信息保存在会话中。如果不成功或者已被禁止,则设置接口返回状态为"fail",返回信息为"失败"。(4)return r返回接口返回数据。在前端中可以通过AJAX接收该数据并进行相应处理。\n\n四、系统源代码\n\n服务端程序…\n客户端程序…