资源描述
华中科技大学计算机学院 数据库系统概论实验报告
课 程 实 验 报 告
课程名称: 《数据库系统概论》
专业班级:计算机科学与技术11级10班
学 号:
姓 名:
指导教师:
报告日期: 2014年6月13日
计算机科学与技术学院
19
目录
1 实验目的与内容 1
1.1 实验目的 1
1.2 实验内容 1
2 系统分析与设计 2
2.1 系统分析 2
2.1.1 需求分析 2
2.1.2 数据分析 2
2.2 系统设计 5
2.2.1 数据库设计 5
2.2.2 功能模块设计 5
3 系统实现 7
3.1 数据库的实现 7
3.2 模块功能实现 10
3.2.1 开发环境 10
3.2.2 开发流程 10
3.2.3 模块实现 15
4 总结 18
4.1 问题及解决方法 18
4.2 实验体会 18
参考文献 19
1 实验目的与内容
1.1 实验目的
本综合实验的目的主要是通过理论联系实际,巩固课堂所学理论知识,如关系数据库规范化理论与数据库设计的方法,同时提高实践能力和创新能力,培养数据库应用系统开发的能力,以及技术总结和撰写实验报告的基本技能。本次实验要达到以下要求:
1. 熟悉一种DBMS软件(Microsoft SQL Service)的安装和使用;
2. 熟悉使用并掌握SQL语言进行表的创建、增加、删除、修改、查询等操作;
3. 熟悉并掌握将数据库运用到实际软件中,实现一个数据库管理系统;
1.2 实验内容
设计一个学生学籍管理系统,实现以下功能:
Ø 能实现多用户的登录;
Ø 要有基本的软件界面;
Ø 至少要有三张表,并且这三张表之间存在联系;
Ø 实现学生成绩,基本信息等数据的添加、删除、修改等基本操作。
2 系统分析与设计
2.1 系统分析
2.1.1 需求分析
本系统是学生学籍管理系统,此系统主要分为学生,教师服务。系统提供注册学生进行课程成绩以及在校基本信息的查询服务,同时提供给教师对学生信息的维护,对学生成绩的维护,以及对课程信息的维护。此外本系统还提供一个管理员的角色,用于对教师和学生账号的维护。
系统具体需求如下所示:
F 要求提供学生用户,教师用户以及管理员用户进行基本信息的查询功能;
F 要求教师用户能有维护学生基本信息、成绩、课程的功能;
F 要求管理员能对学生和教师账户进行维护的功能;
2.1.2 数据分析
1、学生学籍管理系统的顶层数据流图如下图2.1所示:
图2.1 顶层数据流图
2、学生学籍管理系统的数据字典如下表2.1-2.4所示:
表2.1 成绩信息数据字典
表名
字段序号
字段名
主键
类型
占用字节数
长度
小数位数
成绩
信息
1
学号
√
char
12
12
0
2
课程名
√
char
20
20
0
3
课程编号
char
10
10
0
4
成绩
char
3
3
0
表2.2 学生信息数据字典
表名
字段序号
字段名
主键
类型
占用字节数
长度
小数位数
学生
信息
1
学号
√
char
12
12
0
2
姓名
char
10
10
0
3
性别
char
2
2
0
4
出生日期
char
50
50
0
5
籍贯
char
50
50
0
6
家庭住址
char
50
50
0
表2.3 课程信息数据字典
表名
字段序号
字段名
主键
类型
占用字节数
长度
小数位数
课程
信息
1
课程名
√
char
20
20
0
2
课程编号
char
10
10
0
3
授课教师
char
10
10
0
4
考试时间
char
50
50
0
表2.4 管理员信息数据字典
表名
字段序号
字段名
主键
类型
占用字节数
长度
小数位数
管理员
信息
1
用户号
√
char
12
12
0
2
用户名字
char
20
20
0
3
用户密码
char
20
20
0
4
用户身份
char
20
20
0
3、学生学籍管理系统的实体关系模型如下图2.2所示:
图2.2 学生学籍管理系统E-R图
2.2 系统设计
2.2.1 数据库设计
根据第一节中的数据分析以及E-R图的设计,得到学生学籍管理系统的数据库的逻辑设计如下图2.3所示:
图2.3 数据库物理设计图
2.2.2 功能模块设计
学生学籍管理系统主要功能模块分为四大块,包括系统登录模块、学生信息查询模块、教师维护模块、管理员维护模块。登录模块负责用户系统登录的实现,学生信息查询模块负责学生用户登录系统查询自己的成绩等信息,教师模块则负责对一些基本数据的维护,管理员负责对系统用户的信息维护。
其中教师模块又可以分为四个子模块,包括学生信息维护模块,成绩信息维护模块,课程信息维护模块,用户登录信息维护模块。学生信息维护模块供教师对学生基本信息进行修改,删除,增加等操作;成绩信息维护模块供教师用户给学生进行给分;课程信息维护模块供教师对自己的课程信息进行增删改操作;用户登录模块则用于教师用户对系统中其他的学生用户进行维护操作,比如增加一个学生用户等。
下图2.4中是学生学籍管理系统的功能模块总图,具体的每个模块的具体实现参看3.2.3节中的模块实现部分。
图2.4 系统功能模块图
3 系统实现
3.1 数据库的实现
A)【dbo.学生信息】的创建与数据操作:
create table dbo.学生信息( /*创建dbo.学生信息表*/
学号 char(12) not null,
姓名 char(10) not null,
性别 char(2) not null,
出生日期 char(50) not null,
籍贯 char(50) not null,
家庭住址 char(50) not null,
primary key(学号)
);
insert into dbo.学生信息 (学号,姓名,性别,出生日期,籍贯,家庭住址)
values('U201114445','王涛','男','1993-10-16','江西省吉安市','江西省吉安市青原区富田镇王家村');
insert into dbo.学生信息 (学号,姓名,性别,出生日期,籍贯,家庭住址)
values('U201114457','刘曦喆','男','1993-xx-xx','湖北省荆州市','湖北省荆州市');
insert into dbo.学生信息 (学号,姓名,性别,出生日期,籍贯,家庭住址)
values('U201114460','刘佳佳','男','1993-xx-xx','湖北省黄冈市','湖北省黄冈市');
insert into dbo.学生信息 (学号,姓名,性别,出生日期,籍贯,家庭住址)
values('U201114465','李博','男','1993-xx-xx','湖南省长沙市','湖南省长沙市');
select *from dbo.学生信息;
使用如上的select语句显示学生信息表中的信息如下图3.1所示:
图3.1 学生信息表数据
B)【dbo.课程信息】的创建与数据操作:
create table dbo.课程信息(
课程名 char(20) not null,
课程编号 char(10) not null,
授课教师 char(10) not null,
考试时间 char(50) not null,
primary key(课程名)
);
insert into dbo.课程信息(课程名,课程编号,授课教师,考试时间) values('数据库系统概论','N001','杨茂林','2014年6月26日');
insert into dbo.课程信息(课程名,课程编号,授课教师,考试时间) values('编译原理','N002','刘铭','2014年6月29日');
select *from dbo.课程信息;
使用如上的select语句显示表中的信息如下图3.2所示:
图3.2 课程信息表数据
C)【dbo.成绩信息】的创建与数据操作:
create table dbo.成绩信息(
学号 char(12) not null ,
课程名 char(20) not null ,
课程编号 char(10) not null,
成绩 char(3) not null,
primary key(学号,课程名),
foreign key(学号) references dbo.学生信息(学号),
foreign key(课程名) references dbo.课程信息(课程名)
);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114445’,’数据库系统概论’,’N001’,’90’);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114457’,’数据库系统概论’,’N001’,’90’);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114460’,’数据库系统概论’,’N001’,’90’);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114465’,’数据库系统概论’,’N001’,’90’);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114445’,’编译原理’,’N002’,’90’);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114457’,’编译原理’,’N002’,’90’);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114460’,’编译原理’,’N002’,’90’);
insert into dbo.成绩信息 (学号,课程名,课程编号,成绩) values(‘U201114465’,’编译原理’,’N002’,’90’);
select *from dbo.成绩信息;
使用上面的select语句显示成绩信息如下图3.3所示:
图3.3 成绩信息表数据
D)【dbo. 管理员信息】的创建与数据操作:
create table dbo.管理员信息(
用户号 char(12) not null,
用户名字 char(20) not null ,
用户密码 char(20) not null,
用户身份 char (20) not null,
primary key(用户号)
);
insert into dbo.管理员信息(用户号,用户名字,用户密码,用户身份) values('2','taosir','123456','学生');
insert into dbo.管理员信息(用户号,用户名字,用户密码,用户身份) values('3','wangtao','123456','学生');
insert into dbo.管理员信息(用户号,用户名字,用户密码,用户身份) values('0','admin','123456','管理员');
insert into dbo.管理员信息(用户号,用户名字,用户密码,用户身份) values('1','teacher','123456','教师');
select *from dbo.管理员信息;
使用上面的select语句显示管理员信息如下图3.4所示:
图3.4 管理员信息表数据
3.2 模块功能实现
3.2.1 开发环境
F Windows 7旗舰版
F Microsoft SQL Service 2012;
F Microsoft Visual Studio 2010;
F Microsoft .NET Framework 3.5;
本程序是基于C#(.NET版本3.5) + SQL Service,并在VS2010的开发平台中实现的。
3.2.2 开发流程
1、新建项目
在VS2010中新建一个Visual C#的Windows窗体应用程序,如下图3.5所示:
图3.5 新建Visual C#项目
2、可视化的界面设计
如下图3.6所示,图中①区为工具箱区,里面是在.NET Framework框架中的可用的控件。我们在①区选择后然后再③区中的设计区中初步设计出界面的样式结构,然后在②区中添加一些功能代码,比如数据库的连接以及数据的分析、显示、处理加工等。
图3.6 界面设计
3、使用代码来加工处理数据库中的数据
在图3.6中的②区中编写代码,C#语言是一种由C和C++衍生出来的面向对象的编程语言,使用起来和C++感觉很像。下面这部分代码是Login模块的代码,功能就是连接数据库,从数据库中读取用户名和用户密码来实现登录。
/*Filename:Login.cs*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace STU_SYS
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
/*登录按钮处理函数*/
private void AcceptButton_Click(object sender, EventArgs e)
{
if (textBox1.Text.Trim() == "" || textBox2.Text.Trim() == "")
{
MessageBox.Show("用户名和密码不能为空!", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
SqlConnection conn = new
SqlConnection("server=.;database=students;Trusted_Connection=yes;");
StringBuilder sql = new StringBuilder();
if (radioButton2.Checked == true)
{
sql.AppendFormat("select count(*) from 管理员信息 where 用户名字='{0}' and 用户密码='{1}' and 用户身份='{2}'", textBox1.Text.Trim(), textBox2.Text.Trim(), radioButton2.Text.Trim());
}
else if (radioButton3.Checked == true)
{
sql.AppendFormat("select count(*) from 管理员信息 where 用户名字='{0}' and 用户密码='{1}' and 用户身份='{2}'", textBox1.Text.Trim(), textBox2.Text.Trim(), radioButton3.Text.Trim());
}
else
{
sql.AppendFormat("select count(*) from 管理员信息 where 用户名字='{0}' and 用户密码='{1}' and 用户身份='{2}'", textBox1.Text.Trim(), textBox2.Text.Trim(), radioButton1.Text.Trim());
}
SqlCommand cmd = new SqlCommand(sql.ToString(), conn);
conn.Open();
int result = Convert.ToInt32(cmd.ExecuteScalar());
conn.Close();
if (radioButton2.Checked == true)
{
if (result == 1)
{
Main a = new Main();
a.Show();
this.Hide();
}
else
{
MessageBox.Show("不存在此用户名或者密码错误!","登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else if (radioButton3.Checked == true)
{
if (result == 1)
{
Manager a = new Manager();
a.Show();
this.Hide();
}
else
{
MessageBox.Show("管理员密码错误!", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
if (result == 1)
{
Query f = new Query();
f.toolStripStatusLabel3.Text = textBox1.Text.Trim();
f.Show();
this.Hide();
}
else
{
MessageBox.Show("用户名不存在或密码错误!", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
/*退出按钮处理函数*/
private void Button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void user_Load(object sender, EventArgs e)
{
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
}
}
}
4、SQL Service的连接
在VS2010中打开“服务器资源管理器”窗口,如下图3.7中①区所示,然后在②区的“数据连接”条目上右键后选择“添加连接”后弹出右边的窗口在③区选择服务器名称,最后在④区选择要使用的数据库名。
图3.7 数据库的连接
3.2.3 模块实现
1、登录模块
如下图3.8所示,登录界面中显示有三种用户身份,学生,教师,管理员。其中学生只有查询功能,教师能有更多权限,比如成绩的增删改,还有管理员负责用户的管理,对学生和教师用户进行增删改。
图3.8 登录界面
2、学生信息查询模块
使用学生账号[用户名:student 密码:123456] 登录后的界面如下图3.9所示:
图3.9 学生用户界面
3、教师模块
使用教师账号[用户名:teacher 密码:123456]登录后的界面显示如下图3.10所示:
图3.10 教师用户界面
从上图10我们看到,教师模块下面还有以下四个模块:
Ø [学生管理模块]:可以对学生个人信息进行增删改操作;
Ø [成绩管理模块]:进行学生成绩的录入,删除,修改等操作;
Ø [课程管理模块]:可以进行课程信息的增删改操作;
Ø [用户管理模块]:对学生用户进行增删改操作。
4、管理员模块
使用管理员账号[用户名:admin 密码:123456]登录后的界面如下图3.11所示,管理员能对教师账号进行增删改等操作。
图3.11 管理员界面
4 总结
4.1 问题及解决方法
1、数据库连接不上
一开始按照上述方法在VS2010中添加了数据库的连接,但是还是不能登录程序;但是当我打开SQL Service Management Studio 2012的时候就能登录程序,之后百度一查发现是
SQL Service(MSSQLSERVER)和SQL Service(SQLEXPRESS)这两个服务没有开启。开启之后就能正常使用。
2、删除数据出错
在教师用户登录后,对数据进行删除时程序会死掉,后来在调试是发现错误出在insert语句执行时,这说明insert语句执行有问题,一步步跟踪后发现原来是因为这个数据不存在导致删除失败。找到原因之后我在执行删除操作之前先检查一下要删除的数据条目是否存在,如果存在再执行删除操作,否则弹出消息框给出提示。找到这个原因之后,发现其他的操作如修改,添加都存在这个漏洞,所以我就一并修改好了。
4.2 实验体会
这次数据库的实践运用使我对数据库的使用有了更加深入的认识和了解,如更深刻的掌握数据的定义创建,以及数据表的创建和数据的插入,还有数据表的主键与外键的功能和使用方法。此外,对于C#的可视化设计也有了直观的掌握和了解。还有一点就是关于程序代码中数据库操作部分的嵌入是整个程序的最主要部分,在C#代码中嵌入数据库的操作指令,使得一个简单的程序有了数据库的支持后瞬间就变得很牛的感觉。这次实验虽然说只是做了一个小的程序,但是这种数据库软件系统的开发方法和流程我已经掌握了,对于以后的学习将有很大的帮助。
参考文献
[1] 王珊, 萨师煊. 数据库系统概论(第四版). 北京:高等教育出版社, 2006: 198-202
展开阅读全文