河 南 工 程 学 院
实 习 报 告
系(部) 计算机科学与工程系
专 业 计算机科学与技术
班 级 1041 班
负责人学号及姓名
成 员学号及姓名
2013 年 01 月 11 日
数据库系统原理课程设计指导教师评分表
实 习 (训) 报 告 评 语
等 级:
评阅人: 职称:
年 月 日
河南工程学院
实习(训)报告
实习目的(内容):学习和掌握数据库原理及SQL Server 20##
数据库开发工具,培养数据库程序开发能力。
实习时间: 自01月07日 至01月11日
共 5天。
实习地点: 3号实验楼 C507
实习单位: 计算机科学与工程系
指导教师: 李华 系主任: 曲宏山
目 录
一、需求分析.................................................................................................................. 1
1 数据库设计目的与任务............................................................................................... 1
2 用户操作流图....................................................................................................... 2
数据字典.................................................................................................................. 2
4 安全性与完整性要求........................................................................................... 3
二、概念结构设计.......................................................................................................... 4
三、逻辑结构设计.......................................................................................................... 6
1 模式设计.............................................................................................................. 6
四、数据库的物理设计................................................................................................... 7
五、数据库设计实现及运行........................................................................................... 8
1 数据库的创建....................................................................................................... 8
2 数据表的创建....................................................................................................... 8
3 视图的创建.......................................................................................................... 8
4 触发器的定义实现............................................................................................... 9
六、系统详细设计及实现............................................................................................. 14
1 程序的开发环境、运行环境设置....................................................................... 14
2 功能模块与数据库连接的宿主语言................................................................... 14
七、实训总结及心得体会............................................................................................. 18
一、需求分析
1 数据库设计目的与任务
本次实验的要求是学生信息管理系统,要求其功能除了包括学生信息、课程、成绩的添加、修改、删除和查询外,还包括管理员和普通用户的登陆以及普通用户密码管理。学生信息包括学号、姓名、年龄、性别及系别,其属性类分别为CHAR、CHAR、INT、CHAR、NCHAR类型;学生课程包括课程号、课程名以及先行课号,其类型均为CHAR类型;学生成绩包括学生学号、课程号以及分数,其类型分别为CHAR 、CHAR 和SMALLINT类型;用户的信息包括用户名和密码,其类型分别为CHAR、NCHAR类型。
学生信息管理系统就是对学生信息的管理,所以首先我们需要知道的是学生有那些信息,并且是怎样进行分类的。
学生信息包含:学生基本信息、课程基本信息、成绩信息。学生基本信息根据要求应该包括学生对应的学号,姓名,性别,系别,学生年龄等;课程基本信息应该包课程号,课程名,学分等;成绩表包含课程号,学号,成绩等。
与学生唯一一一对应的是学号,所以学号是唯一的主键,其他的都不能是,根据学号我们可以查找学生的基本信息,还有学生姓名等有关信息;根据课程号可以知道学生对应的成绩等。
与课程一一对应的是课程号,所以课程号是唯一主码,其他的都不是,根据课程号我们可以查询课程的基本信息,如课程名和对应的学分等。
与成绩对应的有两个主码,一个是姓名还有一个是学号。
在用户表中可以根据用户需要进行密码的修改等一系列操作。
综合分析对信息管理系统分四个表:
用户表(用户名,用户密码)
学生表(学号,姓名,性别,年龄,系别)
课程表(课程号,课程名,先行课程号)
成绩表(姓名,学号,成绩)
2 用户操作流图
用户登录此学生信息管理系统时,是按照如下的流程图,登录系统的,登录之后可进行相应的操作,如图1-1所示。
图1-1
数据字典
(1) 数据项:
Sno={Sno,学生学号,char,9,00001--99999,该数据项与另几个数据项一一对应}
Sname={Sname,学生姓名,char,20,该数据项与另几个数据项一一对应}
Sage={Sage,学生年龄,int,10,0001—9999, 该数据项对应Sno项与Sname 项}
Ssex={Ssex,学生性别,char,2,‘男’‘女’}
Sdept={Sdept,学生系别,nchar,40, ,该数据项与Sno 项对应}
Cno={Cno,课程号,char,4, 该数据项与Sno 项对应}
Cpno={Cpno,先行课程号,char,10}
Grade={Grade,学生成绩, smallint,2,0--100, 该数据项与Sno 项与Sname项对应}
Cname={Cname,课程名,char,40,该数据项Cno项对应}
User={ User,管理员和用户名,char,20 }
Upassword={ Upassword,密码,nchar,40,该数据项与Admin和User项对应}
(2) 数据结构:
学生信息={Student,学生信息,组成:{Sno,Sname,Sage,Ssex,Sdept}}
课程信息={Course,课程信息,组成:{Cno, Cname, Cpno}}
成绩信息={SC,成绩信息,组成:{ Sno ,Cno,Grade }}
用户信息={User,管理员和用户信息,组成:{User,Upassword}}
4 安全性与完整性要求
(1) 安全性要求:
a.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;
(2) 完整性要求:
a.各种信息记录的完整性,信息记录内容不能为空;
b.各种数据间相互的联系的正确性;
c.相同的数据在不同记录中的一致性。
1)教师:
a.信息要求:
课程的课程号、课程名以及先行课程号
2)学生:
a.信息要求:
能够查询自己的成绩信息和大家的整体成绩做出对自己的新的定位,同时还有更改、删除自己的学生信息,还具有查询新的课程信息的功能。
b.处理要求:
当学生发现自己信息出现错误时,可以根据自己的实际情况来进行更改,比如某同学发现自己的年龄存储出现了错误就需要相应的机制进行修改、删除等。
同时还可进入成绩查询系统。在该界面中同学可以查询自己的成绩,还可以查询其他同学的成绩。
二、概念结构设计
(1) 学生信息的E-R图如下:
(2) 课程信息的E-R图如下:
(3) 登录用户信息的E-R图如下:
(4) 学生信息管理的E-R图如下:
三、逻辑结构设计
1 模式设计
数据库逻辑设计就是将E-R图转换为关系模型的过程,即将所有实体和关系转换成一系列的关系模式。转换过程中常见规则有:
(1) 一个实体型转换为一个关系模式;
(2) 一个一对一的联系可转换成一个独立的关系模式,也可与任意一端对应的关系模式合并;
(3) 一个一对多的联系可以转换成一个独立的关系模式,也可与多的那一端对应的关系模式合并;
(4) 一个多对多的关系转换成一个关系模式。
根据以上四条规则,下面将E—R图转换成关系模型。
以下列出主要的关系模式
该设计以概念结构设计中的E-R图为主要依据,设计出相关的整体逻辑结构。根据总E-R图了解有四个实体,四个关系模式如下:
用户表(用户名,用户密码)
学生表(学号,姓名,性别,系别,学生年龄)
课程表(课程号,课程名,任课教师,学分)
成绩表(课程号,学号,成绩)
创建表与字段
Student表 表3-1
SC表 表3-2
Course表 表3-3
Users表 表3-4
四、数据库的物理设计
为了提高在表中搜索元组的速度,在实际实现的时候应该基于某些属性建立索引。给出所建立的索引。
(1) 由于基本表Student的主码sno经常在查询条件和连接操作的连接条件中出现,且它们的值唯一,考虑在该属性上建立唯一性索引。
在学生信息Student表的sno列上创建一个惟一性的非聚簇索引,而且Student表中的记录将按照Sname值的升序存放。
create unique index sno on Student(Sname)
(2) 在学生信息Student表中查询全体学生情况,查询结果按所在系排列,同一系中的学生学号升序排列。
SELECT *
FROM Student
ORDER BY Sdept,Sno ASC;
(3) Student表按学号升序唯一索引,Course表按课程号升序建唯一索引。
create unique index stusno on student(sno);
create unique index coucno on course(cno);
(4) 在Sc表中查询,查询结果按课程号升序排列,同一课程的按成绩升序排列。
SELECT *
FROM SC
ORDER BY Cno, Grade ASC;
(5) 在Users表中查询,查询结果按Uuser升序排列。
SELECT *
FROM Users
ORDER BY User ASC;
五、数据库设计实现及运行
1 数据库的创建
T-SQL语句:
CREATE DATABASE Student ON
(
NAME = 'Student_data';
FILENAME='D:\programfiles\SQL\MSSQL$ADMIN\data\Student_data.mdf';
SIZE = 5MB;
MAXSIZE = 15MB;
FILEGROWTH = 1MB;
)
LOG ON
(
NAME = 'Student_log';
FILENAME='D:\programfiles\SQL\MSSQL$ADMIN\data\Student_log.ldf';
SIZE = 1MB;
MAXSIZE = 5MB;
FILEGROWTH = 1MB;
)
2 数据表的创建
T-SQL语句:
create table Student
(Sno char(9) primary key;
Sname char(20) not null;
Sage int(10)
Ssex char(2)
check(Ssex in('男' ,'女')),
Sdept char(20)
);
3 视图的创建
T-SQL语句:
create view Scoreinfo
as
select student.Sno,Sname,course.Cno,Cname,Grade
from Student,Course,SC
where student.sno=SC.sno and course.cno=sc.cno;
4 触发器的定义实现
在sc表上创建check_score触发器,T-SQL语句如下:
CREATE TRIGGER check_score ON score
FOR INSERT,UPDATE
AS
DECLARE @score int
SELECT @score=score FROM inserted
IF @score<0 OR @score>100
BEGIN
ROLLBACK
RAISERROR('成绩必须在0到100之间!',16,1)
END
GO
insert score VALUES(200401,120)测试结果粘贴:
5 自行设计各模块中所涉及的操作语句
(1) 登陆模块描述如下:
1) 学生信息管理系统面对的用户是学生和管理者,所以,登陆界面一定要有可供选择的身份认证信息,本登陆界面采用用户名和密码匹配的登陆机制,保护系统的安全。对于不同的用户,用户能实现的功能不同,所采用的用户名和密码也不相同。
(2)学生信息管理系统管理员操作模块描述如下:
1)本模块可实现学生信息管理,课程信息管理,选课信息管理,成绩信息管理和用户信息管理。
学生信息管理模块下,进一步细化操作,可以增、删、改、查学生信息。
课程信息管理模块也进一步细化操作,基本操作也包括增、删、改、查。
选课信息管理模块,由于选课是不可随便更改的,所以该模块只实现查询和显示功能。
成绩信息管理模块,由于一般情况下每个学生都有自己的成绩,所以成绩模块我们只提供修改、查询和显示功能。
用户信息管理模块,这一模块很重要,有些学生会因为种种原因忘记自己的密码,所以我们向管理员权限的用户提供密码修改的功能,这样,如果学生用户因忘记自己的密码不能登录学生信息管理系统时,可向管理员提供申请更改密码或者查询密码。
(3)学生信息管理模块之学生用户操作描述如下:
本模块实现:学生信息查询、成绩信息查询、个人信息管理功能。
学生信息查询模块,由于学生用户不能随便更改自己已经提交给学校的信息,所以本模块只提供给学生用户查询个人信息功能,学生用户可通过输入学号查询相关信息。
成绩信息查询模块,本模块和学生信息查询模块一样,只提供学生用户查询成绩的功能,学生用户同样通过输入学号查询学生成绩信息。
个人信息管理模块,本模块提供学生用户修改自己密码的功能,此功能方便灵活,界面友好,通过输入用户名修改相应的用户密码,便于学生用户管理自己的账户。
六、系统详细设计及实现
1 程序的开发环境、运行环境设置
(1) JAVA
JAVA是一个计算机程序语言。自20世纪90年代初开发,1995年5月正式发布。
作为专为商业设计的程序语言,伴随着Internet的发展,JAVA逐渐成为重要的Internet编程语言。其简单、面向对象、网络适用、解释型、健壮、安全、结构中立、可移植、高性能、多线程、动态使JAVA逐渐成为计算机语言中的主流。
(2) Microsoft SQL Server 2000和与系统相关的SQL 语言介绍
数据定义 DDL(data definition language)
数据定义语言是指对数据的格式和形态下定义的语言,他是每个数据库要建立时候时首先要面对的,举凡数据分哪些表格关系、表格内的有什么栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
(3) 系统环境简介
操作系统:Windows XP
2 功能模块与数据库连接的宿主语言
(1) 连接数据库:
public void connDB() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
con = DriverManager.getConnection(
"jdbc:odbc:student1","sa","0000");
stmt = con.createStatement();
} catch (SQLException e) {
e.printStackTrace();
}
}
(2)从数据库用户表读取数据对比登陆信息验证用户身份:
public void closeDB() // 关闭连接
{
try {
stmt.close();
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
@SuppressWarnings("rawtypes")
JComboBox jcb = (JComboBox) e.getSource();
qxian = jcb.getSelectedIndex();
}
}
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
String un = null;
String pw = null;
boolean success = false;// 用于判断是否登录成功
if (source == btnLogin) {
if (txtUser.getText().equals("") || txtPwd.getText().equals("")) {// 判断是否输入 了用户名和密码
JOptionPane.showMessageDialog(null, "登录名和密码不能为空!");
} else {
this.connDB();
try {
rs = stmt.executeQuery("select * from unpw where qx="
+ qxian);
while (rs.next()) {
un = rs.getString("un").trim();
pw = rs.getString("pw").trim();
if (txtUser.getText().equals(un)) {
if (txtPwd.getText().equals(pw)) {
actionCode = OK;
this.setVisible(false);
if (qxian == 0) {
new ManagerFrane();// 进入管理员界面
}
if (qxian == 1) {
new StudentFrame();// 进入学生界面
}
success = true;
break;
} else {
JOptionPane.showMessageDialog(null, "密码错误!");
txtPwd.setText("");
success = true;
}
(3) 主界面功能设计和代码分析实现:
class DLFrame extends JFrame implements ActionListener, ItemListener {// 登录界面
JPanel p1 = null;
JPanel p2 = null;
JPanel p3 = null;
JLabel userName = new JLabel("用户:");
JTextField txtUser = new JTextField();
JLabel password = new JLabel("密码:");
JPasswordField txtPwd = new JPasswordField(6);
JLabel role = new JLabel("角色:");
@SuppressWarnings("rawtypes")
JComboBox cbrole = new JComboBox();
JButton btnLogin = new JButton("登录");
JButton btncz = new JButton("重置");
JButton btnCancel = new JButton("取消");
JLabel imageLabel;
Icon image;
static int OK = 1;
static int CANCEL = 0;
int actionCode = 0;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
int qxian = 0;
@SuppressWarnings({ "unchecked", "deprecation" })
public DLFrame() {// 构造方法
super("登录界面");
p1 = new JPanel();
p2 = new JPanel();
p3 = new JPanel();
cbrole.addItem("管理员");
cbrole.addItem("学生");
image = new ImageIcon("st.jpg");
imageLabel = new JLabel(image);
p1.add(imageLabel);
this.setLayout(new FlowLayout());
setBounds(500, 250, 250, 400);
p2.setLayout(new GridLayout(4, 2));
p2.add(userName);
p2.add(txtUser);
p2.add(password);
p2.add(txtPwd);
p2.add(role);
p2.add(cbrole);
p3.add(btnLogin);
p3.add(btncz);
p3.add(btnCancel);
this.add(p1);
this.add(p2);
this.add(p3);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.show();
btnLogin.addActionListener(this);
cbrole.addItemListener(this);
btncz.addActionListener(this);
btnCancel.addActionListener(this);
}
七、实训总结及心得体会
本次的实验题目是学生信息管理系统,其功能除了包括了学生信息、课程、成绩的添加、修改、删除和查询,还特色的实现了管理员对学生用户的控制,但是该系统还存在问题,管理员通过学生信息管理模块删除一条用户记录,显示删除成功后,但是在成绩信息管理模块仍能显示被删除用户的成绩信息。所以总的来说,删除是不彻底的,这还需要我们进一步的改进。
本次实训,我们组总的来说做的不好,首先没有做最初选定的课题,因为功能太多,而我们不能逐一实现,所以最后只得放弃。另外,团队协作做的不是很好,很多情况下,我们的意见是不同意的,所以这也给我们的工作带来一些困惑,不过通过本次实训,最深的心得体会就是,我们还是不会灵活运用课堂上所学的知识,在实训时临时抱佛脚。所以以后要学以致用!