JDK版本:JDK1.8
数据库:mysql
工具:使用idea基于maven的java web工程
前端:部分的boostrap(很少一部分)
后端:spring+strust+hibernate
用户分为:管理员,教室,学生三个角色。
管理员:管理员可以对教室,课程,老师等与课程有关的实体进行增删改查。
教师:教师登录系统查看自己所教授课程的课表。
学生:学生可以登录系统进行选课和退课,学生可以查看自己的课表。
这是自己第一次用ssh写一个项目,如果说比较ssm来说,我觉得ssh的hibernate用的不是那么的方便。可能因为自己使用的不熟练有关吧。尤其当学生与课程进行多对多关联的时候我觉得好恶心,我使用的方法是,让关联的两个实体比如课程用多对多的关系联系起来,在数据库中hibernate会创建学生和课程的一个中间表,里面存放的是学生表的主键和课程表的主键。其他的就是对数据库的增删改查。当然在查询的时候也会发现一些问题,就是如何将两个实体在同一个jsp页面显示出来,自己也折腾了一小会,后来自己创建一个新类专门保存两个实体需要在页面上显示的信息。可能叫dto,可以去了解一下。项目一个比较难的地方我认为是课程表生成,当学生选修了这门课的时候,入门将它放在课表的合适的位置呢?这个可能要花点时间。
选课界面
课程表界面
/**
* 用户登录方法:
* 管理员登录以后,角色为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 teachers;
private Set classrooms;
private Set 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 getTeachers() {
return teachers;
}
public void setTeachers(Set 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 getClassrooms() {
return classrooms;
}
public void setClassrooms(Set 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 getStudents() {
return students;
}
public void setStudents(Set 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 implements IBaseDao {
@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 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 ts = query.list();
return ts;
}
}
/WEB-INF/jsp/{1}/{2}.jsp
/{1}_list.action
/WEB-INF/jsp/student/selectresult.jsp
/WEB-INF/jsp/course/doresult.jsp
WEB-INF/jsp/{1}/show.jsp
/WEB-INF/jsp/main.jsp
/WEB-INF/jsp/top.jsp
/WEB-INF/jsp/left1.jsp
/WEB-INF/jsp/left2.jsp
/WEB-INF/jsp/left3.jsp
/WEB-INF/jsp/welcome.jsp
/login.jsp
本人小白,代码还很粗糙,我会继续优化,15天之内附上优化的代码。需要原码请留言,我看到定及时发送。如果觉得对自己的学习有帮助,请点个赞,谢谢。