学生选课系统数据库设计

来源:互联网 发布:windows xp声卡驱动 编辑:程序博客网 时间:2024/05/01 17:22

1.1需求分析

数据库是一种存储数据并对数据进行操作的工具。数据库的作用在于组织和表达信息,简而言之,数据库就是信息的集合。计算机的数据库可以分为两类:非关系数据库和关系数据库。关系数据库中包含了多个数据表的信息,数据库含有各个不同部分的术语,如记录、域等。

SQLserver 2005就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。SQL 的优点在于它集数据查询、数据操纵、数据定义和数据控制功能于一体。

通过调查本地的学校,根据学校的具体情况设计学生选课信息管理系统。主要功能有:

1. 学生管理:学生信息查询、插入、删除、修改等

2. 选课管理:选课信息查询、插入、删除、修改等

3.成绩管理:成绩的查询。

4. 系统管理:操作员信息的管理

5. 系统维护:如数据安全管理(含备份与恢复)、操作员管理、权限设置等




1.2数据字典

数据流图表达了数据与处理的关系,数据流图作为直观了解系统运行机理的手段,并没有具体描述个类数据的细节,只有通过数据字典进一步细化才能对系统的需求得到具体而确切的了解。数据字典用来说明数据流图中出现的所有元素的详细定义和描述,包括数据流、加工处理、数据存储、数据的起点和终点或外部实体等。

数据字典包括的项目有数据项、数据结构、数据流、数据存储、加工逻辑和外部实体。可使用一些符号来表示数据结构、数据流和数据存储的组成。

数据元素数据类型长度数据来源学号char9学生表学生姓名char20学生表性别char2学生表年龄smalldatetimedefault学生表所在系char20学生表课程号char4课程表课程名char40课程表选修课char4课程表学分char4课程表学号char5成绩表课程号char3成绩表成绩char3成绩表管理员IDchar4管理员表管理员姓名char12管理员表权限char20管理员表

(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 学生_成绩asselect sc.sno,sname,course.cno,cname,gradefrom student join sc on student.sno= sc.snojoin 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));gocreate table Course(Cno char(3)primary key,Cname char(40)not null,Cpno   char(4), Credit Decimal(3,1))gocreate table SC(Sno char(9)references Student(Sno),Cno char(4)references Course(Cno),Grade decimal(5,1),constraint pk primary key(Sno,Cno))gocreate 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 studentset sdept='IS'where sno='200215121' 


数据库的删除操作

DELETE

  FROM<表名>

[WHERE<条件>];

 

例如:删除学号为’200215124’的相关信息

deletefrom studentwhere 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 +"条数据");        

 

 

 









原创粉丝点击