基于springboot的电影推荐网站设计与实现(协同算法推荐)

news2024/11/24 22:27:56

项目描述

临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问题,今天给大家介绍一篇基于springboot的电影推荐网站设计与实现。

功能需求

系统功能要求如下:
管理员:管理员登录、用户管理、电影信息管理、电影类型管理、在线留言管理、系统管理、个人信息修改、退出系统。
用户:用户登录注册、首页(协同算法收藏夹推荐)、电影信息检索、电影在线观看、在线留言、个人中心的信息模块、我的搜藏、。

部分效果图

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

数据库脚本




    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,DianyingxinxiEntity dianyingxinxi,
		HttpServletRequest request){
        EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
		PageUtils page = dianyingxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingxinxi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,DianyingxinxiEntity dianyingxinxi, 
		HttpServletRequest request){
        EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
		PageUtils page = dianyingxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingxinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( DianyingxinxiEntity dianyingxinxi){
       	EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( dianyingxinxi, "dianyingxinxi")); 
        return R.ok().put("data", dianyingxinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(DianyingxinxiEntity dianyingxinxi){
        EntityWrapper< DianyingxinxiEntity> ew = new EntityWrapper< DianyingxinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( dianyingxinxi, "dianyingxinxi")); 
		DianyingxinxiView dianyingxinxiView =  dianyingxinxiService.selectView(ew);
		return R.ok("查询电影信息成功").put("data", dianyingxinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        DianyingxinxiEntity dianyingxinxi = dianyingxinxiService.selectById(id);
		dianyingxinxi.setClicktime(new Date());
		dianyingxinxiService.updateById(dianyingxinxi);
        return R.ok().put("data", dianyingxinxi);
    }

    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        DianyingxinxiEntity dianyingxinxi = dianyingxinxiService.selectById(id);
		dianyingxinxi.setClicktime(new Date());
		dianyingxinxiService.updateById(dianyingxinxi);
        return R.ok().put("data", dianyingxinxi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody DianyingxinxiEntity dianyingxinxi, HttpServletRequest request){
    	dianyingxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(dianyingxinxi);
        dianyingxinxiService.insert(dianyingxinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody DianyingxinxiEntity dianyingxinxi, HttpServletRequest request){
    	dianyingxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(dianyingxinxi);
        dianyingxinxiService.insert(dianyingxinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    @Transactional
    public R update(@RequestBody DianyingxinxiEntity dianyingxinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(dianyingxinxi);
        dianyingxinxiService.updateById(dianyingxinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        dianyingxinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<DianyingxinxiEntity> wrapper = new EntityWrapper<DianyingxinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = dianyingxinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,DianyingxinxiEntity dianyingxinxi, HttpServletRequest request,String pre){
        EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
        Map<String, Object> newMap = new HashMap<String, Object>();
        Map<String, Object> param = new HashMap<String, Object>();
		Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
		while (it.hasNext()) {
			Map.Entry<String, Object> entry = it.next();
			String key = entry.getKey();
			String newKey = entry.getKey();
			if (pre.endsWith(".")) {
				newMap.put(pre + newKey, entry.getValue());
			} else if (StringUtils.isEmpty(pre)) {
				newMap.put(newKey, entry.getValue());
			} else {
				newMap.put(pre + "." + newKey, entry.getValue());
			}
		}
		params.put("sort", "clicktime");
        params.put("order", "desc");
		PageUtils page = dianyingxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingxinxi), params), params));
        return R.ok().put("data", page);
    }


    /**
     * 协同算法(按收藏推荐)
     */
    @RequestMapping("/autoSort2")
    public R autoSort2(@RequestParam Map<String, Object> params,DianyingxinxiEntity dianyingxinxi, HttpServletRequest request){
        String userId = request.getSession().getAttribute("userId").toString();
        String inteltypeColumn = "dianyingleixing";
        List<StoreupEntity> storeups = storeupService.selectList(new EntityWrapper<StoreupEntity>().eq("type", 1).eq("userid", userId).eq("tablename", "dianyingxinxi").orderBy("addtime", false));
        List<String> inteltypes = new ArrayList<String>();
        Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
        List<DianyingxinxiEntity> dianyingxinxiList = new ArrayList<DianyingxinxiEntity>();
        //去重
        if(storeups!=null && storeups.size()>0) {
            for(StoreupEntity s : storeups) {
                dianyingxinxiList.addAll(dianyingxinxiService.selectList(new EntityWrapper<DianyingxinxiEntity>().eq(inteltypeColumn, s.getInteltype())));
            }
        }
        EntityWrapper<DianyingxinxiEntity> ew = new EntityWrapper<DianyingxinxiEntity>();
        params.put("sort", "id");
        params.put("order", "desc");
        PageUtils page = dianyingxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, dianyingxinxi), params), params));
        List<DianyingxinxiEntity> pageList = (List<DianyingxinxiEntity>)page.getList();
        if(dianyingxinxiList.size()<limit) {
            int toAddNum = (limit-dianyingxinxiList.size())<=pageList.size()?(limit-dianyingxinxiList.size()):pageList.size();
            for(DianyingxinxiEntity o1 : pageList) {
                boolean addFlag = true;
                for(DianyingxinxiEntity o2 : dianyingxinxiList) {
                    if(o1.getId().intValue()==o2.getId().intValue()) {
                        addFlag = false;
                        break;
                    }
                }
                if(addFlag) {
                    dianyingxinxiList.add(o1);
                    if(--toAddNum==0) break;
                }
            }
        } else if(dianyingxinxiList.size()>limit) {
            dianyingxinxiList = dianyingxinxiList.subList(0, limit);
        }
        page.setList(dianyingxinxiList);
        return R.ok().put("data", page);
    }


安装部署需求

利用tomcat启动运行

总体设计

本项目用到的技术和框架
(1)采用三层架构的模式使用springboot框架式搭建后端。
(2)vue前端技术搭建前端界面。
(4)采用开源免费的MySQL数据库存储业务数据。

本项目中的关键点

此系统的开发采用java语言开发,基于B/S结构,这些开发环境使系统更加完善。使用到的工具和技术都是开源免费的。

环境工具

开发工具 Eclipse/IDEA
语言 JDK1.8
硬件:笔记本电脑;
软件:Tomcat9.0 Web服务器、Navicat数据库客户端、MySQL;
操作系统:Windows 10;
以上是本系统的部分功能展示,如果你的选题正好相符,那么可以做毕业设计或课程设计使用。

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

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

相关文章

猿如意中的【Qt Creator】工具详情介绍

一、工具名称 Qt Creator 二、下载安装渠道 Qt Creator通过CSDN官方开发的【猿如意】客户端进行下载安装。 2.1 什么是猿如意&#xff1f; 猿如意是一款面向开发者的辅助开发工具箱&#xff0c;包含了效率工具、开发工具下载&#xff0c;教程文档&#xff0c;代码片段搜索&…

2019年第一届“长安杯”电子数据取证竞赛答案解析

C D A 仿真后用uname -r查看 B PV&#xff1a;psycial volume VG&#xff1a;volume group LV&#xff1a;logical volume X-Ways检测的分区3、4是root和swap C LBA&#xff1a;Logical Block Address D 应为分区4 C D 39999->22 前面为主机端口&#xff0c;后面为dock…

C语言文件操作(1)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C/C】 目录什么是文件程序文件数据文件文件名文件类型文件缓冲区文件指针什么是文件 磁盘的文件是文件 但在程序设计中&#xff0c;我…

诊断和响应故障_执行块介质恢复(Block Media Recovery)

本章阐述如何还原和恢复数据文件中个别的数据块。 1&#xff0e;块介质恢复概述 块介质恢复通过恢复损坏的数据块提供更短的平均恢复时间&#xff08;MTTR&#xff09;。 1.1&#xff0e;块介质恢复的目的 使用块介质恢复来恢复数据文件中一个或多个损坏的数据块。 块介质…

whistle修改接口返回步骤(只影响前端展示,不会插入数据到数据库)

本文章向大家介绍whistle修改接口返回步骤&#xff08;只影响前端展示&#xff0c;不会插入数据到数据库&#xff09;&#xff0c;主要包括whistle修改接口返回步骤&#xff08;只影响前端展示&#xff0c;不会插入数据到数据库&#xff09;使用实例、应用技巧、基本知识点总结…

m基于高阶累积量和信号子空间的信噪比估计方法的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着信息技术的飞速发展&#xff0c;信息战逐渐成为战争的一个重要方式。因此&#xff0c;掌握战场的信息控制权是赢得战争的重要因素。在信息战中&#xff0c;为了干扰和破坏对方的通信系统&…

Rvit中添加尺寸标注的前缀后缀和【一键尺寸定位标注】

一、Rvit中如何添加尺寸标注的前缀后缀 在进行尺寸标注尤其是多段连续的尺寸标注时常会用到诸如&#xff1a;3x20006000的标注样式&#xff0c;在Revt中应如何实现&#xff1f; 我们可以采用以下方法来解决&#xff1a; 1.如图1所示&#xff0c;先对该连续物体进行普通的对齐标…

前端基础(四)_CSS层叠样式表_什么是css_css样式的引入方式_样式表的优先级_样式选择器

一、什么是css? 主要用于html页面文本内容、图片外形、版本布局等外观样式的设置 二、css语法规则 语法&#xff1a; 选择器 声明语句&#xff1b; div {width: 200px;}div就是选择器 花括号中属性键值对就是 属性名:属性值 二、css样式的引入方式 1、行内样式–内联式 语…

uniapp中根据URL链接生成二维码(适用所有Javascript运行环境的前端应用),保存二维码到本地相册。

推荐一款适用所有Javascript运行环境的二维码生成组件。 uQRCode是一款基于Javascript环境开发的二维码生成插件&#xff0c;适用所有Javascript运行环境的前端应用和Node.js应用。 uQRCode可扩展性高&#xff0c;它支持自定义渲染二维码&#xff0c;可通过uQRCode API得到二…

转座子 垃圾DNA是指DNA中不编码蛋白质序列的片段,是DNA中最神秘的部分之一。

什麼是「垃圾DNA」&#xff1f; | GeneOnline News 垃圾dna与转座子 基因组重复序列分类 转座子 - 组学大讲堂问答社区 (omicsclass.com) (122条消息) 说说基因组的垃圾DNA-Transposable elements_msw521sg的博客-CSDN博客 Cell:转座子“跳跃”过程调控机制 - 生物研究专…

算法进阶指南:基本算法0x07 贪心

1.Sunscreen 传送门 #include<bits/stdc.h> using namespace std; const int N2510; pair<int,int>a[N],b[N]; int main() {int n,m;cin>>n>>m;for(int i1;i<n;i) cin>>a[i].first>>a[i].second;for(int i1;i<m;i) cin>>b[i…

手机小程序怎么制作?【手机小程序制作】

手机小程序怎么制作&#xff1f;首先给大家搞清楚&#xff0c;小程序本来就是依附手机APP运作的&#xff0c;是属于轻应用&#xff0c;例如微信、某付宝、某音短视频平台、某度、某手短视频平台&#xff0c;只能是在这些APP里打开小程序。像一些软件有PC端、Pad端&#xff0c;也…

Locust性能测试入门案例及分布式压测

前言 大家好&#xff0c;我是洋子。最近好多身边人都阳了&#xff0c;记得保护好自己 性能测试已经成为作为测试工程师/测试开发工程师一项重要的专项能力 在抢红包、活动秒杀这种短时间内流量突增的场景&#xff0c;或者是健康宝这种使用用户超级多的场景&#xff0c;我们均…

某大厦电力运维系统的设计及应用-Susie 周

1、项目简介 某公司位于北京市大兴区&#xff0c;于2001年在大兴分局注册成立&#xff0c;该在公司多年的发展里&#xff0c;始终为终端客户提供好的产品和技术支持、健全的售后服务&#xff0c;该公司主要经营110KV及以下送电线路&#xff08;含电缆工程&#xff09;和同电压…

Springboot内置的工具类之CollectionUtils

前言 实际业务开发中&#xff0c;集合的判断和操作也是经常用到的&#xff0c;Spring也针对集合的判断和操作封装了一些方法&#xff0c;但是最令我惊讶的是&#xff0c;我在梳理这些内容的过程中发现了一些有趣的现象&#xff0c;我的第一反应是不敢相信&#xff0c;再想一想&…

交换机(Exchange)

目录一、Exchange(交换机)的作用二、Exchange(交换机)的类型1.直连交换机&#xff1a;Direct Exchange2.主题交换机&#xff1a;Topic Exchange3.扇形交换机&#xff1a;Fanout Exchange4.首部交换机&#xff1a;Headers exchange5.默认交换机6.Dead Letter Exchange&#xff0…

一文入坑【Canvas】多图与案例详解

游戏玩法 游戏主要考验玩家的空间感和记忆能力&#xff0c;玩家需要通过开局的3秒内尽可能多的记忆两个空间内相同元素的位置&#xff0c;3秒后将会翻牌把图案盖住&#xff0c;玩家需要点击卡牌来翻转牌面&#xff0c;两张相同图案的卡牌即可保留&#xff0c;游戏计时将在卡牌…

小型水库雨水情测报及大坝安全监测建设介绍

一、背景介绍 二、站点布设 布局示意图&#xff1a; 红色&#xff1a;坝轴线 兰色&#xff1a;监测横断面&#xff0c;一般不少于3个&#xff0c;300m内间距2050m&#xff0c;300m外间距5010m。黄色:监测纵断面&#xff0c;一般不少于4个。上游坝坡正常蓄水位以上应布设1个。…

ssm+Vue计算机毕业设计校园闲置物品管理系统的实现(程序+LW文档)

ssmVue计算机毕业设计校园闲置物品管理系统的实现&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

WPF TreeView拖动排序拖拽排列

底部附有Demo示例。需要的朋友可以去下载参考 一、图示 先上图&#xff0c;不知为啥&#xff0c;GIF总看起来特别卡&#xff0c;实际却很流畅。 由于录制问题&#xff0c;GIF动画只会播放一次&#xff0c;需要重复观看的&#xff0c;请将网页关闭后重新打开再观看 WPF的资料…