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