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实现文件上传的方法

    下面是Java实现文件上传的方法的完整攻略。 概述 在一些Web应用中,我们需要实现文件上传功能。Java 语言提供了多种方法,使得文件上传变得简单、易于管理。本文将简述Java实现文件上传的方法,包括基础知识、实现示例、注意事项等。 基础知识 在 Java 中,实现文件上传通常需要完成以下几个步骤: 在前端页面中添加一个文件上传的表单元素,以便用户上传需要…

    Java 2023年5月19日
    00
  • Java中try、catch的使用方法

    下面是Java中try、catch的使用方法的完整攻略。 概述 Java中的try-catch是一种异常处理机制,我们可以在try块中编写可能会产生异常(错误)的代码,如果代码块中的操作出现了问题,程序将会抛出一个异常,执行流会跳转到catch块中进行异常处理。 使用方法 try块中的代码可能会出现异常,我们可以使用以下语法进行异常的捕获和处理: try {…

    Java 2023年5月26日
    00
  • SpringBoot默认使用HikariDataSource数据源方式

    Spring Boot 是一种在 Spring 框架基础上开发应用程序的快速,便捷的方式。在 Spring Boot 应用程序中,HikariDataSource 是默认的数据源,以提高应用程序的性能。 Spring Boot 框架中默认使用 HikariDataSource 数据源方式,这是因为 HikariCP 是一个高性能的数据库连接池,它具有以下优点…

    Java 2023年5月20日
    00
  • java多线程学习笔记之自定义线程池

    Java多线程学习笔记之自定义线程池 什么是线程池 线程池是管理线程的一种机制。在Java中,可以通过Executor接口及其实现类来创建线程池。线程池的主要作用是优化线程的创建和运行过程。通过创建线程池,可以减少线程创建的开销,并且可以更好地控制线程的运行状态。 创建线程池 基本使用 Java中提供了四种线程池的实现类,它们分别为: newFixedThr…

    Java 2023年5月19日
    00
  • Springboot 通过FastJson实现bean对象和Json字符串互转问题

    下面是详细讲解“Springboot 通过FastJson实现bean对象和Json字符串互转问题”的攻略: 1. 添加FastJson依赖 要使用FastJson完成bean对象和Json字符串的互转,需要在Springboot项目中添加FastJson依赖。在项目的pom.xml中添加以下依赖: <dependency> <groupI…

    Java 2023年5月26日
    00
  • java实现日历窗口小程序

    Java实现日历窗口小程序攻略 1. 实现思路 要实现一个日历窗口小程序,可以考虑以下几个步骤: 创建一个Swing界面,显示当前日期以及日历窗口。 在日历窗口中显示当前月份的日历。 提供按钮或其他交互方式,让用户可以切换月份,也可以选择某一天进行其他操作。 2. 示例1:显示当前月份的日历 下面是一个简单的实现示例,可以通过一个二维数组表示一个月份的日历:…

    Java 2023年5月20日
    00
  • java获取类名的方法详解

    Java获取类名的方法详解 在Java编程中,我们经常需要获取类名。Java提供了多种方式来获取类名,本文将对一些常用的方法进行详细讲解。 通过Class对象获取类名 Java中,每个类都有一个对应的Class对象。通过该对象的getName()方法可以获取该类的完全限定名。 示例1: public class TestClass { public stat…

    Java 2023年5月26日
    00
  • Java基于Socket的文件传输实现方法

    Java基于Socket的文件传输实现方法 本篇攻略将介绍如何使用Java基于Socket实现文件传输的方法。通过该方法,可以实现发送方向接收方快速传输文件的目的。 准备工作 在进行文件传输前,需要准备的工作如下: 两台运行Java的计算机,分别充当发送方和接收方。 已处于同一网络下。 具备Java编程能力。 实现步骤 创建发送方和接收方的Socket对象。…

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