20基于java的科研管理系统设计与实现

背景及意义

目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方式,实现教研的各种功能,从而达到对科研管理系统的管理。

科研项目管理系统,以项目化管理为思想,以现实中管理制度为核心,对科研项目申报、项目开题、项目合同、实施进度、项目风险分析及控制计划、项目经费、项目质量、项目文档、科研成果等科研活动全面管理,实现科研项目“管理标准的沉淀优化、组织流程的优化、管理水平的提升、内外部资源整合的延伸”,保障科研项目完成与落实,出人才、出成果、出效益,提高竞争力。

主要功能

项目主要分为3个角色,分别是超级管理员,教师和学生,超级管理员具有项目所有的权限,包括有用户管理,角色管理,权限管理,项目管理,申报管理,变更管理,结题管理,数据字典等功能;学生学生负责对项目的申报,变更,结题申请等,教师负责对学生提交的项目进行审核。

项目搭建环境

> java jdk版本:1.8及以上
> 后台框架:java spring springmvc mybatis springbotoot等
> 前端框架:html css javascript vue等
> 开发工具: idea或者eclipse都可
> 数据库: mysql 5.7及以上
> 服务器: tomcat
> 更多内容可查看:http://projecthelp.top

部分核心代码

import org.springframework.stereotype.Service;
import xyz.shiguangliang.mybatis.dao.UserMapper;

import xyz.shiguangliang.mybatis.domain.User;
import xyz.shiguangliang.service.UserService;
import xyz.shiguangliang.util.query.QueryInfo;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;

@Service
public class UserServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;

    //登录
    @Override
    public User login(String username, String password) {
        User user = userMapper.selectLogin(username,password);
        if (user != null) {
            //登录次数加一
            if (user.getIntimes() !=  null) {
                user.setIntimes(user.getIntimes() + 1);
            }else {
                user.setIntimes(1);
            }
            //更新登录时间
            user.setLastlogin(new Date());
            return user;
        }
        return null;
    }

    //注册
    @Override
    public boolean register(User user) {
        int i = 0;
        //检测用户是否存在
        User user1 = userMapper.selectUsername(user.getUsername());
        if (user1 == null) {
            i = userMapper.insert(user);
        }
        return i > 0;
    }

    //用户列表
    @Override
    public QueryInfo getUserList(String query, Integer pagenum,Integer pagesize) {
        QueryInfo queryInfo = new QueryInfo();
        int start;
        int end;
        if (pagenum == null||pagesize == null){
            pagenum =0;
            pagesize = 3;
        }
        start = (pagenum-1)*pagesize;
        end = pagesize;
        int userSize = userMapper.selectUserListLimitSize(query,start,end);
        List<User> users = userMapper.selectUserListLimit(query,start,end);
        queryInfo.setList(users);
        queryInfo.setTotal(userSize);
        return queryInfo;
    }

    //删除用户
    @Override
    public int deleteUser(Integer tid) {
        return userMapper.deleteByPrimaryKey(tid);
    }

    //通过id查找用户
    @Override
    public User findById(Integer tid) {
        return userMapper.selectByPrimaryKey(tid);
    }



    //更新用户
    @Override
    public int updateUser(User user) {
        if (user.getPassword()==null|| Objects.equals(user.getPassword(), "")){
            user.setPassword(userMapper.selectByPrimaryKey(user.getTid()).getPassword());
        }
        return userMapper.updateByPrimaryKey(user);
    }

    //通过用户名查找用户
    @Override
    public User findByUsername(String username) {
        return userMapper.selectUsername(username);
    }

    //获取用户权限
    @Override
    public int getPower(String username) {
        return userMapper.selectUsername(username).getPower();
    }
}

useMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xyz.shiguangliang.mybatis.dao.UserMapper">
  <resultMap id="BaseResultMap" type="xyz.shiguangliang.mybatis.domain.User">
    <id column="tid" jdbcType="INTEGER" property="tid" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="teachername" jdbcType="VARCHAR" property="teachername" />
    <result column="dno" jdbcType="INTEGER" property="dno" />
    <result column="power" jdbcType="INTEGER" property="power" />
    <result column="intimes" jdbcType="INTEGER" property="intimes" />
    <result column="lastlogin" jdbcType="TIMESTAMP" property="lastlogin" />
  </resultMap>
  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    delete from teacher
    where tid = #{tid,jdbcType=INTEGER}
  </delete>
  <insert id="insert" parameterType="xyz.shiguangliang.mybatis.domain.User">
    insert into teacher (tid, username, password, 
      teachername, dno, power, 
      intimes, lastlogin)
    values (#{tid,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
      #{teachername,jdbcType=VARCHAR}, #{dno,jdbcType=INTEGER}, #{power,jdbcType=INTEGER}, 
      #{intimes,jdbcType=INTEGER}, #{lastlogin,jdbcType=TIMESTAMP})
  </insert>
  <update id="updateByPrimaryKey" parameterType="xyz.shiguangliang.mybatis.domain.User">
    update teacher
    set username = #{username,jdbcType=VARCHAR},
      password = #{password,jdbcType=VARCHAR},
      teachername = #{teachername,jdbcType=VARCHAR},
      dno = #{dno,jdbcType=INTEGER},
      power = #{power,jdbcType=INTEGER},
      intimes = #{intimes,jdbcType=INTEGER},
      lastlogin = #{lastlogin,jdbcType=TIMESTAMP}
    where tid = #{tid,jdbcType=INTEGER}
  </update>
  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
    select tid, username, password, teachername, dno, power, intimes, lastlogin
    from teacher
    where tid = #{tid,jdbcType=INTEGER}
  </select>
  <select id="selectAll" resultMap="BaseResultMap">
    select tid, username, password, teachername, dno, power, intimes, lastlogin
    from teacher
  </select>
    <select id="selectLogin" resultType="xyz.shiguangliang.mybatis.domain.User">
        select tid, username, password, teachername, dno, power, intimes, lastlogin
        from teacher
        where username = #{username} and password = #{password}
    </select>
  <select id="selectUsername" resultType="xyz.shiguangliang.mybatis.domain.User">
    select tid, username, password, teachername, dno, power, intimes, lastlogin
        from teacher
        where username = #{username}
  </select>
  <select id="selectUserListLimit" resultType="xyz.shiguangliang.mybatis.domain.User">
    select tid, username, password, teachername, dno, power, intimes, lastlogin
    from teacher
    where
    /*条件判断*/
    <if test="#{query} != null and #{query} != ''">
      /*模糊查询*/
      <bind name="query2" value="'%' + query + '%'"/>
      username like #{query2}
    </if>
    LIMIT #{start},#{end}
  </select>
  <select id="selectUserListLimitSize" resultType="java.lang.Integer">
    select count(*)
    from teacher
    where
    /*条件判断*/
    <if test="#{query} != null and #{query} != ''">
      /*模糊查询*/
      <bind name="query2" value="'%' + query + '%'"/>
      username like #{query2}
    </if>
  </select>
</mapper>
  • Project实体类
@Entity
@Table(name = BaseEntity.TABLE_PREFIX + "PROJECT")
public class Project extends BaseEntity{
    //项目名
    @Column(name = "name",nullable = false)
    private String name;
    //项目级别
    @Column(name = "level",nullable = false)
    private String level;
    //负责人
    @Column(name = "user_name",nullable = false)
    private String userName;
    //成员
    @Column(name = "memberJsons",nullable = false)
    private String memberJsons;
    //资金
    @Fetch(FetchMode.SUBSELECT)
    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,targetEntity = Fund.class,mappedBy = "projectId")
    private List<Fund> funds;
    //项目结果类型
    @Column(name = "achievement_type",nullable = false)
    private String achievementType;
    //开始时间
    @Column(name = "begin_time",nullable = false)
    private Date beginTime;
    //学科
    @Column(name = "subject",nullable = false)
    private String subject;
    //预期结果
    @Column(name = "expected_result",nullable = false)
    private String expectedResult;
    //立项目的
    @Column(name = "purpose",nullable = false)
    private String purpose;
    //研究方案可行性分析
    @Column(name = "viable_analysis",nullable = false)
    private String viableAnalysis;
    //社会效益分析
    @Column(name = "economic_analysis",nullable = false)
    private String economicAnalysis;
    //现有条件
    @Column(name = "existing_conditions",nullable = false)
    private String existingConditions;
    //所属学院
    @Column(name = "college" , nullable = false)
    private String college;
    //项目状态
    @Column(name = "status",nullable = false)
    private int status;
    //是否可以修改
    @Column(name = "can_update" )
    private boolean canUpdate;
    //是否可以申报
    @Column(name = "can_application")
    private boolean canApplication;
    //是否可以结题
    @Column(name = "can_conclude")
    private boolean canConclude;
    //创建人
    @Column(name = "created_user",nullable = false)
    private String createdUser;
}

项目实现类

@Service
public class ProjectApplicationServiceImpl extends BaseServiceImpl<ProjectApplication> implements IProjectApplicationService {

    public ProjectApplicationServiceImpl(BaseRepository<ProjectApplication> repository) {
        super(repository);
    }

    @Autowired
    private ProjectApplicationRepository projectApplicationRepository;

    @Autowired
    private IProjectService projectService;

    @Override
    @Transactional
    public ProjectApplication toApplication(ProjectApplication projectApplication) {
        projectApplication.setStatus(ApplicationStatus.ON_APPLIACTION.getName());
        projectApplication.setApplicant(CurrentUserUtils.getCurrentUser().getSecurityUserDto().getUserName());
        projectApplication.setApplicateTime(new Date());
        ProjectApplication savedPorjectAppication = projectApplicationRepository.save(projectApplication);
        //项目申报中  项目申报 不可修改 不可申报 不可以申请变更 不可结题
        projectService.changeStatus(projectApplication.getProjectId(), ProjectStatus.PROJECT_AUDIT);
        return savedPorjectAppication;
    }

    @Override
    @Transactional
    public ProjectApplication applicationPass(ProjectApplication projectApplication) {
        projectApplication.setStatus(ApplicationStatus.SUCCESS_APPLICATION.getName());
        ProjectApplication updatedProjectApplication = projectApplicationRepository.save(projectApplication);
        //未结题 结题之前的状态 不可修改 不可以申报 可以申请变更 可以申请结题
        projectService.changeStatus(projectApplication.getProjectId(),ProjectStatus.NOT_CONCLUSION);
        return updatedProjectApplication;
    }

    @Override

    public ProjectApplication applicationNotPass(ProjectApplication projectApplication) {
        projectApplication.setStatus(ApplicationStatus.FAIL_APPLICATION.getName());
        ProjectApplication updatedProjectApplication = projectApplicationRepository.save(projectApplication);
        //申报失败 等同草稿 可以修改 可以申报 不可以申请变更 不可以结题
        projectService.changeStatus(projectApplication.getProjectId(),ProjectStatus.FAIL_PROJECT_AUDIT);
        return updatedProjectApplication;
    }
}

数据库的设计

在这里插入图片描述

项目部分功能展示

  • 登录页面
    在这里插入图片描述
  • 管理员功能
    在这里插入图片描述
    在这里插入图片描述
  • 教师角色
    在这里插入图片描述
  • 学生角色
    在这里插入图片描述

原文链接:https://www.cnblogs.com/projecthelp/p/17372700.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:20基于java的科研管理系统设计与实现 - Python技术站

(0)
上一篇 2023年5月4日
下一篇 2023年5月4日

相关文章

  • Java Class 加密工具 ClassFinal详解

    Java Class 加密工具 ClassFinal详解 什么是Java Class 加密工具 Java Class 加密工具是一种将Java类文件加密的工具,可以防止被反编译得到源代码,保护Java应用程序的安全性和商业机密。 ClassFinal的使用 ClassFinal是一款免费的Java Class加密工具,支持图形界面和命令行两种方式进行操作。 …

    Java 2023年5月26日
    00
  • SpringSecurity自定义登录成功处理

    Spring Security是一个基于Spring框架的安全框架,它提供了一系列的安全服务,包括身份验证、授权、攻击防护等。在Spring Security中,我们可以自定义登录成功处理来实现自定义的登录成功逻辑。在本文中,我们将详细讲解Spring Security自定义登录成功处理的完整攻略。 自定义登录成功处理 在Spring Security中,我…

    Java 2023年5月18日
    00
  • java实现超大文件的读写功能

    Java实现超大文件的读写功能攻略 在Java开发中,读写大文件是非常常见的需求。但是在读写超大文件时,会遇到内存溢出或效率低下等问题,因此需要特别注意。 下面是Java实现超大文件的读写功能的攻略: 1. 分片读取和写入 要处理超大文件,一种有效的方法是将文件拆分成若干份,逐个读取或写入,再组合在一起即可完成整个文件的处理。可以使用RandomAccess…

    Java 2023年5月20日
    00
  • Spring Boot LocalDateTime格式化处理的示例详解

    下面我将为您详细讲解“Spring Boot LocalDateTime格式化处理的示例详解”。 1. 简介 在Spring Boot中,要对LocalDateTime类型进行格式化处理,可以使用DateTimeFormatter类的ofPattern()方法或@DateTimeFormat注解进行处理。下面将分别介绍两种方法及其示例。 2. 使用DateT…

    Java 2023年5月20日
    00
  • 序列化版本号serialVersionUID的作用_动力节点Java学院整理

    序列化是Java中非常重要且常用的一个功能。它在实现网络通信、分布式存储等方面都有广泛的应用。而序列化版本号serialVersionUID则是保证序列化的兼容性和稳定性的重要手段,它用于判断序列化对象的版本是否一致,如果不一致则不能反序列化。 在Java中,每个class都有一个serialVersionUID属性,它是一个长整型数字。如果不显式指定,Ja…

    Java 2023年5月20日
    00
  • Spring整合MyBatis(Maven+MySQL)图文教程详解

    下面我就详细讲解一下 “Spring整合MyBatis(Maven+MySQL)图文教程详解” 的完整攻略。 概述 在 “Spring整合MyBatis(Maven+MySQL)图文教程详解” 中,我们将会使用 Maven 构建一个 Web 应用程序,并使用 Spring 和 MyBatis 框架来实现数据持久化。 该教程主要包括以下步骤: 创建 Maven…

    Java 2023年5月19日
    00
  • Log4j详细使用教程_动力节点Java学院整理

    Log4j详细使用教程 什么是Log4j? Log4j是一个用于记录程序运行过程中产生的日志的Java库。它为开发者提供了一种非常灵活的记录日志的方式,可以把日志输出到控制台、文件甚至是数据库中,而且可以设置不同级别的日志记录,从而更加精确地记录不同类型的日志信息。使用Log4j可以帮助你更好地了解程序的运行情况,提高调试效率。 如何使用Log4j? 步骤一…

    Java 2023年5月27日
    00
  • Mac M1 Java 开发环境配置详解

    下面是“Mac M1 Java 开发环境配置详解”的完整攻略: 环境准备 首先,我们需要确认自己的 Mac 是否使用 Apple Silicon 硅片,在 终端 中执行下面的命令进行确认: uname -m 如果输出结果为 arm64 或 aarch64,说明你的 Mac 采用了 Apple Silicon 硅片。 安装 JDK 因为 M1 Mac 采用的是…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部