Java毕设项目——诗词学习网站(Java+Vue+SpringBoot+MySQL+Maven)

博主主页:一季春秋
博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、小程序、安卓app、大数据等设计与开发

精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

SpringBoot+Vue项目持续更新中

http://t.csdn.cn/1mgm8

🍅文末获取联系🍅

目录

一、项目介绍 

二、项目主要技术 

三、系统功能

3.1 前台功能

3.2 后台功能

四、系统实现

五、实现代码 


一、项目介绍 

本系统适合选题:学习网站、知识网站、知识、前后端分离等。本系统采用了springboot+vue整合开发,前端框架主要使用了element-ui框架、数据层采用mybatis,功能齐全,界面美观。

二、项目主要技术 

开发语言:Java

使用框架:spring boot

前端技术:Vue 、css、element-ui、js

开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:jdk1.8

Maven: apache-maven 3.8.1-bin

三、系统功能

3.1 前台功能

诗词详情:用户可以在该功能模块中查看诗词名字、诗词出处、诗词译文、诗词的局解。

诗词大全:用户可以在该功能中筛选不同朝代、不同题材的诗词名句。用户可以选择自己喜欢的诗词点击进行查看详情

诗人大全:用户可以在该功能中通过对朝代的筛选进行选择诗人。并可以点击诗人查看详情。

个性推荐:用户可以在此功能中查看网站个性推荐的诗词然后点击查看详情。

学习资料:用户可以在此功能中查看网站推荐的学习资料进行学习。

课外赏析:用户可以在该功能中学习到书本以外的古诗。

在线学习:用户登录系统进行学习,然后记录一下时间,然后达到制定的时间送积分。

排名:系统可以根据用户在线学习的时间进行排名。

论坛:用户可以在该功能中进行发布帖子,评论帖子,以及可以查看我的发布。

兑换礼品:用户可以在该功能使用手里现有的积分进行礼品兑换。

会员注册:用户可以通过填写相关信息进行注册为网站的会员,会员在本网站上学习可以积累学习积分,然后到达一定数量后可以兑换相关礼品。

3.2 后台功能

诗词详情:后台管理员可以对诗词的内容进行管理。

古诗管理:最高管理员可以登入到后台管理系统后对古诗进行增删改查等操作。

角色管理:管理员可以对用户的角色进行管理。

赏析管理:后台管理员可以对赏析进行管理。

诗人管理:后台管理员可以对诗人等相关信息进行管理。

学习资料管理:后台管理员可以对学习资料等资料进行管理,后台管理员可以通过这个功能进行上传教学视频鉴赏音频等相关资料。

用户管理:管理员可以对整个系统的用户信息进行管理。

排名管理:管理员可以在后台管理系统中对用户学习排名进行管理。

学习时长管理:管理员用户可以针对某个用户的学习时长进行管理。

帖子管理:管理员可以在后台管理系统中对用户发布的帖子进行管理。

评论管理:管理员用户可以对帖子的评论进行管理。

兑换管理:管理员可以在该功能中对用户的兑换进行管理。

奖品管理:管理员可以在该功能中对奖品进行管理。

四、系统实现

诗词大全

礼品

兑换礼品

在线学习

个性推荐

诗词大全管理

在线学习管理

五、实现代码 

在线学习

/**
 * 在线学习
 * 后端接口
 *
 * @author
 * @email
 */
@RestController
@Controller
@RequestMapping("/zaixianxuexi")
public class ZaixianxuexiController {
    private static final Logger logger = LoggerFactory.getLogger(ZaixianxuexiController.class);

    private static final String TABLE_NAME = "zaixianxuexi";

    @Autowired
    private ZaixianxuexiService zaixianxuexiService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    //级联表非注册的service
    @Autowired
    private ShicidaquanService shicidaquanService;
    //注册表service
    @Autowired
    private YonghuService yonghuService;


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, 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"));
        CommonUtil.checkMap(params);
        PageUtils page = zaixianxuexiService.queryPage(params);

        //字典表数据转换
        List<ZaixianxuexiView> list = (List<ZaixianxuexiView>) page.getList();
        for (ZaixianxuexiView 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);
        ZaixianxuexiEntity zaixianxuexi = zaixianxuexiService.selectById(id);
        if (zaixianxuexi != null) {
            //entity转view
            ZaixianxuexiView view = new ZaixianxuexiView();
            BeanUtils.copyProperties(zaixianxuexi, view);//把实体数据重构到view中
            //级联表 用户
            //级联表
            YonghuEntity yonghu = yonghuService.selectById(zaixianxuexi.getYonghuId());
            if (yonghu != null) {
                BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
                view.setYonghuId(yonghu.getId());
            }
            //级联表 诗词大全
            //级联表
            ShicidaquanEntity shicidaquan = shicidaquanService.selectById(zaixianxuexi.getShicidaquanId());
            if (shicidaquan != null) {
                BeanUtils.copyProperties(shicidaquan, view, new String[]{"id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
                view.setShicidaquanId(shicidaquan.getId());
            }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        } else {
            return R.error(511, "查不到数据");
        }

    }

    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody ZaixianxuexiEntity zaixianxuexi, HttpServletRequest request) {
        logger.debug("save方法:,,Controller:{},,zaixianxuexi:{}", this.getClass().getName(), zaixianxuexi.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if (false)
            return R.error(511, "永远不会进入");
        else if ("用户".equals(role))
            zaixianxuexi.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));

        Wrapper<ZaixianxuexiEntity> queryWrapper = new EntityWrapper<ZaixianxuexiEntity>()
                .eq("yonghu_id", zaixianxuexi.getYonghuId())
                .eq("shicidaquan_id", zaixianxuexi.getShicidaquanId())
                .eq("xuexishichang", zaixianxuexi.getXuexishichang())
                .eq("xuexizhuangtai_types", zaixianxuexi.getXuexizhuangtaiTypes());

        logger.info("sql语句:" + queryWrapper.getSqlSegment());
        ZaixianxuexiEntity zaixianxuexiEntity = zaixianxuexiService.selectOne(queryWrapper);
        if (zaixianxuexiEntity == null) {
            zaixianxuexi.setInsertTime(new Date());
            zaixianxuexi.setCreateTime(new Date());
            zaixianxuexiService.insert(zaixianxuexi);
            return R.ok();
        } else {
            return R.error(511, "表中有相同数据");
        }
    }

    /**
     * 后端修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ZaixianxuexiEntity zaixianxuexi, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
        logger.debug("update方法:,,Controller:{},,zaixianxuexi:{}", this.getClass().getName(), zaixianxuexi.toString());
        ZaixianxuexiEntity oldZaixianxuexiEntity = zaixianxuexiService.selectById(zaixianxuexi.getId());//查询原先数据

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            zaixianxuexi.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
        //根据字段查询是否有相同数据
        Wrapper<ZaixianxuexiEntity> queryWrapper = new EntityWrapper<ZaixianxuexiEntity>()
                .notIn("id", zaixianxuexi.getId())
                .andNew()
                .eq("yonghu_id", zaixianxuexi.getYonghuId())
                .eq("shicidaquan_id", zaixianxuexi.getShicidaquanId())
                .eq("xuexishichang", zaixianxuexi.getXuexishichang())
                .eq("xuexizhuangtai_types", zaixianxuexi.getXuexizhuangtaiTypes());

        logger.info("sql语句:" + queryWrapper.getSqlSegment());
        ZaixianxuexiEntity zaixianxuexiEntity = zaixianxuexiService.selectOne(queryWrapper);
        if (zaixianxuexiEntity == null) {
            zaixianxuexiService.updateById(zaixianxuexi);//根据id更新
            return R.ok();
        } else {
            return R.error(511, "表中有相同数据");
        }
    }


    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids, HttpServletRequest request) {
        logger.debug("delete:,,Controller:{},,ids:{}", this.getClass().getName(), ids.toString());
        List<ZaixianxuexiEntity> oldZaixianxuexiList = zaixianxuexiService.selectBatchIds(Arrays.asList(ids));//要删除的数据
        zaixianxuexiService.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");
        try {
            List<ZaixianxuexiEntity> zaixianxuexiList = new ArrayList<>();//上传的东西
            Map<String, List<String>> 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 {
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for (List<String> data : dataList) {
                            //循环
                            ZaixianxuexiEntity zaixianxuexiEntity = new ZaixianxuexiEntity();
//                            zaixianxuexiEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            zaixianxuexiEntity.setShicidaquanId(Integer.valueOf(data.get(0)));   //诗词大全 要改的
//                            zaixianxuexiEntity.setKaishiTime(sdf.parse(data.get(0)));          //开始时间 要改的
//                            zaixianxuexiEntity.setJieshuTime(sdf.parse(data.get(0)));          //结束时间 要改的
//                            zaixianxuexiEntity.setXuexishichang(Integer.valueOf(data.get(0)));   //学习时长 (分钟) 要改的
//                            zaixianxuexiEntity.setXuexizhuangtaiTypes(Integer.valueOf(data.get(0)));   //学习状态 要改的
//                            zaixianxuexiEntity.setInsertTime(date);//时间
//                            zaixianxuexiEntity.setCreateTime(date);//时间
                            zaixianxuexiList.add(zaixianxuexiEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        zaixianxuexiService.insertBatch(zaixianxuexiList);
                        return R.ok();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return R.error(511, "批量插入数据异常,请联系管理员");
        }
    }


    /**
     * 前端列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params, HttpServletRequest request) {
        logger.debug("list方法:,,Controller:{},,params:{}", this.getClass().getName(), JSONObject.toJSONString(params));

        CommonUtil.checkMap(params);
        PageUtils page = zaixianxuexiService.queryPage(params);

        //字典表数据转换
        List<ZaixianxuexiView> list = (List<ZaixianxuexiView>) page.getList();
        for (ZaixianxuexiView 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);
        ZaixianxuexiEntity zaixianxuexi = zaixianxuexiService.selectById(id);
        if (zaixianxuexi != null) {


            //entity转view
            ZaixianxuexiView view = new ZaixianxuexiView();
            BeanUtils.copyProperties(zaixianxuexi, view);//把实体数据重构到view中

            //级联表
            YonghuEntity yonghu = yonghuService.selectById(zaixianxuexi.getYonghuId());
            if (yonghu != null) {
                BeanUtils.copyProperties(yonghu, view, new String[]{"id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                view.setYonghuId(yonghu.getId());
            }
            //级联表
            ShicidaquanEntity shicidaquan = shicidaquanService.selectById(zaixianxuexi.getShicidaquanId());
            if (shicidaquan != null) {
                BeanUtils.copyProperties(shicidaquan, view, new String[]{"id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
                view.setShicidaquanId(shicidaquan.getId());
            }
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        } else {
            return R.error(511, "查不到数据");
        }
    }


    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody ZaixianxuexiEntity zaixianxuexi, HttpServletRequest request) {
        logger.debug("add方法:,,Controller:{},,zaixianxuexi:{}", this.getClass().getName(), zaixianxuexi.toString());

        Wrapper<ZaixianxuexiEntity> chaxun = new EntityWrapper<ZaixianxuexiEntity>()
                .eq("yonghu_id", zaixianxuexi.getYonghuId())
                .eq("shicidaquan_id", zaixianxuexi.getShicidaquanId())
                .eq("xuexizhuangtai_types", zaixianxuexi.getXuexizhuangtaiTypes());
        ZaixianxuexiEntity zaixianxuexiEntity = zaixianxuexiService.selectOne(chaxun);
        if (zaixianxuexiEntity != null) {

            zaixianxuexiEntity.setXuexizhuangtaiTypes(3);
            zaixianxuexiEntity.setXuexishichang(0);
            zaixianxuexiService.updateById(zaixianxuexiEntity);
        }
        zaixianxuexi.setInsertTime(new Date());
        zaixianxuexi.setCreateTime(new Date());
        zaixianxuexiService.insert(zaixianxuexi);

        //查询是否有未正常结束的记录,如果有 就关闭\
        //调用selectOne查出来
        //        zaixianxuexiService.selectOne()

        //判断 查出来对象是否为空 空代表没有未正常关闭的
        //不为空 塞状态为未正常关闭的 时长0 执行updateByid方法更新


        //新增一条新纪录


        return R.ok();
    }


    @RequestMapping("/jieshu")
    public R jeshu(Integer id, HttpServletRequest request) {
        Date data = new Date();

        Integer userId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));


        // 查询记录表 查出在学习的记录
        Wrapper<ZaixianxuexiEntity> zaixianxuexiEntityEntityWrapper = new EntityWrapper<ZaixianxuexiEntity>()
                .eq("yonghu_id", userId)
                .eq("shicidaquan_id", id)
                .eq("xuexizhuangtai_types", 1);
        ZaixianxuexiEntity zaixianxuexiEntity = zaixianxuexiService.selectOne(zaixianxuexiEntityEntityWrapper);
        if (zaixianxuexiEntity == null ) {
            return R.error("查不到学习记录");
        }
        YonghuEntity yonghuEntity = yonghuService.selectById(userId);
        if (yonghuEntity==null){
            return R.error("查不到用户信息");
        }
        long nd = 1000 * 24 * 60 * 60;
        long nh = 1000 * 60 * 60;
        long nm = 1000 * 60;
        // 获得两个时间的时间差异
        long diff = data.getTime() - zaixianxuexiEntity.getKaishiTime().getTime();
        //         计算差多少天
        long day = diff / nd;

        // 计算差多少小时
        long hour = diff % nd / nh;
        // 计算差多少分钟
        long min = diff % nd % nh / nm;
        //         输出结果\zaixianxuexiEntity
        System.out.println("停车时长:" + hour + "小时" + min + "分钟");
        Long l = day * 24 * 60 + hour * 60 + min;
        zaixianxuexiEntity.setXuexizhuangtaiTypes(2);
        zaixianxuexiEntity.setXuexishichang(Integer.valueOf(String.valueOf(l)));
        zaixianxuexiEntity.setJieshuTime(data);
        yonghuEntity.setNewMoney(Integer.valueOf(String.valueOf(l))+yonghuEntity.getNewMoney());
        yonghuService.updateById(yonghuEntity);

        zaixianxuexiService.updateById(zaixianxuexiEntity);

        return R.ok();
    }


}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java是一种编程语言,Vue是一种前端框架,Spring Boot是一种后端框架,Maven是一种构建工具,MyBatis是一种ORM框架,MySQL是一种关系型数据库。这些技术可以一起使用来开发Web应用程序。 ### 回答2: JavaVueSpringBootMaven、MyBatis 和 MySQL 是现代软件开发中常见的工具和技术。Java 是一门强大的编程语言,非常适合构建企业级应用程序。Vue 是一种现代的 JavaScript 框架,用于构建可交互的单页应用程序。SpringBoot 是一种基于 Spring 框架的服务端开发解决方案,可用于构建 RESTful Web 服务或基于微服务体系结构的应用程序。Maven 是一个构建工具,可用于自动化构建和管理软件项目的依赖项。MyBatis 是一个数据持久化框架,可以方便地将 Java 应用程序连接到各种关系型数据库中。MySQL 是一个流行的、开源的关系型数据库管理系统,是许多 Web 应用程序的默认选择。 在软件开发中,JavaVueSpringBootMaven、MyBatis 和 MySQL 可以相互配合使用,以构建跨平台、云端部署、高效稳定的应用程序。JavaSpringBoot 可用于构建 Web 服务和 RESTful API,而 VueSpringBoot 可用于构建面向用户的 Web 应用程序。Maven 可用于管理项目依赖项和自动化构建过程,而 MyBatis 可以方便地将数据从数据库中提取并转换为对象。MySQL 可用于存储应用程序生成的数据。 总之,在软件开发中,选择适合您团队和项目需求的工具和技术非常重要。JavaVueSpringBootMaven、MyBatis 和 MySQL 已经得到了广泛的应用和实践验证,并且可以帮助您轻松地构建高效、可靠和安全的应用程序。 ### 回答3: Java是一种面向对象的高级编程语言,被广泛使用于开发各种应用程序,从桌面应用程序到企业级应用程序。它具有强大的编程能力、跨平台兼容性和开源社区的支持。Java中有很多库、框架和工具,可以简化编程任务并提高应用程序的性能和稳定性。 Vue是一个流行的JavaScript前端框架,用于构建用户界面。它被设计为轻量级、高效和灵活,可以用来建立单页应用程序和大型复杂应用程序。Vue提供了许多有用的工具和组件,可以帮助开发人员快速建立优秀的用户界面。 Spring Boot是一个基于Spring框架的轻量级应用程序开发框架,目的是简化企业级应用程序的开发过程。Spring Boot具有自动配置、快速启动、简单的部署和许多其他特性,可以快速构建高性能应用程序。它还具有用于构建RESTful API和微服务的功能。 Maven是一个强大的项目管理和构建工具,用于构建Java应用程序。Maven可以帮助开发人员自动化项目构建过程,并可以帮助组织项目结构和管理库依赖。Maven具有许多插件和工具,可以帮助开发人员编译、测试和打包应用程序。 MyBatis是一个流行的Java持久层框架,用于简化与关系型数据库的交互。它使用SQL映射文件将Java对象映射到数据库表中,提供了一种简单而强大的方式来处理数据库操作。MyBatis还提供了许多有用的特性,如动态SQL、事务管理和缓存。 MySQL是一个开源的关系型数据库管理系统,被广泛使用于Web应用程序和企业级应用程序。MySQL具有可靠的性能、高度可扩展性和广泛的API支持,可以处理大型数据集和高并发访问。它还拥有丰富的特性和工具,支持多种编程语言和操作系统

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一季春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值