idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页

news2024/11/28 17:59:49

一、源码特点
 springboot 电影推荐系统是一套完善的完整信息系统,结合mvc框架和LayUI框架完成本系统springboot dao bean  采用协同过滤算法进行推荐 ,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
前段主要技术 css jquery  LayUI框架
后端主要技术 Springboot  框架
数据库 mysql
开发工具 IDEA  JDK1.8

idea Springboot 电影推荐系统1


二、功能介绍
前台功能:
1)系统首页
2)公告浏览
3)电影浏览、查看电影详情 ,并记录用户浏览记录,系统采用协同过滤算法,根据用户的行为习惯进行推荐其他电影
4)电影评价
5)用户注册、登录


后台功能:
(1)管理员管理:对管理员信息进行添加、删除、修改和查看
(2)用户管理:对用户信息进行添加、删除、修改和查看
(3)公告管理:对公告信息进行添加、删除、修改和查看
(4)电影管理:对电影信息进行添加、删除、修改和查看,excel导入
(5)浏览管理:对浏览信息进行删除、修改和查看
(6)评价管理:对评价信息进行添加、删除、修改和查看 
(7)用户登录、个人信息修改

数据库设计

CREATE TABLE `gly` (
`glyid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',  PRIMARY KEY  (`glyid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `yonghu` (
`yhid` int(11) NOT NULL auto_increment,
`yhm` VARCHAR(40) default NULL COMMENT '用户名',
`mm` VARCHAR(40) default NULL COMMENT '密码',
`xm` VARCHAR(40) default NULL COMMENT '姓名',
`lxdh` VARCHAR(40) default NULL COMMENT '联系电话',
`lxdz` VARCHAR(40) default NULL COMMENT '联系地址',  PRIMARY KEY  (`yhid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `gonggao` (
`ggid` int(11) NOT NULL auto_increment,
`bt` VARCHAR(40) default NULL COMMENT '标题',
`nr` VARCHAR(40) default NULL COMMENT '内容',
`fbsj` VARCHAR(40) default NULL COMMENT '发布时间',  PRIMARY KEY  (`ggid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `dianying` (
`dyid` int(11) NOT NULL auto_increment,
`dymc` VARCHAR(40) default NULL COMMENT '电影名称',
`js` VARCHAR(40) default NULL COMMENT '介绍',
`tp` VARCHAR(40) default NULL COMMENT '图片',
`zy` VARCHAR(40) default NULL COMMENT '主演',
`jq` VARCHAR(40) default NULL COMMENT '剧情',  PRIMARY KEY  (`dyid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `liulan` (
`llid` int(11) NOT NULL auto_increment,
`yh` VARCHAR(40) default NULL COMMENT '用户',
`dy` VARCHAR(40) default NULL COMMENT '电影',
`sj` VARCHAR(40) default NULL COMMENT '时间',  PRIMARY KEY  (`llid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
CREATE TABLE `pingjia` (
`pjid` int(11) NOT NULL auto_increment,
`dy` VARCHAR(40) default NULL COMMENT '电影',
`pj` VARCHAR(40) default NULL COMMENT '评价',
`yh` VARCHAR(40) default NULL COMMENT '用户',
`sj` VARCHAR(40) default NULL COMMENT '时间',  PRIMARY KEY  (`pjid`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

控制层代码设计


   /**电影列表 查询dianying
	 * 
	 */
    @RequestMapping(value = "listpage")
    public ModelAndView  listpage(HttpServletRequest request, HttpServletResponse response)  {
        try {
            request.setCharacterEncoding("gb2312");//强制字符集
        }catch(Exception e){
            e.printStackTrace();
        }
      Map<String,Object> map= new HashMap<String,Object>();

        ModelAndView mav = new ModelAndView();//初始化
        mav.setViewName("dianying/dianyinglist");//跳转jsp 页面

        String dyid=(String)request.getParameter("dyid");
        if(dyid!=null&&!dyid.equals("")){//判断电影编号
           // System.out.println(dyid);
            map.put("dyid",dyid);//拼接sql语句电影编号
        }
        String dymc=(String)request.getParameter("dymc");
        if(dymc!=null&&!dymc.equals("")){//判断电影名称
           // System.out.println(dymc);
            map.put("dymc",dymc);//拼接sql语句电影名称
        }
        String js=(String)request.getParameter("js");
        if(js!=null&&!js.equals("")){//判断介绍
           // System.out.println(js);
            map.put("js",js);//拼接sql语句介绍
        }
        String tp=(String)request.getParameter("tp");
        if(tp!=null&&!tp.equals("")){//判断图片
           // System.out.println(tp);
            map.put("tp",tp);//拼接sql语句图片
        }
        String zy=(String)request.getParameter("zy");
        if(zy!=null&&!zy.equals("")){//判断主演
           // System.out.println(zy);
            map.put("zy",zy);//拼接sql语句主演
        }
        String jq=(String)request.getParameter("jq");
        if(jq!=null&&!jq.equals("")){//判断剧情
           // System.out.println(jq);
            map.put("jq",jq);//拼接sql语句剧情
        }


        List<dianying> list=dianyingdao.getAll(map);//查询dianying 表数据返回 list对象

        mav.addObject("list",list);//赋值变量
       

        return mav;
    }

	 /**电影添加方法 对表 dianying 进行添加
	 * 
	 */
    @RequestMapping(value = "add")
    public ModelAndView  add(HttpServletRequest request, HttpServletResponse response){

        try {
            request.setCharacterEncoding("gb2312");//强制字符集
        }catch(Exception e){//捕获异常
            e.printStackTrace();
        }
        ModelAndView mav = new ModelAndView();//初始化
        mav.setViewName("dianying/dianyingadd");//跳转页面
        dianying bean=new dianying();
	
        String dyid=(String)request.getParameter("dyid");//电影编号 变量
        bean.setDyid(dyid);//赋值封装

        String dymc=(String)request.getParameter("dymc");//电影名称 变量
        bean.setDymc(dymc);//赋值封装

        String js=(String)request.getParameter("js");//介绍 变量
        bean.setJs(js);//赋值封装

        String tp=(String)request.getParameter("tp");//图片 变量
        bean.setTp(tp);//赋值封装

        String zy=(String)request.getParameter("zy");//主演 变量
        bean.setZy(zy);//赋值封装

        String jq=(String)request.getParameter("jq");//剧情 变量
        bean.setJq(jq);//赋值封装


        dianyingdao.add(bean);//执行 添加 dianying 添加操作


       

        request.setAttribute("msg", "<script>alert('添加成功');</script>");//操作提示

        return addpage(request,response);

    }
	/**电影添加页面 
	 * 
	 */

    @RequestMapping(value = "addpage")
    public ModelAndView  addpage(HttpServletRequest request, HttpServletResponse response){
           try {
            request.setCharacterEncoding("gb2312");//强制字符集
	    // request.setAttribute("conn",jdbcTemplate.getDataSource().getConnection());
        }catch(Exception e){//捕获异常
            e.printStackTrace();
        }
        ModelAndView mav = new ModelAndView();//初始化对象
        mav.setViewName("dianying/dianyingadd");//跳转页面对象
       



        return mav;
    }

	 /**电影删除方法 对表 dianying 进行删除
	 * 
	 */
    @RequestMapping(value = "del")
    public ModelAndView  del(HttpServletRequest request, HttpServletResponse response){
        String id=(String)request.getParameter("keyid");//获得 主键id
        ModelAndView mav = new ModelAndView();
       // mav.setViewName("add/add");
        try{
           dianyingdao.delete(Integer.parseInt(id));//执行 删除 dianying 方法

        }catch(Exception e){
            e.printStackTrace();;
        }



        request.setAttribute("msg", "<script>alert('删除成功');</script>");//返回前台 操作提示

        return listpage(request,response);
    }
	
	 /**电影查看方法 对表 dianying 进行查看
	 * 
	 */
    @RequestMapping(value = "detail")
    public ModelAndView  detail(HttpServletRequest request, HttpServletResponse response){
        String id=(String)request.getParameter("keyid");//获得 主键id
	  try {
            request.setCharacterEncoding("gb2312");//强制字符集
	    // request.setAttribute("conn",jdbcTemplate.getDataSource().getConnection());
        }catch(Exception e){
            e.printStackTrace();
        }
        dianying bean=new dianying();//初始对象电影
        ModelAndView mav = new ModelAndView();//初始化
        mav.setViewName("dianying/dianyingdetail");//跳转jsp页面
        try{
            bean=dianyingdao.getdianyingByID(Integer.parseInt(id));//查询获得当前dianying对象
		request.setAttribute("dyid", bean.getDyid());//电影编号

		request.setAttribute("dymc", bean.getDymc());//电影名称

		request.setAttribute("js", bean.getJs());//介绍

		request.setAttribute("tp", bean.getTp());//图片

		request.setAttribute("zy", bean.getZy());//主演

		request.setAttribute("jq", bean.getJq());//剧情

        
        }catch(Exception e){
            e.printStackTrace();;
        }





        return mav;
    }

核心算法设计

static {
        DBO db=new DBO();
        String sql="";
        ResultSet rs=null;
        ///电影
        int i=0;
        sql="select * from dianying where 1=1";

        try{
            rs=db.query(sql);
            while(rs.next()){
                userSet.add(rs.getString("dyid"));//电影
                //    users[i]=rs.getString("spid");
                i++;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        users=new String[i-1];
        sql="select * from yonghu where 1=1";
        i=0;
        try{
            rs=db.query(sql);
            while(rs.next()){
                filmSet.add(rs.getString("yhm"));//用户
                //films[i]=rs.getString("yhm");
                i++;
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        films=new String[i-1];

        score = getScore();
    }

    public static String outNearbyUserList(String user) { //user电影id
        DBO db=new DBO();
        Map scores = new HashMap();
        String sql="";
        ResultSet rs=null;
        ///商品
        int i=0;
        sql="select * from dianying where 1=1";

        try{
            rs=db.query(sql);
            while(rs.next()){

                //   i++;
                if (rs.getString("dyid").equalsIgnoreCase(user)) {
                    continue;
                }
                double score = getOSScore(user, rs.getString("dyid"));
                System.out.println("score="+score);
                scores.put(rs.getString("dyid"), String.valueOf(score));

            }
            db.close();
        }catch(Exception e){
            e.printStackTrace();
        }




        /*
        for (String tempUser : users) {
            if (tempUser.equalsIgnoreCase(user)) {
                continue;
            }
            double score = getOSScore(user, tempUser);
            System.out.println("score="+score);
            scores.put(tempUser, score);
        }
        */
        System.out.println(scores.toString());

        TreeMapTest mp=new TreeMapTest();
        String a= mp.getMin(scores);
        System.out.println("a="+a);
        return a;
    }

    private static Double getOSScore(String user1, String user2) {
        HashMap user1Score = (HashMap) score.get(user1);
        HashMap user2Score = (HashMap) score.get(user2);
        double totalscore = 0.0;
        Iterator it = user1Score.keySet().iterator();
        while (it.hasNext()) {
            String film = (String) it.next();
            int a1 = (Integer) user1Score.get(film);
            int a2 = (Integer) user1Score.get(film);
            int b1 = (Integer) user2Score.get(film);
            int b2 = (Integer) user2Score.get(film);
            int a = a1 * a2 - b1 * b2;
            //System.out.println(Math.abs(a));
            totalscore += Math.sqrt(Math.abs(a));
        }
        return totalscore;
    }

三、注意事项
1、管理员账号:admin密码:admin 数据库配置文件src\main\resources  下的 application.properties
2、开发环境为IDEA开发,数据库为mysql,使用java语言开发。
3、数据库文件名是jspfilmsql 系统名称film
4、地址:qt/index.jsp 
四系统实现

协同过滤算法计算过程 在控制台打印

下载地址
https://download.csdn.net/download/qq_41221322/89059304

需要源码 其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亮数据,可视化数据采集强大利器

前言 随着信息技术的飞速发展&#xff0c;我们已经进入了一个以数据为中心的世纪。在这个时代&#xff0c;数据不仅仅是信息的载体&#xff0c;它已经成为了推动社会进步、创新科技、增强决策和驱动经济增长的关键资源。 在这个数据世纪中&#xff0c;掌握数据的能力等同于掌…

计算机网络—VLAN 间路由配置

目录 1.拓扑图 2.实验环境准备 3.为 R3 配置 IP 地址 4.创建 VLAN 5.配置 R2 上的子接口实现 VLAN 间路由 6.配置文件 1.拓扑图 2.实验环境准备 配置R1、R3和S1的设备名称&#xff0c;并按照拓扑图配置R1的G0/0/1接口的IP地址。 [Huawei]sysname R1 [R1]interface Giga…

希亦、洁盟、大宇超声波清洗机好用吗?比拼谁是性价比之王

在追求高效生活品质的今天&#xff0c;超声波清洗机以其独特的清洁技术和便捷的操作方式&#xff0c;成为了家用和商用清洁领域的新宠。尤其对于眼镜用户而言&#xff0c;一台高效的超声波清洗机不仅能够轻松去除镜片上的污渍和细菌&#xff0c;更能保护镜片不受损伤&#xff0…

提升Web开发安全性:分析JScrambler、JShaman等五款在线JavaScript加密混淆工具

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具&#xff0c;包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析&#xff0c;帮助开发人员更好地保护和加密其 JavaScript 代码&#xff0c;提…

学浪视频如何下载或者录屏

很多同学购买了学浪视频&#xff0c;可是不知道如何下载下来&#xff0c;用录屏&#xff0c;发现学浪PC学生版客户端有防止录屏&#xff0c;为了解决这个问题&#xff0c;我开发了学浪视频下载的客户端 大家有需要自己取一下&#xff0c;截止到4月1号&#xff0c;最新版本是2.…

《自动机理论、语言和计算导论》阅读笔记:p115-p138

《自动机理论、语言和计算导论》学习第 6 天&#xff0c;p115-p138 总结&#xff0c;总计 24 页。 一、技术总结 1.associativity and comutativity (1)commutativity(交换性): Commutativity is the property of an operator that says we can switch the order of its ope…

【TB作品】MSP430G2553,超声波倒车雷达PCB,单片机,超声波SR04,键盘,oled

题目 硬件&#xff1a;MSP430G2553、 SR04超声波传感器 、3*4键盘、 无源蜂鸣器、oled显示屏 软件 1 、实时显示测量得到的距离 2、按键设置一个报警门限数值&#xff0c;直接输入数值后确认 3、低于报警门限数值就开始报警&#xff0c;而且距离越近蜂鸣器的鸣叫频率越高 程序…

ctf题目

目录 1.文件包含的一道题目&#xff0c;没什么难度&#xff0c; 2.一道sql注入的题目&#xff0c;伪静态 3.限制只能本地访问。 1.文件包含的一道题目&#xff0c;没什么难度&#xff0c; 但是一个点就是它这里去包含的那个文件名就是flag&#xff0c;而不是flag.php也不是f…

基于BEV的自动驾驶会颠覆现有的自动驾驶架构吗

基于BEV的自动驾驶会颠覆现有的自动驾驶架构吗 引言 很多人都有这样的疑问–基于BEV(Birds Eye View)的自动驾驶方案是什么&#xff1f;这个问题&#xff0c;目前学术界还没有统一的定义&#xff0c;但从我的开发经验上&#xff0c;尝试做一个解释&#xff1a;以鸟瞰视角为基础…

BIONIOAIO

通信技术整体解决的问题 1.局域网内的通信要求 2.多系统间的底层消息传递机制 3.高并发下&#xff0c;大数据量的通信场景需要 4.游戏行业。无论是手游服务端、还是大型网络游戏&#xff0c;java的应用越来越广 IO模型基本说明 就是用什么样的通道或者说是通信模式和架构…

Netty学习——源码篇9 Handler其他处理与异步处理

1 ChannelHandlerContext 每个ChannelHandler被添加到ChannelPipeline后&#xff0c;都会创建一个ChannelHandlerContext&#xff0c;并与ChannelHandler关联绑定。ChannelHandlerContext允许ChannelHandler与其他的ChannelHandler进行交互。ChannelHandlerContext不会改变添加…

14-项目管理:如何编写高质量的Makefile?

下面给你举个例子&#xff0c;你就会理解低质量的Makefile文件是什么样的了。 build: clean vetmkdir -p ./Roleexport GOOSlinux && go build -v .vet:go vet ./...fmt:go fmt ./...clean:rm -rf dashboard上面这个Makefile存在不少问题。例如&#xff1a;功能简单&a…

基于springboot实现企业客户管理系统项目【项目源码+论文说明】

基于springboot实现企业客户管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企…

信息化项目数据质量管理

数据质量管理定义&#xff1a; 对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的各类数据质量问题&#xff0c;进行识别、监控、预警、处理等一系列管理活动&#xff0c;并通过改善和提高管理水平使得数据质量获 得进一步提高。 2术语和定义 2…

绝地求生:300万在线已是过去的荣耀和成功,未来之路莫让反作弊绊脚!

PUBG七周年庆典活动已过去两周时间&#xff0c;相比较而言&#xff0c;活动还是比较给力的&#xff0c;大量的黑货票券、G-Coin让很多白嫖党玩家白嫖到了成长型武器、2024生存通行证等高质量皮肤道具&#xff0c;回流和新手玩家大量涌入&#xff0c;游戏热度一度回到Steam前二&…

CCIE-11-IPSec_VPN

目录 实验条件网络拓朴实验目的 开始配置1. R2 Ping R3确定基础网络是通的2. 配置R23. 配置R34. 测试 实验条件 网络拓朴 实验目的 为PC1和PC2建立IPSec VPN PC1可以ping通PC2 开始配置 1. R2 Ping R3确定基础网络是通的 R2#show ip int br Interface IP…

【题解】—— LeetCode一周小结13

【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结12 25.零钱兑换 II 题目链接&#xff1a;518. 零钱兑换 II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合…

【产品经理】全面解读“数字孪生”

理解数字孪生 随着互联网技术的深入发展&#xff0c;数字孪生被越来越多地提及&#xff0c;那么数字孪生到底是什么&#xff1f;数字孪生&#xff0c;翻译自英文“Digital Twin”&#xff0c;最早在2002年&#xff0c;被从事产品生命周期管理PLM的Michael Grieves教授&#xf…

护眼台灯哪个牌子好?性价比高的护眼台灯推荐

现在生活节奏越来越快&#xff0c;夜间学习、工作已经成为了很多学生党、办公族不可避免的一件事&#xff0c;很多人在劣质的光源下眼睛会出现各种问题。尤其是桌前的那一盏台灯&#xff0c;很多人认为台灯亮度只要够亮就不会伤眼了。 其实不然&#xff0c;要知道光线中的成分…

vant checkbox 复选框 样式改写

修改前 修改后 基于 vant&#xff1a; 4.8.3 unocss: 0.53.4 <van-checkbox-group v-model"query.zczb" shape"square" class"text-16 w-100% flex flex-wrap"><template v-for"item in registerCapitalOption"><v…