1、 山东科技职业学院信息工程系 《SSH框架技术》项目报告 题目 酒吧管理系统 姓名 赵江鹏 陈飞呈 郑宝山 崔铭亮 专业 软件技术(服务外包) 2012年6月15日 一、 功能要求 1. *用户登录 2. *查看个人信息 3. *修改个人信息 4. *查看个人选课情况 5. *查看所有课程信息,能够选定课程 6. *退选课程 7. DIV+CSS美化页面 8. 添加查询功能:如根据课程名进行模
2、糊查询,课程开课学期进行查询 9. 国际化处理 10. 添加分页功能 其中标*者为必做功能,其他为可选功能。 二、 项目规范 1. 项目名称:StudentCourse<学号>,中间不要加空格或其他字符,如:StudentCourse1023110935 2. 访问路径与项目名相同,如:http://localhost:8080/StudentCourse1023110935/ 3. 包命名规范 studentcourse.entity 实体类 studentcourse.biz 业务逻辑接口类 studentcourse.biz.impl 业务逻辑实现类
3、 studentcourse.dao DAO接口类 studentcourse.dao.impl DAO实现类 studentcourse.web.action 各个Action类 4. 尽量书写必要的文档和注释 三、 开发流程 1.面向对象分析和设计 UML建模如下图所示: 2.给项目添加Hibernate支持,建立实体类及其所对应的映射文件 说明:你也可以选择先完成数据库的设计,再反向工程生成对应的实体类及其映射文件 3.DAO层的设计与实现 3.1通用数据库访问类HibernateUtil 方法名 功能描述 add 添加对象 delete
4、删除对象 Update 更新对象 Select 查询对象 Check 验证登陆信息 selectPage 分页查询 /** * * @author 曹胜欢 * */ public class HibernateUtil { private HibernateUtil() { } private static SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } p
5、ublic void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } // 得到session public static Session getSession() { return sessionFactory.openSession(); } // 增加操作 public static boolean add(Object entity) { Session s = null; Transacti
6、on tran = null; boolean temp = false; try { s = HibernateUtil.getSession(); tran = s.beginTransaction(); s.save(entity); mit(); temp = true; } catch (Exception e) { e.printStackTrace(); tran.rollback(); } return temp; } 代码:
7、 // 删除操作 public static boolean delete(Object entity) { Session s = null; Transaction tran = null; boolean temp = false; try { s = HibernateUtil.getSession(); tran = s.beginTransaction(); System.out.println(entity == null); s.delete(entity); mit(
8、); temp = true; } catch (Exception e) { e.printStackTrace(); tran.rollback(); } return temp; } // 更新操作 public static boolean update(Object entity) { Session s = null; Transaction tran = null; boolean temp = false; try { s = HibernateUtil.getSession();
9、 tran = s.beginTransaction(); s.merge(entity); mit(); temp = true; } catch (Exception e) { tran.rollback(); e.printStackTrace(); } return temp; } 3.2 StudentDAO接口 方法名 功能描述 checkStu 判断所要添加的学号是否存在 exists 获得对应的页码
10、的数据集合 pageList 获得对应id的学生对象 getStu 修改学生信息 update 删除学生 delete 添加学生 3.3 StudentDAOImpl实现类: 方法名 功能描述 checkStu 判断所要添加的学号是否存在 exists 获得对应的页码的数据集合 pageList 获得对应id的学生对象 getStu 修改学生信息 update 删除学生 delete 添加学生 3.4CourseDAO接口 方法名 功能描述 pageList 获得分页查询的当前页的结果 getCour 获得对应id的课程对象 g
11、etCourse 获得学生的选课的集合 delete 删除课程 updateCour 修改课程信息 addCour 添加课程 3.5 CourseDAOImpl实现类: 方法名 功能描述 pageList 获得分页查询的当前页的结果 getCour 获得对应id的课程对象 getCourse 获得学生的选课的集合 delete 删除课程 updateCour 修改课程信息 addCour 添加课程 3.6AdminerDAO接口 方法名 功能描述 checkAdminer 验证登陆的管理员信息是否正确 exists 判断添加的管理员的
12、用户名是否存在 addAdmin 添加管理员 getStu 获得对应id的学生对象 update 更新管理员信息 3.7 AdminerDAOImpl实现类: 方法名 功能描述 checkAdminer 验证登陆的管理员信息是否正确 exists 判断添加的管理员的用户名是否存在 addAdmin 添加管理员 getStu 获得对应id的学生对象 update 更新管理员信息 下面看一下具体的源码: StudentDao.java /** * * @author 曹胜欢 * */ public class StudentDao
13、implements StudentDaoInter { public Student checkStu(Student stu) { Object obj = HibernateUtil.check( "from Student s where s.idCard=? and s.password=? ", new String[] { stu.getIdCard(), stu.getPassword() }); return obj != null ? (Student) obj : null;
14、 } public boolean exists(String idCard){ Object obj=HibernateUtil.check("from Student a where a.idCard=? " , new String[]{idCard}); return obj==null?false:true; } AdminerDao.java public class AdminerDao im
15、plements AdminDaoInter { public Adminer checkAdminer(Adminer admin) { Object obj=HibernateUtil.check("from Adminer a where a.username=? and a.password=? " , new String[]{admin.getUsername(),admin.getPassword()}); return obj!=null?(Adminer)obj:null; } public boolean exist
16、s(String username){ Object obj=HibernateUtil.check("from Adminer a where a.username=? " , new String[]{username}); return obj==null?false:true; } /* (non-Javadoc) * @see com.bzu.dao.impl.AdminDaoInter#addAdmin(java.lang.Object) */ public boolean addAdmin(Object
17、 entity) { return HibernateUtil.add(entity); } 4. 添加项目支持 四、项目模块介绍 1.前台模块 主要功能: 1.1学生登陆 1.2个人信息管理 1.2.1:个人信息显示 1.2.2:个人信息修改 1. 3选课信息管理 1.3.1已选课程列表 1.4课表信息管理 1.4.1课表显示 1. 1学生登陆页面: 代码: 页面显示
18、 1.2.1个人信息显示: 代码: 页面显示: 1.2.2修改个人信息 代码: 页面显示 1.3.1已选课程列表 代码: 页面显示: 1.4.1课程列表显示 代码: 页面显示: 总体功能说明: 1. 学生登陆功能,如果用户名和密码不正确可以给用户在页面有好提示 2. 学生信息列表功能可以显示出当前登录学生的基本信息 3. 学生信息修改功能可以修改当前登录学生的信息 4. 已选课程显示功能可以显示当前登录学生所选课程 5. 在已选课程列表中可以进行退选 6. 课程列表功能可以显示出
19、当前所有课程的列表 7. 在课程列表中可以进行选课 8. 在课程列表中支持模糊查询和分页功能 整体页面显示: 2后台管理模块 2.1管理员登录功能 2.2管理员信息显示 2.3添加管理员:这里用到了ajax异步验证技术来验证用户名是否存在 2.4更新管理员信息 2.5学生列表 2.6学生添加 2.7课程列表 2.8课程添加 主要代码示例: Ajax异步验证主要代码: 课程列表 更新管理员信息 主要页面显示: 添加管理员 学生列表 添加学生 利用模式窗口形式修改学生信息 总体后台页面显示 最后一个功能就是在用户首页,用户可以选择是按管理员登陆还是学生登陆:如下图 主要遇到的问题: 1. 在利用乐观锁来解决事务并发所带来的并发问题时,配置了乐观锁以后,更新学生信息的时候提示另一个事务正在读取这个对象,报错异常 解决办法:去掉乐观锁,不让他限制事务的并发 2. 加载页面列表信息时,页面加载缓慢,甚至有时页面加载不出来,导致服务器死掉。 解决办法:配置二级缓存,一次加载数据信息的时候,以后再加载数据信息,不需要再去数据库里面去找,直接去二级缓存里找,大大提高了查询速度。






