SpringMVC+Vue实现前后端的协同过滤算法电影推荐系统

前言介绍 

互联网+”的战略实施后,很多行业的信息化水平都有了很大的提升。但是目前很多行业的管理仍是通过人工管理的方式进行,需要在各个岗位投入大量的人力进行很多重复性工作,使得对人力物力造成诸多浪费,工作效率不高等情况;同时为后续的工作带来了隐患。并且现有的电影推荐系统由于用户的体验感较差、系统流程不完善导致系统的使用率较低。此基于协同过滤算法的电影推荐系统的部署与应用,将对首页,个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理,我的电影管理,电影论坛,系统管理等功能进行管理,这可以简化管理工作程序、降低劳动成本、提高业务效率和工作效率。为了有效推动个性化智能电影推荐资源的合理配置和使用,适应现代个性化智能电影推荐机构的管理办法,迫切需要研发一套更加全面的基于协同过滤算法的电影推荐系统。

本课题在充分研究了ssm框架基础上,采用B/S模式,以Java为开发语言,Eclipse为开发工具,MySQL为数据管理平台,实现的内容主要包括首页,个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理,我的电影管理,电影论坛,系统管理等功能。

系统实现的功能

本次设计任务是要设计一个基于协同过滤算法的电影推荐系统,通过这个系统能够满足电影推荐的管理功能。系统的主要包括首页,个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理,我的电影管理,电影论坛,系统管理等功能。

管理员可以根据系统给定的账号进行登录,登录后可以进入电影推荐系统对个性化智能电影推荐所有模块进行管理。包括查看和修改自己的个人信息以及登录密码。

该系统为每一个用户都分配了一个用户账号,用户通过账号的登录可以在系统中查看个性化智能电影推荐信息及对个人信息进行修改等功能。

系统结构功能图

系统功能模块

电影推荐系统,在系统首页可以查看首页,免费电影,付费电影,电影论坛,电影资讯,个人中心等内容,并进行详细操作;如图

用户注册

在用户注册页面通过填写用户名,姓名,密码,确认密码,年龄,手机号等内容进行注册操作,如图 

免费电影

在免费电影页面可以查看电影编号,电影分类,评分,开映时间,时长,导演,主演,点击次数等信息,并进行赞一下,踩一下,点我收藏等操作,如图

个人中心

在个人中心页面通过填写用户名,姓名,密码,性别,年龄,手机号等内容进行更新信息,还可以根据需要对我的发布,我的收藏进行相对应操作,如图 

付费电影

在付费电影页面可以查看电影名称,电影编号,电影分类,价格,评分,开映时间,时长,主演,导演,点击次数等信息,并进行立即付费,赞一下,踩一下等操作,如图 

管理员功能模块 

后台登录,管理员进入系统前在登录页面根据要求填写用户名和密码,选择角色等信息,点击登录进行登录操作,如图

管理员登录系统后,可以对首页,个人中心,用户管理,电影分类管理,免费电影管理,付费电影管理,电影订单管理,我的电影管理,电影论坛,系统管理等功能进行相应的操作,如图

用户管理

在用户管理页面可以对索引,用户名,姓名,性别,年龄,手机号等内容进行详情,修改和删除操作,如图 

免费电影管理

在免费电影管理页面可以对索引,电影编号,电影名称,视频,海报,评分,开映时间,时长,主演,导演等内容进行详情,修改,查看评论和删除操作,如图 

付费电影管理

在付费电影管理页面可以对索引,电影编号,电影名称,预告片,价格,海报,评分,开映时间,时长,主演,导演等内容进行详情,修改,查看评论和删除操作,如图 

电影订单管理

在电影订单管理页面可以对 索引,订单编号,电影编号,电影名称,价格,用户名,姓名,手机号,购买时间,是否支付等内容进行详情,我的电影,修改和删除等操作;如图 

我的电影管理

在我的电影管理页面可以对索引,单编号,电影编号,电影名称,价格,用户名,姓名,手机号,电影链接等内容进行详情和删除操作,如图 

部分核心代码:  

/**
 * 付费电影
 * 后端接口
 * @author 
 * @email 
 * @date 2022-04-06 21:42:07
 */
@RestController
@RequestMapping("/fufeidianying")
public class FufeidianyingController {
    @Autowired
    private FufeidianyingService fufeidianyingService;
 
 
    @Autowired
    private StoreupService storeupService;
 
    
 
 
    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,FufeidianyingEntity fufeidianying, 
		HttpServletRequest request){
 
        EntityWrapper<FufeidianyingEntity> ew = new EntityWrapper<FufeidianyingEntity>();
		PageUtils page = fufeidianyingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fufeidianying), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,FufeidianyingEntity fufeidianying, 
		HttpServletRequest request){
        EntityWrapper<FufeidianyingEntity> ew = new EntityWrapper<FufeidianyingEntity>();
		PageUtils page = fufeidianyingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fufeidianying), params), params));
        return R.ok().put("data", page);
    }
 
	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( FufeidianyingEntity fufeidianying){
       	EntityWrapper<FufeidianyingEntity> ew = new EntityWrapper<FufeidianyingEntity>();
      	ew.allEq(MPUtil.allEQMapPre( fufeidianying, "fufeidianying")); 
        return R.ok().put("data", fufeidianyingService.selectListView(ew));
    }
 
	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(FufeidianyingEntity fufeidianying){
        EntityWrapper< FufeidianyingEntity> ew = new EntityWrapper< FufeidianyingEntity>();
 		ew.allEq(MPUtil.allEQMapPre( fufeidianying, "fufeidianying")); 
		FufeidianyingView fufeidianyingView =  fufeidianyingService.selectView(ew);
		return R.ok("查询付费电影成功").put("data", fufeidianyingView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        FufeidianyingEntity fufeidianying = fufeidianyingService.selectById(id);
		fufeidianying.setClicknum(fufeidianying.getClicknum()+1);
		fufeidianying.setClicktime(new Date());
		fufeidianyingService.updateById(fufeidianying);
        return R.ok().put("data", fufeidianying);
    }
 
    /**
     * 前端详情
     */
	@IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        FufeidianyingEntity fufeidianying = fufeidianyingService.selectById(id);
		fufeidianying.setClicknum(fufeidianying.getClicknum()+1);
		fufeidianying.setClicktime(new Date());
		fufeidianyingService.updateById(fufeidianying);
        return R.ok().put("data", fufeidianying);
    }
    
 
 
    /**
     * 赞或踩
     */
    @RequestMapping("/thumbsup/{id}")
    public R thumbsup(@PathVariable("id") String id,String type){
        FufeidianyingEntity fufeidianying = fufeidianyingService.selectById(id);
        if(type.equals("1")) {
        	fufeidianying.setThumbsupnum(fufeidianying.getThumbsupnum()+1);
        } else {
        	fufeidianying.setCrazilynum(fufeidianying.getCrazilynum()+1);
        }
        fufeidianyingService.updateById(fufeidianying);
        return R.ok();
    }
 
    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody FufeidianyingEntity fufeidianying, HttpServletRequest request){
    	fufeidianying.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(fufeidianying);
 
        fufeidianyingService.insert(fufeidianying);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody FufeidianyingEntity fufeidianying, HttpServletRequest request){
    	fufeidianying.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(fufeidianying);
 
        fufeidianyingService.insert(fufeidianying);
        return R.ok();
    }
 
    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody FufeidianyingEntity fufeidianying, HttpServletRequest request){
        //ValidatorUtils.validateEntity(fufeidianying);
        fufeidianyingService.updateById(fufeidianying);//全部更新
        return R.ok();
    }
    
 
    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        fufeidianyingService.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<FufeidianyingEntity> wrapper = new EntityWrapper<FufeidianyingEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}
 
 
		int count = fufeidianyingService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	
	/**
     * 前端智能排序
     */
	@IgnoreAuth
    @RequestMapping("/autoSort")
    public R autoSort(@RequestParam Map<String, Object> params,FufeidianyingEntity fufeidianying, HttpServletRequest request,String pre){
        EntityWrapper<FufeidianyingEntity> ew = new EntityWrapper<FufeidianyingEntity>();
        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", "clicknum");
        
        params.put("order", "desc");
		PageUtils page = fufeidianyingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fufeidianying), params), params));
        return R.ok().put("data", page);
    }
 
 
    /**
     * 协同算法(按收藏推荐)
     */
    @RequestMapping("/autoSort2")
    public R autoSort2(@RequestParam Map<String, Object> params,FufeidianyingEntity fufeidianying, HttpServletRequest request){
        String userId = request.getSession().getAttribute("userId").toString();
        String inteltypeColumn = "dianyingfenlei";
        List<StoreupEntity> storeups = storeupService.selectList(new EntityWrapper<StoreupEntity>().eq("type", 1).eq("userid", userId).eq("tablename", "fufeidianying").orderBy("addtime", false));
        List<String> inteltypes = new ArrayList<String>();
        Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
        List<FufeidianyingEntity> fufeidianyingList = new ArrayList<FufeidianyingEntity>();
        //去重
        if(storeups!=null && storeups.size()>0) {
            for(StoreupEntity s : storeups) {
                fufeidianyingList.addAll(fufeidianyingService.selectList(new EntityWrapper<FufeidianyingEntity>().eq(inteltypeColumn, s.getInteltype())));
            }
        }
        EntityWrapper<FufeidianyingEntity> ew = new EntityWrapper<FufeidianyingEntity>();
        params.put("sort", "id");
        params.put("order", "desc");
        PageUtils page = fufeidianyingService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, fufeidianying), params), params));
        List<FufeidianyingEntity> pageList = (List<FufeidianyingEntity>)page.getList();
        if(fufeidianyingList.size()<limit) {
            int toAddNum = (limit-fufeidianyingList.size())<=pageList.size()?(limit-fufeidianyingList.size()):pageList.size();
            for(FufeidianyingEntity o1 : pageList) {
                boolean addFlag = true;
                for(FufeidianyingEntity o2 : fufeidianyingList) {
                    if(o1.getId().intValue()==o2.getId().intValue()) {
                        addFlag = false;
                        break;
                    }
                }
                if(addFlag) {
                    fufeidianyingList.add(o1);
                    if(--toAddNum==0) break;
                }
            }
        }
        page.setList(fufeidianyingList);
        return R.ok().put("data", page);
    }
 
 
 
 
 
}

 

 此源码非开源,若需要此源码可扫码添加微信或者qq:2214904953进行咨询!

2600多套项目欢迎咨询

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文将介绍如何利用SpringMVCVue实现前后分离的大学生社团管理系统。 1. 系统需求分析 该系统需要实现以下功能: - 用户登录和注册 - 社团管理:创建、修改、删除社团 - 活动管理:创建、修改、删除活动 - 成员管理:加入、退出社团 2. 系统设计 该系统采用前后分离的架构,前使用Vue框架,后采用SpringMVC框架。 2.1 后设计 后使用SpringMVC框架,实现了以下功能: - 用户登录和注册 - 社团管理:创建、修改、删除社团 - 活动管理:创建、修改、删除活动 - 成员管理:加入、退出社团 2.2 前设计 前使用Vue框架,实现了以下功能: - 用户登录和注册 - 社团管理:创建、修改、删除社团 - 活动管理:创建、修改、删除活动 - 成员管理:加入、退出社团 3. 系统实现 3.1 后实现使用SpringMVC框架,实现了以下功能: - 用户登录和注册 用户登录和注册功能使用Spring Security框架实现。用户信息存储在数据库中,密码经过加密存储。 - 社团管理 社团管理功能使用SpringMVC框架实现。社团信息存储在数据库中,包括社团名称、社团介绍、社团成员等信息。用户可以创建、修改、删除社团。 - 活动管理 活动管理功能使用SpringMVC框架实现。活动信息存储在数据库中,包括活动名称、活动介绍、活动时间、活动地点等信息。用户可以创建、修改、删除活动。 - 成员管理 成员管理功能使用SpringMVC框架实现。成员信息存储在数据库中,包括成员姓名、成员学号等信息。用户可以加入、退出社团。 3.2 前实现使用Vue框架,实现了以下功能: - 用户登录和注册 使用Vue Router实现登录和注册页面的路由。用户输入用户名和密码后,使用axios发送请求到后验证用户信息。 - 社团管理 使用Vue Router实现社团管理页面的路由。用户可以查看所有社团的信息,并且可以创建、修改、删除自己的社团。 - 活动管理 使用Vue Router实现活动管理页面的路由。用户可以查看所有活动的信息,并且可以创建、修改、删除自己的活动。 - 成员管理 使用Vue Router实现成员管理页面的路由。用户可以加入、退出社团。 4. 总结 本文介绍了如何利用SpringMVCVue实现前后分离的大学生社团管理系统。该系统采用前后分离的架构,实现了用户登录和注册、社团管理、活动管理和成员管理等功能。该系统可以作为大学生社团管理的参考实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值