javaweb学生信息管理系统

实现的主要功能有:

学生可以在登录进入系统后进行选课和查看课表等操作,另外,也可以查看、修改自己的个人信息。具体功能如下:1、查看自己的课表2、可以进行选课3、退出登录系统管理员则可以对整个系统进行管理操作,其在学生功能的基础上,还增加了如下功能:1、能够搜索查询学生的个人信息,查看每个班有哪些学生2、添加学生,添加课程,添加班级,对课程进行编排3、能删除或批量删除学生、课程、班级4、对学生、课程、班级进行编辑更改

项目目录截图:

在这里插入图片描述
在这里插入图片描述

主要代码解析:

班级控制层

package com.offcn.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.offcn.pojo.Classes;
import com.offcn.pojo.StudentExt;
import com.offcn.service.ClassesService;
import com.offcn.service.StudentService;

/**
 * <p>
 * Company: offcn
 * </p>
 * 
 * @author chenya
 * @date 2019年12月18日
 * @version 1.0
 */
@Controller
@RequestMapping("/cla") // 用来处理请求地址映射的注解
public class ClassesController {
	@Resource
	ClassesService classesService;
	@Resource
	StudentService studentService;

	/*
	 * 列表与分页Action
	 */
	@RequestMapping("/list")
	// 声明一个list方法,返回一个String类型
	public String list(Model model, @RequestParam(required = false, defaultValue = "1") int pageNO) {
		int size = 3;
		model.addAttribute("size", size);
		model.addAttribute("pageNO", pageNO);
		model.addAttribute("count", classesService.getClassesCount());

		model.addAttribute("clalist", classesService.getClassPager(pageNO, size));
		return "class/list";
	}

	/*
	 * 删除单个对象Action
	 */
	@RequestMapping("/delete/{id}")
	public String delete(Model model, @PathVariable int id,
			@RequestParam(required = false, defaultValue = "1") int pageNO, RedirectAttributes redirectAttributes) {
		if (classesService.delete(id) > 0) {
			// redirectAttributes:重定向之后还能带参数跳转
			// 隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的 “页面”
			// 获取message参数值。其原理就是放到session中,session在跳到页面后马上移除对象。
			redirectAttributes.addFlashAttribute("message", "删除成功!");
		} else {
			redirectAttributes.addFlashAttribute("message", "删除失败!");
		}
		return "redirect:/cla/list?pageNO=" + pageNO;
	}

	/*
	 * 删除多个对象Action
	 */
	@RequestMapping("/deletes")
	public String deletes(Model model, @RequestParam int[] id,
			@RequestParam(required = false, defaultValue = "1") int pageNO, RedirectAttributes redirectAttributes) {
		// 执行删除
		System.out.println("批量删除" + id.toString());
		int rows = classesService.deletes(id);
		if (rows > 0) {
			redirectAttributes.addFlashAttribute("message", "删除" + rows + "行记录成功!");
		} else {
			redirectAttributes.addFlashAttribute("message", "删除失败!");
		}
		return "redirect:/cla/list?pageNO=" + pageNO;
	}

	/*
	 * 添加学生
	 */
	@RequestMapping("/add")
	public String add(Model model) {
		model.addAttribute("entity", new Classes());
		return "class/add";
	}

	/*
	 * 添加保存
	 */
	@RequestMapping("/addSave")
	// @ModelAttribute:绑定请求参数到指定对象 
	public String addSave(Model model, @ModelAttribute("entity") @Valid Classes entity, BindingResult bindingResult) {
		// 如果模型中存在错误
		if (bindingResult.hasErrors()) {
			model.addAttribute("entity", entity);
			return "class/add";

		} else {
			classesService.insert(entity);
			return "redirect:/cla/list";

		}
	}

	/*
	 * 编辑
	 */
	@RequestMapping("/edit/{id}")
	// @PathVariable可以用来映射URL中的占位符到目标方法的参数中
	public String edit(Model model, @PathVariable int id) {
		model.addAttribute("entity", classesService.getCLassId(id));
		return "class/edit";
	}

	/*
	 * 编辑保存
	 */
	@RequestMapping("/editSave")
	// @Valid的参数后必须紧挨着一个BindingResult 参数
	// Spring验证的错误返回
	public String editSave(Model model, @ModelAttribute("entity") @Valid Classes entity, BindingResult bindingResult) {
		// 如果模型中存在错误
		if (bindingResult.hasErrors()) {
			model.addAttribute("entity", entity);
			return "/class/edit";

		} else {
			classesService.update(entity);

			return "redirect:list";

		}

	}

	@RequestMapping("search/{id}")
	public String search(@PathVariable int id, Model model) {
		List<StudentExt> slist = studentService.getStuByCid(id);
		model.addAttribute("slist", slist);
		return "class/stulist";
	}

	@RequestMapping("search1/{id}")
	public String search1(@PathVariable int id, Model model) {
		/*
		 * List<StudentExt> slist=studentService.getStuByCid(id);
		 * model.addAttribute("slist", slist);
		 */
		Classes classes = classesService.getStuByid(id);
		model.addAttribute("classes", classes);
		return "class/stulist1";
	}

}

班级mapper层

package com.offcn.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.offcn.pojo.Classes;
//声明一个接口类
public interface ClassesMapper {

    int deleteByPrimaryKey(Integer id);

    int insert(Classes record);

    int insertSelective(Classes record);//选择性保存数据


    Classes selectByPrimaryKey(Integer id);


    int updateByPrimaryKeySelective(Classes record);

    int updateByPrimaryKey(Classes record);
    
    List<Classes> getAllClasses();
    
    //@Param	手动进行封装,用户参数传递标识
    public List<Classes> getClassPager(@Param("skip") int skip, @Param("size") int size);

	public Classes getCLassId(int id);

	public int getClassesCount();

	public int delete(int id);

	public int update(Classes entity);
	
	public Classes getStuByid(int id);
    
}

mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
    <!-- 配置mybatis的缓存,延迟加载等等一系列属性 -->  
    <settings>  
        <!-- 全局映射器启用缓存 -->  
        <setting name="cacheEnabled" value="true" />  
        <!-- 查询时,关闭关联对象即时加载以提高性能 -->  
        <setting name="lazyLoadingEnabled" value="true" />  
        <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指 定),不会加载关联表的所有字段,以提高性能 -->  
        <setting name="aggressiveLazyLoading" value="false" />  
        <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->  
        <setting name="multipleResultSetsEnabled" value="true" />  
        <!-- 允许使用列标签代替列名 -->  
        <setting name="useColumnLabel" value="true" />  
        <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->  
        <setting name="useGeneratedKeys" value="true" />  
        <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->  
        <setting name="autoMappingBehavior" value="FULL" />  
        <!-- 对于批量更新操作缓存SQL以提高性能 -->  
        <!-- <setting name="defaultExecutorType" value="BATCH" />   -->
        <!-- 数据库超过25000秒仍未响应则超时 -->  
        <setting name="defaultStatementTimeout" value="25000" />  
    </settings>  
    <typeAliases>
        <package name="com.offcn.pojo" />
    </typeAliases>
    
    <!-- 全局别名设置,在映射文件中只需写别名,而不必写出整个类路径 -->  
    <!-- <typeAliases>  
        <typeAlias alias="TestBean"  
            type="com.offcn.persist.test.dataobject.TestBean" />  
    </typeAliases> -->  
    <!-- 非注解的sql映射文件配置,如果使用mybatis注解,该mapper无需配置,但是如果mybatis注解中包含@resultMap注解,则mapper必须配置,给resultMap注解使用 -->  
     <!--
   <mappers>  
        <mapper  resource="com/offcn/mapper/GoodsDAO.xml" />
    </mappers> --> 
</configuration>  

在线演示地址:

http://www.educhenya.com:8080/student_manager
管理员账号及其密码: admin aaa
学生账号及其密码: 22 22222

运行截图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了69 篇原创文章 · 获赞 25 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40985788/article/details/103653808