摘 要
随着计算机及Internet迅速的发展,越来越多的行业实现了管理的信息化和自动化,教育行业也不例外。但在很多高校中,教材征订作为学校教学工作中很重要的一个环节还没完全实现信息化管理。因此本系统针对高校教材征订管理过程中人工管理存在的困难,采用SQLserver 2012开发了一款高校教材征订管理信息系统,以实现教材征订网络化管理、提高工作效率、减少教材征订中的错误。
教材征订管理系统开发主要包括数据库的建立和维护。此系统要求建立起数据一致性和完整性强、数据安全性好的库,要求应用程序功能完备,易使用等特点。系统实现多价书的征订采购发行,到货前书目替换,大量的录入工作,查找书目等功能。
关键词: 教材征订 数据库 表设计
1 系统概述
教材征订管理系统是教学管理中的组成部分,是典型的信息管理系统(MIS), 一般学校的教材征订管理模式是在学年制基础上以班级为单位进行处理的。院校的教材征订管理随着学生规模的日益增大、教材日益多样化、学生个人之间教材差异越来越大的现实面前已呈现出无法应对的局面。因此,建立一套与选课相配套的教材征订管理模式和管理系统具有十分重要的意义和实际应用的迫切性,而且现有的条件、管理理念和技术水平已使之成为可能。
为了更好的适应当前学校管理的需求,避免手工管理存在的弊端,开发教材征订管理系统,,可以实现教材收费、领取的自动管理,这个系统包含四大功能,分别是教材的出入库管理,学生的书费管理,系统管理以及综合查询。
2 问题描述
教材征订管理系统是实现系统登录,教材信息管理等基本功能的软件,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型,系统要实现基本信息录入、修改、查询等功能;实现满足多种条件的统计分析功能,有些统计数据要采用图表的格式呈现。教材征订管理全面负责学校所有教材征订信息。推进学校教材征订管理的自动化、无纸化具有其积极的意义。教材征订管理系统就是针对这一状况而设计的。
所涉及的信息有:
(1)教材征订信息。包括的数据项有:征订号,书名,出版社,作者,版次、单价,课程,专业,班级,人数,日期等。
(2)教材库存信息。包括的数据项有:征订号,书名,出版社,作者,版次、单价,数量等。
(3)教材购买信息。包括的数据项有:征订号,书名,出版社,作者,版次、单价,课程,专业,班级,数量,日期等。
(4)收款信息。包括的数据项有:日期,班级,金额等。
(5)用户信息。包括的数据项有:用户编码、用户名、密码、生日、类别等。
本系统的主要功能由以下几个部分组成:
经过调研及分析,教材征订管理系统主要完成以下功能:
(1)用户基本信息模块:用户的基本信息。
(2)教材库存信息模块:记录教材的库存数量,基本信息。
(3)教材征订信息模块:对所需要的教材征订信息查询即用户对征订信息的增加、修改、删除、查询操作。
(4)教材购买信息模块:对所需要的教材购买信息查询即用户对征订信息的增加、修改、删除、查询操作。
(5)收款信息模块:记录教材购买的支付情况的信息。
3 需求分析
需求分析是数据库设计的基础,其错误将影响到整个设计。需求分析也是令设计人员感到最繁琐和困难的一个阶段。
3.1数据流图
数据流程分析是把数据在组织内部的流动情况抽象地独立出来, 舍去了具体的组织机构等,以发现和解决数据流中的问题。各系经过统计教材需求量,将教材征定单交给教材管理部门,教材管理部门拟订计划生成教材计划表,并将定书单提交给供货单位以求供货单位供应教材,完成教材的采购工作后进行入库登记,生成入库单交于财务处进行结算。各班将领书单交于教材科,教材科将教材分发给各班级并进行出库登记,生成出库单交于财务处进行费用结算,并生成教材费用单。
其数据流程图如下图所示
图1 数据流程图
3.2数据字典
表3-1 数据项描述
数据项名:教材编号 |
简述:存储每本教材的信息 |
简要说明:学校教材编码 |
类型及长度:数字型,7位 |
数据值类型:(连续/离散)离散 |
表3-2 数据结构描述
数据结构名:教材管理表单 |
简述: 存储教材入出库等的表单 |
数据结构组成:征订号+书名+出版社+作者+版次+单价+课程+专业+班级+人数+日期+操作员 |
表3-3 数据处理描述
处理逻辑名:制定计划 |
加工编号:P1 |
简要描述:根据各系征订教材以及所缺教材定购计划。 |
输入数据流: 教材订单。 |
输出数据流: 教材计划表 |
表3-4 数据存储描述
数据存储名:入库教材 |
简述:存储入库教材的基本信息。 |
文件组成:征订号+书名+出版社+作者+版次+单价+数量。 |
数据存储名:出库教材 |
简述:存储出库教材的基本信息。 |
文件组成:征订号+书名+出版社+作者+版次+单价+数量。 |
数据流名:教材入库单 |
简述:存储入库教材的基本信息。 |
文件组成:征订号+书名+出版社+作者+版次+单价+数量。 |
表3-5 数据流描述
数据流名:教材出库单 |
简述:存储出库教材的基本信息。 |
文件组成:征订号+书名+出版社+作者+版次+单价+数量。 |
4 概念结构设计
4.1实体分析描述
从用户角度来说,数据库的需求主要体现在对数据库表的增删改查。因此,数据库结构需同时满足两个要素:输入、输出。在进行数据设计时,首先需收集数据,然后分析数据结构,最后处理数据。根据本系统的需求,设计以下主要的数据项和数据结构:
(1)用户信息实体:用户编号、姓名、性别、所属专业、班级、密码、出生年月、角色、类别。
(2)教材购买信息实体:征订号、书名、出版社、作者、版次、单价、课程、专业、班级、数量、日期。
(3)教材库存信息实体:征订号、书名、出版社、作者、版次、单价、数量。
(4)教材征订信息实体:征订号、书名、出版社、作者、版次、单价、课程、专业、班级、人数、日期。
(5)收款信息实体:日期、班级、金额。
4.2整体E-R图
图2 概念结构设计E-R图
5 逻辑结构设计
5.1 关系模式
关系模式:用户信息(用户编号、姓名、性别、所属专业、班级、密码、出生年月、角色)
模式判定:用户信息∈2NF,且每个非主属性都不传递函数依赖于用户信息的主关系键,所以用户信息∈3NF
关系模式:教材购买信息(征订号、书名、出版社、作者、版次、单价、课程、专业、班级、数量、日期)
模式判定:教材购买信息∈2NF,且每个非主属性都不传递函数依赖于教材购买信息的主关系键,所以教材购买信息∈3NF
关系模式:教材库存信息(征订号、书名、出版社、作者、版次、单价、数量)
模式判定:教材库存信息∈2NF,且每个非主属性都不传递函数依赖于教材库存信息的主关系键,所以教材库存信息∈3NF
关系模式:教材征订信息(征订号、书名、出版社、作者、版次、单价、课程、专业、班级、人数、日期)
模式判定:教材征订信息∈2NF,且每个非主属性都不传递函数依赖于教材征订信息的主关系键,所以教材征订信息∈3NF
关系模式:收款信息(日期、班级、金额)
模式判定:收款信息∈2NF,且每个非主属性都不传递函数依赖于收款信息的主关系键,所以收款信息∈3NF
5.2 数据关系图
如图所示是在数据库中生成的关系图。
图3 概念结构设计E-R图
5.3 系统关系图
图4系统关系图
6 物理结构设计
6.1 定义数据库、表名
数据库名:
buybook
数据库表名:
(1)用户信息表:s_user
(2)教材购买信息表:book_purchase_info
(3)教材库存信息表:book_inventory_info
(4)教材征订信息表:book_subscription_info
(5)收款信息表:collection_info
6.2 数据库存储结构设计
为了提高系统的性能,根据应用情况将数据的易变部分与稳定部分、经常
存取部分与不经常存取部分分开存放。
由于现在的计算机都有多个磁盘,将表(如用户信息表)和索引放在不同
的磁盘上,在查询过程中,大大提高I/O读写的效率,而对于较大的分放在两
个磁盘上,可以加快存取速度,在多用户环境下的作用更有效;为了改进系统
的性能,将日志文件与数据库对象(表、索引等)放在了不同的盘上。同时,
考虑到本系统是多用户的,为了提高效率,数据库备份的数据和日志文件将保
存在磁盘中。
在数据库中经常存取的部分包括:
用户(用户编号、姓名、性别、所属专业、班级、密码、出生年月、角色)
教材征订(征订号、书名、出版社、作者、版次、单价、课程、专业、班级、人数、日期)
教材库存(征订号、书名、出版社、作者、版次、单价、数量)
教材购买(征订号、书名、出版社、作者、版次、单价、课程、专业、班级、数量、日期)
不经常存取部分包括:
教材收款(日期、班级、金额)
在数据库设计初始阶段,为了对以后的数据库进行物理优化,提供了一些
系统配置变量、存储分配系数,并对这些变量赋予合理的缺省值。但这些值不
一定适合每一种应用环境,在进行物理设计时,对这些变量重新赋值,以改善
系统的性能。在选择硬件设备、服务器操作系统、数据库时应该考虑能够逐步
增加和扩展。
在配置系统变量时,要注意同时使用数据库的用户数,同时打开的数据库
对象数,内存分配参数,缓冲区分配参数,时间片大小,数据库的大小,锁的
数目等。这些参数值都会影响数据库的存储时间和存储空间的分配。
6.3 数据库表结构
表6-1 教材购买信息表(book_purchase_info)
字段名 |
字段类型 |
长度 |
主/外键 |
字段值约束 |
对应中文名 |
subscription_No |
varchar |
50 |
主键 |
Not null |
征订号 |
book_name |
varchar |
50 |
Not null |
书名 |
|
press |
varchar |
50 |
Not null |
出版社 |
|
author |
varchar |
50 |
Null |
作者 |
|
revision |
varchar |
50 |
Not null |
版次 |
|
unit_Price |
varchar |
50 |
Null |
单价 |
|
curriculum |
varchar |
50 |
Null |
课程 |
|
major |
varchar |
50 |
Null |
专业 |
|
class_name |
varchar |
50 |
Null |
班级 |
|
buy_Count |
char |
100 |
Not null |
数量 |
|
buy_date |
Date |
Null |
日期 |
表6-2教材库存信息表(book_inventory_info)
字段名 |
字段类型 |
长度 |
主/外键 |
字段值约束 |
对应中文名 |
subscription_No |
varchar |
50 |
主键 |
Not null |
征订号 |
book_name |
varchar |
50 |
Not null |
书名 |
|
press |
varchar |
50 |
Not null |
出版社 |
|
author |
varchar |
50 |
Null |
作者 |
|
revision |
varchar |
50 |
Not null |
版次 |
|
unit_Price |
varchar |
50 |
Null |
单价 |
|
book_Count |
char |
100 |
Not null |
数量 |
表6-3教材征订信息表(book_subscription_info)
字段名 |
字段类型 |
长度 |
主/外键 |
字段值约束 |
对应中文名 |
subscription_No |
varchar |
50 |
主键 |
Not null |
征订号 |
book_name |
varchar |
50 |
Not null |
书名 |
|
press |
varchar |
50 |
Not null |
出版社 |
|
author |
varchar |
50 |
Null |
作者 |
|
revision |
varchar |
50 |
Not null |
版次 |
|
unit_Price |
varchar |
50 |
Null |
单价 |
|
curriculum |
varchar |
50 |
Null |
课程 |
|
major |
varchar |
20 |
Null |
专业 |
|
class_name |
varchar |
20 |
Null |
班级 |
|
people_Num |
varchar |
20 |
Not null |
人数 |
|
date_info |
date |
Null |
日期 |
表6-4收款信息表(collection_info)
字段名 |
字段类型 |
长度 |
主/外键 |
字段值约束 |
对应中文名 |
collection_date |
varchar |
Not null |
日期 |
||
class_name |
varchar |
20 |
Not null |
班级 |
|
money |
varchar |
10 |
Not null |
金额 |
表6-5用户信息表(s_user)
字段名 |
字段类型 |
长度 |
主/外键 |
字段值约束 |
对应中文名 |
user_code |
varchar |
50 |
主 |
Not null |
用户编码 |
user_name |
varchar |
50 |
null |
用户名 |
|
sex |
varchar |
10 |
null |
性别 |
|
major |
varchar |
20 |
null |
专业 |
|
class_name |
varchar |
20 |
null |
班级 |
|
pwd |
varchar |
10 |
null |
密码 |
|
birthday |
varchar |
30 |
null |
生日 |
|
role_name |
varchar |
30 |
null |
手机号 |
7 数据库实施
7.1 数据库创建
create database buybook
on
( name=work_data,
filename='d:\program files (x86)\sql\buybook.mdf',
size=5,
filegrowth=1
)
log on
( name=work_log,
filename='d:\program files (x86)\sql\buybook_log.ldf',
size=1,
maxsize=50,
filegrowth=10%
)
7.2 数据库表创建
(1)用户表
CREATE TABLE s_user (
user_code varchar (50) NOT NULL,
user_name varchar (50) NULL,
sex varchar (10) NULL,
major varchar (20) NULL,
class_name varchar (20) NULL,
pwd varchar (10) NULL,
birthday varchar (30) NULL,
role_name varchar (30) NULL,
CONSTRAINT PK_s_user PRIMARY KEY CLUSTERED
)
- 教材购买信息表
CREATE TABLE book_purchase_info (
subscription_No varchar (50) NOT NULL,
book_name varchar (50) NULL,
press varchar (50) NULL,
author varchar (50) NULL,
revision varchar (50) NULL,
unit_Price varchar (50) NULL,
curriculum varchar (50) NULL,
major varchar (50) NULL,
class_name varchar (50) NULL,
buy_Count varchar (50) NULL,
buy_date date NULL,
CONSTRAINT PK_book_purchase_info PRIMARY KEY CLUSTERED
)
- 教材库存信息表
CREATE TABLE book_inventory_info (
subscription_No varchar (50) NULL,
book_name varchar (50) NULL,
press varchar (50) NULL,
author varchar (50) NULL,
revision varchar (50 ) NULL,
unit_Price varchar (50) NULL,
book_Count char (100) NULL
)
- 教材征订信息表
CREATE TABLE book_subscription_info (
subscription_No varchar (50) NOT NULL,
book_name varchar (50) NULL,
press varchar (50) NULL,
author varchar (50) NULL,
revision varchar (50) NULL,
unit_Price varchar (50) NULL,
curriculum varchar (50) NULL,
major varchar (20) NULL,
class_name varchar (20) NULL,
people_Num varchar (20) NULL,
date_info date NULL,
CONSTRAINT PK_book_subscription_info PRIMARY KEY CLUSTERED
)
(5)用户信息表
CREATE TABLE s_user (
user_code varchar (50) NOT NULL,
user_name varchar (50) NULL,
sex varchar (10) NULL,
major varchar (20) NULL,
class_name varchar (20) NULL,
pwd varchar (10) NULL,
birthday varchar (30) NULL,
role_name varchar (30) NULL,
CONSTRAINT PK_s_user PRIMARY KEY CLUSTERED
)
7.3 建立存储过程
(1)建立用户表查询存储过程
create procedure s_user
as
begin
select b.用户编码,
b.用户名,
性别,
专业,
班级,
密码,
生日,
手机号
from 用户表 a
end
(2)建立教材购买信息表查询存储过程
create procedure book_purchase_info
as
begin
select b.征订号,
b.书名,
出版社,
作者,
版次,
单价,
课程,
专业,
班级,
数量,
日期
from 教材购买信息表 a
inner join 用户表 b on a.班级 = b.班级
end
(3)建立教材征订信息表更新存储过程
Create procedure book_subscription_info @班级 char(8), @记录号 int,
@姓名 char(30),@专业 char(10), @人数 char(10),
@日期 datetime
as
if not exists(select *
from 教材征订信息表
where 用户编码 = @用户编码)
Print ('不存在该用户')
else
begin
update 教材征订信息表
set 征订号=@征订号,
书名=@书名,
班级=@班级,
数量=@数量,
日期=@日期
where 用户编码 = @用户编码;
end
7.4创建触发器
(1) 创建一个触发器,当删除用户信息表时,时也删除其他表中用户的信息。如当删除用户表中信息时,也删除教材征订信息表中的内容,教材购买信息表,收款信息表分别建立此类触发器。
create trigger data_del
on 用户信息表
after delete
as
begin
delete 教材征订信息表
where 用户班级 in (select 用户班级 from deleted)
end
(2)建立教材购买信息触发器:
create trigger book_purchase_update
on 班级
after update
as
declare
@new_book_purchase_update int, @old_book_purchase_update int
select @old_book_purchase_update = deleted.征订号
from deleted
select @new_book_purchase_update= inserted.征订号
from inserted
if ((@new__book_purchase_update - @old__book_purchase_update) > @old__book_purchase_update * 0.15)
begin
raiserror ('教材购买过长,取消操作',16,1)
rollback transaction
end
(3)建立收款触发器:
CREATE TRIGGER collection_info
ON 用户信息表
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
Declare @class int;
Select @class = 班级 From 用户信息表
IF (@class = null)
Begin
Insert into 用户信息表(员工编码, 用户名, 性别, 专业, 班级, 密码, 生日,手机号)
Select 员工编码, 用户名, 性别, 专业, 班级, 密码, 生日,手机号
From inserted
End
ELSE
Begin
print ('用户班级不存在')
rollback transaction
END