Proyecto Java: Sistema de gestión de pasantías para estudiantes universitarios (java+SpringBoot+Thymeleaf+html+JQuery+bootstrap)

Obtenga el código fuente: ¡Descárguelo de "Recursos" en la página de inicio del blog!

Introducción al proyecto

Los usuarios de este sistema se pueden dividir en tres tipos: administradores, profesores y estudiantes. Habrá diferentes interfaces de menú después de que los tres roles inicien sesión;

Funciones principales del administrador:

Gestión de la información Gestión de la información de
los estudiantes, gestión de la información del profesor, práctica de producción Gestión de la información, práctica posterior Gestión de la información,
práctica de producción
Aplicación de la práctica de producción, Mi práctica de producción, Mis notas, Mis resultados de la aplicación, mi aplicación Gestión de prácticas Prácticas de producción Prácticas de gestión de producción Prácticas de producción de gestión de procesos Estadísticas de puntuación Revisión posterior a la pasantía Gestión de procesos posterior a la pasantía Estadísticas de puntaje posterior a la pasantía Compartir gestión del sistema Gestión de usuarios Gestión de menús Gestión de la información de roles













Principales funciones de los profesores:

Gestión de la información Gestión de la información de
los estudiantes Gestión de la
pasantía
Producción Revisión de la pasantía
Producción de la pasantía Gestión de procesos
Producción de la pasantía Puntuación Estadísticas
Revisión
posterior a la pasantía Gestión del proceso
posterior a la pasantía Estadísticas de la puntuación posterior a la pasantía
Intercambio
de información Revisión
;

Principales funciones de los estudiantes:

Pasantía de
producción: Solicitud de pasantía de producción;
Mi pasantía de producción;
Mis calificaciones;
Mi solicitud;
Práctica
posterior: Solicitud de pasantía posterior;
Mi pasantía posterior;
Mis calificaciones;
Mi solicitud;
Compartir:
Mi participación;
Foro de discusión;

necesidades ambientales

1. Entorno operativo: preferiblemente java jdk 1.8, estamos ejecutando en esta plataforma. Otras versiones también son teóricamente posibles.
2. Entorno IDE: se pueden utilizar IDEA, Eclipse, Myeclipse. Se recomienda IDEA
3. Entorno Tomcat: las versiones Tomcat 7.x, 8.x, 9.x están disponibles
4. Entorno de hardware: Windows 7/8/10 con más de 1 G de memoria o Mac OS
5. Proyecto Maven: Sí; compruebe si pom.xml está incluido en el directorio del código fuente; si es así, es un proyecto experto, de lo contrario, es un proyecto no experto

6. Base de datos: MySql versión 5.7;

pila de tecnología

1. Estructura central: Spring Boot.
2. Marco de seguridad: Apache Shiro.
3. Motor de plantillas: Thymeleaf.
4. Framework de capa de persistencia: MyBatis.
5. Tareas programadas: Cuarzo.
6. Grupo de conexiones de base de datos: Druid.
7. Clase de herramienta: Fastjson.
8. Interfaz: Thymeleaf+html+JQuery+bootstrap

Instrucciones de uso

1. Use Navicat u otras herramientas para crear una base de datos con el nombre correspondiente en mysql e importe el archivo sql del
proyecto 2. Configure la base de datos en la configuración ruoyi-admin/src/main/resources/application-druid.yml en el proyecto Cambie a su propia configuración;
3. Use IDEA/Eclipse/MyEclipse para importar el proyecto. Al importar desde Eclipse/MyEclipse, si es un proyecto maven, seleccione maven; si es un proyecto maven, después de la importación es exitosa, ejecute el comando maven clean; maven install para configurar tomcat y luego ejecute:
4. Ejecute el proyecto, ingrese localhost: 8092 para iniciar sesión

 

 

 

 

 

 

 

Controlador frontal de información de administrador:

/**
 * <p>
 * 管理员信息 前端控制器
 * </p>
 *
 * @author yy
 */
@RestController
@RequestMapping("/stu-user")
public class StuUserController {

    @Autowired
    private Producer producer;

    @Autowired
    private IStuUserService iStuUserService;


    @Autowired
    private AuthenticationManager authenticationManager;


    private final Logger log = Logger.getLogger(StuUserController.class);

    @GetMapping("/user-list")
    public HttpResponse getUserList(NormalQueryInfo normalQueryInfo){
        return HttpResponse.success(iStuUserService.getUserList(normalQueryInfo));
    }

    @PostMapping("/edit")
    public HttpResponse editUser(@RequestBody StuUser stuUser){
        return HttpResponse.success(iStuUserService.editUser(stuUser));
    }

    @DeleteMapping("/del")
    public HttpResponse delUser(@RequestBody StuUser stuUser){
        return HttpResponse.success(iStuUserService.deleteUser(stuUser));
    }
    /**
     * 验证码
     */
    @GetMapping("/captcha.jpg")
    public void captcha(HttpServletResponse response, HttpServletRequest request) throws IOException {
        response.setHeader("Cache-Control", "no-store, no-cache");
        response.setContentType("image/jpeg");

        // 生成文字验证码
        String text = producer.createText();
        // 生成图片验证码
        BufferedImage image = producer.createImage(text);
        // 保存到验证码到 session
        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, text);

        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(image, "jpg", out);
        IOUtils.closeQuietly(out);
    }

    /**
     * 登录接口
     */
    @PostMapping(value = "/login")
    public HttpResponse login(@RequestBody LoginRequest loginRequest, HttpServletRequest request) throws IOException {
        String username = loginRequest.getAccount();
        String password = loginRequest.getPassword();
//        String captcha = loginBean.getCaptcha();
        // 从session中获取之前保存的验证码跟前台传来的验证码进行匹配
//        Object kaptcha = request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
//        if(kaptcha == null){
//            return HttpResult.error("验证码已失效");
//        }
//        if(!captcha.equals(kaptcha)){
//            return HttpResult.error("验证码不正确");
//        }
//        // 用户信息
//        System.out.println(username+"|"+password+"|"+captcha+" ");
        StuUser user = iStuUserService.findByName(username);
        // 账号不存在、密码错误
        if (user == null) {
            return HttpResponse.error("账号不存在");
        }
        if (!PasswordUtils.matches(user.getSalt(), password, user.getPassword())) {
            return HttpResponse.error("密码不正确");
        }
        JwtAuthenticatioToken token = SecurityUtils.login(request, username, password, authenticationManager);
        log.info("user:"+token.getName()+"login Success! [In "+token.getDetails().toString()+"]");
        return HttpResponse.success(new LoginResponse(token.getName(),token.getToken(),"OK!"));
    }

    @PostMapping(value="/save")
    public HttpResponse addUser(@RequestBody StuUser stuUser) {
        return HttpResponse.success(iStuUserService.addUser(stuUser));
    }



    @GetMapping(value="/findByName")
    public HttpResponse findByUserName(@RequestParam String name) {
        return HttpResponse.success(iStuUserService.findByName(name));
    }
}

Detalles personales del maestro Controlador frontal:

/**
 * <p>
 * 教师个人详细信息 前端控制器
 * </p>
 *
 * @author yy
 */
@RestController
@RequestMapping("/stu-teacher-info")
public class StuTeacherInfoController {

    @Autowired
    private IStuTeacherInfoService iStuTeacherInfoService;

    @GetMapping("/get")
    public HttpResponse getTeacherInfosList(NormalQueryInfo normalQueryInfo){
        return HttpResponse.success(iStuTeacherInfoService.getTeacherInfosList(normalQueryInfo));
    }

    @PostMapping("/add")
    public HttpResponse addTeacherInfosList(@RequestBody StuTeacherInfo stuTeacherInfo){
        String res = iStuTeacherInfoService.addTeacherInfosList(stuTeacherInfo);
        return res == null ? HttpResponse.success() : HttpResponse.error(res) ;
    }

    @PostMapping("/edit")
    public HttpResponse editTeacherInfosList(@RequestBody StuTeacherInfo stuTeacherInfo){
        return HttpResponse.success(iStuTeacherInfoService.editTeacherInfosList(stuTeacherInfo));
    }

    @DeleteMapping("/del")
    public HttpResponse delTeacherInfosList(@RequestBody StuTeacherInfo stuTeacherInfo){
        return HttpResponse.success(iStuTeacherInfoService.delTeacherInfosList(stuTeacherInfo));
    }

    @GetMapping("/remove-course-teacher")
    public HttpResponse delCourse(@RequestParam("teacherId") Integer teacherId){
        return HttpResponse.success(iStuTeacherInfoService.setCourseTeacherById(teacherId,-1));
    }

    @GetMapping("/get-no-course")
    public HttpResponse getAllTeacherInfosListNoCourse(){
        return HttpResponse.success(iStuTeacherInfoService.getAllTeacherInfosListNoCourse());
    }

    @GetMapping("/set-course")
    public HttpResponse setCourseTeacher(@RequestParam(value = "teacherId") Integer teacherId,
                                         @RequestParam(value = "courseId") Integer courseId){
        return HttpResponse.success(iStuTeacherInfoService.setCourseTeacherById(teacherId,courseId));
    }

}

Controlador frontal de información del estudiante:

/**
 * <p>
 * 学生信息 前端控制器
 * </p>
 *
 * @author yy
 */
@RestController
@RequestMapping("/stu-info")
public class StuInfoController {


    @Autowired
    private IStuInfoService iStuInfoService;

    /**
     * 分页查询全部信息
     * */
    @GetMapping("/get")
    public HttpResponse getPageStudentInfo(QueryStuInfoListRequest queryStuInfoListRequest){
        return HttpResponse.success(iStuInfoService.getPageStudentInfo(
                queryStuInfoListRequest.getPageNum(), queryStuInfoListRequest.getPageSize()
        ));
    }

    /**
     * 对基本信息进行高级查询
     * */
    @GetMapping("/get-test")
    public HttpResponse getPageStudentInfoByCondition(QueryStuInfoListRequest queryStuInfoListRequest){
        iStuInfoService.getStudentInfoByCondition(queryStuInfoListRequest);
        QueryListResponse<StuInfo> queryStuInfoListResponse = iStuInfoService.getStudentInfoByCondition(queryStuInfoListRequest);
        //如果stuInfoListResponse.getNumOfTotalRecord() < 0 ,则表明输入类型和预期不符且发生异常,则返回错误
        return queryStuInfoListResponse.getNumOfTotalRecord() < 0 ?
                HttpResponse.error("输入信息类型错误!") : HttpResponse.success(queryStuInfoListResponse);
    }

    /**
     * 添加学生信息
     * */
    @PostMapping("/add")
    public HttpResponse addStudentInfo(@RequestBody StuInfo stuInfo){
        String res = iStuInfoService.addStudentInfo(stuInfo);
        //返回信息的长度大于0,则表示有错误或有提示信息
        return res.length() > 0 ? HttpResponse.error(res) : HttpResponse.success("成功插入一条记录") ;
    }

    /**
     * 编辑学生性别或手机号信息
     * */
    @PostMapping("/edit")
    public HttpResponse editStudentSexOrPhoneInfo(@RequestBody StuInfo stuInfo){
        return HttpResponse.success(iStuInfoService.editStudentInfo(stuInfo));
    }

    /**
     * 根据学号删除学生信息
     * */
    @DeleteMapping("/delete")
    public HttpResponse deleteStudentInfoByNumber(@RequestBody StuInfo stuInfo){
        return HttpResponse.success(iStuInfoService.deleteStudentInfo(stuInfo));
    }

    /**
     * 修改学生违纪状态
     * */
    @PostMapping("/change")
    public HttpResponse changeStudentStatus(@RequestBody StuInfo stuInfo){
        return HttpResponse.success(iStuInfoService.changeStudentStatus(stuInfo));
    }
}

 

Obtenga el código fuente: ¡Descárguelo de "Recursos" en la página de inicio del blog!

Supongo que te gusta

Origin blog.csdn.net/yuyecsdn/article/details/124099939
Recomendado
Clasificación