Java项目:ssh网上便利店系统

news/2024/5/18 22:06:25/文章来源:https://blog.csdn.net/hanyunlong1989/article/details/127208261

作者主页:夜未央5788

 简介:Java领域优质创作者、Java项目、学习资料、技术互助

文末获取源码

项目介绍

该项目分为前后台。非maven项目;

前台主要功能包括:
会员登录、注册、商品展示、加入购物车、会员中心、我的订单、我的地址等;

后台主要功能包括:

用户管理、商品分类管理、商品管理、订单管理、商家管理、小区管理;

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 

6.数据库:MySql 5.7版本;

技术栈

1. 后端:Spring Structs Hibernate

2. 前端:JSP+bootstrap+jQuery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 将项目中jdbc.properties配置文件中的数据库配置改为自己的配置
3. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,配置tomcat,然后运行;
4. 运行项目,前台运行地址:http://localhost:8080/eastshop 登录

后台运行地址:http://localhost:8080/eastshop/admin/login.jsp

运行截图

 

 

 

 

 

 

 

 

 

 

相关代码 

AddressAction

package com.eastshop.address.action;import java.util.List;import org.apache.struts2.ServletActionContext;import com.eastshop.address.service.AddressService;
import com.eastshop.address.vo.Address;
import com.eastshop.seller.service.RegionService;
import com.eastshop.seller.service.SellerService;
import com.eastshop.seller.vo.Region;
import com.eastshop.user.vo.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;/*** 收货地址的Action类* * @author admin* */
public class AddressAction extends ActionSupport implementsModelDriven<Address> {// 模型驱动管理的对象private Address address = new Address();public Address getModel() {return address;}// 注入AddressServiceprivate AddressService addressService;public void setAddressService(AddressService addressService) {this.addressService = addressService;}// 注入RegionServieprivate RegionService regionService;public void setRegionService(RegionService regionService) {this.regionService = regionService;}// 是否跳转页面private char isForward; //'0':不转发 ,'1':转发public void setIsForward(char isForward) {this.isForward = isForward;}// 查询我的收货地址public String findByUid() {// 从session中取出登录的用户User existUser = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");// 根据用户id查找收货地址List<Address> addrList = addressService.findByUid(existUser.getUid());// 结果存入值栈ActionContext.getContext().getValueStack().set("addrList", addrList);// 查找商家服务的小区List<Region> regions = regionService.findRegion();// 结果存入值栈ActionContext.getContext().getValueStack().set("regions", regions);return "findByUid";}// 跳转到添加收货地址的页面public String insertAddr(){// 查找商家服务的小区List<Region> regions = regionService.findRegion();// 结果存入值栈ActionContext.getContext().getValueStack().set("regions", regions);return "insertAddr";}// 保存收货地址public String insertAddrSubmit() {// 从session中取出登录的用户User existUser = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");// 设置收货地址所属的用户address.setUser(existUser);addressService.save(address);return isForward == '0' ? NONE : "insertAddrSubmit";}// 跳转到修改收货地址的页面public String editAddr() {// 根据收货地址id查找收货地址address = addressService.findByAid(address.getAid());// 结果存入值栈ActionContext.getContext().getValueStack().set("address", address);// 查找商家服务的小区List<Region> regions = regionService.findRegion();// 结果存入值栈ActionContext.getContext().getValueStack().set("regions", regions);return "editAddr";}// 提交修改的收货的地址public String editAddrSubmit() {// 从session中取出登录的用户User existUser = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");// 设置关联的用户address.setUser(existUser);// 更新收货地址addressService.update(address);return NONE;}// 删除收货地址public String deleteAddr(){// 根据id查找收货地址address = addressService.findByAid(address.getAid());// 删除收货地址addressService.delete(address);return "deleteAddr";}
}

CartAction

package com.eastshop.cart.action;import org.apache.struts2.ServletActionContext;import com.eastshop.cart.vo.Cart;
import com.eastshop.cart.vo.CartItem;
import com.eastshop.product.service.ProductService;
import com.eastshop.product.vo.Product;
import com.opensymphony.xwork2.ActionSupport;/*** 购物车Action* * @author admin* */
public class CartAction extends ActionSupport {// 接收pidprivate Integer pid;// 接收数量countprivate Integer count;// 注入商品的Serviceprivate ProductService productService;public void setProductService(ProductService productService) {this.productService = productService;}public void setPid(Integer pid) {this.pid = pid;}public void setCount(Integer count) {this.count = count;}// 将购物项添加到购物车:执行的方法public String addCart() {// 封装一个CartItem对象.CartItem cartItem = new CartItem();// 设置数量:cartItem.setCount(count);// 根据pid进行查询商品:Product product = productService.findByPid(pid);// 设置商品:cartItem.setProduct(product);// 将购物项添加到购物车.// 购物车应该存在session中.Cart cart = getCart();cart.addCart(cartItem);return "addCart";}// 清空购物车的执行的方法:public String clearCart(){// 获得购物车对象.Cart cart = getCart();// 调用购物车中清空方法.cart.clearCart();return "clearCart";}// 从购物车中移除购物项的方法:public String removeCart(){// 获得购物车对象Cart cart = getCart();// 调用购物车中移除的方法:cart.removeCart(pid);// 返回页面:return "removeCart";}// 我的购物车:执行的方法public String myCart(){return "myCart";}/*** 获得购物车的方法:从session中获得购物车.* @return*/private Cart getCart() {Cart cart = (Cart) ServletActionContext.getRequest().getSession().getAttribute("cart");if (cart == null) {cart = new Cart();ServletActionContext.getRequest().getSession().setAttribute("cart", cart);}return cart;}
}

OrderAction

package com.eastshop.order.action;import java.io.IOException;
import java.util.Date;
import java.util.List;import org.apache.struts2.ServletActionContext;import com.eastshop.address.service.AddressService;
import com.eastshop.address.vo.Address;
import com.eastshop.cart.vo.Cart;
import com.eastshop.cart.vo.CartItem;
import com.eastshop.order.service.OrderService;
import com.eastshop.order.vo.Order;
import com.eastshop.order.vo.Orderitem;
import com.eastshop.user.vo.User;
import com.eastshop.utils.PageBean;
import com.eastshop.utils.PaymentUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;/*** 订单管理的Action类* * @author admin*/
public class OrderAction extends ActionSupport implements ModelDriven<Order> {// 模型驱动使用的对象private Order order = new Order();public Order getModel() {return order;}// 注入OrderServiceprivate OrderService orderService;public void setOrderService(OrderService orderService) {this.orderService = orderService;}// 注入AddressServiceprivate AddressService addressService;public void setAddressService(AddressService addressService) {this.addressService = addressService;}// 接收pageprivate int page;public void setPage(int page) {this.page = page;}// 接收支付通道的编码private String pd_FrpId;public void setPd_FrpId(String pd_FrpId) {this.pd_FrpId = pd_FrpId;}// 接收收款成功后的响应数据private String r6_Order;private String r3_Amt;public String getR6_Order() {return r6_Order;}public void setR6_Order(String r6_Order) {this.r6_Order = r6_Order;}public String getR3_Amt() {return r3_Amt;}public void setR3_Amt(String r3_Amt) {this.r3_Amt = r3_Amt;}// 保存订单的方法public String saveOrder() throws IOException {// 1.从session中取出购物车Cart cart = (Cart) ServletActionContext.getRequest().getSession().getAttribute("cart");if (cart == null || cart.getCartItems().size() == 0) {this.addActionMessage("亲,您还没有购物!");return "msg";}// 2.从session中取出登录的用户User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");if (user == null) {this.addActionMessage("亲,您还没有登录!");return "msg";}// 3.补全订单数据order.setTotal(cart.getTotal());order.setOrdertime(new Date());order.setState(0); // 0:未付款order.setUser(user);// 4.补全订单的订单项for (CartItem cartItem : cart.getCartItems()) {// 订单项的信息从购物项获得Orderitem orderitem = new Orderitem();orderitem.setSubtotal(cartItem.getSubtotal());orderitem.setCount(cartItem.getCount());orderitem.setOrder(order);orderitem.setProduct(cartItem.getProduct());order.getOrderitems().add(orderitem);}// 5.保存订单Integer oid = orderService.save(order);ActionContext.getContext().getValueStack().set("oid", oid);// 6.清空购物车cart.clearCart();// 7.转向查询订单的页面return "saveOrder";}// 分页查询我的订单的方法public String findByUidWithPage() {User existUser = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");// 根据用户的id分页查询订单PageBean<Order> pageBean = orderService.findByUidWithPage(page,existUser.getUid());// 将查询结果存入值栈ActionContext.getContext().getValueStack().set("pageBean", pageBean);return "findByUidWithPage";}// 在线支付的方法public String payOrder() throws IOException {// 修改订单的信息Order currOrder = orderService.findByOid(order.getOid());currOrder.setName(order.getName());currOrder.setPhone(order.getPhone());currOrder.setAddr(order.getAddr());orderService.update(currOrder);// 为订单付款String p0_Cmd = "Buy"; // 业务类型String p1_MerId = "10001126856"; // 商户编号String p2_Order = order.getOid().toString(); // 商户订单号String p3_Amt = "0.01"; // 支付金额String p4_Cur = "CNY"; // 交易币种String p5_Pid = ""; // 商品名称String p6_Pcat = ""; // 商品的种类String p7_Pdesc = ""; // 商品的描述String p8_Url = "http://localhost:8080/eastshop/order_callBack.action";String p9_SAF = ""; // 送货地址String pa_MP = ""; // 商户扩展信息String pd_FrpId = this.pd_FrpId; //支付通道编码String pr_NeedResponse = "1"; // 应答机制String keyValue = "69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl";String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt, p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP, pd_FrpId, pr_NeedResponse, keyValue);// 向易宝出发StringBuffer sb = new StringBuffer("https://www.yeepay.com/app-merchant-proxy/node?");sb.append("p0_Cmd=").append(p0_Cmd).append("&");sb.append("p1_MerId=").append(p1_MerId).append("&");sb.append("p2_Order=").append(p2_Order).append("&");sb.append("p3_Amt=").append(p3_Amt).append("&");sb.append("p4_Cur=").append(p4_Cur).append("&");sb.append("p5_Pid=").append(p5_Pid).append("&");sb.append("p6_Pcat=").append(p6_Pcat).append("&");sb.append("p7_Pdesc=").append(p7_Pdesc).append("&");sb.append("p8_Url=").append(p8_Url).append("&");sb.append("p9_SAF=").append(p9_SAF).append("&");sb.append("pa_MP=").append(pa_MP).append("&");sb.append("pd_FrpId=").append(pd_FrpId).append("&");sb.append("pr_NeedResponse=").append(pr_NeedResponse).append("&");sb.append("hmac=").append(hmac);// 重定向到易宝ServletActionContext.getResponse().sendRedirect(sb.toString());return NONE;}// 付款成功后的转向public String callBack(){// 修改订单状态:修改状态为已经付款Order currOrder = orderService.findByOid(Integer.valueOf(r6_Order));currOrder.setState(1);orderService.update(currOrder);// 在页面显示付款成功信息this.addActionMessage("订单付款成功: 订单编号:"+r6_Order+" 付款的金额:"+r3_Amt);return "msg";}// 扫码支付public String payOrderByCode() {// 修改订单的信息Order currOrder = orderService.findByOid(order.getOid());currOrder.setName(order.getName());currOrder.setPhone(order.getPhone());currOrder.setAddr(order.getAddr());currOrder.setState(1); //1:已付款// 更新订单的信息orderService.update(currOrder);this.addActionMessage("支付成功!");return "msg";}// 根据订单id查询订单public String findByOid() {// 根据订单id查询订单order = orderService.findByOid(order.getOid());// 从session中取出登录的用户User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");// 查询要显示的收货地址List<Address> addrList = addressService.findByUid(user.getUid());// 将结果存入值栈ActionContext.getContext().getValueStack().set("addrList", addrList);return "findByOid";}// 修改订单的状态public String updateState(){// 根据oid查找订单order = orderService.findByOid(order.getOid());// 设置订单的状态order.setState(1); //1:已付款// 更新订单orderService.update(order);return NONE;}// 修改订单的状态为"订单结束"public String updateStateFor3(){// 根据oid查找订单order = orderService.findByOid(order.getOid());// 设置订单的状态order.setState(3);// 更新订单orderService.update(order);return "updateStateFor3";}// 获取订单的状态public String getOrderState() throws IOException{// 根据oid查找订单order = orderService.findByOid(order.getOid());if(order.getState() == 1){ServletActionContext.getResponse().getWriter().print("1");}return NONE;}
}

如果也想学习本系统,下面领取。关注并回复:010ssh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_20514.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【跟学C++】C++队列——queue类(Study13)

文章目录1、队列2、队列--queue类的使用2.1 实例化queue2.2 queue的成员函数3、优先级队列--priority_queue类的使用3.1 实例化priority_queue3.1 priority_queued的成员函数4、总结 【说明】 大家好&#xff0c;本专栏主要是跟学C内容&#xff0c;自己学习了这位博主【 AI菌】…

多测师肖sir_高级讲师_第2个月第21讲解jmeter安装

一、安装流程&#xff1a; 1、安装jdk &#xff08;linux&#xff0c;windows上&#xff09;&#xff0c;jdk编译java语言&#xff0c; 2、jdk环境配置&#xff0c;dos中java -version 查看jdk版本 3、下载jmeter包&#xff0c;解压&#xff0c;bin 目录 &#xff0c;jmeter.ba…

从零开始配置vim(25)——关于 c++ python 的配置

从9月份到国庆这段时间,因为得了女儿,于是回老家帮忙料理家事以及陪伴老婆和女儿。一时之间无暇顾及该系列教程的更新。等我回来的时候发现很多小伙伴私信我催更。在这里向支持本人这一拙劣教程的各位小伙伴表示真诚的感谢。言归正传,让我们开始吧 之前我们根据lua语言配置了…

(附源码)计算机毕业设计ssm电子购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【DL】第 11 章:自动驾驶汽车的深度学习

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

《uni-app》一个非canvas的飞机对战小游戏-启动页

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e;接下来的几篇都是uni-app的小实战&#xff0c;有助于我们更好的去学习u…

基于微信小程序的校园失物招领寻物启事系统 java uniapp 小程序

随着信息化时代的到来,管理系统都趋向于智能化、系统化,微信小程序校园失物招领也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而微信小程序校园失物招领能很好地解决这一问题,轻松应对校园失物招领平…

老项目vue2.x误用了vue3的插件问题

老项目vue2.x误用了vue3的插件问题背景插件vue-template-compilervue-loader问题回溯总结背景 vue3出来两年多了&#xff0c;它刚出来的时候&#xff0c;vue3相比vue2似乎并没有想像中那样受大家欢迎。因为两个版本的构架上相差太大了&#xff0c;许多的API都不兼容&#xff0…

洛谷题单 Part 2.4 分治

分治 即分而治之 将大问题化解为小问题逐一求解 这种题没有固定的模板 只有分治的思想 所以在做题的时候应当多想如何将一个大问题化解成若干个子问题进行求解 直接上题了 P1226 【模板】快速幂||取余运算 非常经典的分治问题 常规算法求aba^bab要O(b)O(b)O(b)的时间复杂度 我…

Mybatis常见查询总结,仅限于初级程序员阅读

情况描述&#xff1a; 本人初次接触Mybatis&#xff0c;然后对于其中的一些基础查询做一些简单总结&#xff0c;一次用来记录他的用法&#xff0c;便于以后查漏补缺。 1、Mybatis中查询特定的列:&#xff08;单列&#xff09; 如果查询指定列为Long类型&#xff0c;那么在re…

游戏合作伙伴专题:BreederDAO 与 Affyn一起重构现实生活

BreederDAO 团队很宣布与 Affyn 建立了新的合作关系&#xff0c;Affyn 是一家位于新加坡的公司&#xff0c;开发了基于地理位置的增强现实移动游戏。 移动元宇宙 Affyn 团队由来自 EA、任天堂、迪士尼和星巴克等顶级游戏、娱乐和生活方式公司的资深员工组成。他们洞悉了目前边玩…

html5网页设计作业代码 大学生校园网站制作 学校官网制作html

&#x1f329;️ 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f482; 作者主页: 【进入主页—&#x1f680;获取更多源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;HTML5网页期末作业 (1000套…

性能大PK count(*)、count(1)和count(列)

最近的工作中&#xff0c;我听到组内两名研发同学在交流数据统计性能的时候&#xff0c;聊到了以下内容&#xff1a; 数据统计你怎么能用 count() 统计数据呢&#xff0c;count() 太慢了&#xff0c;要是把数据库搞垮了那不就完了么&#xff0c;赶紧改用 count(1)&#xff0c;这…

基于Gossip的online server

在游戏服务端架构中online server,有些也叫center server。 主要承载以下功能:存储玩家的在线信息,处理上线和下线消息。 转发消息给特定玩家。online server在架构图中的位置online server集群内部架构图,以3个实例为例:特点:svr之间相互连接,采用Gossip协议通信。 各s…

MCMS 审计之路

MCMS 是 J2EE 系统&#xff0c;完整开源的Java CMS&#xff0c;基于SpringBoot 2架构&#xff0c;前端基于vue、element ui。为开发者提供上百套免费模板,同时提供适用的插件&#xff08;文章、商城、微信、论坛、会员、评论、支付、积分、工作流、任务调度等...&#xff09;&a…

大学网课查题系统

大学网课查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳…

VB6开发 用户控件OCX

VB6 中创建一个主窗体工程后,再添加一个 ActiveX用户控件工程 在用户控件窗体中可以添加 文本框和按钮的控件 属性Public strUrl As String方法发送消息 Public Sub WebSocketSendMsg(ByVal SendMsg As String) On Error GoTo ErrTrapDim sMsg As StringsMsg = msgInput.TextC…

公众号网课答案系统搭建

公众号网课答案系统搭建 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

Java I/O流和反射机制

文章目录File类操作文件或目录属性认识Java的流使用字节流读写文本文件使用字节流类FileInputStream读文本文件使用字节流类FileOutputStream写文本文件使用字符流读写文本文件使用字符流类BufferedReader和FileReader读文本文件使用字符流类BufferedWrite和FileWrite写文本文件…

公众号订阅通知

洛塔服务号回复010获取代码。 功能说明 公众号订阅通知这个功能&#xff0c;微信本来打算替代掉模板消息和一次性订阅的&#xff0c;最后也没替代掉&#xff0c;成为单独的一个功能。 个人感觉和一次性订阅是没有太大区别的&#xff0c;只不过增加了一个长期订阅&#xff0c;…