1.1需求分析
数据库是一种存储数据并对数据进行操作的工具。数据库的作用在于组织和表达信息,简而言之,数据库就是信息的集合。计算机的数据库可以分为两类:非关系数据库和关系数据库。关系数据库中包含了多个数据表的信息,数据库含有各个不同部分的术语,如记录、域等。
SQLserver 2005就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。SQL 的优点在于它集数据查询、数据操纵、数据定义和数据控制功能于一体。
通过调查本地的学校,根据学校的具体情况设计学生选课信息管理系统。主要功能有:
1. 学生管理:学生信息查询、插入、删除、修改等
2. 选课管理:选课信息查询、插入、删除、修改等
3.成绩管理:成绩的查询。
4. 系统管理:操作员信息的管理
5. 系统维护:如数据安全管理(含备份与恢复)、操作员管理、权限设置等

1.2数据字典
数据流图表达了数据与处理的关系,数据流图作为直观了解系统运行机理的手段,并没有具体描述个类数据的细节,只有通过数据字典进一步细化才能对系统的需求得到具体而确切的了解。数据字典用来说明数据流图中出现的所有元素的详细定义和描述,包括数据流、加工处理、数据存储、数据的起点和终点或外部实体等。
数据字典包括的项目有数据项、数据结构、数据流、数据存储、加工逻辑和外部实体。可使用一些符号来表示数据结构、数据流和数据存储的组成。
数据元素 |
数据类型 |
长度 |
数据来源 |
学号 |
char |
9 |
学生表 |
学生姓名 |
char |
20 |
学生表 |
性别 |
char |
2 |
学生表 |
年龄 |
smalldatetime |
default |
学生表 |
所在系 |
char |
20 |
学生表 |
课程号 |
char |
4 |
课程表 |
课程名 |
char |
40 |
课程表 |
选修课 |
char |
4 |
课程表 |
学分 |
char |
4 |
课程表 |
学号 |
char |
5 |
成绩表 |
课程号 |
char |
3 |
成绩表 |
成绩 |
char |
3 |
成绩表 |
管理员ID |
char |
4 |
管理员表 |
管理员姓名 |
char |
12 |
管理员表 |
权限 |
char |
20 |
管理员表 |
(1)学号={学号,唯一标识学生,类型:char,长度:9,与课程号唯一标识这门课成绩}。
2.1 系统E-R图


表2-1 学生信息表Student的表结构
主码
|
列 名
|
数据类型
|
宽度
|
小数位
|
空否
|
备 注
|
Pk
|
Sno
|
Char
|
9
|
|
N
|
学号
|
|
Sname
|
Char
|
20
|
|
N
|
姓名
|
|
Ssex
|
Char
|
2
|
|
Y
|
性别
|
|
Ssage
|
SmallDatetime
|
|
|
Y
|
出生日期
|
|
Sdept
|
Char
|
20
|
|
Y
|
所在系
|
表2-2 课程信息表Course的表结构
主码
|
列 名
|
数据类型
|
宽度
|
小数位
|
空否
|
备 注
|
Pk
|
Cno
|
Char
|
4
|
|
N
|
课程代码
|
|
Cname
|
Char
|
40
|
|
N
|
课程名称
|
|
Cpno
|
char
|
4
|
|
Y
|
先修课程
|
|
Credit
|
Decimal
|
4
|
1
|
Y
|
学分
|
表2-3 选课成绩表SC的表结构
主码
|
列 名
|
数据类型
|
宽度
|
小数位
|
空否
|
备 注
|
Pk
|
Sno
|
Char
|
5
|
|
N
|
学号
|
Cno
|
Char
|
3
|
|
N
|
课程代码
|
|
Grade
|
Decimal
|
3
|
1
|
Y
|
成绩
|
表2-4 管理员表Admin的表结构
主码
|
列 名
|
数据类型
|
宽度
|
小数位
|
空否
|
备 注
|
Pk
|
Admin_id
|
Char
|
4
|
|
N
|
操作员编号
|
|
Admin_name
|
Char
|
12
|
|
N
|
操作员姓名
|
|
Permission
|
Char
|
20
|
|
Y
|
权限
|
2.2初始关系模式
Student(Sno,Sname,Ssex,Ssage,Sdept)
其中各项含义分别为:学生(学号,姓名,性别,年龄,所在系)
Course(Cno,Cname,Cpno,Credit)
其中各项含义分别为:课程(课程代码,课程名称,先修课程,学分)
SC(Sno,Cno,Grade)
其中各项含义分别为:选修(学号,课程代码,成绩)
Admin(Amin_id,Admin_name, Permission)
其中各项含义分别为:操作员(操作员编号,操作员姓名,权限)
2.3规范化处理
经过对初始关系模式的规范化处理以下关系模式中不存在部分函数依赖和传递函数依赖,已经达到3NF。(下划线代表主码,斜体外码)
Student(Sno,Sname,Ssex,Ssage,Sdept)
Course(Cno,Cname,Cpno,Credit)
SC(Sno,Cno,Grade)
Admin(Admin_id,Admin_name,Permission)
3.1物理结构
数据库在物理上的存储结构与存储方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是物理结构设计。
数据库的物理结构设计通常分为两步:
(1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构;
(2)对物理结构进行评价,评价的中的是时间和空间效率。
表2-5 学生信息表Student的表索引表
索引
|
列 名
|
数据类型
|
宽度
|
主
|
Sno
|
Char
|
9
|
无
|
Sname
|
Char
|
20
|
无
|
Ssex
|
Char
|
2
|
无
|
Sage
|
SmallDatetime
|
|
无
|
Sdept
|
Char
|
20
|
表2-6 课程信息表Course的索引表
索引
|
列 名
|
数据类型
|
宽度
|
主
|
Cno
|
Char
|
4
|
无
|
Cname
|
Char
|
40
|
无
|
Cpno
|
Char
|
4
|
无
|
Credit
|
Decimal
|
4
|
表2-7 选课成绩表SC的索引表
索引
|
列 名
|
数据类型
|
宽度
|
主
|
Sno
|
Char
|
9
|
Cno
|
Char
|
4
|
无
|
Grade
|
Decimal
|
5
|
表2-8 操作员表Admin的索引表
索引
|
列 名
|
数据类型
|
宽度
|
主
|
Admin_id
|
Char
|
4
|
无
|
Admin_name
|
Char
|
12
|
无
|
Permission
|
Char
|
20
|
3.2视图
用SQL管理工具建立常用的一个视图,即学生_成绩视图。
菜单栏中单击工具→ 向导→ 数据库→ 创建视图向导,选择你所要建的试图的对象,选择列名,按照提示,最后单击完成即可。
使用SQL语句建立视图的命令如下:
ps(此处本该数据表建成以后再创建视图,为啦清楚表达物理结构设计所以提前)
create view 学生_成绩
as
select sc.sno,sname,course.cno,cname,grade
from student join sc on student.sno= sc.sno
join course on course.cno=sc.cno
|
4.1数据库物理设计完成之后,需要用RDBMS提供的数据定义语言和其他使用程序将数据库逻辑设计和物理设计结果严格描述出来,成为DBMS可以接受的源代码,在经调试产生目标文件。
用SQL语言建数据库和表代码如下:
学生选课信息管理系统数据库代码如下:
Create database 学生选课管理系统
On
(Name=mydatabase1,
Filename='d:\数据库\mydatabase.mdf',
Size=3,
Maxsize=10,
Filegrowth=1),
(Name=mydatabase2,
Filename='d:\数据库\mydatabase.ndf',
Size=5,
Maxsize=15,
Filegrowth=2)
Log on
(Name=mydatabase_log,
Filename='d:\数据库\mydatabase_log.ldf',
Size=5,
Maxsize=10,
Filegrowth=1)
|
学生选课信息管理系统数据表代码如下:
create table Student(
Sno char(9)primary key,
Sname char (20) not null,
Sex char(2)check (sex in('男','女')),
Sbirth smalldatetime,
Sdept char(20)
);
go
create table Course(
Cno char(3)primary key,
Cname char(40)not null,
Cpno char(4),
Credit Decimal(3,1)
)
go
create table SC(
Sno char(9)references Student(Sno),
Cno char(4)references Course(Cno),
Grade decimal(5,1),
constraint pk primary key(Sno,Cno)
)
go
create table Admin(
Admin_id char(9)primary key,
Admin_name char(12)not null,
Permission char(20)default '0'
)
go
|
数据的载入
INSERT
INTO <表名>[(<属性列1>[,<属性列2>…)]
VALUES(<常量1>[,<常量2>]);
以学生表为例插入输入如下:PS(学号是主码,故不可以相同)
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
values('200215121','李勇','男','20','CS');
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
values('200215122','刘晨','女','19','CS');
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
values('200215123','王敏','女','18','MA');
insert into Student(Sno,Sname,Ssex,Sage,Sdept)
values('200215125','张立','男','19','IS');
insert into Student(Sno,Sname,Ssex,Sage,Sdept) |
数据库的修改操作
UPDATE <表名>
SET<列名>=<表达式>
[WHERE<条件>];
例如:在学生表中修改学号为’200215121’的所在系为’IS’。
update student
set sdept='IS'
where sno='200215121'
|
数据库的删除操作
DELETE
FROM<表名>
[WHERE<条件>];
例如:删除学号为’200215124’的相关信息
delete
from student
where sno='200215124'
|
连接数据库和添加课程de代码如下:
private void button1_Click(object sender, EventArgs e)
{string s = "server=.;database=学生选课管理系统;integrated security=true;";
SqlConnection conn =new SqlConnection();
conn.ConnectionString = s;
SqlCommand cmd = new SqlCommand();
string sql = string.Format("insert into Course (Cno,Cname,Cpno,Ccredit) values('{0}','{1}','{2}','{3}')",textBox1.Text,textBox2.Text,textBox3.Text,textBox4.Text);
cmd.CommandText = sql;
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("添加成功!");
}
|
删除代码如下:
修改课程信息
private void button1_Click(object sender, EventArgs e)
{
DialogResult r = MessageBox.Show("你确实要删除吗?","提示", MessageBoxButtons.YesNo);
if (r == DialogResult.No) return;
string s = "server=.;database=学生选课管理系统;integrated security=true;";
SqlConnection conn =new SqlConnection();
conn.ConnectionString = s;
SqlCommand cmd = new SqlCommand();
string sql;
sql = string.Format("delete from Course where Cno='{0}'", textBox1.Text);
cmd.CommandText = sql;
cmd.Connection = conn;
conn.Open();
int n = cmd.ExecuteNonQuery();
conn.Close();
MessageBox.Show("删除" + n +"条数据");
|
|