工程实训项目之——电商系统

项目介绍

完成校内工程实训的一个作业,我的选题是B2C电商系统。所以就仿照京东做了一个仿京东商城。首先声明,本人技术水平有限,这个项目还很不完善,但是可以通过这个简单的项目,带你了解前后端分离的这种思想,以及前后端数据传送的法则。hhh,学会照猫画虎是你开始编程的第一步。

项目展示

我们看几张图
未登录时大概浏览界面
主页
可以点击侧边菜单栏实现类型选择
在这里插入图片描述

可以进入商品详情页
在这里插入图片描述
这时候是没有登录状态的,所以添加购物车会跳到登录界面。
在这里插入图片描述
这里是个简单的登录界面。
登录后可以进入后台
在这里插入图片描述
在这里插入图片描述
登陆成功后,可以使用购物车了。
当我登录成功后,浏览器获取session数据获取我的用户名显示在购物车里面,并且获取我的购物车商品数量。
后台系统中可以添加商品类型,添加商品。添加后展示到前台。
登录后能还能查看购物车物品,选择物品进行购买。
在这里插入图片描述
提交订单界面
在这里插入图片描述

项目结构

项目创建方式,idea中spring Initializr。项目目录如下:
在这里插入图片描述
这个项目结构采取前后端分离。前端使用的layui框架,后端springboot。
我们用一个前端和后端作为示例
下面是前端index.html文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<div th:replace="plugins/js::js"></div>
<head>
    <meta charset="UTF-8">
    <title>仿京东商城</title>
</head>

<style>
    #goods_title1:hover{
        color: red;
        cursor: pointer;
    }
    #goods_title2:hover{
        color: red;
        cursor: pointer;
    }
    #goods_title3:hover{
        color: red;
        cursor: pointer;
    }
    #goods_title4:hover{
        color: red;
        cursor: pointer;
    }
    #goods_title5:hover{
        color: red;
        cursor: pointer;
    }
    #goods_title6:hover{
        color: red;
        cursor: pointer;
    }

    #loginBtn:hover{
        color: red;
        cursor: pointer;
    }
    #registBtn:hover{
        color: red;
        cursor: pointer;
    }
    [id^=type-]:hover{
        color:red;
        cursor: pointer;
    }
</style>

<body>

<!--头部-->
<div style=" display: flex;align-items: center">
    <div style="width: 35%;height: 87px">
            <img src="/images/index/jd2.jpg">
    </div>
    <div style="width: 35%;">

        <div style="display: flex;border: solid red 2px;">
            <div style="width:75%">
                <input type="text" style="height:50px;border:none;width:100%">
            </div>
            <div style="color:white;background: red;padding: 5px 20px;width:25%;text-align: center;font-size: 30px">
                搜索
            </div>
        </div>
    </div>
    <div th:action="@{/pages/front/login}" method="post" onclick="window.location='/pages/back/shopCar/showMyCar'" style="cursor: pointer;width: 15%;text-align: center;border:solid lightgray 1px;background:rgb(245,245,245);padding: 6px;color:red;
    margin-left: 40px " >
        (<span th:text="${session.userName}">我的</span>)的购物车(<span th:text="${session.goodsCount}">10</span>)
    </div>
    <!--下面的location对应前面的LoginController方法-->
    <div onclick="window.location='/pages/front/loginPage'"  id="loginBtn" style="cursor: pointer;width: 80px;text-align: center;border:solid lightgray 1px;background:rgb(245,245,245);padding: 6px;margin-left: 40px ">
        登录
    </div>
    <img src="">
    <!--下面是跳转到控制器的register-->
    <!--<div οnclick="window.location='/pages/front/registPage'"  id="registBtn" style="cursor: pointer;width: 80px;text-align: center;border:solid lightgray 1px;background:rgb(245,245,245);padding: 6px;margin-left: 40px ">-->
        <!--注册-->
    <!--</div>-->
</div>
<div style="display: flex;">
    <div style="width: 20%;border: solid red 1px ">
        <div style="display: flex;align-items: center;padding: 20px" th:each="t:${types}">
            <div th:text="${t.typeName}" style="font-weight: bold;font-size: 16px">电子</div>
            <div style="display: flex;flex-wrap: wrap;margin-left: 30px">
                <div th:id="'type-'+${ct.goodsTypeId}" style="margin: 5px" th:each="ct:${t.childrenTypes}"
                     th:text="${ct.typeName}">手机
                </div>
            </div>
        </div>
    </div>
    <div style="width: 80%;border: solid red 1px;display: flex;padding: 20px 5px;flex-wrap: wrap" id="goodsDiv"></div>
</div>

<script th:inline="javascript" type="text/javascript">
    $(function () {
        layui.use(['table', 'form', 'layer'], function () {
            var table = layui.table;
            var layer = layui.layer;
            var form = layui.form;

            $("[id^=type-]").click(function () {
                //alert(this.id);
                let typeId = this.id.split('-')[1];
                $("[id^=type-]").css({color: ''});
                $(this).css({color: 'red'});

                $.post('/pages/back/goods/getGoodsByTypeId/' + typeId, {}, function (res) {
                    let goodsDiv = $("#goodsDiv");
                    goodsDiv.empty();//清空goodsDiv里边的商品
                    if (res.res) {
                        let data = res.data;
                        for (let x = 0; x < data.length; x++) {
                            let g = data[x];

                            let goodsItem = $("<div style=\"padding: 10px;border: solid lightgray 1px;box-shadow: 0 0 5px lightgray;width: 26%;;margin: 15px\">\n" +
                                "            <div><img src='" + g.img + "' style='width: 100%;height: 250px'></div>\n" +
                                "            <div style=\"color: orangered;padding: 5px 0\">¥<span style=\"font-size: 22px;\">" + g.price + "</span></div>\n" +
                                "            <div id=\"goods_title\">" + g.title + "</div>\n" +
                                "            <div style=\"color: orangered;font-size:12px;font-weight: bold;padding: 5px 0;color: #646fb0\">" + g.evaluationCount + "万+<span\n" +
                                "                    style=\"color: gray\">条评价</span></div>\n" +
                                "            <div style=\"color: gray;font-size: 12px\">" + g.merchantName + "</div>\n" +
                                "        </div>");

                            goodsDiv.append(goodsItem);

                            goodsItem.click(function () {
                                window.location = 'pages/front/goods/goodsDetail/' + g.goodsId;

                            })

                        }
                    }
                });
            })
            $("[id^=type-]:eq(0)").click();
        });
    })
</script>
</body>
</html>

然后看看indexController

package com.zce.market.controller;
import com.zce.market.dao.UserDao;
import com.zce.market.pojo.entity.User;
import com.zce.market.service.TypeService;
import com.zce.market.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

/**
 * @Author 时光荒凉了来时路
 * @Date 2021/9/3 22:49
 */
@Controller
public class IndexController {
    //@ResponseBody //表示返回字符串给前端
    @Resource
    UserDao userDao;
    @Resource
    TypeService typeService;
    @Resource
    UserService userService;

    @RequestMapping("/")
    String index(Model model){
        //下面return会自动查找页面
        User user = userDao.selectByPrimaryKey(1);
        model.addAttribute("types",typeService.selectTypesByParentId(-1));
        return "index";//此时不需要@ResponseBody
    }
    @RequestMapping("/pages/back/dashBoard")
    String dashBoard() {
        return "pages/back/dashBoard";
    }
}

springboot使用起来其实不是难点,这里关键的是springboot底层实现方式需要有所了解。这里建议你看看这篇文档:spring中文文档
代码这部分讲解起来内容过于繁杂,除了springboot的基本使用外,这个项目你还需要了解cookie和session原理。详细解释没有必要了,博主也还在继续学习中,代码借鉴了一些大牛的作品。后面会继续出博客对这个项目进行深入剖析。

后台数据库设计

UML图如下
在这里插入图片描述
项目源代码地址:github源码地址
看到的小伙伴记得github点个小星星哦

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 电影推荐系统是一种基于用户兴趣和行为数据的算法系统,它利用机器学习和数据挖掘等技术,分析用户的历史观影记录、评分和偏好,为用户推荐最适合他们的电影。 在Python项目实训中,我们可以使用Python编程语言和相关的库和工具,去构建一个电影推荐系统。首先,我们需要收集和整理电影数据集,包括电影的名称、分类、导演、演员、评分等信息。我们可以通过一些公开的电影数据库或者API来获取这些数据。 接下来,我们可以使用Python中的机器学习库(如scikit-learn)或深度学习库(如Tensorflow)来构建一个协同过滤推荐模型。协同过滤是一种常用的方法,它基于用户的行为数据,比如用户的历史观影记录和评分,来计算用户的电影相似性,并且根据其他用户的评分和观影记录,为用户生成个性化的电影推荐。 通过对电影数据进行特征工程和处理,我们可以使用Python的数据处理库(如pandas)来处理和清洗数据。然后,我们可以使用Python的数据可视化库(如matplotlib和seaborn)来对电影数据进行可视化分析,从而更好地理解数据的分布和规律。 最后,我们可以使用Python的Web开发框架(如Django)来构建一个用户交互界面,用户可以输入自己的偏好和历史观影记录,系统将根据这些信息提供个性化的电影推荐结果。 通过Python项目实训,我们可以学习和实践推荐系统的建模和算法。同时,我们也可以学习和应用Python在数据处理、可视化和Web开发等方面的能力,这对于我们日后的职业发展非常有帮助。 ### 回答2: 电影推荐系统是一种利用机器学习和数据分析技术来为用户提供个性化电影推荐的应用程序。Python项目实训中,我们可以通过以下步骤来开发电影推荐系统。 首先,我们需要收集和准备电影数据集。可以从公开数据集或者电影数据库中获取电影信息,如电影名称、类型、导演、演员和用户评分等。将这些数据导入到Python环境中进行分析和处理。 接下来,我们可以使用机器学习技术来建立推荐算法模型。常见的推荐算法包括协同过滤、基于内容的推荐和深度学习等。可以使用Python库如scikit-learn或者Keras来实现这些算法。 在建立推荐模型之后,我们可以利用该模型为用户生成个性化推荐列表。根据用户的历史行为和偏好,系统可以分析相似用户或者相似电影,并推荐用户可能喜欢的电影。可以使用Python的pandas和numpy库来对数据进行处理和计算。 最后,我们还可以通过用户反馈和评价对推荐系统进行评估和优化。根据用户的反馈,可以调整推荐算法的参数或者引入其他技术来提高推荐的准确性和用户满意度。 总结来说,Python项目实训中的电影推荐系统主要包括数据收集、数据处理、推荐算法建模和用户反馈评估等步骤。通过Python的机器学习和数据分析技术,可以开发出一个个性化、准确度高的电影推荐系统。 ### 回答3: 电影推荐系统是基于Python语言进行开发的一个项目实训项目。该系统的主要目的是根据用户的喜好和观影记录,推荐符合用户口味的电影。 在实现该系统时,首先需要收集电影的相关数据。可以使用爬虫技术从互联网上获取电影的信息,比如电影的名称、导演、演员、类型、时长、评分等。获取到的数据可以存储在数据库中,以便后续使用。 接下来,需要设计一个算法来进行电影的推荐。常用的算法有基于内容的推荐算法和协同过滤推荐算法。基于内容的推荐算法是根据电影的特征,比如类型、导演、演员等,来推荐类似的电影给用户。而协同过滤推荐算法是根据用户的观影历史和其他用户的行为数据,找出相似的用户,并将相似用户喜欢的电影推荐给当前用户。 在系统实现过程中,还可以考虑引入机器学习的算法,比如深度学习和自然语言处理等技术,来提升推荐的准确性和个性化程度。 最后,在界面设计方面,可以使用Python的GUI库,比如Tkinter或PyQt等,来实现一个友好的用户界面,使用户能够方便地输入自己的喜好和查看系统推荐的电影。 该项目的实施可以考虑以下步骤:需求分析、数据库设计、数据采集、算法选择与实现、界面设计与实现、系统测试与调试等。 通过这个项目实训,可以提高学生的Python编程能力,了解数据获取和处理的方法,熟悉算法的选择和实现,掌握界面设计和用户交互的技术,培养系统分析和设计的能力,进一步提升学生的综合实践能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值