数据库课程设计报告.docx

上传人:wj 文档编号:4875765 上传时间:2023-05-07 格式:DOCX 页数:23 大小:381.76KB
下载 相关 举报
数据库课程设计报告.docx_第1页
第1页 / 共23页
数据库课程设计报告.docx_第2页
第2页 / 共23页
数据库课程设计报告.docx_第3页
第3页 / 共23页
数据库课程设计报告.docx_第4页
第4页 / 共23页
数据库课程设计报告.docx_第5页
第5页 / 共23页
数据库课程设计报告.docx_第6页
第6页 / 共23页
数据库课程设计报告.docx_第7页
第7页 / 共23页
数据库课程设计报告.docx_第8页
第8页 / 共23页
数据库课程设计报告.docx_第9页
第9页 / 共23页
数据库课程设计报告.docx_第10页
第10页 / 共23页
数据库课程设计报告.docx_第11页
第11页 / 共23页
数据库课程设计报告.docx_第12页
第12页 / 共23页
数据库课程设计报告.docx_第13页
第13页 / 共23页
数据库课程设计报告.docx_第14页
第14页 / 共23页
数据库课程设计报告.docx_第15页
第15页 / 共23页
数据库课程设计报告.docx_第16页
第16页 / 共23页
数据库课程设计报告.docx_第17页
第17页 / 共23页
数据库课程设计报告.docx_第18页
第18页 / 共23页
数据库课程设计报告.docx_第19页
第19页 / 共23页
数据库课程设计报告.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据库课程设计报告.docx

《数据库课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据库课程设计报告.docx(23页珍藏版)》请在冰点文库上搜索。

数据库课程设计报告.docx

数据库系统课程设计

学生姓名:

班学号:

指导教师:

中国地质大学

年月日

教务管理系统

1、需求分析

教务管理系统

该教学系统主要提供数据维护、学生选课和教师授课信息查询功能。

其实现的功能(即其包含的查询)有:

系统中对教师、学生基本信息的录入;系统中对教师、学生的基本信息查询;查询学生的选课情况;查询教师的授课情况;还包括学生选课功能。

该数据库系统包括学生密码表、学生信息表、教师信息表、教师密码表、学生选课表、课程匹配表,管理员密码表七个关系表,基本情况如下:

三张密码表均有相应账户和密码;教师信息表有工作证号、姓名、性别、族别、政治面貌、出生年月、联系方式、所在系、所在学院、职称;学生表有学号、姓名、性别、族别、政治面貌、出生年月、联系方式、班号、所在系、所在学院;课程有课程名、学分、名额、上课时间信息;授课表有课程号、工作证号信息;学生选课表有课程名称、课程号、授课老师、授课时间、授课地点、剩余容量、工作证号、成绩。

课程匹配表则有课程号,学号,学生姓名,班号,所在专业,所在学院,成绩。

每个学生都属于一个班,每个教师也都属于一个系。

一名教师可以教多门课,一门课可以有几位主讲老师,一名同学可以选多门课。

学生、教师都有可以有重名,工作证号、学号可以作为标识。

系统中的实体:

①教师:

工作证号、姓名、性别、职称、电话等;

②学生:

学号、姓名、性别、出生年月、职位、电话等;

③班级:

班号、最低总学分、人数等;

④系:

系代号、系名、系办公室电话等;

⑤课程:

课序号、课名、学分、上课时间、名额等。

实体间关系:

①每个学生都属于一个班,每个班都属于一个系,每个教师也都属于一个系;

②每个班的班主任都由一名教师担任;

③一名教师可以教多门课,一门课可以有几位主讲老师,但不同老师讲的同一门课其课序号是不同的(课序号是唯一的);

④一名同学可以选多门课,一门课可被若干同学选中;

⑤一名同学选中的课若已学完,应该记录有相应成绩;

⑥本单位学生、教师都有重名,工作证号、学号可以作为标识。

系统的需求:

①教学系统主要提供数据维护、选课和信息查询;

②系统中各对象的基本信息录入与查询;

③指定班、系的学生信息查询;

④学生的成绩、学分情况查询;

⑤教师授课情况和学生选课情况查询。

系统的组成:

教务管理系统包括教师管理子系统、学生管理子系统、管理员管理子系统。

其中各个系统中拥有独自的一套查询、添加、删除、更新操作。

系统管理员进行数据维护的操作。

2、概念设计

(1)概念模型(E-R图):

①选课E-R图

学生

课程恩

选课课

m

n

学号

年龄

性别

所在系

课程号

课名

学分

名额

①授课E-R图

工作证号

课程号

姓名

教师

课程恩

授课

m

n

课名

性别

学分

电话

名额

①总E-R图

m

学生

选课

学号

姓名

专业

课程恩

教师

授课

n

m

n

工作证号

课程号

姓名

电话

(2)数据字典:

①数据项

编号

实体

数据项名

数据项含义说明

数据类型

长度

与其他数据项的逻辑关系

1

教师

工作证号

区别老师的数据项

Bigint

20

决定姓名性别等教师属性

2

姓名

允许重名

Char

10

决定性别等教师属性

3

性别

老师性别

Char

10

 

4

所在系

所在系

Char

10

 

5

电话

老师的联系方式

Bigint

20

 

6

用户名

登录验证

Char

20

7

用户密码

登录验证

Char

20

8

所在学院

所在学院

Char

30

9

族别

所属民族

Char

30

10

职称

老师的职称

Char

20

11

政治面貌

老师的政治面貌

Char

20

12

学院电话

学院电话

Bigint

20

13

出生年月

老师出生年月

Char

20

14

学生

学号

区别学生的数据项

Bigint

20

决定姓名性别等学生属性

15

学生姓名

允许重名

Char

10

16

学生性别

学生性别

Char

10

 

17

出生年月

允许重复

Char

 

 

18

所在系

允许空值

Char

10

 

19

班号

学生联系方式

Char

11

 

20

用户名

登录验证

Char

20

21

用户密码

登录验证

Char

20

22

所在学院

所在学院

Char

30

23

族别

所属民族

Char

30

24

政治面貌

学生的政治面貌

Char

20

25

联系方式

学生联系方式

Bigint

26

课程

课程号

区别课程的数据项

Char

10

决定课名学分等课程属性

27

课程名

课程名称

Char

10

 

28

学分

所含学分

Char

10 

 

29

上课时间

上课日期

Char

30 

 

30

名额

课程限制最高人数

Char

10 

 

31

选课

课程号

学生所选课课程号

Char

10 

由课程表课程号和学生表学号决定

32

学号

学生学号

Char

20 

33

授课

课程号

学生所选课课程号

Char

10

由课程表课程号和学生表学号决定

34

工作证号

教师工作证号

nchar

20

②数据流

编号

数据流名

数据流来源

数据流去向

1

查询教师信息

工作证号

教师信息

2

注册教师信息

插入的信息

教师信息

3

查询学生信息

学号

学生信息

4

注册学生信息

插入的信息

学生信息

5

查询课程信息

学号

课程信息

7

选择课程

选课信息

课程匹配表

8

查询选课信息

学号

选课信息

9

查询授课信息

课程号

课程匹配表

总数据流图

录入

选课

查询

评价

5.0更新:

②数据结构

编号

数据结构名

含义说明

组成

1

教师

教师实体

工作证号、姓名、性别、族别、政治面貌、出生年月、联系方式、所在系、所在学院、职称

2

学生

学生实体

学号、姓名、性别、族别、政治面貌、出生年月、联系方式、所在系、所在学院、班号

3

课程

课程实体

课程号、课名、余量、上课时间、上课地点

4

选课

学生实体和课程实体

学号、课程号、成绩

5

任教

教师实体和课程实体

工作证号、课程号

3、逻辑结构设计

①关系的描述

根据数据库系统设计的最基本的要求,消除依赖集F中的部分依赖和传递依赖,消除插入异常、删除异常、修改异常,达到第三范式无损链接和保持依赖,从而得到以下关系模型以及其主码:

教师(工作证号、姓名、性别、电话、所在系、用户名、用户密码)

学生(学号、姓名、性别、年龄、所在系、班号、用户名、用户密码)

课程(课程号、课程名、学分、名额、上课时间)

选课(课程号、学号)

授课(课程号、工作证号)

以上加下划线的表示关系模型里面的主码。

②实体间的联系分析

教师—班级:

1:

1;

系—教师:

1:

n;

系—班级:

1:

n;

班级—学生:

1:

n;

课程—教师:

m:

n;

课程—学生:

m:

n

4、物理设计

4.1物理存储结构

编号

数据存储名

说明

输入的数据流

输出的数据流

1

教师信息表

存取教师信息

教师实体其中一项或多项项信息

教师信息或任课信息

2

学生信息表

存取学生信息

学生实体其中一项或多项项信息

学生信息或选课信息

3

选课信息表

存取课程信息

课程实体其中一项或多项项信息

课程信息或选课信息或任课信息

4

课程匹配表

存取选课信息

学生所有选课记录

选课信息或课程信息

4.1.1数据库

我本次课程设计采用了SQLsever平台进行存储建立基本表与信息。

编写关系模式,载入数据。

其存在多种存取方法。

并且首先要运行调试软件的运行恢复部分,确保数据日后的转储与恢复。

4.1.2基本表

Student表

------------------------------

DROPTABLEIFEXISTS`Student`;

CREATETABLE`student`(

`学号`bigint()NOTNULL,

`姓名`char(30)NOTNULL,

性别`char(10)DEFAULTNULL,

`族别`char(30)NOTNULL,

`政治面貌`char(20)NOTNULL,

`出生年月`char(30)NOTNULL,

`联系方式`bigint()NOTNULL,

`班号`bigint()NOTNULL,

`所在专业`char(20)NOTNULL,

`所在学院`char(20)NOTNULL,

PRIMARYKEY(`学号`),

KEY`姓名`(`姓名`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

------------------------------

Teacher表

------------------------------

DROPTABLEIFEXISTS`Teacher`;

CREATETABLE`Teacher`(

`工作证号`bigint()NOTNULL,

`姓名`char(30)NOTNULL,

性别`char(10)DEFAULTNULL,

`族别`char(30)NOTNULL,

`政治面貌`char(20)NOTNULL,

`出生年月`char(30)NOTNULL,

`联系方式`bigint()NOTNULL,

`职称`char(20)NOTNULL,

`所在专业`char(20)NOTNULL,

`所在学院`char(20)NOTNULL,

‘学院电话’char(20)NOTNULL,

PRIMARYKEY(`工作证号’)

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

------------------------------

选课表

------------------------------

DROPTABLEIFEXISTS`studentchoose`;

CREATETABLE`studentchoose`(

`cNum`varchar(7)NOTNULL,

`Name1`varchar(5)NOTNULL,

`Unit`varchar(20)NOTNULL,

PRIMARYKEY(`cNum`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

------------------------------

--studentchoose表

------------------------------

DROPTABLEIFEXISTS`stock`;

CREATETABLE`stock`(

`课程名称`char(30)NOTNULL,

`课程号`bigint()NOTNULL,

`授课老师`char(30)NOTNULL,

`授课时间`char(30)NOTNULL,

`剩余容量`char(30)NOTNULL,

`工作证号`char(30)NOTNULL,

`成绩`bigint()NOTNULL,

PRIMARYKEY(`课程号`),

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

------------------------------

--ATapparier表

------------------------------

DROPTABLEIFEXISTS`ATapparier`;

CREATETABLE`ATapparier`(

`课程号`bigint()NOTNULL,

`学号`bigint()NOTNULL,

`姓名`char(30)NOTNULL,

‘班号’char(20)NOTNULL,

`所在专业`char(20)NOTNULL,

`所在学院`char(20)NOTNULL,

‘成绩’char(20)NOTNULL,

PRIMARYKEY(`课程号`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

DROPTABLEIFEXISTS`ATapparier`;

CREATETABLE`ATapparier`(

`课程号`bigint()NOTNULL,

`学号`bigint()NOTNULL,

`姓名`char(30)NOTNULL,

‘班号’char(20)NOTNULL,

`所在专业`char(20)NOTNULL,

`所在学院`char(20)NOTNULL,

‘成绩’char(20)NOTNULL,

PRIMARYKEY(`课程号`)

)ENGINE=InnoDBDEFAULTCHARSET=utf8;

4.2索引设计

4.2.1存储安排方法选择:

教务管理系统是一个多用户共享系统,对同一个关系要建立多条存取路径才能满足多用户的多种应用要求。

数据库管理系统一般提供多种存取方法:

第一类是缩阴方法,目前主要是B+树索引方法;第二类是聚簇方法;第三类是Hash方法。

我们现在主要采用B+树索引存取方法。

4.2.2索引

一个属性经常在查询条件中出现,则考虑这个(组)属性上建立索引(或组合索引);如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引;如果一个(组)属性经常在链接操作的链接条件中出现,则考虑在这个(组)属性上建立索引——学号,工作证号,课程号。

4.2.3存储路径的建立

我将表和索引放在不同的磁盘上,在查询时,由于磁盘驱动器秉性工作,可以提高物理I/O读写的效率;将比较大的表,如“选课信息”,分别放在两个磁盘上,以加快存取速度,这在多用户环境下特别有效;另外将日志文件与数据库对象9表、索引等)放在不同的磁盘上,以改进系统的性能。

5、系统实施

5.1DBMS&语言选择

我选用的是SQLSever系统的语言,基于MicrosoftVisualStudio2010平台呃C#语言编写的界面。

较为简单容易。

5.2数据输入

在SQLSevel中进行一些数据的手动输入(或查询语句进行输入)用以进行测试,之后用户可在管理系统中进行相关信息的添加。

Studentchoose表初始信息:

Studentbase表初始信息:

Teacherbase表初始信息:

Adminmessage表初始信息:

5.3编写代码

因为要连接数据库,采用VS2010的连接工具来进行数据库的连接。

Stringconn="DataSource=.;InitialCatalog=cyhstclass;IntegratedSecurity=True";

//链接语句

在编写代码的时候遇到很多问题,比如常见的几个问题就是少添加头文件,链接查询不对,SQL语句使用不对,高级查询等等一系列问题。

5.4过程实施

在实现选课功能的时候,首先在数据库内对本学期要开设的课程进行预制,之后学生选课,只能一次选择一门,之后输入课程号,同时将登陆时的学会设置为全局变量,在C#中进行换页传值,将学号等个人信息在学生主页进行显示,选课时,则将所选课程与自己的学号以插入的方式插入Studentchoose,之后,之后分别从学生选课表调用显示到学生课程信息,教师授课信息中,之后在教师批改成绩时,将成绩与studentchoose表联系对应,完成学生-课程-成绩的三位一体的对应关系,命名为STapparier,之后进行更新操作,并同步SQL查询显示到学生成绩查询界面。

管理员则是对所有信息进行汇总查询修改,将不同信息封装起来,对于教师和学生实体部分显示,对于管理员全部显示。

同时对于学生还可进行注册报道,数据库中为每个学生提供了一个学号和初始密码,学生到校后进入教务系统修改密码,补充个人资料,完成数据入库,以供后期使用。

6、运行维护

一、恢复数据库的方法

对于事物内部故障:

恢复时要在不影响其他事务运行的情况下,强行回滚该事务,即撤销该事务已经做出的任何的对数据库的修改;

对于系统故障:

一方面,在系统重新启动时让所有非正常终止的事务滚回,强行撤销所有未完成事务;另一方面,把已完成的事务提交的结果重新写入数据库;

对于介质故障:

在故障发生前对数据库进行转储,即使用数据库镜像功能,根据实际情况要求自动把整个数据库或其中的关键数据复制到另一个磁盘上,防患于未然。

二、数据库恢复实现技术

1、采用转储的方法定期地将整个数据库复制到磁带或另一个磁盘上保存起来,称为后备副本或后援副本。

(动态转储和静态转储);

2、通过登记日志文件,进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复。

三、数据库恢复策略

1、事务故障的恢复:

(1)反向扫描日志文件,查找该事务的更新操作;

(2)对该事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库;

(3)继续反向扫描日志文件,查找该事物的其他操作,做同样处理,直到事物开始标志为止。

2、系统故障的恢复:

(1)正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入重做队列。

同时找出故障发生时尚未完成的事务,将其事务标识记入撤销队列。

(2)反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。

(3)正向扫描日志文件,对每个REDO事务重新执行日志文件登记操作。

即将日志记录中“更新前的值”写入数据库。

3、介质故障的恢复:

重装数据库

(1)装入最新的数据库后备副本,使数据库恢复到最近一次转储时的一致性状态。

(2)装入相应的日志文件副本,重做已完成的事务。

7、总结

数据库课程设计是上大学以来的最痛苦的一个课程设计。

在上学期平时的实习中,我觉得数据库相较于C++程序编写与有关运用数据结构的程序编写来说,相对容易简单。

本以为这次的课程设计也不过很简单就能完成。

可是万万没想到,真的从设计到开发出一个数据库系统远比编程可怕多了。

首先,数据库的需求设计简直是让我们这种之前没有过设计经验的人摸不到头脑,不知从何下手。

也可能由于上学期在学习数据库时没有让我们想着设计一个大型的需要注意细节的数据库,所以感觉概念都很模糊。

数据字典是啥啊?

不是先画ER图吗?

数据流图又是什么。

那ER图画完就能建表了?

那么数据库和EXEL表格又有什么区别啊等等此类我总会冒出的小白问题层出不穷。

在三个题目:

教务、书店、病房中,我选择了看起来好像参与者比较少,比较简单的教务管理系统。

但是着手设计起来真的是很难,因为个人主观的因素比较大,比较灵活,最后做成一个什么样子的数据库是由你自己来决定的,所以有一些度要自己把握。

如果放开了去想,去做,都会复杂庞大到无法完成。

就在我想着自己构想的庞大数据库该如何实现复杂的功能时,感觉很恐怖。

但还是硬着头皮开始做。

一开始遇到很大挫折,在尝试了两天的C++后,我觉得很难,于是,开始自学C#,相比C++,C#相对简单一点,去图书馆翻遍了《C#编程宝典》之类的书后,在室友引导下开始设计。

一开始觉得自己设计的数据库没问题,觉得不难,但是越往后做发现很多数据再传递的时候走不到共享,一方面是自己编程能力不够,对于DATAGRIDVIEW这个控件掌握太少,在显示值,单元格传值的时候很难,后来决定改变设计,从改变SQL的表格入手,删除了不必要的表,尽量用少的表完成。

这样一来对窗体设计要求更高,还有就是对SQL高级查询语句的要求更高。

现在想想发现最大的问题一个是C#中Datagridview控件的单元格与数据库交互传值,另一个就是SQL高级复杂的查询语句使用与C#中的textbox,或者数据库其他表的链接查询。

这两个问题在最后几天难住我了,最后和学长,室友,以及大量去论坛求助,百度找方法,看博客加上自己摸索,一个一个解决了,受益匪浅。

除此之外遇到的问题就是数据库的设计问题,要实现更多的功能,一个方法是将各个数据分装在各个表里,调用一个个单体,但是这样造成数据过于庞大,同样最好的解决方法是少量的存储空间,大量的调用,将常用的数据匹配在一起,这点在我的STapparier表中有所体现,将实体的主键找到相应的联系装在一个表里,之后调用其他表进行自然连接,实现调用,这样层次清楚,也达到了三范式。

但是最后设计出来的数据库和我最初的设计的差别还是蛮大,所以我认为好的数据库是改出来的,好的数据库很难一次成功,每一次实践都是我们下一场设计的宝贵经验。

通过这次课程设计我知道为什么系统分析师会这么抢手了。

也许程序员的工作评估是一个程序的时间复杂度与空间复杂度,那么系统分析师的工作评估可能就是整个系统的信息量存储是否高效,增删改查等操作是否容易进行,如何把数据存储的更合理的问题了。

显然,系统分析师的工作更加宏观,而且更大一部分影响着整个运行效率。

写到这里我不由得想到学校那个经常崩溃的教务系统。

所以对一个商家一个公司而言,好的数据库系统是尤为重要的,甚至可以影响到公司未来的发展,增加竞争力。

除此之外,我觉得每一次有难度的课程设计对于我来说都像一次挑战,一次历练。

从没想过自己可以做成平时浏览的网页一样的界面,也从没想过自己能做出一个有许多功能按钮的窗体实现的系统。

虽然实习的过程每天都很痛苦,绞尽脑汁思考着,一步不对,又要重新改,重新做是很痛苦的。

就比如昨天还在熬夜赶报告。

但是经历了这个过程,逼自己一把,看到最后的东西,心里还是很欣慰很有成就感的。

我觉得人的潜能是无穷的,有时候就需要逼自己一把,不要偷懒,勤奋一些,让自己学习更多,进步更大,从而体会到人生的乐趣与意义,内心更加强大地生活下去。

总的来说,在数据库建表的过程中,一开始没有按照数据库规范建表,导致后边产生一系列问题,又重新建立数据库,做了很多无用功,这才意识到按步骤规范建立数据库的重要性。

由于C#、JAVA等语言在平常学习中没有涉及到,使得本次数据库系统设计变得相对

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2