国内酒店网站建设,网站外链建设与维护,手机网站首页,辽阳银梦网站建设该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍#xff1a;
二、文档学习资料#xff1a;
三、模块截图#xff1a;
四、开发技术与运行环境#xff1a;
五、代码展示#xff1a;
六、数据库表截图#xff1a… 该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍
二、文档学习资料
三、模块截图
四、开发技术与运行环境
五、代码展示
六、数据库表截图 一、项目介绍
背景随着互联网和大数据技术的发展人们可以方便地获取海量的电影信息但是如何从这些信息中找到适合自己的电影仍然是一个挑战。传统的电影推荐系统往往只能根据用户的历史行为和偏好进行推荐缺乏对电影内容的深度分析和挖掘。
目的本课题旨在利用爬虫技术从互联网上获取电影信息并通过可视化技术对这些信息进行分析和呈现从而构建一个更加智能、直观的电影推荐系统。
意义通过该研究可以为用户提供更加个性化、精准的电影推荐服务帮助用户更好地选择自己喜欢的电影同时也可以为电影产业提供更加精准的市场分析和预测。
研究思路首先利用爬虫技术从电影网站、社交媒体等平台上获取电影信息包括电影名称、导演、演员、剧情简介、评分等然后利用可视化技术对这些信息进行分析和呈现包括词云、关联图、热力图等最后根据用户的历史行为和偏好结合可视化分析结果构建智能的电影推荐系统。
研究方法主要包括爬虫技术、数据清洗和处理、可视化技术、推荐算法等。通过爬虫技术获取电影信息并进行数据清洗和处理然后利用可视化技术对数据进行分析和呈现最后结合推荐算法构建电影推荐系统。同时还可以采用用户调研和实验评估等方法对推荐系统进行优化和验证。
二、文档学习资料 三、模块截图 四、开发技术与运行环境
技术栈
PythonPython是一种高级编程语言在项目开发中Python用作后端开发语言。DjangoDjango是一个开源的Python Web框架提供了许多内置的功能如用户认证、会话、模板引擎、表单处理等使得项目能够快速地开发出功能完备的网站。Pymysqlpymysql是一个Python的MySQL数据库连接器它提供了Python与MySQL数据库之间的连接、查询、插入、更新和删除等数据库操作。Vue.jsVue.js是一个用于构建用户界面的JavaScript框架。Vue的核心库只关注视图层不仅易于学习而且容易与其他库或现有项目集成。Element UIElement UI是Vue.js的一个组件库它提供了一系列的Web组件包括表格、表单、弹窗、导航栏等。能够帮助开发者快速构建出风格一致的页面。CSS3CSS3是层叠样式表CSS的第三个版本它在项目开发中用于控制HTML元素的呈现方式。CSS3加入了很多新特性如动画、过渡、阴影等使得网页的视觉效果更加丰富和细腻。MySQL 5.7MySQL是一个开源的关系型数据库管理系统。版本5.7是MySQL的一个主要版本它引入了诸如JSON数据类型、改进的查询优化器、多源复制等新特性。MySQL用于项目存储、检索和管理数据。
开发与运行环境pycharm专业版、python3.7、pyspark、hdfs、django2.0、vscode、node.js10.15、MySQL5.7
五、代码展示示范代码注释
/*** 用户* 后端接口* author* email
*/
RestController
Controller
RequestMapping(/yonghu)
public class YonghuController {private static final Logger logger LoggerFactory.getLogger(YonghuController.class);private static final String TABLE_NAME yonghu;Autowiredprivate YonghuService yonghuService;Autowiredprivate TokenService tokenService;Autowiredprivate DictionaryService dictionaryService;//字典Autowiredprivate GonggaoService gonggaoService;//公告Autowiredprivate GuwenService guwenService;//顾问Autowiredprivate GuwenChatService guwenChatService;//用户咨询Autowiredprivate GuwenYuyueService guwenYuyueService;//顾问预约Autowiredprivate JiankangzhishiService jiankangzhishiService;//健康知识Autowiredprivate JiankangzhishiCollectionService jiankangzhishiCollectionService;//健康知识收藏Autowiredprivate JiankangzhishiLiuyanService jiankangzhishiLiuyanService;//健康知识留言Autowiredprivate UsersService usersService;//管理员/*** 后端列表*/RequestMapping(/page)public R page(RequestParam MapString, Object params, HttpServletRequest request){logger.debug(page方法:,,Controller:{},,params:{},this.getClass().getName(),JSONObject.toJSONString(params));String role String.valueOf(request.getSession().getAttribute(role));if(false)return R.error(511,永不会进入);else if(用户.equals(role))params.put(yonghuId,request.getSession().getAttribute(userId));else if(顾问.equals(role))params.put(guwenId,request.getSession().getAttribute(userId));CommonUtil.checkMap(params);PageUtils page yonghuService.queryPage(params);//字典表数据转换ListYonghuView list (ListYonghuView)page.getList();for(YonghuView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put(data, page);}/*** 后端详情*/RequestMapping(/info/{id})public R info(PathVariable(id) Long id, HttpServletRequest request){logger.debug(info方法:,,Controller:{},,id:{},this.getClass().getName(),id);YonghuEntity yonghu yonghuService.selectById(id);if(yonghu !null){//entity转viewYonghuView view new YonghuView();BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put(data, view);}else {return R.error(511,查不到数据);}}/*** 后端保存*/RequestMapping(/save)public R save(RequestBody YonghuEntity yonghu, HttpServletRequest request){logger.debug(save方法:,,Controller:{},,yonghu:{},this.getClass().getName(),yonghu.toString());String role String.valueOf(request.getSession().getAttribute(role));if(false)return R.error(511,永远不会进入);WrapperYonghuEntity queryWrapper new EntityWrapperYonghuEntity().eq(username, yonghu.getUsername()).or().eq(yonghu_phone, yonghu.getYonghuPhone()).or().eq(yonghu_id_number, yonghu.getYonghuIdNumber());logger.info(sql语句:queryWrapper.getSqlSegment());YonghuEntity yonghuEntity yonghuService.selectOne(queryWrapper);if(yonghuEntitynull){yonghu.setCreateTime(new Date());yonghu.setPassword(123456);yonghuService.insert(yonghu);return R.ok();}else {return R.error(511,账户或者用户手机号或者用户身份证号已经被使用);}}/*** 后端修改*/RequestMapping(/update)public R update(RequestBody YonghuEntity yonghu, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug(update方法:,,Controller:{},,yonghu:{},this.getClass().getName(),yonghu.toString());YonghuEntity oldYonghuEntity yonghuService.selectById(yonghu.getId());//查询原先数据String role String.valueOf(request.getSession().getAttribute(role));
// if(false)
// return R.error(511,永远不会进入);if(.equals(yonghu.getYonghuPhoto()) || null.equals(yonghu.getYonghuPhoto())){yonghu.setYonghuPhoto(null);}yonghuService.updateById(yonghu);//根据id更新return R.ok();}/*** 删除*/RequestMapping(/delete)public R delete(RequestBody Integer[] ids, HttpServletRequest request){logger.debug(delete:,,Controller:{},,ids:{},this.getClass().getName(),ids.toString());ListYonghuEntity oldYonghuList yonghuService.selectBatchIds(Arrays.asList(ids));//要删除的数据yonghuService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/RequestMapping(/batchInsert)public R save( String fileName, HttpServletRequest request){logger.debug(batchInsert方法:,,Controller:{},,fileName:{},this.getClass().getName(),fileName);Integer yonghuId Integer.valueOf(String.valueOf(request.getSession().getAttribute(userId)));SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);//.eq(time, new SimpleDateFormat(yyyy-MM-dd).format(new Date()))try {ListYonghuEntity yonghuList new ArrayList();//上传的东西MapString, ListString seachFields new HashMap();//要查询的字段Date date new Date();int lastIndexOf fileName.lastIndexOf(.);if(lastIndexOf -1){return R.error(511,该文件没有后缀);}else{String suffix fileName.substring(lastIndexOf);if(!.xls.equals(suffix)){return R.error(511,只支持后缀为xls的excel文件);}else{URL resource this.getClass().getClassLoader().getResource(static/upload/ fileName);//获取文件路径File file new File(resource.getFile());if(!file.exists()){return R.error(511,找不到上传文件请联系管理员);}else{ListListString dataList PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行因为第一行是提示for(ListString data:dataList){//循环YonghuEntity yonghuEntity new YonghuEntity();
// yonghuEntity.setUsername(data.get(0)); //账户 要改的
// yonghuEntity.setPassword(123456);//密码
// yonghuEntity.setYonghuName(data.get(0)); //用户姓名 要改的
// yonghuEntity.setYonghuPhone(data.get(0)); //用户手机号 要改的
// yonghuEntity.setYonghuIdNumber(data.get(0)); //用户身份证号 要改的
// yonghuEntity.setYonghuPhoto();//详情和图片
// yonghuEntity.setSexTypes(Integer.valueOf(data.get(0))); //性别 要改的
// yonghuEntity.setYonghuEmail(data.get(0)); //用户邮箱 要改的
// yonghuEntity.setCreateTime(date);//时间yonghuList.add(yonghuEntity);//把要查询是否重复的字段放入map中//账户if(seachFields.containsKey(username)){ListString username seachFields.get(username);username.add(data.get(0));//要改的}else{ListString username new ArrayList();username.add(data.get(0));//要改的seachFields.put(username,username);}//用户手机号if(seachFields.containsKey(yonghuPhone)){ListString yonghuPhone seachFields.get(yonghuPhone);yonghuPhone.add(data.get(0));//要改的}else{ListString yonghuPhone new ArrayList();yonghuPhone.add(data.get(0));//要改的seachFields.put(yonghuPhone,yonghuPhone);}//用户身份证号if(seachFields.containsKey(yonghuIdNumber)){ListString yonghuIdNumber seachFields.get(yonghuIdNumber);yonghuIdNumber.add(data.get(0));//要改的}else{ListString yonghuIdNumber new ArrayList();yonghuIdNumber.add(data.get(0));//要改的seachFields.put(yonghuIdNumber,yonghuIdNumber);}}//查询是否重复//账户ListYonghuEntity yonghuEntities_username yonghuService.selectList(new EntityWrapperYonghuEntity().in(username, seachFields.get(username)));if(yonghuEntities_username.size() 0 ){ArrayListString repeatFields new ArrayList();for(YonghuEntity s:yonghuEntities_username){repeatFields.add(s.getUsername());}return R.error(511,数据库的该表中的 [账户] 字段已经存在 存在数据为:repeatFields.toString());}//用户手机号ListYonghuEntity yonghuEntities_yonghuPhone yonghuService.selectList(new EntityWrapperYonghuEntity().in(yonghu_phone, seachFields.get(yonghuPhone)));if(yonghuEntities_yonghuPhone.size() 0 ){ArrayListString repeatFields new ArrayList();for(YonghuEntity s:yonghuEntities_yonghuPhone){repeatFields.add(s.getYonghuPhone());}return R.error(511,数据库的该表中的 [用户手机号] 字段已经存在 存在数据为:repeatFields.toString());}//用户身份证号ListYonghuEntity yonghuEntities_yonghuIdNumber yonghuService.selectList(new EntityWrapperYonghuEntity().in(yonghu_id_number, seachFields.get(yonghuIdNumber)));if(yonghuEntities_yonghuIdNumber.size() 0 ){ArrayListString repeatFields new ArrayList();for(YonghuEntity s:yonghuEntities_yonghuIdNumber){repeatFields.add(s.getYonghuIdNumber());}return R.error(511,数据库的该表中的 [用户身份证号] 字段已经存在 存在数据为:repeatFields.toString());}yonghuService.insertBatch(yonghuList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,批量插入数据异常请联系管理员);}}/*** 登录*/IgnoreAuthRequestMapping(value /login)public R login(String username, String password, String captcha, HttpServletRequest request) {YonghuEntity yonghu yonghuService.selectOne(new EntityWrapperYonghuEntity().eq(username, username));if(yonghunull || !yonghu.getPassword().equals(password))return R.error(账号或密码不正确);String token tokenService.generateToken(yonghu.getId(),username, yonghu, 用户);R r R.ok();r.put(token, token);r.put(role,用户);r.put(username,yonghu.getYonghuName());r.put(tableName,yonghu);r.put(userId,yonghu.getId());return r;}/*** 注册*/IgnoreAuthPostMapping(value /register)public R register(RequestBody YonghuEntity yonghu, HttpServletRequest request) {
// ValidatorUtils.validateEntity(user);WrapperYonghuEntity queryWrapper new EntityWrapperYonghuEntity().eq(username, yonghu.getUsername()).or().eq(yonghu_phone, yonghu.getYonghuPhone()).or().eq(yonghu_id_number, yonghu.getYonghuIdNumber());YonghuEntity yonghuEntity yonghuService.selectOne(queryWrapper);if(yonghuEntity ! null)return R.error(账户或者用户手机号或者用户身份证号已经被使用);yonghu.setCreateTime(new Date());yonghuService.insert(yonghu);return R.ok();}/*** 重置密码*/GetMapping(value /resetPassword)public R resetPassword(Integer id, HttpServletRequest request) {YonghuEntity yonghu yonghuService.selectById(id);yonghu.setPassword(123456);yonghuService.updateById(yonghu);return R.ok();}/*** 修改密码*/GetMapping(value /updatePassword)public R updatePassword(String oldPassword, String newPassword, HttpServletRequest request) {YonghuEntity yonghu yonghuService.selectById((Integer)request.getSession().getAttribute(userId));if(newPassword null){return R.error(新密码不能为空) ;}if(!oldPassword.equals(yonghu.getPassword())){return R.error(原密码输入错误);}if(newPassword.equals(yonghu.getPassword())){return R.error(新密码不能和原密码一致) ;}yonghu.setPassword(newPassword);yonghuService.updateById(yonghu);return R.ok();}/*** 忘记密码*/IgnoreAuthRequestMapping(value /resetPass)public R resetPass(String username, HttpServletRequest request) {YonghuEntity yonghu yonghuService.selectOne(new EntityWrapperYonghuEntity().eq(username, username));if(yonghu!null){yonghu.setPassword(123456);yonghuService.updateById(yonghu);return R.ok();}else{return R.error(账号不存在);}}/*** 获取用户的session用户信息*/RequestMapping(/session)public R getCurrYonghu(HttpServletRequest request){Integer id (Integer)request.getSession().getAttribute(userId);YonghuEntity yonghu yonghuService.selectById(id);if(yonghu !null){//entity转viewYonghuView view new YonghuView();BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put(data, view);}else {return R.error(511,查不到数据);}}/*** 退出*/GetMapping(value logout)public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok(退出成功);}/*** 前端列表*/IgnoreAuthRequestMapping(/list)public R list(RequestParam MapString, Object params, HttpServletRequest request){logger.debug(list方法:,,Controller:{},,params:{},this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page yonghuService.queryPage(params);//字典表数据转换ListYonghuView list (ListYonghuView)page.getList();for(YonghuView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put(data, page);}/*** 前端详情*/RequestMapping(/detail/{id})public R detail(PathVariable(id) Long id, HttpServletRequest request){logger.debug(detail方法:,,Controller:{},,id:{},this.getClass().getName(),id);YonghuEntity yonghu yonghuService.selectById(id);if(yonghu !null){//entity转viewYonghuView view new YonghuView();BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put(data, view);}else {return R.error(511,查不到数据);}}/*** 前端保存*/RequestMapping(/add)public R add(RequestBody YonghuEntity yonghu, HttpServletRequest request){logger.debug(add方法:,,Controller:{},,yonghu:{},this.getClass().getName(),yonghu.toString());WrapperYonghuEntity queryWrapper new EntityWrapperYonghuEntity().eq(username, yonghu.getUsername()).or().eq(yonghu_phone, yonghu.getYonghuPhone()).or().eq(yonghu_id_number, yonghu.getYonghuIdNumber())
// .notIn(yonghu_types, new Integer[]{102});logger.info(sql语句:queryWrapper.getSqlSegment());YonghuEntity yonghuEntity yonghuService.selectOne(queryWrapper);if(yonghuEntitynull){yonghu.setCreateTime(new Date());yonghu.setPassword(123456);yonghuService.insert(yonghu);return R.ok();}else {return R.error(511,账户或者用户手机号或者用户身份证号已经被使用);}}}
六、数据库表截图示范表注释 七、配套学习资料