JavaWeb:实现购物商城(课程设计完整版)

雨点打透心脏的1/2处 2024-03-26 10:55 121阅读 0赞

前言

做一个javaweb可以对前后端基础知识进行巩固。
就比如 前端可以用 html+css+js+jQuery;
后端Http协议,Servlet基础,JSP技术,Mysql等
该程序做的这个就相对比较基础,适合大学生当课程设计用
在文章结尾附项目源代码和素材

一、功能概述

  1. 购物商城分为 管理员 和 普通用户 页面
  2. 用户可以自行注册登录
  3. 用户可以 加入商品到购物车中,可以查看商品的详情
  4. 管理员可以对 商品进行增删改查,就比如发布商品,下架商品,修改商品,搜索商品。

二、代码分析

在这里插入图片描述

  1. action层:管理业务调度和管理跳转的,即处理逻辑问题
  2. bean层:封装数据,设置数据的属性和行为
  3. biz层:接受数据库的处理结果并且返回给前端
  4. dao层:对数据库进行增删改查
  5. util层: 是一个多功能,基于工具的包。比如字符串处理,JDBC连接等

三、项目展示

因为艺术细胞太少,所以前端页面设计的比较难看,大家可以自行修改也可以在评论区提出意见,或联系我修改。

1.登录和注册

在这里插入图片描述
在这里插入图片描述

2.普通用户页面

在这里插入图片描述

3.商品详情页

在这里插入图片描述

4.购物车

在这里插入图片描述

5.管理员页面

在这里插入图片描述

6. 发布商品页面

在这里插入图片描述

7. 修改商品页面

在这里插入图片描述

8.商品数据库

在这里插入图片描述

四、部分代码展示

1.登录和注册

  1. //1.判读用户请求的类型为login
  2. String method = req.getParameter("type");
  3. switch (method) {
  4. case "login":
  5. // 从 login.html中 拿 账号,密码等数据
  6. String name = req.getParameter("name");
  7. String pwd = req.getParameter("pwd");
  8. // 调用UserBiz的getUser方法,根据 网页中 输入的账号密码,获取相应对象
  9. User user = userBiz.getUser(name,pwd);
  10. //判断 获取到的对象是否为 null;
  11. if (user == null) {
  12. System.out.println(user);
  13. out.println("<script>alert('用户名或密码不存在');location.href = 'login.html';</script>");
  14. }else {
  15. session.setAttribute("user",user);//user-->Object
  16. out.println("<script>alert('登录成功');location.href='/UserShow';</script>");
  17. }
  18. break;
  19. case "register" :
  20. // 从 login.html中 拿 账号,密码等数据
  21. String name1 = req.getParameter("name");
  22. String pwd1 = req.getParameter("pwd");
  23. UserDao userDao = new UserDao();
  24. try {
  25. userDao.setUser(name1,pwd1);
  26. } catch (SQLException throwables) {
  27. throwables.printStackTrace();
  28. }
  29. out.println("<script>alert('注册成功');location.href = 'login.html';</script>");
  30. break;

2.修改商品

  1. req.setCharacterEncoding("utf-8");
  2. resp.setContentType("text/html;charset=utf-8");
  3. PrintWriter out = resp.getWriter();
  4. CommodityDao commodityDao = new CommodityDao();
  5. String temp = req.getParameter("mod");
  6. int temp1 = 0;
  7. if (temp!=null) {
  8. temp1=Integer.parseInt(temp);
  9. }
  10. DiskFileItemFactory factory = new DiskFileItemFactory();
  11. ServletFileUpload upload = new ServletFileUpload(factory);
  12. String imgPath="";
  13. try {
  14. String name ="";
  15. String price = "";
  16. String introduce = "";
  17. String path="";
  18. List<FileItem> list = upload.parseRequest(req);
  19. for (FileItem item : list) {
  20. if (item.isFormField()){
  21. switch (item.getFieldName()){
  22. case "mod" :
  23. temp1 = Integer.parseInt(item.getString("utf-8"));
  24. break;
  25. case "name" :
  26. name = item.getString("utf-8");
  27. break;
  28. case "price" :
  29. price = item.getString("utf-8");
  30. break;
  31. case "introduce" :
  32. introduce = item.getString("utf-8");
  33. break;
  34. }
  35. }else {
  36. // 拿到文件的名称
  37. String fileName = item.getName();
  38. // 时间戳唯一 唯一的fileName
  39. fileName=fileName.substring(fileName.lastIndexOf("."));
  40. fileName=System.currentTimeMillis()+fileName;
  41. imgPath="Mysql_imgs/"+fileName;
  42. // 拿到文件存储的路径
  43. path = "D:\\IdeaProjects\\mydemo\\web\\Mysql_imgs\\"+fileName;
  44. // 创建读写流
  45. InputStream in = item.getInputStream();
  46. FileOutputStream outt = new FileOutputStream(path);
  47. // 完成读写操作
  48. byte [] buffer = new byte[1024];
  49. int len = 0 ;
  50. while ((len = in.read(buffer)) > 0) {
  51. outt.write(buffer);
  52. }
  53. // 关闭资源
  54. in.close();
  55. outt.close();
  56. item.delete();
  57. }
  58. System.out.println(temp1 +" "+name +" "+price +" "+introduce +" "+imgPath );
  59. if (name!=""&&price!=""&&introduce!=""&&imgPath!="") {
  60. try {
  61. commodityDao.modCommodity(temp1,name,price,introduce,imgPath);
  62. } catch (SQLException throwables) {
  63. throwables.printStackTrace();
  64. }
  65. out.println("<script>alert('修改成功');location.href = 'index';</script>");
  66. }
  67. }
  68. } catch (FileUploadException e) {
  69. e.printStackTrace();
  70. }

3. 发布商品

  1. DiskFileItemFactory factory = new DiskFileItemFactory();
  2. ServletFileUpload upload = new ServletFileUpload(factory);
  3. CommodityDao commodityDao = new CommodityDao();
  4. String imgPath="";
  5. try {
  6. String name ="";
  7. String price = "";
  8. String introduce = "";
  9. String path="";
  10. List<FileItem> list = upload.parseRequest(req);
  11. for (FileItem item : list) {
  12. if (item.isFormField()){
  13. switch (item.getFieldName()){
  14. case "name" :
  15. name = item.getString("utf-8");
  16. break;
  17. case "price" :
  18. price = item.getString("utf-8");
  19. break;
  20. case "introduce" :
  21. introduce = item.getString("utf-8");
  22. break;
  23. }
  24. }else {
  25. // 拿到文件的名称
  26. String fileName = item.getName();
  27. // 时间戳唯一 唯一的fileName
  28. fileName=fileName.substring(fileName.lastIndexOf("."));
  29. fileName=System.currentTimeMillis()+fileName;
  30. imgPath="Mysql_imgs/"+fileName;
  31. // 拿到文件存储的路径
  32. path = "D:\\IdeaProjects\\mydemo\\web\\Mysql_imgs\\"+fileName;
  33. // 创建读写流
  34. InputStream in = item.getInputStream();
  35. FileOutputStream outt = new FileOutputStream(path);
  36. // 完成读写操作
  37. byte [] buffer = new byte[1024];
  38. int len = 0 ;
  39. while ((len = in.read(buffer)) > 0) {
  40. outt.write(buffer);
  41. }
  42. // 关闭资源
  43. in.close();
  44. outt.close();
  45. item.delete();
  46. }
  47. if (name!=""&&price!=""&&introduce!=""&&imgPath!="") {
  48. // System.out.println(name+" ; "+price+" ; "+introduce+" ; "+imgPath);
  49. try {
  50. commodityDao.setCommodity(name,price,introduce,imgPath);
  51. } catch (SQLException throwables) {
  52. throwables.printStackTrace();
  53. }
  54. out.println("<script>alert('添加成功');location.href = 'index';</script>");
  55. }
  56. }
  57. } catch (FileUploadException e) {
  58. e.printStackTrace();
  59. }

4. 购物车页面

  1. <body>
  2. <div class="divv">
  3. <div class="head">
  4. <a href="/UserShow">首页</a>
  5. </div>
  6. <div class="contain">
  7. <div class="con">
  8. <div class="con_div1">
  9. <span style="margin-left: 350px;">商品信息</span>
  10. <span style="margin-left: 170px;">数量</span>
  11. <span style="margin-left: 150px;">金额</span>
  12. <span style="float: right;margin-right: 138px;">操作</span>
  13. </div>
  14. <c:forEach items="${Arraylist}" var="user">
  15. <div class="con_div">
  16. <div class="con_div_div1"> <img src="${user.img}" alt="" class="con_div_img"></div>
  17. <div class="con_div_div2">${user.introduce}</div>
  18. <div class="con_div2">
  19. <a href="/carjian?id=${user.id}&amount=${user.amount}" class="con_div2_a1">-</a>
  20. <span class="con_div2_in1">${user.amount}</span>
  21. <a href="/carjia?id=${user.id}&amount=${user.amount}" class="con_div2_a2">+</a>
  22. </div>
  23. <span class="con_div_s3">¥</span>
  24. <span class="con_div_s2">${user.price}</span>
  25. <a href="/delcar?id=${user.id}" class="con_div_a1">移除</a>
  26. </div>
  27. </c:forEach>
  28. <div class="con_end">
  29. <span class="con_end_s1">合计: </span>
  30. <em class="con_end_em">0.00</em>
  31. <a href="" class="con_end_a1">结算</a>
  32. </div>
  33. </div>
  34. </div>
  35. </div>
  36. <script>
  37. let gets = document.getElementsByClassName("con_div_s2");
  38. let amounts = document.getElementsByClassName("con_div2_in1");
  39. let sum = 0;
  40. for (let i = 0; i < gets.length; i++) {
  41. sum += parseInt(gets[i].innerHTML) * parseInt(amounts[i].innerHTML);
  42. }
  43. document.getElementsByClassName("con_end_em")[0].innerHTML = sum;
  44. </script>
  45. </body>

五、总结感想

这个项目,后端处理的还行,但是由于头脑简单,所以把前端页面设计的比较难看,大家多包涵,可以自行修改或者联系我修改。
如果在学习过程中有任何问题都可在评论区指出。

六、完整源代码和素材

链接:https://pan.baidu.com/s/13MG5R\_xrLWQrxcf7sBtt7g?pwd=ojbk
提取码:ojbk

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java课程设计完整

    补充之前的java课程设计,不仅仅只有方法,更加人性化的在控制台给予提示输入,加入了键盘输入的代码 下面是源码,很长的 前两个类仅仅是判断是多了equals()方法,不知