版权声明:本文为博主原创文章,未经博主允许不得转载。 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天之内附上优化的代码。需要原码请留言,我看到定及时发送。如果觉得对自己的学习有帮助,请点个赞,谢谢。