jsp作业设计Word下载.docx
《jsp作业设计Word下载.docx》由会员分享,可在线阅读,更多相关《jsp作业设计Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
班级数据实体:
用于记录班级的基本信息,包括班级号、教师、课程、教室、和上课时间。
这些数据由管理员进行录入和维护(如果与学校排课系统等结合,数据就由那些系统来提供)。
以上的5个实体是基本的数据实体。
作为学生课程及成绩管理系统,还要记录学生选课和学分情况,因此又有如下的实体:
学生课程及成绩数据实体:
包括学生号、所上课班级、是否被老师接收和所给学分。
根据以上的分析,设定每一个数据实体都有一个ID作为它的惟一标识,那么这六个数据实体的关联关系如图13.28所示(其中管理员数据实体相对独立,这里没有列出关系图)。
图13.28
数据实体关系图
基于上面的设计,开始设计表,表与表之间相互关联,共同存储着系统所需要的数据。
在设计数据库表的过程中,一般要遵循几条原则:
数据库的一个表最好只存储一个实体或对象的相关信息,不同的实体最好存储在不同的数据表中,如果实体还可以再划分,实体的划分原则是,划分后得实体比当前系统要开发实体的复杂度小;
数据表的信息结构一定要合适,表的字段的数量一般不要过多;
扩充信息和动态变化的信息一定要分别放在不同的表里;
多对多的表关系尽量不出现。
设计数据库表及表间关系,通过下图13.29表示。
图13.29
数据库表关系图
13.5.2
创建数据库
首先要创建一个数据库,可以使用MySQL的辅助图形化界面工具SQLyog,这个工具的下载安装已经在前面章节介绍过了,如果读者还不熟悉MySQL或SQLyog这个工具,可以参考前面的相关章节。
使用SQLyog连接到MySQL,然后创建数据库STU,并为新建的数据库添加用户并设置权限(单击菜单【Tools】|【UserManager】|【Adduser】或直接按快捷键Ctrl+U)。
可以将对于这个新建数据库的所有权限全都赋给这个用户。
接下来要在这个数据库中创建数据表,由前面的分析得知这个系统中需要建立6张数据表,它们分别为
管理员表(admin):
用于存放管理员用户的数据记录。
学生信息表(student):
用于存放学生的基本信息。
教师信息表(teacher):
用于存放所有上课教师的基本信息。
课程信息表(course):
用于存放所有开课课程的数据记录基本信息。
班级信息表(classes):
用于存放所有与班级相关的信息。
学生课程及成绩表(enrol):
用于存放所有学生课程及成绩信息。
这6张数据表的字段说明如表13.1~表13.6所示。
表13.1
admin管理员表
序号
字段
含义
类型
1
Id
管理员编号
Int
2
Name
姓名
Varchar
3
Password
密码
表13.2
student学生信息表
学生编号
4
Jiguan
籍贯
5
Department
所在系
6
Sex
性别
7
mark
学分
8
tel
联系电话
9
email
电子邮箱
classes班级信息表
id
班级编号
tea_id
cour_id
room_id
教室号
cour_time
上课时间
表13.3
course课程信息表
课程编号
name
课程名
prepare
预选课程
dep
表13.4
teacher教师信息表
教师编号
title
职称
pssword
表13.6
enrol学生课程及成绩信息表
stu_id
class_id
accept
是否被接收
score
成绩
13.5.3
创建表的脚本文件
根据数据库字段设计,编写的创建数据库表的SQL语句如下:
创建数据表admin的SQL语句:
CREATETABLE`admin`(
`id`int(16)NOTNULL,
`name`varchar(32)defaultNULL,
`password`varchar(32)defaultNULL,
PRIMARYKEY
(`id`)
)
创建数据表student的SQL语句:
CREATETABLE`student`(
`id`varchar(32)NOTNULL,
`jiguan`varchar(32)defaultNULL,
`department`varchar(32)defaultNULL,
`sex`varchar(32)defaultNULL,
`mark`int(11)defaultNULL,
`tel`varchar(32)defaultNULL,
`phone`varchar(32)defaultNULL,
`email`varchar(32)defaultNULL,
创建数据表teacher的SQL语句:
CREATETABLE`teacher`(
`title`varchar(32)defaultNULL,
创建数据表course的SQL语句:
CREATETABLE`course`(
`prepare`varchar(32)defaultNULL,
`dep`varchar(32)defaultNULL,
创建数据表classes的SQL语句:
CREATETABLE`classes`(
`tea_id`varchar(32)defaultNULL,
`cour_id`varchar(32)defaultNULL,
`room_id`varchar(32)defaultNULL,
`cour_time`varchar(32)defaultNULL,
(`id`),
KEY`FK_Reference_4`(`tea_id`),
KEY`FK_classes`(`cour_id`),
CONSTRAINT`classes_ibfk_1`FOREIGNKEY(`cour_id`)REFERENCES`course`(`id`),
CONSTRAINT`FK_Reference_4`FOREIGNKEY(`tea_id`)REFERENCES`teacher`(`id`)
创建数据表enrol的SQL语句:
CREATETABLE`enrol`(
`class_id`varchar(32)defaultNULL,
`stu_id`varchar(32)defaultNULL,
`accept`varchar(32)defaultNULL,
`score`varchar(32)defaultNULL,
KEY`FK_enrol`(`class_id`),
KEY`FK_Reference_2`(`stu_id`),
CONSTRAINT`enrol_ibfk_1`FOREIGNKEY(`class_id`)REFERENCES`classes`(`id`),
CONSTRAINT`enrol_ibfk_2`FOREIGNKEY(`stu_id`)REFERENCES`student`(`id`)
为了方便后面的开发,在这里先象数据库中admin表里插入一条数据,SQL语句如下:
insertinto`stu`.`admin`(`id`,`name`,`password`)values('
1'
'
admin'
13.5.4
目录和包结构
在进行程序设计和开发之前,要设计目录和包的结构。
良好的结构会使代码逻辑清楚且容易阅读。
一般一个设计良好的结构都有其共同的特点,就是逻辑清楚。
本系统的目录结构如图13.30所示。
图13.30
目录及包结构
在这个目录结构中,MyStuMan是项目的根目录也是项目的名称。
其下src目录用于存放原文件,所有的Java类都定义在这个文件夹下。
WebRoot目录是发布时网站的根目录,其下放置JSP页面,WEB-INF目录下存放系统的配置文件,如web.xml等。
这个目录结构是通用的目录结构,读者可以根据需要进行相应的修改。
13.5.5
定义HibernateUtil
本系统采用Struts+Hibernate技术进行开发,由Hibernate进行数据对象的操作,这里定义一个HibernateUtil类负责初始化Hibernate。
由它创建全局的SessionFactory实例,并且提供创建Session实例、关闭Session实例以及打开/关闭事务以及重新创建SessionFactory实例的实用方法。
而且所有方法均为静态方法。
HibernateUtil类是用2个ThreadLocal类型的属性以保持在一次请求过程中共享单一的Session和Trasaction实例,Session和Trasaction实例可以跨越多个一次请求的多个方法,这有助于实现集合属性的延迟加载等Hibernate特性。
HibernateUtil代码如下:
packagecom.stuman.dao.hibernate;
importorg.hibernate.HibernateException;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
publicclassHibernateUtil{
privatestaticfinalSessionFactorysessionFactory;
static{
try{
//创建SessionFactory
sessionFactory=newConfiguration().configure()
.buildSessionFactory();
}catch(Throwableex){
ex.printStackTrace();
System.out.println("
InitialSessionFactorycreationfailed."
);
thrownewExceptionInInitializerError(ex);
}
publicstaticfinalThreadLocaltLocalsess=newThreadLocal();
publicstaticfinalThreadLocaltLocaltx=newThreadLocal();
//取得session
publicstaticSessioncurrentSession(){
Sessionsession=(Session)tLocalsess.get();
//打开一个新的session,如果当前的不可用.
if(session==null||!
session.isOpen()){
session=openSession();
tLocalsess.set(session);
}catch(HibernateExceptione){
//抛出HibernateException异常
e.printStackTrace();
returnsession;
//关闭session
publicstaticvoidcloseSession(){
tLocalsess.set(null);
if(session!
=null&
&
session.isOpen()){
session.close();
//抛出InfrastructureException异常
//开始事务
publicstaticvoidbeginTransaction(){
//声明Transaction类型对象tx,并付初值
Transactiontx=(Transaction)tLocaltx.get();
if(tx==null){
tx=currentSession().beginTransaction();
tLocaltx.set(tx);
//抛出InfrastructureException异常