学生信息管理系统web版(Struts2+spring+hibernate)

23 篇文章 0 订阅
15 篇文章 0 订阅

一、需求分析

实现一个可以完成前后端的基于ssh框架的学生管理系统,要求由老师登录,可以看见老师管理的学生,以及对学生进行增删改查的操作。

二、数据库设计

1、学生表设计

CREATE TABLE `student_info` (
  `uuid` varchar(64) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `schoolId` int(11) DEFAULT NULL,
  `gender` varchar(20) DEFAULT NULL,
  `className` varchar(20) DEFAULT NULL,
  `teacherId` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

学生表保存了学生信息以及其对应老师的ID,由于看了阿里巴巴开发手册,其建议不使用外键,便参考进去。

2、老师表设计

CREATE TABLE `teacher_info` (
  `id` varchar(20) NOT NULL,
  `password` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

三、技术分析

由struts2作为controller层,控制页面数据的请求与响应,hibernate作为dao层,对数据库做持久化操作,spring整合service层,使用jsp作为前端技术。前端是比较简单的jsp,下面不再赘述。

项目目录架构如下:

四、登陆功能实现

(1)form表单提交到struts2的action中。

<form action="${pageContext.request.contextPath}/teacher_login" method="post">
<div id="login_div">
	<h2>用户登录</h2>

(2)配置struts2的action

<action name="teacher_login" class="com.sinuonan.controller.LoginAction" method="loginBy">
            <result name="success">/student_list.jsp</result>
            <result name="error">/login.jsp</result>
        </action>

(3)action的逻辑代码

@Controller
public class LoginAction extends ActionSupport {
    private String id;
    private String password;


    @Resource(name = "teacherService")
    private TeacherService teacherService;
    @Resource(name = "StudentService")
    private StudentService studentService;

    public void setId(String id) {
        this.id = id;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    public String login(){
        return SUCCESS;
    }

    public String loginBy(){
        String t_password = teacherService.findPassowrdByid(id);
        if (password.equals(t_password)){
            List<StudentInfo> list = studentService.findStudentByTeacherid(id);
            HttpServletRequest request = ServletActionContext.getRequest();
            //teacher登陆成功后将id存入session中
            request.getSession().setAttribute("id",id);
            request.setAttribute("list",list);
            return SUCCESS;
        }else {
            this.addActionError("用户名或密码错误");
            return ERROR;
        }
    }
}

五、增删改查功能实现

增删改查的配置与登陆功能的配置基本类似。

逻辑代码实现:

(1)增加

@Controller
public class addStudentAction extends ActionSupport {
    private String name;
    private String gender;
    private String className;
    private Integer schoolId;

    @Resource(name = "StudentService")
    private StudentService service;

    public void setName(String name) {
        this.name = name;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public void setSchoolId(Integer schoolId) {
        this.schoolId = schoolId;
    }

    /**
     * 添加学生
     * @return
     */
    public String addStudent(){
        StudentInfo info = new StudentInfo();
        info.setClassName(className);
        info.setGender(gender);
        info.setSchoolId(schoolId);
        info.setName(name);
        //从session中获得teacher的id
        String teacherId = (String) ServletActionContext.getRequest().getSession().getAttribute("id");
        info.setTeacherId(teacherId);
        info.setUuid(UUID.randomUUID().toString());

        service.addStudent(info);

        return SUCCESS;
    }
    public String addStudentGo(){
        return SUCCESS;
    }
}

(2)修改

@Controller
public class updateAction extends ActionSupport {
    private String uuid;
    private String name;
    private String gender;
    private String className;
    private Integer schoolId;

    public void setName(String name) {
        this.name = name;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public void setClassName(String className) {
        this.className = className;
    }
    public void setSchoolId(Integer schoolId) {
        this.schoolId = schoolId;
    }
    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    @Resource(name = "StudentService")
    private StudentService service;



    public String update(){
        StudentInfo info = new StudentInfo();
        info.setSchoolId(schoolId);
        info.setUuid(uuid);
        info.setGender(gender);
        info.setClassName(className);
        info.setName(name);
        info.setTeacherId((String) ServletActionContext.getRequest().getSession().getAttribute("id"));
        service.updateStudent(info);
        return SUCCESS;
    }

    public String updateGo(){
        List<StudentInfo> students = service.findStudentByUuid(uuid);
        StudentInfo st = students.get(0);
        ServletActionContext.getRequest().setAttribute("st",st);
        return SUCCESS;
    }
}

(3)删除

@Controller
public class deleteAction extends ActionSupport {
    private String name;
    @Resource(name = "StudentService")
    private StudentService service;

    public void setName(String name) {
        this.name = name;
    }
    public String deleteByName(){
        service.deleteStudentByName(name);
        return SUCCESS;
    }
}

(4)查找

@Controller
public class ShowAction extends ActionSupport {
    @Resource(name = "StudentService")
    private StudentService studentService;
    public String showView(){
        //从session中获得id,用于查询
        String name = (String) ServletActionContext.getRequest().getSession().getAttribute("id");
        List<StudentInfo> list = studentService.findStudentByTeacherid(name);
        ServletActionContext.getRequest().setAttribute("list",list);
        return SUCCESS;
    }
}

六、dao层的实现

学生dao:

public class StudentDaoImpl extends HibernateDaoSupport implements StudentDao {

    public void addStudent(StudentInfo st) {
        this.getHibernateTemplate().save(st);
    }

    public void updateStudent(StudentInfo st) {
        this.getHibernateTemplate().update(st);
    }

    public void deleteStudentByUuid(String uuid) {
        List<StudentInfo> list = (List<StudentInfo>) this.getHibernateTemplate().find("from StudentInfo where uuid=?0", uuid);
        StudentInfo info = list.get(0);
        this.getHibernateTemplate().delete(info);
    }

    public StudentInfo findStudentByName(String name) {
        DetachedCriteria criteria = DetachedCriteria.forClass(StudentInfo.class);
        criteria.add(Restrictions.eq("name",name));
        List<StudentInfo> list = (List<StudentInfo>) this.getHibernateTemplate().findByCriteria(criteria);
        return list.get(0);
    }

    public List<StudentInfo> findStudentByTeacherid(String id) {
        String hql = "from StudentInfo where teacherId=?0";
        List<StudentInfo> list = (List<StudentInfo>) this.getHibernateTemplate().find(hql,id);
        if (list==null || list.size()==0){
            return null;
        }else {
            return list;
        }
    }

    public void updateStudentByname(String name, Integer schoolId) {
        StudentInfo student = findStudentByName(name);
        student.setSchoolId(schoolId);
        this.getHibernateTemplate().update(student);
    }

    public void deleteStudentByName(String name) {
        StudentInfo student = findStudentByName(name);
        this.getHibernateTemplate().delete(student);
    }

    public List<StudentInfo> findStudentByUuid(String uuid) {
        DetachedCriteria criteria = DetachedCriteria.forClass(StudentInfo.class);
        criteria.add(Restrictions.eq("uuid",uuid));
        List<StudentInfo> list = (List<StudentInfo>) this.getHibernateTemplate().findByCriteria(criteria);
        return list;
    }
}

七、其他的一些细节

1.request.setAttribute在jsp页面无法获取

楼主在配置struts2时,不小心把type配置成redirect,重定向的话,request就失效了,配置成请求转发才行。

2.hibernate除了find方法外其他都报错

没有开启事务,其他三个方法默认为readonly。

<!--定义事务-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!--开启事务注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

八、项目git地址

https://github.com/sustly/student.git

  • 7
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
基于SSH(struts-spring-hibernate)开发的学生成绩管理系统,附完整报告,SQL文件,环境为:eclipse+mysql+jdk1.8+tomcate8。运行均能通过,可以作为期末大作业。亲测好用,如果调不通的话,可以私信我~~ 该软件的主要功能是,可以选择多门课程学习,课程类别是必修课或选修课,每门课程由一位专业教师授课,学期末教师给出学生成绩,成绩由平时成绩、实验成绩、理论成绩组成。 (1)学生基本情况录入模块: 主要功能用来对学生的基本信息进行收集和录入。在学生信息保存在系统中的前提下,成绩录入需要输入学生资料,比如班级,学号,姓名。 (2)课程基本情况录入模块: 主要功能用来对课程的基本信息进行收集和录入。在课程信息保存在系统中的前提下,成绩录入需要输入课程资料,比如课程号,学时,学分。 (3)成绩基本情况录入模块: 主要功能用来对学生的成绩进行收集和录入。在准确录入学生资料后,就可以对该学生的各科成绩进行录入。 (4)按学生学号查找并显示学生资料模块: 主要功能是用来查找学生资料。在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料信息 。 (5)按课程号查找并显示学生资料模块: 主要功能是用来查找课程资料。在系统保存了某课程资料的前提下,想要查找该课程资料,可以输入该课程号,这样系统就会显示该课程信息 。 (6)修改删除该学生资料模块 主要功能是用来删除学生资料,在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生姓名,系统查找该学生资料后,就可以删除了。由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化。 (7)修改删除课程资料模块 主要功能是用来修改删除课程资料,在系统保存课程资料的前提下,想修改删除某课程的资料,可以直接点击删除,系统查找该课程资料后,就可以删除了。 (8)删除成绩资料模块 主要功能是用来删除成绩资料,在系统保存课程资料的前提下,想删除某项成绩的资料,可以直接点击删除,系统查找该项成绩后,就可以删除了。 (9)用户更改密码 主要功能是用来对管理员用户提供密码修改操作.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值