一、概要设计
1.1用户需求分析
随着网络技术的不断发展,信息技术进入社会的每一个角落,手工管理操作的快速发展,正在逐步取代自动化网络管理。本项目的主要目标是实现学生对个人信息管理,实现对学生个人基本信息和学生所在院系和所修专业增删改查等功能,较大程度地实现学生学习的信息化管理。
1.2内容和要求
本项目将设计一个学生信息管理系统,要求如下:
(1)系统用户类型由三类组成:管理员、普通用户和访客。
(2)管理员、普通用户的主要功能:
①学生信息管理(修改学号、姓名、性别,查询专业号,打印数据)
②系信息管理(添加和删除系号、系名、系主任、联系电话,打印数据)
③专业信息管理(添加专业号、专业名、辅导员、联系电话,打印数据)
每个实体的属性如下:
学生(学号、专业号码、姓名、性别)
专业(专业号码、系号码、专业名、辅导员、联系方式)
院系(系号码、系名称、系主任、联系方式)
二、概念结构设计
2.1概念设计任务
概念设计是独立于数据库管理系统的设计,它的主要任务即时完成对现实事物,事物关系之间的转化,把抽象的事物转化成能够被人们易于理解的图形关系,更加直白的把现实的事物关系表达出来,从而为下一步的设计打下一个良好的基础,概念设计的主要任务就是如此,进行归类总结,识别实体的属性,识别实体的关键字,识别实体间的联系,利用实体关系图(E—R图)来描述选题管理系统相关实体、属性及关系。
2.2实体E-R图设计
一对一联系 :若双方部分的参与,则将联系定义为一个新的关系,属性为参与双方的码,若一方全部参与,则将联系另一方的码作为全部参与一方的属性,
一对多联系:将单方参与实体的码作为多方参与实体的属性,
多对多联系:将联系定为新的关系,属性为参与双方的码。
各实体的E-R图如下图所示:
图1 学生
图2 系
图3 专业
将以上实体之间联系表示出来,画出数据库系统的E-R图,如图4所示:
图4 数据库系统E-R图
三、逻辑结构设计
3.1逻辑设计的目的
以上的概念设计阶段是独立于任何一种数据模型的。具体内容包括数据组织(将E-R图转换成关系模型、模型优化、数据库模式定义、用户子模式设计)、数据处理(画出系统功能模块图)两大任务。其中最为关键的是把ER模型转换成相应的关系表结构,同时每个关系模型之间的范式应最好满足第三范式,只有这样的关系模式才可能尽可能的减小冗余,达到较好的效果。
具体关系模式如下
表1 学生
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
StudentNum | char | 12 | 学号 | 否 | 主 |
MajorNum | char | 10 | 专业号 | 否 | 外 |
StudentName | varchar | 10 | 学生姓名 | 是 | |
StudentSex | char | 2 | 学生性别 | 否 |
表2 系
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
DeptNum | char | 10 | 系号 | 否 | 主 |
DeptName | varchar | 20 | 系名 | 否 | |
DeptChairman | varchar | 10 | 系主任 | 否 | |
DeptTel | varchar | 15 | 联系电话 | 否 |
表3 专业
数据项名 | 数据类型 | 长度 | 别名 | 是否为空 | 主外键 |
---|---|---|---|---|---|
MajorNum | char | 10 | 专业号 | 否 | 主 |
DeptNum | char | 10 | 系号 | 否 | 外 |
MajorName | varchar | 20 | 专业名 | 否 | |
MajorAssistant | varchar | 10 | 辅导员 | 否 | |
MajorTel | varchar | 15 | 联系电话 | 否 |
四、物理结构设计
4.1物理设计目标与任务
数据库的物理设计通常是确定数据的相关存储过程,它一般是依赖于相应的数据库管理系统,几乎是机器进行自主完成的任务,不用过多的人去考虑,但有时为了效率的问题,以及其他的要求,必须进行相应的物理设计,以达到相应的要求,这就是物理设计的根本目的。
4.2物理存储
得到系统逻辑模型后,就该进行数据库的物理设计和实施数据库了,物理设计主要是要确定数据库的存储路径、存储结构以及如何建立索引等,可以采用系统的默认设置。
五、数据库的实施
5.1建数据表,视图
5.1.1建立数据表
学生表建立:
CREATE TABLE tb_student
(StudentNum char(10) NOT NULL PRIMARY KEY,
MajorNum char(10) NOT NULL,
StudentName varchar(10) NULL,
StudentSex char(2) NOT NULL,
FOREIGN KEY(MajorNum) REFERENCES tb_major(MajorNum))
学生表数据(如图5所示):
图5 学生表数据
系表建立:
CREATE TABLE tb_dept
(DeptNumchar (10) NOT NULL PRIMARY KEY,
DeptName varchar(20) NOT NULL,
Dept Chairman varchar(10)NOT NULL,
DeptTel varchar(15) NOT NULL)
系表数据(如图6所示):
图6 系表数据
专业表建立:
CREATE TABLE tb_major
(MajorNum char(10) NOT NULL PRIMARY KEY,
DeptNum char(10) NOT NULL,
MajorName varchar(20) NOT NULL,
MajorAssistant varchar(10) NOT NULL,
MajorTel varchar(15) NOT NULL,
FOREIGN KEY (DeptNum) REFERENCES tb_dept(DeptNum))
专业表数据(如图7所示):
图7 专业表数据
5.1.2视图建立
视图的建立:
CREATE VIEW vi_major
AS
SELECT tb_major.MajorName,StudentNum,StudentName,StudentSex
FROM tb_major,tb_student
WHERE tb_major.MajorNum=tb_student.MajorNum
视图描述:建立专业学生信息视图vi_major,从学生、专业表中选择学生中的专业号码与专业表中专业号码相等的记录
图8 vi_major视图
5.2建约束、触发器、存储过程
5.2.1建立约束
图9 '性别列'约束
图10 约束
5.2.2建立触发器
触发器描述:建立添加学生触发器tri_addstudent,当学生信息中的专业号不对或者系统中已存在所对应学号的学生时,系统给与错误提示并回滚。
建立触发器:
CREATE TRIGGER tri_addstudent ON tb_student
FOR INSERT,UPDATE
AS
IF(SELECT COUNT(*) FROM tb_major,inserted
WHERE tb_major.MajorNum=inserted.MajorNum)=0
BEGIN
PRINT'未找到该学生的专业信息,请添加相应专业后重试!'
ROLLBACK
END
ELSE IF(SELECTCOUNT(*)FROMtb_student,insertedWHEREtb_student.StudentNum=inserted.StudentNum)>0
BEGIN
PRINT'学号产生冲突,请核对后重试!'
ROLLBACK
END
图11 触发器实现
5.2.3建立存储过程
存储过程描述:查询特定院系的所有专业信息。
建立存储过程
CREATE PROCEDURE 院系专业信息
@DepartmentName VARCHAR(50)
AS
BEGIN
SELECT *
FROM tb_dept,tb_major
WHERE DeptName=@DepartmentName and tb_dept.DeptNum=tb_major.DeptNum
END
go
Exec 院系专业信息 @DepartmentName=‘机械系'
go
图12 查询信息存储过程
存储过程描述:插入院系信息。
建立存储过程
create PROCEDURE 插入院系信息
@DeptNum char(10),
@DeptName varchar(20),
@DeptChairman varchar(10),
@DeptTel varchar(15)
AS
BEGIN
INSERT INTO tb_dept (DeptNum,DeptName,DeptChairman,DeptTel)
VALUES (@DeptNum ,@DeptName,@DeptChairman,@DeptTel)
END
Go
exec 插入院系信息 '160','电子工程系','林冲','156116’
go
图13 插入信息存储过程
5.2.4建立角色、用户
创建角色“cp”授予查询学生信息权限:
Create Role cp
Grant Select
On tb_student
To cp;
图14 角色cp
创建用户“galaxy”:
Create LOGIN galaxy
WITH PASSWORD = '123456’;
GO
CREATE USER galaxy for LOGIN galaxy;
GO
图15 用户创建
六、系统界面设计
6.1登录界面
图16 登录界面
错误输入用户名或密码提示:
图17 错误提示
多次输入错误超过3次提示:
图18 退出提示
6.2主界面
登录后的主界面(tb_dept表)
图19 系表界面
更换主界面(tb_major表)
图20 专业表界面
更换主界面(tb_student表)
图21 学生表界面
6.3功能界面
6.3.1数据的添加、删除
添加界面:
图22 添加界面
添加后的主界面:
图23 添加后界面
添加成功提示:
图24 添加成功
删除操作(选择行删除):
图25 删除提示
选择系号162该行,删除后:
图26 删除界面
删除成功后提示:
图27 删除成功
6.3.2数据的修改、查询、打印
点击修改按钮时提示:
图28 修改提示
双击选择要修改的信息:
图29 修改界面
修改成功后提示:
图30 修改成功
查询窗口(含有学号、学生姓名模糊查询):
图31 查询窗口
查询结果:
图32 查询界面
出现同名情况:
图33 同名查询
打印功能:
图34 数据导出
打印结果:
图35 打印结果
七、心得体会
在课程设计中,我们学习了如何使用SQL语言进行数据的增删改查,掌握Java的JDBC技术:以前我虽然知道Java的JDBC可以连接数据库,但并不知道如何使用。通过这次课程设计,我学会了如何使用JDBC连接到数据库,并执行SQL语句。我也了解了如何处理事务、处理错误等。
了解Java与数据库的交互:我了解到Java程序和数据库之间的数据交互是怎样的,比如如何从数据库读取数据,如何将数据写入数据库等。这让我更加明白Java和数据库之间的关系。