基于SSH选课系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuehailin/article/details/80530006

1.使用的工具:

JDK版本:JDK1.8

数据库:mysql

工具:使用idea基于maven的java web工程

前端:部分的boostrap(很少一部分)

后端:spring+strust+hibernate

2.实现的功能:

用户分为:管理员,教室,学生三个角色。

管理员:管理员可以对教室,课程,老师等与课程有关的实体进行增删改查。

教师:教师登录系统查看自己所教授课程的课表。

学生:学生可以登录系统进行选课和退课,学生可以查看自己的课表。

3.实现思路:

这是自己第一次用ssh写一个项目,如果说比较ssm来说,我觉得ssh的hibernate用的不是那么的方便。可能因为自己使用的不熟练有关吧。尤其当学生与课程进行多对多关联的时候我觉得好恶心,我使用的方法是,让关联的两个实体比如课程用多对多的关系联系起来,在数据库中hibernate会创建学生和课程的一个中间表,里面存放的是学生表的主键和课程表的主键。其他的就是对数据库的增删改查。当然在查询的时候也会发现一些问题,就是如何将两个实体在同一个jsp页面显示出来,自己也折腾了一小会,后来自己创建一个新类专门保存两个实体需要在页面上显示的信息。可能叫dto,可以去了解一下。项目一个比较难的地方我认为是课程表生成,当学生选修了这门课的时候,入门将它放在课表的合适的位置呢?这个可能要花点时间。

4.页面展示:

登录界面

扫描二维码关注公众号,回复: 5310766 查看本文章

选课界面

课程表界面

5.部分代码展示:

   /**
     * 用户登录方法:
     * 管理员登录以后,角色为1
     * 老师登录以后,角色为2
     * 学生登录以后,角色为3
     */
    public String login() {
        //以a开头,说明登录用户是管理员,角色为1
        if (username.startsWith("a")) {
            User loginUser = userService.login(username, password);
            //把登录用户添加到session中
            ServletActionContext.getRequest().getSession().setAttribute("loginUser", loginUser);
            //把登录用户角色添加到session中
            ServletActionContext.getRequest().getSession().setAttribute("role", 1);
        }
        //以t开头,说明登录用户是管理员,角色为2
        else if (username.startsWith("t")) {
            Teacher loginTeacher = teacherService.login(username, password);
            ServletActionContext.getRequest().getSession().setAttribute("loginTeacher", loginTeacher);
            ServletActionContext.getRequest().getSession().setAttribute("role", 2);
        }else if (username.startsWith("s")){
            Student loginStudent = studentService.login(username, password);
            ServletActionContext.getRequest().getSession().setAttribute("loginStudent", loginStudent);
            ServletActionContext.getRequest().getSession().setAttribute("role", 3);
        }

        return "success";
    }
@Entity
@Table(name = "t_course")
public class Course {
    private int id;
    private String name;
    private int credit;
    private int classHour;
    private String time;
    private String week;
    private Set<Teacher> teachers;

    private Set<Classroom> classrooms;

    private Set<Student> students;

    public Course() {}

    public Course(int id, String name, int credit, int classHour) {
        this.id = id;
        this.name = name;
        this.credit = credit;
        this.classHour = classHour;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getCredit() {
        return credit;
    }

    public void setCredit(int credit) {
        this.credit = credit;
    }

    public int getClassHour() {
        return classHour;
    }

    public void setClassHour(int classHour) {
        this.classHour = classHour;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getWeek() {
        return week;
    }

    public void setWeek(String week) {
        this.week = week;
    }

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "t_teacher_course",
            joinColumns = @JoinColumn(name = "COURSE_ID"),
            inverseJoinColumns = @JoinColumn(name = "TEACHER_ID"))
    public Set<Teacher> getTeachers() {
        return teachers;
    }

    public void setTeachers(Set<Teacher> teachers) {
        this.teachers = teachers;
    }

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "t_classroom_course",
              joinColumns = @JoinColumn(name = "COURSE_ID"),
              inverseJoinColumns = @JoinColumn(name = "CLASSROOM_ID"))
    public Set<Classroom> getClassrooms() {
        return classrooms;
    }

    public void setClassrooms(Set<Classroom> classrooms) {
        this.classrooms = classrooms;
    }

    @ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "t_student_course",
            joinColumns = @JoinColumn(name = "COURSE_ID"),
            inverseJoinColumns = @JoinColumn(name = "STUDENT_ID"))
    public Set<Student> getStudents() {
        return students;
    }

    public void setStudents(Set<Student> students) {
        this.students = students;
    }

    @Override
    public String toString() {
        return "Course{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", credit=" + credit +
                ", classHour=" + classHour +
                ", time='" + time + '\'' +
                ", week='" + week + '\'' +
                ", teachers=" + teachers +
                ", classrooms=" + classrooms +
                '}';
    }
}
public class BaseDao<T> implements IBaseDao<T> {

    @Autowired
    private SessionFactory sessionFactory;

    public Session openSession(){
        return this.sessionFactory.getCurrentSession();
    }

    private Class<?> clz;
    private Class<?> getClz() {
        if(clz == null) {
            clz = (Class<?>) ((ParameterizedType)this.getClass()
                    .getGenericSuperclass()).getActualTypeArguments()[0];
        }
        return clz;
    }

    public void add(T t) {
        openSession().save(t);
    }

    public void delete(T t) {
        openSession().delete(t);
    }

    public void update(T t) {
        openSession().update(t);
    }

    public T load(int id) {
        T t = (T) openSession().load(getClz(), id);
        return t;
    }

    public T get(int id) {
        T t = (T) openSession().get(getClz(), id);
        return t;
    }

    public List<T> list(String hql, Object[] args) {
        // TODO Auto-generated method stub
        Query query = openSession().createQuery(hql);
        if(args != null) {
            for(int i = 0; i < args.length; i++) {
                query.setParameter(i, args[i]);
            }
        }
        List<T> ts = query.list();
        return ts;
    }
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.objectFactory" value="spring"/>
    <package name="default" namespace="/" extends="struts-default"
             strict-method-invocation="false">
        <!-- 基于通配符解决方案 -->
        <!-- 约定大于配置 -->
        <!-- 整合了Spring以后,action对象就是从Spring IOC容器中获取 -->
        <action name="*_*" class="{1}Action" method="{2}">
            <result>/WEB-INF/jsp/{1}/{2}.jsp</result>
            <result name="redirect" type="redirect">/{1}_list.action</result>
            <result name="selectresult">/WEB-INF/jsp/student/selectresult.jsp</result>
            <result name="doresult">/WEB-INF/jsp/course/doresult.jsp</result>
            <result name="show">WEB-INF/jsp/{1}/show.jsp</result>
        </action>
        <!-- 登录 -->
        <action name="login" class="loginAction" method="login">
            <result>/WEB-INF/jsp/main.jsp</result>
        </action>
        <!-- 顶部页面跳转 -->
        <action name="top" class="loginAction" method="top">
            <result>/WEB-INF/jsp/top.jsp</result>
        </action>
        <!-- 左部页面跳转 -->
        <action name="left" class="loginAction" method="left">
            <result name="left1">/WEB-INF/jsp/left1.jsp</result>
            <result name="left2">/WEB-INF/jsp/left2.jsp</result>
            <result name="left3">/WEB-INF/jsp/left3.jsp</result>
        </action>
        <!-- 主页面跳转 -->
        <action name="welcome" class="loginAction" method="welcome">
            <result>/WEB-INF/jsp/welcome.jsp</result>
        </action>
        <!-- 退出系统跳转 -->
        <action name="logout" class="loginAction" method="logout">
            <result>/login.jsp</result>
        </action>
    </package>

</struts>

本人小白,代码还很粗糙,我会继续优化,15天之内附上优化的代码。需要原码请留言,我看到定及时发送。如果觉得对自己的学习有帮助,请点个赞,谢谢。


猜你喜欢

转载自blog.csdn.net/yuehailin/article/details/80530006
今日推荐