1、数据库原理与应用课程设计题 目: 高校教材管理系统 课 程 设 计 任 务 书一、课程设计题目: 高校教材管理系统 二、课程设计应解决的主要问题: (1) 实现出版社、教材类型等的管理 _ (2) 实现教材的订购管理 _ (3) 实现教材的入库管理 _ (4) 实现教材的领用管理 _ (5) 创建规则实现教材的书号必须满足意ISBN开头,后跟10个数字的格式,比如:ISBN7302120363 _ (6)创建触发器,实现教材入库和出库时自动修改库存数量 _ (7) 创建存储过程统计各种教材的订购、到货和发放数量;建立数据库相关表之间的参照完整性约束 _ 目 录1 概述 52 需求分析 52.1
2、 数据的分析52.2 数据处理的分析62.3 安全性分析62.4 完整性分析83 概念结构设计 8 3. 1高校教材系统的数据流图93.2 数据字典93.3 E-R图104 逻辑结构设计 134. 1 实体间联系的不同情况 1 34. 2 将E-R图转换成关系模式 1 44. 3 关系模式的分析 1 44. 4 数据库关系图 1 45 物理结构设计 145.1设计存储过程 1 45.2 设计索引 1 56 数据库实施 15 6. 1权 限 设 置 1 56. 2数 据 输 入 1 66.2.1 创 建 数 据 库 1 66.2.2 创建数据表并插入数据1 76.2.3 创建视图 1 86.2.
3、4 数据表的操纵语句 1 9 6. 3 程序设计与调试 1 9 6.3.1 设计索引 1 9 6.3.2 数据查询操作 2 0 6.3.3 使用控制流语句编写程序 2 2 6.3.4 编写自定义函数及调用 2 3 6.3.5 编写存储过程及调用 2 4 6.3.6 编写触发器 2 5 6.3.7 设计游标及其使用 2 67 结束语 278 参考文献 281. 概述1.1 项目背景在高速发展的当今信息社会,越来越多的工作都已经将计算机引入了其中,并且成为了其中不可或缺的一个重要部分。利用计算机进行各项管理与协调,将能大大的提高工作的效率,减小工作强度;在相同的工作强度情况下,利用计算机进行工作,
4、能比原来的老式工作方式提高数倍乃至数十倍的工作的效率,可以大大的减少各项人力及物资损耗,从而使得能够将多余的人力及投入到更需要的地方去。高校管理当然也不例外,所以教材管理的计算机化已刻不容缓。教材管理对于各个学校而言,都是一项很复杂、烦琐的工作,是高校教务管理中的一个重要环节,由于大学专业设置门类多,各专业每期开设课程的种类多,其业务不仅涉及出版部门,而且要面对全校各系的授课教师,各班级的学生,教材科要管理的入出库教材种类非常多,涉及到的人员广,工作量大,再者是近些年来,我国高等教育规模不断扩大,学校学生人数迅速增加,使得教材管理工作更加繁重不堪。所以,一套好的高校教材管理软件,不但能够大大降
5、低工作人员的劳动强度,而且还能提高学校的管理效率和教学水平。学校教材管理主要是由教材计划制定、采购、入库、发放、记账、结算等一系列工作所组成,该工作各院校都有专门机构负责该项工作,通常是教材科。由于学校中专业设置门类多,各专业每期开设课程种类多,各个专业需要订购的课本也不一样,在每学期开学的时候教材的发放便成为了一个繁重的任务。每期教材科管理的入出库教材种类少则几百多则几千种,涉及教材册数少则几千多则几万,涉及人员广,工作量大,再者特别是近年来,我国高等教育规模的不断扩大,学校学生人数迅速增加,使教材管理工作更加繁重不堪。据调查,到目前为止,我国还有许多学校甚至是一些重点院校的教材管理仍为手工
6、管理方式,这种现状不但与现实学校教材管理的业务需求不相适应,并且也与学校信息化建设的发展趋势不相适应,因此,学校教材管理人员目前迫切需要一套方便、高效的计算机化的管理信息系统来代替他们繁琐、低效的传统手工管理方式,并最终实现教材管理的全面自动化。因此,教材管理水平的高低直接影响教学工作的进行、教学质量的提高和合格人才的培养,开发和使用高校教材管理信息系统是改善和提高教材管理水平的一个重要途径。1.2 编写目的本课题旨在解决我校和其他高校教材管理工作还是依靠教材管理人员的手工管理的现状,并且在现有基础上考虑了如何完善和解决现有的两层结构的C/S(客户端/服务器)教材系统本身所固有的缺陷,把两层结
7、构中服务器部分和客户端部分的应用单独划分出来,从而满足大型系统的需求。通过本系统不仅可以方便教材管理人员管理教材,还可以方便教务部门和广大师生查询教材和查看教材管理记录,使教材信息管理工作系统化、规范化、自动化,从而达到提高教材管理效率的目的。1.3 软件定义人员订书、领书、查询教材资料及其书款情况必须在管理员的设置条件下进行。1.4 开发环境本系统使用SQLServer2008Express数据库作为后台的数据管理系统,利用ADO数据库组件连接后台数据库。开发采用的是C#,它是由Microsoft公司开发的Windows程序开发环境,是现在最受欢迎的几种开发工具之一.2. 需求分析2.1 数
8、据的分析教材管理系统主要提供学生以班级为单位能从学校教材管理中心完成每学期领到所订教材的功能,其中包括班级信息、教材管理员信息、财务室信息、教师信息、教材信息、出版社信息。此系统可以让教师增加、删除和修改某一学期所定的教材信息,教材管理员可以依据教师提供的应订教材要求和出版社联系订书,还可以让出版社增加、删除和修改预定教材的信息。如果信息无误,财务室根据学生交的教材费给教材管理员拨款,订书成功后,开学初可以将所定教材成功发放给学生所在班级。2.2 数据处理的分析系统实现功能描述本系统应该实现的功能如下:(1)系统管理模块:首先是对本系统的操作用户设置权限以及用户基本信息的添加、修改、删除其次是
9、设置有系统初始化,能够在系统出现问题或者有大量错误、冗余数据时进行初始化设置,使系统恢复期初始状态;(2)书费管理局模块:财务科根据学生订书情况和教材费用收缴学生订书费用,并记录相应的数据 ; (3)教材出入库模块:教材科根据学生订书数量和教材基本信息想学生发放教材的出库管理和向书商下达供书订单并打印教材报表,便于用户直接查看,实现出版社、教材类型等的管理并实现教材的订购、入库和领用管理;(4)综合查询模块:根据用户的类型和需求查询教材的库存信息,班级信息以及费用收缴信息,创建规则实现教材的书号必须满足以ISBN开头,后跟10个数字的格式,比如:ISBN7302120363 。创建触发器,实现
10、教材入库和出库时自动修改库存数量。创建存储过程统计各种教材的订购、到货和发放数量;建立数据库相关表之间的参照完整性约束 ; (5)统计分析模块:录入班级信息闭和教师单位信息并设置打印报表功能供用户查看然后操作员根据订书情况统计分析学生买书的人数比例和学生不购买教材的原因分析,一次给校方提供相应的数据,便于改进学校的教材管理措施,满足学生对教材的需求;(6)帮助模块:介绍本系统的相关信息和操作指南。2.3 安全性分析(1)系统能抵御瑞星网上公布的病毒的攻击而不至于瘫痪。(2)系统能安全的防范对数据库内容不安全的访问和操作。(3)系统能在断电的情况下,依靠UPS电源确保数据库内容的完整性和安全性。
11、(4)数据库服务端应具备系统使用期间2小时备份一次数据库的功能。(5)系统应用验证用户权限方可使用的功能保障。(6)能完全、直观的体现系统功能,用户能方便快捷的执行某种教材管理工作,能适应屏显分辨率的调整,友好、可操作性强。(7)限于网络配置和C/S结构程序的网络编程实现问题,部分功能可能实现不完美,甚至是暂时无法实现。以下为数据库的用户信息及其权限1班级信息班级 交费财务管理员修改信息删除信息登记信息领书班级信息操作流程图2 教材管理员信息教材管理员管理教材删除信息修改信息登记信息发书 教材管理员信息操作流程图3 财务管理员信息财务管理员拨款教材管理员登记信息删除信息修改信息购买教材 财务管
12、理员信息操作流程图4 教师信息教师选定教材修改人数删除人数统计人数预订教材 教师信息操作流程图5 教材信息教材分类班级删除领取信息修改领取信息登记领取信息被领取 教材信息操作流程图6 出版社信息 出版社出版教材整理信息联系购买商分类被订购 出版社信息操作流程图2.4 完整性分析当向数据库中插入、修改时,系统能够辨别输入的数据是否符合语义,不能的则不能修改成功。3. 概念结构设计从课程设计选题中可以得知,我们设计的高校教材管理系统数据库需具备以下功能:1) 实现出版社、教材类型等的管理;2) 实现教材的订购管理;3) 实现教材的入库管理;4) 实现教材的领用管理;5) 可随时查询教材管理系统中的
13、各种信息;6) 创建规则实现教材的书号必须满足以ISBN开头,后跟10个数字的格式,比如:ISBN7302120363;7) 创建触发器,实现教材入库和出库时自动修改库存数量;8) 创建存储过程统计各种教材的订购、到货和发放数量;建立数据库相关表之间的参照完整性约束。3.1 高校教材系统的数据流图数据流程图3.2 数据字典数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。是一种用户可以访问的记录数据库和应用程序源数据的目录。数据字典最重要的作用是作为分析阶段的工具。数据字典最重要的用途都是供人查询对不了解
14、的条目的解释,在结构化分析中,数据字典的作用是给数据流图上每个成分加以定义和说明。换句话说,数据流图上所有的成分的定义和解释的文字集合就是数据字典,而且在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户的通信。数据库数据字典不仅是每个数据库的中心,而且对每个用户也是非常重要的信息。用户可以用SQL语句访问数据库数据字典。下面是本系统中的数据字典。名字:用户信息描述:使用该软件的人员信息定义:用户信息=登陆账号+真实名字+登陆密码+班级名字:教材基本信息描述:各种教材的详细信息定义:教材信息=教材编号+教材名称+教材作者+出版社+教材版本号名字:入库信息描述:每一种教材的入库详细信息定
15、义:入库信息=教材编号+教材名称+入库单号 +单价+出版社+数量+入库时间名字:订购信息描述:每一种教材订购的详细信息定义:订购信息=订购单号+教材编号+教材名称+数量+单价+供应商+订购日期名字:出库信息描述:每一种教材的出库详细信息定义:出库信息=教材编号+教材名称+数量+单价+出版社+班级名字:管理员信息描述:管理教材的入库和出库的详细信息定义:管理员信息=编号+姓名+性别+电话名字:供应商信息描述:为需求单位提供教材定义:供应商信息=编号+名称+地址+负责人+电话3.3 E-R图下面是各实体的ER图:班级:出版社:订购管理:出库管理:学生:入库管理:供应商管理:高校教材管理系统实现各种
16、管理工作,根据使用者学生与供应商、管理员管理、入库管理、出库的管理、印刷社、教材的关系,构化出本系统整体的ER图:4. 逻辑结构设计数据库的逻辑结构设计就是把概念结构设计阶段设计好的基本ER图转换为与选用的 DBMS产品所支持的数据模型相符合的逻辑结构。由于目前使用的数据库基本上都是关系数据库,因此首先需要将ER图转换为关系模型,然后根据具体DBMS的特点和限制转换为特定的DBMS支持下的数据模型,最后进行优化。在本系统中我们选用的数据库环境是SQL srver2008。4.1 实体型间联系的不同情况(1)一个1:1联系可以转换成一个独立的关系模式,也可以与任意一段对应的关系模式合并。(2)一
17、个1:n联系可以转换成一个独立的关系模式,也可以与n端对应的关系模式合并。(3)一个m:n联系可以转换成一个关系模式。(4)3个或3个以上实体间的一个多元联系可以转换为一个关系模式。(5)具有相同码的关系模式可以合并。4.2 将E-R图转换成关系模式教材(教材编号,教材名称,类型编号,订书单位,出版社名称,出版时间,作者,印张,数量,字数,入库时间)班级(班级编号,班级名称,人数,班长,班长号码,班主任,班主任号码,学院系,学校,入学时间)学生(学号,姓名,学院系,学校,班级)出库(教材编号,教材名称,数量,单价,班级编号,出版社编号,出版时间,出库时间,负责人)入库(教材编号,教材名称,数量
18、,单价,出版社,入库时间,作者,负责人)管理员(管理员编号,管理员名字,性别,电话)供应商(供应商编号,供应商名称,供应商地址,电话,负责人)订购(订单编号,教材编号,教材名称,单价,数量)出版社(出版社编号,出版社名称,电话,负责人,地址)。(横线化的表示是主键)4.3关系模式的分析学生(学号,姓名,学院系,学校,班级),其中,学号为主码,姓名,学院系,学校,班级为非主属性,因为所有非主属性都完全依赖于每个候选码,所有主属性都完全函数依赖于每个不包含它的候选码,但是有属性完全函数依赖于非码的一组属性,所以该关系属于3NF,但不属于BCNF。管理员(管理员编号,管理员名字,性别,电话),其中,
19、管理员编号为主码,管理员名字,性别,电话为非主属性,因为所有非主属性都完全依赖于每个候选码,所有主属性都完全函数依赖于每个不包含它的候选码,没有任何属性完全函数依赖于非码的任何一组属性,所以该关系属于3NF,也属于BCNF。5. 物理结构设计5.1 设计存储过程(1)在“教材管理库”数据库创建无参存储过程,查询各种教材的订购数量create procedure jc_slasselect 教材编号,count(数量) as 数量sl from 订购group by 教材编号go(2)在“教材管理库”数据库创建带output参数的存储过程,用于计算指定的教材订购的总订购金额,存储过程中使用一个输
20、入参数(教材名称)和一个输出参数(总订购金额)create procedure pname jcmc varchar(20),coun int outputasselect coun = 单价*数量 from 订购 where 教材名称 = jcmcgo(3)在“教材管理库”数据库创建带有参数和默认值(通配符)的存储过程,从学生表中返回指定的学生(提供姓名)的信息。该存储过程对传递的参数进行模式匹配,如果没有提供参数,则返回所有学生的信息create procedure student_name name varchar(40)= %asselect * from 学生 where 姓名 li
21、ke namego5.2 设计索引(1)聚合索引和唯一索引创建学生表上按学号升序排的唯一聚合索引id1use 教材管理库gocreate unique clustered index id1 on 学生 (学号)(2)非聚合索引创建学生表上先按学号升序排,学号一样的再按书费降序排的非聚集索引id2use 教材管理库gocreate index id2 on 学生 (学号,书费 desc)6. 数据库实施6.1 权限设置设计登录账户SQL Server,登录名gxjc1,gxjc2及密码create login gxjc1with password=111111,default_database
22、=教材管理库create login gxjc2with password=111111,default_database=教材管理库设计数据库用户系统管理员xtgly,一般用户ybyhcreate user xtgly for login gxjc1create user ybyh for login gxjc2设计架构create schema schema1authorization xtglygocreate schema schema2authorization ybyh设置用户操作权限把“学生”表的全部操作权限授予用户xtgly和ybyhgrant all privileges o
23、n 学生 to xtgly,ybyh把对“教材”表的查询权限授予所有用户grant select on 教材 to public把查询“学生”表和修改学生学号的权限授予用户ybyhgrant select,update(学号) on 学生 to ybyh把对订购表的插入权限授予用户xtgly,允许xtgly再将此权限授予其他用户grant insert on 订购 to xtgly with grant optiongrant insert on 订购 to ybyh with grant option将教材管理库数据库中建表的权限授予ybyhuse 教材管理库grant create tab
24、le to ybyh6.2 数据输入6.2.1 创建数据库T-SQL语句为:CREATE DATABASE 教材管理库ON(NAME =教材管理库,FILENAME=E:DATA教材管理库.MDF,SIZE=5,MAXSIZE=unlimited,FILEGROWTH=10%),FILEGROUP FG1(NAME=教材库,FILENAME=E:DATA教材管理库.NDF,SIZE=10,MAXSIZE=100,FILEGROWTH=1)LOG ON(NAME=教材库LOG1,FILENAME=E:DATA教材管理库LOG1.LDF,SIZE=5,MAXSIZE=50,FILEGROWTH=1
25、),(NAME=教材库LOG2,FILENAME=E:DATA教材管理库LOG2.LDF,SIZE=5,MAXSIZE=50,FILEGROWTH=1)6.2.2创建数据表并插入数据 几个有代表性的数据表的创建T-SQL语句为:USE 教材管理库GOcreate table 班级 ( 班级编号 int not null, 班级名称 varchar(5) not null, 人数 int null, 班长 char(10) null, 班长电话 char(11) null, 班主任 char(10) null, 班主任电话 char(11) null, 学院系 varchar(10) null,
26、 学校 varchar(10) null, 入学时间 datetime null, constraint PK_班级 primary key (班级编号);create table 出库 ( 教材编号 char(14) not null, 班级编号 char(14) not null, 教材名称 varchar(10) null, 数量 int null, 单价 float(5) null, 出版社编号 char(14) null, 出版时间 datetime null, 负责人 varchar(4) null, constraint PK_出库 primary key clustered (
27、教材编号, 班级编号)create table 订购 ( 供应商编号 char(14) not null, 教材编号 char(14) not null, 订单编号 char(14) null, 教材名称 varchar(10) null, 单价 float(5) null, 数量 int null, constraint PK_订购 primary key clustered (供应商编号, 教材编号);create table 入库 ( 管理员编号 char(14) not null, 教材编号 char(14) not null, 教材名称 varchar(10) null, 出版社 v
28、archar(10) null, 数量 int null, 入库时间 datetime null, 单价 float(5) null, 作者 varchar(4) null, 负责人 varchar(4) null, constraint PK_入库 primary key clustered (管理员编号, 教材编号);create table 学生 ( 学号 char(10) not null, 班级编号 char(10) null, 姓名 varchar(4) not null, 学校 varchar(10) null, 院系 varchar(10) null, 书费 char(6) n
29、ull, constraint PK_学生 primary key (学号);6.2.3 创建视图(1)创建“学生_班级”视图,包括学生的学号,班级编号,姓名,和他们的学校和书费use 教材管理库gocreate view 学生_班级asselect 学号,班级.班级编号,姓名,班级.学校,书费from 班级,学生 where 班级.班级编号=学生.班级编号 and 班级.学校=学生.学校 go(2)创建“订购统计视图”,求每种教材的总订购量,要求包括教材编号和教材名称use 教材管理库gocreate view 订购统计视图asselect 订购.教材编号,订购.教材名称,SUM (订购.数
30、量) AS 总库存量from 订购,教材 where 订购.教材编号= 教材.教材编号 and 订购.教材名称=教材.教材名称 and 订购.数量=教材.数量group by 订购.教材编号,订购.教材名称go(3)创建视图来查看出库和入库中的教材数量的信息use 教材管理库gocreate view v_example(教材编号,出库数量,入库数量)As select 教材.教材编号,出库.数量 ,入库.数量 from 教材,出库,入库where 教材.教材编号 = 出库.教材编号 and 教材.教材编号 = 入库.教材编号6.2.4 数据表的操纵语句在“学生”表中插入一行数据(学号、班级编
31、号、姓名、书费)为(120506、6、张三、500)USE 教材管理库GOINSERT into 学生(学号,班级编号,姓名,书费)VALUES(120506,6,张三,500)在“管理员”表中的“性别”字段的值为“男”USE 教材管理库GOUPDATE 管理员SET 性别=男在“学生”表中,将学号为120501的学生姓名改为王武USE 教材管理库GOUPDATE 学生 SET 姓名=王武WHERE 学号=120501在“学生”表中添加一字段“备注”varchar(20),“备注”字段信息为“已毕业”USE 教材管理库GOALTER TABLE 学生ADD 备注 varchar(20)(2)U
32、PDATE 学生SET 备注=已毕业删除“学生”表中120501号学生的记录USE 教材管理库GODELETE 学生 WHERE 学号=1205016.3程序设计与调试6.3.1 设计索引(1)聚合索引和唯一索引创建学生表上按学号升序排的唯一聚合索引id1use 教材管理库gocreate unique clustered index id1 on 学生 (学号)(2)非聚合索引创建学生表上先按学号升序排,学号一样的再按书费降序排的非聚集索引id2use 教材管理库gocreate index id2 on 学生 (学号,书费 desc)6.3.2 数据查询操作(1)确定集合查询查询供应商表的
33、所有记录use 教材管理库goselect * from 班级(2)字符匹配查询查询入库表中所有姓“张”的作者的信息select * from 入库where 作者 like 张%(3)聚合函数等统计数据的查询统计查询学生表中学生的总人数select count(*) from 学生查询信息学院学生的最高书费,最低书费和平均书费select max(书费) as 最高书费, min(书费) as 最低书费 from 学生 where 院系=信息学院查询出库表中教材数量的平均值,平均值显示列标题为“平均数量”select AVG(数量) as 平均数量 from 出库(4)分组查询查询“教材管理
34、库”中男生和女生的人数select 性别,COUNT(性别)from 管理员group by 性别(5)连接查询内连接:在“教材管理库”中查询每个学生的学号,姓名和班级名称select 学生.学号,学生.姓名,班级.班级名称from 学生 inner join 班级 on 学生.班级编号=班级.班级编号外连接:在“教材管理库”中查询每个学生及其班级的人数情况select 学生.*,班级.人数,班级.班级名称from 学生 left join 班级 on 学生.班级编号=班级.班级编号(6)嵌套查询无关子查询:在“教材管理库”中查询与“0001”在同一班级学习的学生的学校和班级名称select 学校,班级名称 from 班级where 班级名称=(select 班级名称 from 班级