资源描述
1、 相关技术介绍
1.1 RDBMS介绍
SQL Server 是一个关系数据库管理系统它最初是由Microsoft Sybase 和Ashton-Tate三家企业共同开发于1988 年推出了第一个OS/2 版本在Windows NT 推出后Microsoft和Sybase 在SQL Server 开发上就分道扬镳了Microsoft 将SQL Server 移植到Windows NT 系统上专注于开发推广SQL Server Windows NT 版本Sybase 则较专注于SQL Server在UNIX 操作系统上应用在本书中介绍是Microsoft SQL Server 以后简称为SQL Server或MS SQL Server 。
SQL Server 是Microsoft 企业推出SQL Server 数据库管理系统最新版本该版本继承了SQL Server 7.0 版本优点同时又比它增加了很多更优异功效含有使用方便可伸缩性好和相关软件集成程度高等优点可跨越从运行Microsoft Windows 98 膝上型电脑到运行Microsoft Windows 大型多处理器服务器等多个平台使用。
1.2 Eclipse介绍
Eclipse是一个可扩展开放源代码IDE。11月,IBM企业捐出价值4,000万美元源代码组建了Eclipse联盟,并由该联盟负责这种工具后续开发。集成开发环境(IDE)常常将其应用范围限定在“开发、构建和调试”周期之中。为了帮助集成开发环境(IDE)克服现在不足,业界厂商合作创建了Eclipse平台。Eclipse许可在同一IDE中集成来自不一样供给商工具,并实现了工具之间互操作性,从而显著改变了项目工作步骤,使开发者能够专注在实际嵌入式目标上。
Eclipse框架这种灵活性起源于其扩展点。它们是在XML中定义已知接口,并充当插件耦合点。扩展点范围包含从用在常规表述过滤器中简单字符串,到一个Java类描述。任何Eclipse插件定义扩展点全部能够被其它插件使用,反之,任何Eclipse插件也能够遵从其它插件定义扩展点。除了解由扩展点定义接口外,插件不知道它们经过扩展点提供服务将怎样被使用。
利用Eclipse,我们能够将高级设计(可能是采取UML)和低级开发工具(如应用调试器等)结合在一起。假如这些相互补充独立工具采取Eclipse扩展点相互连接,那么当我们用调试器逐一检验应用时,UML对话框能够突出显示我们正在关注器件。实际上,因为Eclipse并不了解开发语言,所以不管Java语言调试器、C/C++调试器还是汇编调试器全部是有效,并能够在相同框架内同时瞄准不一样进程或节点。
Eclipse最大特点是它能接收由Java开发者自己编写开放源代码插件,这类似于微软企业Visual Studio和Sun 微系统企业NetBeans平台。Eclipse为工具开发商提供了愈加好灵活性,使她们能愈加好地控制自己软件技术。Eclipse 联盟已经宣告将在中期公布其3.0版软件。这是一款很受欢迎java开发工具,这中国用户越来越多,实际上实用它java开发人员是最多。缺点就是较复杂,对初学者来说,了解起来比较困难。
2、 需求分析
2.1数据流图
学生或管理员等
教学管理系统
管理员
增删改信息
取得信息
取得信息
选课
老师师
取得信息
管理成绩
说明:
1、用户请求包含:
(1) 学生基础信息管理
新生信息录入。
学生信息修改:按学号查询出某学生信息并做信息修改。
(2) 系基础信息管理:系基础信息输入、修改、删除
(3) 课程信息管理:课程信息输入、修改、删除
(4) 教职员信息管理:教职员信息输入、修改、删除
(5) 选课管理:
每学期所选课程学分不能超出15分。
学生能够同时选修一门或多门课程。
能够同时为多个学生选修某一门或某几门课程。
删除和修改选课信息。
(6) 成绩管理
按课程输入和修改成绩。
按学生输入和修改成绩。
(7) 信息查询
按学号、姓名、系号查询学生基础信息。
按职员号、姓名、系号查询教职员基础信息。
按系号、系名称查询系基础信息。
按课程号、课程名称、上课老师姓名查询课程基础信息。
按学号、学生姓名、课程号、课程名称、上课老师姓名、系号查询学生成绩,内容包含课程基础情况。若查询包含多门课程,则按课程分组。每门课程按总评成绩从高分到低分给出选修该门课程全部学生成绩(平时成绩、考试成绩和总评成绩)。
(8) 统计报表
成绩记录表,内容包含课程基础信息(课程号、课程名称、任课老师号、课时、学分、上课时间、上课地点、考试时间)、选课学生名单(学号、姓名、性别),每个学生平时成绩(空格)、考试成绩(空格)和总评成绩(空格),按学号排序:
次序输出全部课程成绩记录表。
按课程号、课程名称、老师姓名输出对应课程成绩记录表。
2、以上用户请求经应用程序转化,化为对数据库中对应表或视图操作,数据库再把处理结果(或全部是错误信息)返回结应用程序。
3、应用程序把结果返回给用户,该结果可能为一个对表操作结果(如插入,删除等),也可能为一个查询结果,甚至可能为一个错误信息。
2.2数据字典
依据题目标需求,教学系统关键是对学生,教职员,学院,课程,成绩等管理。由此分析得到以下数据结构:
数据库表结构设计,数据项以下,表名分别为:users, score, department, student, teach_job, course:
2.3安全性和完整性要求
安全性和完整性要求:
经过设置外键,建立它们之间关系,并使它们级联更新相关字段,级联删除相关统计。对于组成了环级联更新或删除,而不能建立级联更新或删除,经过建立触发器,使得它们保持数据完整性。经过不一样权限人登录而设置其对数据增删改权限增强数据安全性。
本系统外键设置和级联操作有:外键:stuent表depth_id。 course表t_id。
score表stu_id和c_id等。因为score表两个键若全部级联操作会组成环,所以级联不成功。所以在这里建立两个触发器替换级联操作,从而实现数据库完整性。
3、 概念结构设计
3.1 E-R图
系
系号
系名称
系介绍
属于
1
m
教 师
职员号
姓名
性别
生日
系号
职称
方向
拥 有
1
学 生
m
学号
姓名
性别
出生年月
入学成绩
系号
讲 授
m
n
课程
课程号
课程名
职员号
课时
学分
上课时间
上课地点
考试时间
选修
m
n
成绩
p
学号
课程号
成绩
ER图
4、 逻辑结构设计
4.1 关系模型
4.1.1 关系模型设计
学生(学号、姓名、性别、出生日期、入学成绩、所在系号、密码)
老师(职员号、姓名、性别、出生年月、所在系号、职称、专业及教学方向)
系(系号、系名称、系介绍)
课程(课程号、课程名称、任课老师号、课时、学分、上课时间、上课地点、考试时间)
成绩(学号、课程号、平时成绩、考试成绩、总评成绩)
拥有(学号、系号)
属于(职员号、系号)
讲授(职员号、课程号、上课时间)
选修(学号、课程号、上课时间)
4.2 用户子模式
成绩视图(学号、学生姓名、老师号、老师姓名、课程号、上课时间、课程名、
平时成绩、考试成绩、总评成绩、)
选课视图(学号、课程号、上课时间、平时成绩、考试成绩、总评成绩、课程名、课时、学分)
统计视图(课程号、上课时间、课程名称、任课老师号、课时、学分、上课地点、考试时间、学号、学生姓名、学生性别、平时成绩、考试成绩、总评成绩)
历史表
学生表
系表
课程表
老师表
成绩表
学生号
学生号
老师号
系
号
课程号
学生号
上课时间
课程号
上课时间
选课视图
成绩视图
统计视图
4.3 安全性
安全性实现关键是经过应用程序来实现,在程序中设定一个检验用户名和密码机构,用户要进入系统就先要输入授权了用户名和密码方能进入。
5、 数据库物理设计
5.1 建立索引
为各个表主码建立索引。
学生(学号)
老师(职员号)
系(系号)
课程(课程号、上课时间)
成绩(学号、课程号)
5.2 数据库存放位置
数据存放和数据处理
在综合考虑存取时间,存放空间利用率,维护代价3个方面原因,进行权衡,选择折中方案。将易变部分和稳定部分、常常存取部分和存取频率较低部分分开存放。
5.3 系统配置
(1) Windows XP
(2) MicorSoft SQL Server (必需升级到SP3)
(3) Eclipse开发环境
6、 数据库实施
6.1 创建数据库及数据对象(括号中为对应SQL脚本文件)
1、 创建数据库对象: create database teach;
2、 创建表过程以下:
create table users(user_name varchar(15) not null,
password varchar(15),
popedom tinyint not null);
create table department(depth_id smallint primary key, depth_name char(14),
discription varchar(50));
create table teach_job(t_id int primary key, t_name char(8), sex char(2),
birthday smalldatetime,
depth_id smallint foreign key references department(depth_id),
job char(10), speciality char(16), direction char(16));
create table course(c_id smallint primary key, c_name char(16) not null,
t_id int foreign key references teach_job(t_id), credit smallint,
period smallint, class_time smalldatetime,
class_area char(10), exam_time smalldatetime);
create table student(stu_id char(6) primary key, s_name char(8),
birthday smalldatetime, score int,
depth_id smallint foreign key references department(depth_id));
create table score(stu_id char(6), c_id smallint, u_score int, exam_score int,
total int, primary key(stu_id,c_id));
6.2 数据备份和恢复方案
事务故障恢复是由系统自动完成,对用户透明。系统故障恢复由系统重新开启时自动完成,不需要用户干预。介质故障恢复则由人干预完成,方法为重装数据库,然后重做已完成事务。
1、数据库备份方案:
<1>每个月进行一次数据库完整备份,包含全部数据及数据库对象。速度较慢,占用大量磁盘空间。应该在整个数据库不进行其它事务操作时候备份能够提升数据备份速度。
<2>天天进行事务日志备份,事务日志备份是指对数据库发生事务进行备份,包含上次进行事务日志备份,差异备份和数据库完全备份以后全部已经完成事务。所需时间和磁盘空间要求较少
<3>每小时进行差异备份,是备份一次数据备份以来数据改变。
a) 恢复处理方案:
先恢复最近一次数据库备份,接着进行差异备份恢复,最终进行事务日志血仇恢复。
6.3 用户界面设计和实现及相关应用程序编码
本系统程序代码结构以下图所表示:关键是四个包:
1〉其中中frame包中包含一个layout包。frame包关键是视图层代码,主界面,登录界面,多种操作界面全部在其中。另外包含一个包layout,在其中有一个类,用于网格组布局封装了网格组布局部分代码。在MyAction中封装是主窗口里面全部菜单事件。
2〉在model包中关键处理是模型层,对数据操作封装其中。
3〉query一个类包含了对学生信息查询。
4〉另外在util中包含是对数据库全部操作。其中有对数据库更改,把数据库数据和表格模型相关联起来等操作。
主界面以下所表示:
〈5〉关键代码以下:因为代码太多,以下只写出极少一部分代码
1》对数据库操作:
public class ConneJdbc {
protected static Connection connection = null;
private Connection con = null;
private ResultSet rs = null;
private ResultSetMetaData rsmd = null;
public ConneJdbc() {
try {
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
connection = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=teaching ",
"sa", "");
} catch (java.lang.ClassNotFoundException classnotfound) {
classnotfound.printStackTrace();
} catch (java.sql.SQLException sql) {
sql.printStackTrace();
}
}
public Connection getCon() {
return connection;
}
public Vector selectSql(String sql) {
Vector vdata = new Vector();
try {
rs = connection.prepareStatement(sql).executeQuery();
rsmd = rs.getMetaData();
while (rs.next())
vdata.addElement(rs.getObject(1));
} catch (SQLException e) {
e.printStackTrace();
}
return vdata;
}
public String selectOne(String sql) {
ResultSet rs = null;
ResultSetMetaData rsmd = null;
try {
rs = connection.prepareStatement(sql).executeQuery();
rsmd = rs.getMetaData();
if (rs.next())
return (String)rs.getObject(1);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public boolean inTable(String user, String pa) throws SQLException {
Statement stmt = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "select password from users " +
"where user_name='" + user +"' and password='"
+ pa + "'";
rs = connection.prepareStatement(sql).executeQuery();
if(rs.next())return true;
else return false;
}
}
2》表格模型处理:
public class SqlTableModel extends DefaultTableModel {
private Connection con = null;
private ResultSet rs = null;
private ResultSetMetaData rsmd = null;
public SqlTableModel(String sqlStr, String[] name) {
con = new ConneJdbc().getCon();
try{
rs = con.prepareStatement(sqlStr).executeQuery();
rsmd = rs.getMetaData();
for(int i=0; i<rsmd.getColumnCount(); i++) {
addColumn(name[i]);
}
while(rs.next()){
Vector vdata = new Vector();
for ( int i = 1 ; i <= rsmd.getColumnCount() ; i ++){
vdata.addElement(rs.getObject(i));
}
addRow(vdata);
}
}catch(java.sql.SQLException sql){
sql.printStackTrace();
}finally {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3)Updatabase一部分代码:
public class UpdateDatebase extends ConneJdbc {
private Statement stmt = null;
private PreparedStatement pstmt = null;
private String infoStr = null;
private String sql;
public UpdateDatebase() {
}
public boolean insert(DepData data) throws SQLException {
String sql = "insert into department (depth_name,discription) values ('"
+ data.getDepth_name() + "','" + data.getDiscription() + "')";
pstmt = connection.prepareStatement(sql);
pstmt.execute();
return true;
}
public boolean insert(StuData data) throws SQLException {
sql = "insert into student values ('"
+ data.getStu_id() + "','" + data.getS_name() + "','"
+ data.getSex() + "','" + data.getBirthday() + "',"
+ data.getScore() +"," + data.getDepth_id() + ")";
pstmt = connection.prepareStatement(sql);
pstmt.execute();
return true;
}
public boolean insert(Teadata data) throws SQLException {
sql = "insert into teach_job values ("
+ data.getT_id() + ",'" + data.getT_name() + "','"
+ data.getSex() + "','" + data.getBirthday() + "',"
+ data.getDepth_id() +",'" + data.getJob() + "','"
+data.getSpeciality() + "','"+ data.getDirection() + "')";
pstmt = connection.prepareStatement(sql);
pstmt.execute();
return true;
}
public boolean insert(CourseData data) throws SQLException {
sql = "insert into course (c_name,t_id,credit,period,class_time," +
"class_area,exam_time) values ("
+ "'" + data.getC_name() + "',"
+ data.getT_id() + "," + data.getCredit() + ","
+ data.getPeriod() +",'" + data.getClass_time() + "','"
+ data.getClass_area() +"','" + data.getExam_time() + "')";
pstmt = connection.prepareStatement(sql);
pstmt.execute();
return true;
}
7、 系统测试方案和测试汇报
系统测试:因为测试数据众多,窗口众多,就不一一截图,以下是部分测试截图:
1)学生管理测试窗口以下:
2)院系管理测试:
3)教工管理测试:
4)成绩管理:
8、 安装和使用说明
8.1 JDK安装
先双击JDK安装可实施文件,按提醒把JDK安装到指定目录下,然后在“控制面板”->“系统”->“高级”->“环境变量”中新建或修改以下多个环境变量:(注意,安装JDK位置不一样,设置也不一样,只要设为对应目录下对应文件即可)
● 用户变量中,path变量需要新增值“C:\j2sdk1.6.0\bin;.”
● 系统变量中,CLASSPATH变量需要新增值“C:\j2sdk1.6.0\lib\tools.jar;C:\j2sdk1.6.0\lib\dt.jar”
● 系统变量中,HOME_PATH变量需要设置值“C:\j2sdk1.6.0”.
8.2 Eclipse安装
把压缩包解压到任意目录下即可。
8.3 数据库升级和数据导入
SQL Sever 安装完成后,请升级到SP3,双击chs_sql2ksp3.exe,解压到任一文件夹,再双击setup.bat,即可。数据导入请选择SQL Sever “附加数据库”功效,在企业管理器中,选中“数据库”,右键,选中“附加数据库”再按提醒选出要附加数据库即可。
8.4 程序运行
本系统使用简单,依据可视化界面直接操作。系统主函数放在类:EnterFrame中,经过登录界面登录进入MainFrame这个主界面程序。运行EnterFrame,则出来登录界面以下:
本系统管理员用户是root,密码也是root。
在程序运行前,先要导入数据库JDBC驱动程序包,在工程文件夹lib文件夹中有三个包,msbase, mssqlserver, msutil。这么就能够运行程序了。
9、 参考文件
参考资料:
《Java 关键技术》-第7版
《数据库系统概论》-王珊编第四版
《SQL Server 数据库应用技术》张水平编
《软件工程》-李代平编第二版
《Java API文档》电子版等
展开阅读全文