基于SpringBoot+Vue的健美操评分系统设计与实现(源码+lw+部署+讲解)

前言

🌞博主介绍:✌CSDN特邀作者、全栈领域优质创作者、10年IT从业经验、码云/掘金/知乎/B站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发、文档编写、答疑辅导等。✌🌞

👇🏻 精彩专栏 推荐订阅👇🏻
2023-2024年最值得选的微信小程序毕业设计选题大全:200个热门选题推荐✅

2023-2024年最值得选的计算机毕业设计选题大全:500个热门选题推荐✅

Java精品实战案例《500套》

微信小程序项目精品案例《200套》
🌞文末获取源码+数据库+文档🌞
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人


技术环境

jdk版本:1.8 及以上
ide工具:Eclipse或者 IDEA
数据库: mysql5.7
编程语言: Java
java框架:SpringBoot
maven: 3.6.1
详细技术:HTML+CSS+JAVA+SpringBoot+MYSQL+VUE+MAVEN


功能设计

管理员端的功能主要是开放给系统的管理人员使用,能够对用户的进行管理,主要对首页,个人中心,裁判员管理,用户管理,视频分类管理,健美操管理,评分管理,系统管理进行查询,修改和删除等,对系统整体运行情况进行了解。管理员用例分析图,如图所示。
在这里插入图片描述

用户登录进入系统可以实现对首页,健美操,健美操资讯,个人中心等功能进行查看。用户用例分析图,如图所示。
在这里插入图片描述

裁判员登录进入系统可以实现对首页,个人中心,健美操管理,评分管理等功能进行查看。裁判员用例分析图,如图所示。
在这里插入图片描述
系统整体模块设计:系统分为管理员、裁判员和用户三大角色,系统管理员有最大的权限,整体功能展示如图所示。
在这里插入图片描述

本程序在设计结构选择上首选B/S,也是为了满足程序今后升级便利,以及程序低维护成本的要求。本程序的网络拓扑设计也会在下图展示,通过图形的方式来描述更容易理解。
在这里插入图片描述


系统实现效果

系统前台功能模块

当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到健美操评分系统的导航条。系统首页界面如图所示:

在这里插入图片描述

系统注册:在系统注册页面输入用户注册信息进行注册操作;系统注册页面如图如图所示:
在这里插入图片描述

健美操:在健美操页面的输入栏中输入视频标题,视频分类进行查询;可以查看健美操详细信息,还可以进行收藏,点赞,评论操作;健美操页面如图所示:
在这里插入图片描述

个人中心:在个人中心页面通过填写个人详细信息进行信息更新操作,还可以对我的收藏进行详细操作;如图所示:

在这里插入图片描述

管理员功能模块

后台登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图所示。

在这里插入图片描述

管理员进入主界面,主要功能包括对首页,个人中心,裁判员管理,用户管理,视频分类管理,健美操管理,评分管理,系统管理等进行操作。管理员主界面如图所示:
在这里插入图片描述

管理员点击用户管理。在用户页面输入用户名进行查询,新增或删除用户列表,并根据需要对用户详情信息进行详情,修改或删除操作;如图所示:
在这里插入图片描述

管理员点击健美操管理。在健美操页面输入视频标题,视频分类进行查询,新增或删除健美操列表,并根据需要对健美操详细信息进行详情,修改,查看评论或删除操作,如图所示:
在这里插入图片描述

管理员点击评分管理。在评分管理页面输入视频标题,视频分类进行查询,新增或删除评分管理列表,并根据需要对评分详细信息进行详情,修改或删除操作,如图所示:
在这里插入图片描述

用户功能模块

用户进入主界面,主要功能包括对首页,个人中心,健美操管理,评分管理等进行操作。用户主界面如图所示:
在这里插入图片描述

裁判员功能模块

裁判员进入主界面,主要功能包括对首页,个人中心,健美操管理,评分管理等进行操作。裁判员主界面如图所示:
在这里插入图片描述

为什么选择我们

在这里插入图片描述

自己的公众号(一点毕设)

在这里插入图片描述

海量实战案例

所有实战项目源码均为博主收集和开发,亲测可用,质量保障,大家可以放心使用,当然也可根据需求定制开发。
在这里插入图片描述

代码参考

// 忽略权限验证的注解
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
   // 查询用户信息
   UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
   // 判断用户是否存在或密码是否正确
   if(user==null || !user.getPassword().equals(password)) {
      return R.error("账号或密码不正确");
   }
   // 生成token
   String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
   return R.ok().put("token", token);
}

// 生成token
@Override
public String generateToken(Long userid,String username, String tableName, String role) {
   // 查询是否存在已有token
   TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
   // 生成随机token字符串
   String token = CommonUtil.getRandomString(32);
   // 设置token过期时间为1小时后
   Calendar cal = Calendar.getInstance();   
   cal.setTime(new Date());   
   cal.add(Calendar.HOUR_OF_DAY, 1);
   if(tokenEntity!=null) {
      // 更新token信息
      tokenEntity.setToken(token);
      tokenEntity.setExpiratedtime(cal.getTime());
      this.updateById(tokenEntity);
   } else {
      // 新建token记录
      this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
   }
   return token;
}

/**
 * 权限(Token)验证拦截器
 */
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    // 定义Token在请求Header中的键名
    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

        // 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
        if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
            response.setStatus(HttpStatus.OK.value());
            return false;
        }
        
        // 获取HandlerMethod注解
        IgnoreAuth annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
        } else {
            return true;
        }

        // 从header中获取token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        
        /**
         * 不需要验证权限的方法直接放过
         */
        if(annotation!=null) {
            return true;
        }
        
        // 根据token获取token实体
        TokenEntity tokenEntity = null;
        if(StringUtils.isNotBlank(token)) {
            tokenEntity = tokenService.getTokenEntity(token);
        }
        
        if(tokenEntity != null) {
            // 将用户信息存入session
            request.getSession().setAttribute("userId", tokenEntity.getUserid());
            request.getSession().setAttribute("role", tokenEntity.getRole());
            request.getSession().setAttribute("tableName", tokenEntity.getTablename());
            request.getSession().setAttribute("username", tokenEntity.getUsername());
            return true;
        }
        
        // 验证失败,返回401错误和提示信息
        PrintWriter writer = null;
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        try {
            writer = response.getWriter();
            writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
        } finally {
            if(writer != null){
                writer.close();
            }
        }
        return false;
    }
}

这段Java代码主要是一个登录功能的实现,涉及到生成Token和权限验证的拦截器。

@IgnoreAuth 注解:这是一个自定义的注解,用于标识不需要进行权限验证的方法。

@PostMapping(value = “/login”):这是一个使用POST请求方式的登录接口。

login 方法:该方法接收用户名、密码和验证码作为参数,并返回一个包含生成的Token的响应对象。首先通过用户名查询用户信息,然后判断用户是否存在并验证密码是否正确。如果验证失败,则返回错误提示;如果验证成功,则调用 generateToken 方法生成Token,并将其添加到响应对象中返回。

generateToken 方法:该方法用于生成Token。首先查询是否存在已有的Token实体,然后生成一个随机的Token字符串。接下来,设置Token的过期时间为当前时间加上1小时,并根据情况进行更新或插入Token记录。最后返回生成的Token字符串。

AuthorizationInterceptor 类:这是一个权限验证拦截器实现类。它实现了 HandlerInterceptor 接口,用于在请求处理之前进行权限验证。在 preHandle 方法中,首先设置支持跨域请求的相关头信息,并处理跨域时的 OPTIONS 请求。然后,通过反射获取请求处理方法上的 @IgnoreAuth 注解,如果存在该注解,则直接放过。接着,从请求头中获取 Token,并根据 Token 获取对应的 Token 实体。如果 Token 实体存在,则将用户信息存入 session,并放行请求。如果验证失败,则返回401错误和相应的提示信息。

总结,这段代码实现了一个基本的登录功能,并加入了对权限的验证拦截,确保只有拥有有效 Token 的用户才能访问受限资源。

源码及文档获取

文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品实战案例《500套》
微信小程序项目精品案例《500套》

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如何运用Pb9.0设计学生学籍管理系统 海盐县澉浦中学 贺剑夫 内容提要 学生学籍管理工作是学校管理工作的重要组成部分,现在相当一部分学校的学生学籍管理工作仍沿用手工方式。随着学校规模的扩大、学生人数的增加,效率低下、容易出错的手工方式越来越不适应实际管理工作的需要,利用计算机技术和数据库技术设计开发学生学籍管理系统实现学生学籍管理工作的自动化成为学生管理部门的迫切需要。 学生学籍管理工作主要是学生基本情况的管理包括学生学籍变动的管理(转入、转出、休学、复学、退学、调班、外出借读、借读、留级或跳级)、学生成绩的管理和教师基本信息管理和教课的管理,主要包括数据输入、修改、删除、追加、查询、统计和打印报表等功能,学生学籍管理系统要能高效、准确地完成这些功能,并要达到界面美观友好、使用方便。PowerBuilder9.0和其他数据库管理系统相比,可以发现它基于C/S的体系结构,除拥有其他开发平台的界面制作的优秀控件之外,以应用系统工程的工作空间(WorkSpace)为框架,以数据窗口控件和数据对象作为数据库应用系统开发的核心,通过这两个控件的使用,并结合其他控件的辅助功能,能制作出功能强大的管理系统,因此选用PowerBuilder9.0来制作学生学籍管理系统实现对学生学籍(包括学籍变动情况)、教师信息及教课和学生成绩的全面管理。 第一个步骤是创建一个工作空间和项目目标文件,使以后设计的所有功能都在此目标文件下有组织地灵活运行。第二个步骤是建立系统运行需要的表并把表添加到数据库中。第三个步骤是进行主菜单的设计,使不同的窗口共享这个主菜单,通过设计脚本来触发当前活动窗口中定义的事件来完成数据的增删改、查询、打印。第四个步骤是建立各种窗口,通过数据窗口对象,和建立的各种控件,来实现相应的功能。关系数据库SQL语言对关系模型的发展和数据库管理系统的研制起了重要作用。SQL语言虽为结构式查询语言,但实际上具有定义、查询、更新和控制等多种功能。在学生学籍管理系统的开发过程中,主要使用了嵌入式SQL语句和动态SQL语句在程序中灵活地操纵数据库。 关键字:SQL语言 对象 窗口 数据窗口 控件 一、概述 1.1 项目的背景及意义 学生学籍管理工作是学校管理工作的重要组成部分,现在相当一部分学校的学生学籍管理工作仍沿用手工方式。随着学校规模的扩大、学生人数的增加,效率低下、容易出错的手工方式越来越不适应实际管理工作的需要,利用计算机技术和数据库技术设计开发学生学籍管理系统实现学生学籍管理工作的自动化成为学生管理部门的迫切需要。 我校是一所农村初级中学,由于师资力量的薄弱和经费的紧缺,对于学生的学籍管理工作更是落后,可以说目前的学校对于学生的学籍管理都是进行手工的操作,这样的操作对于学生的管理非常不便,因此,考虑到这种情况,迫切需要开发一个学籍管理系统来进行这一项工作。 学生的学籍管理工作包括学籍管理工作、学籍的变动管理工作和成绩管理工作,主要包括数据的输入、删除、修改、查询、统计、打印等功能,学生的学籍管理系统要能高效、准确地完成这些功能,并要达到界面友好、使用方便。 1.2 相关技术与开发工具介绍 PowerBuilder是一个基于客户机/服务器方式的、完全可视化的开发环境。在PowerBuilder环境中,可以用一种可视和直观的方式来创建应用程序的用户界面和数据库接口。 PowerBuilder是面向对象的工具,它变革了面向对象技术的使用,并把它应用到用户界面对象中。用户界面的元素都是对象,它们有属性、事件和方法,通过使用这些对象就会大大地缩短应用程序的开发时间。同时,PowerBuilder9.0也是功能强大的编程语言。通过使用PowerScript编写的代码来实现事件驱动程序。 PowerBuilder是一个开放系统,其优秀的开放系统功能是可以访问任何一个常用的后台数据库系统,如Sybase、Informix或者DB2。另外,PowerBuilde可以通过一个叫做客户机、服务器开放开发环境的规范与其他PC产品进行集成。 PowerBuilder是一个多平台开发环境,有运行在windows95/98/2000/xp/me下的,也有运行在Macintosh下的Unix版本的系统。因此,PowerBuilder可以为真正的企业开发提供完全的支持。 PowerBuilder提供了对分布式应用程序的开发支持。而对分布处理最广泛和最成功的应用当数Internet技术。PowerBuilder提供了两种Internet应用的访问方式:基于WEB.PB的Browser/Server方式和基于Plugins的Client/Server方式。 在Internet应用程序中,客户浏览器与服务器之间的通信方式是这样的:浏览器向WEB服务器请求调用HTML文档,Web服务器将HTML文件传递给客户浏览器。HTML文档中的元素可以指向其他资源(包括位图、声波文件、插入件、ActiveX控件及应用程序等)。用户用鼠标点击这些元素,相当于向Web服务器提出一个请求。这些请求可以是下载文件,也可以请求Web服务器执行一个应用程序。浏览器-Web服务器的结构如图1-1所示 图1-1 浏览器-Web服务器结构 Web应用的执行过程如图1-2所示 图1-2 Web应用的执行过程 PowerBuilder提供了两种plug-in方式,即Windows Plug-in和Data Window Plug-in。Windows Plug-in相当于在浏览器浏览的HTML中嵌入运行PowerBuilder的应用程序。Data Window Plug-in相当于在浏览器的HTML中嵌入运行PowerBuilder的PSR文件。它们的调用过程如下: (1) 浏览器访问Web服务器,向Web服务器提出请求。 (2) 服务器卸载PSR文件或PBD文件,浏览器显示PowerBuilder窗口对象或PSR文件。 (3) 用户对浏览器上的窗口进行操作,Web服务器把操作的结果返回给PowerBuilder窗口。 1.3 系统可行性分析 建设MIS的必要性取决于需求的迫切性和实现的可行性。可行性并不等于可能性,它还包括很必要性,如果领导或管理人员对信息的需求并不迫切,或各方面的条件不具备,就是不具备可行性。系统可行性包括经济上可行性、技术上可行性、管理上可行性和资源上可行性四个方面。 1.3.1 经济上的可行性 主要对项目的经济效益进行评价。该系统除了购置硬件设备外,操作简便,无须投入较大的培训费用、开发费用、维护费用等,并且在实施过程中减少手工操作的步骤、加快了对学生的学籍管理、学籍变动管理和学生成绩管理的速度。 1.3.2 技术上的可行性 本系统的开发采用的是PowerBuilder9.0,它是一个大型数据库应用系统的开发平台,基于客户/服务器的体系结构,可以广泛开发适合于远程数据库和本地数据库的应用系统。它除拥有其他开发平台的界面制作的优秀控件之外,以应用系统的工作窨(WorkSpace)为框架,以数据窗口控件和数据窗口对象作为数据库应用系统开发的核心,通过这两个控件和使用,并结合其他控件的辅助功能,用户可以制作出许多有用的大中型数据库应用系统。PowerBuilder9.0使开发人员能够开发肥客户端应用来满足日益复杂的商业需求,而且它支持J2EE and Mircrosoft.NET环境。它也奠定了“第四代+”(4Glplus)编程语言的基础,它通过设计、建模、开发、配置和管理的紧密集成大大提高了开发人员的生产力, 1.3.3 管理上的可行性   本系统采用powerbuilder8.0 自带的ASA(Adaptive Server Anywhere)数据库,该数据库简单,通过标准ODBC接口,自动连接数据库,这也是PB具有强大功能和对数据库易操作的一方面。该数据库管理系统能够使用SQL 语句,也可以使用各种连接操作,能单独的使用,也可以与各种编程工具连接起来使用,在管理上非常方便。 1.3.4 资源上的可行性   本系统资源利用方便,数据可通过.txt文件导入数据库而进行使用,也可将数据库文件导出为.txt文件,便于数据的文件格式的转换和资源的共享。 二、总体设计 2.1 系统总体功能结构   图2-1 系统总体功能结构图 在登录窗口中是对使用系统人的身份的识别,如果是系统管理员,则拥有修改、插入、追加、删除、保存数据的权利,并可对能使用本系统人员进行管理。如果是数据管理员,则没有对使用本系统人员的管理项,而普通用户则只能进行查询、打印、页面设置、打印预览等简单功能。在各个学籍管理和学籍变动管理窗口中都有对数据的备份功能。 2.2 系统总体物理结构 本系统的运行模式可以在单机模式、主机模式、客户/服务器(C/S)模式、浏览器/服务器(B/S)模式中进行选择。在计算机网络比较比较普及的今天,比较好的选择应该是C/S或B/S模式。 数据库管理系统(DBMS)选择PowerBuilder自带的Adaptive Server Anywhere 8.0。 三、E—R图设计 1) 学生实体E-R图                  图3-1 学生实体E-R图 2)课程实体E-R图                图3-2 课程实体E-R图 3) 教师实体E-R图 图3-3 教师实体E-R图 4) 选课实体E-R图 图3-4 选课实体E-R图 5) 教课实体E-R图 图3-5 教课实体E-R图 6)学生转出实体E-R图     图3-6 学生转出实体E-R图 7) 学生休学E-R图 图3-7 学生休学实体E-R图 8) 学生复学实体E-R图 图3-8 学生复学实体E-R图 9) 学生退学实体E-R图 图3-9 学生退学实体E-R图 10)学生外出借读实体E-R图 图3-10 学生外出借读实体E-R图 11)学生调班实体E-R图 图3-11 学生调班实体E-R图 12)学生留级(跳级)实体E-R图 图3-12 学生留级(跳级)实体E-R图 13)各实体之间的E-R图     图3-13 各实体之间的E-R图 四、总结与展望 本制作流程,可实现学生、教师、课程间的基本管理和用户的管理,能进行学籍的变动情况处理(如学生转入、学生转出、学生休学、学生复学、学生退学、学生调班、学生留级(跳级)、学生借读及学生外出借读),对报表能进行打印及打印预览,对相关数据能进行备份,在设计中使用了菜单、窗口、数据窗口、数据窗口控件及多种窗口控件,给工作上带来了很大的方便,可以实现学生学籍管理及变动情况管理的应用。 通过对PowerBuilder9.0的窗口对象、菜单对象、数据窗口对象、数据窗口控件、窗口控件及其基本属性的运用,可进行一般的事务处理和软件的设计。 通过Pb9.0可以很方便地将所有的数据库转移到服务器上,实行客户/服务器的管理模式,增加对系统出错处理模块的管理,以及实现Web方面的功能开发。 计算机教育发展到今天,尤其是新课程的改革要求我们计算机教师,特别是农村中学的计算机教师要能编写适合于本地特色的一些管理系统来为学校服务,为教学服务。PB9.0无疑是一种较明智的选择。 参考文献 1、 伍俊良 《PowerBuilder课程设计系统开发案例》 清华大学出版社 2003年 2、 袁方 杨成 《数据库应用系统设计实践教程》 电子科技大学出版社 2001年 3、 黄伟 《PowerBbuilder6.5-7.0实例解析》 北京大学出版社 2000年 4、 张钢 《信息系统开发实践教程》 电子科技大学出版社 2001年 5、 甘仞初 《信息系统开发》 经济科学出版社 1996年 6、 黄梯云 《管理信息系统》 经济科学出版社 1999年 7、康博创作室 《PowerBuilder6.0使用及开发指南》 人民邮电出版社 1999年
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值