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

运行截图:






全部评论

相关推荐

存一千万就可以进大厂实习
石圪节公社发型师:有存一千万的实力还实习个嘚,直接躺平
点赞 评论 收藏
分享
牛客583549203号:腾讯还好,况且实习而已,实习生流动性很大,属于正常现象,记得和HR委婉解释
点赞 评论 收藏
分享
头像
04-17 09:29
已编辑
湖南农业大学 后端
睡姿决定发型丫:本硕末9也是0offer,简历挂了挺多,只有淘天 美团 中兴给了面试机会,淘天二面挂,美团一面kpi面,中兴一面感觉也大概率kpi(虽然国企,但一面0技术纯聊天有点离谱吧)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务