设计人: _________ 学号: _____________ 班级: _______________ 学院: ________________
目录
一、 需求分析
1. 业务流程图
2. 数据流图 3. 数据字典
二、 概念设计
1、 实体届性图
2、 全局E-R图
三、 逻辑设计
1、 表问关系图
2、 关系模式
四、 数据库实现
1、 创建数据库
2、 创建表
2、创建存储过程和触发器
一、需求分析
针对一般高校机房管理系统的需求分析、通过对学生上机过程、教学班上机过程、注 册过程、充值过程、的内容的数据流程分析一现设计如下数据项和数据结构 (1) 机房基本信息:包括机房号、机房名、计算机数目、管理人等 (2) 计算机基本信息:包括计算机 IP地址、编号、机房号、品牌、备注等
(3) 学生基本信息:包括学号、姓名、性名、行政班等 (4) 用户基本信息:包括用户名、学号、密码、余额等
(5) 学生充值基本信息:包括用户名、充值时间、金额、办理人等 (6) 机房收费标准基本信息:包括机房号、金额等 (7)
上机时间、下机时间、学号、
上机类型等 (8)
期、统计时间、费用等
机房费用统计基本信息:包括计算机 IP地址、日
学生上机过程登记基本信息: 包括计算机IP地址、日期、
1. 业务流程图
2. 数据流图
入录充值金额 上机时间 下机回* 费理- 二机总螺. 3. 数据字典
room(机房表) 字段名 rno rname number
数据类型 int char(10) smallint char(10) 能否为空 否 否 能 否 是否为主键 是 否 否 否 说明 机房号 机房名 计算机数目 管理人 manager computer(计算机表) 字段名 IP cno rno brand 数据类型 char(20) smallint int Char(20) Varchar(100) 能否为空 否 否 否 能 能 是否为主键 是 否 否 否 否 _ 说明 计算机IP地址 编勺 机房号 品牌 备注 note Student(学生表) 字段名 sno
数据类型 Int Char(10) 能否为空 否 否 是否作为主键 是 否 说明 学号 姓名 sname
sex class Char(2) Char(20) 台匕 目匕 台匕 目匕 否 否 性别 行政班 Usertable (用户表) 字段名 数据类型 uname sno pword
能否为空 否 否 否 能 是否作为主键 是 否 否 否 说明 用户名 学号 密码 余额 Char(20) int Char(20) money money Prepaid(充值表) 字段名 数据类型 uname ptime pmoney
能否为空 否 否 否 否 是否作为主键 是 是 否 否 说明 用户名 充值时间 金额 收费人员 Char(20) datetime smallmoney Char(10) trans Standard(收费标准表) 字段名 rno stime
数据类型 int Char(20) smallmoney 能否为空 否 否 否 是否作为主键 是 是 否 说明 机房号 时间段 金额/小时 smoney Record (上机过程登记表) 字段名 数据类型 IP begintime sno endtime
能否为空 否 否 否 能 否 是否作为主键 是 是 否 否 否 说明 计算机IP地址 上机时间 学号 下机时间 上机类型 「 char(20) datetime Int datetime Char(15) type statistik (机房费用统计表) 字段名 IP dates Sno moneys 数据类型 char(20) datetime int smallmoney 能否为空 否 否 否 否 是否作为主键 是 是 否 否 说明 计算机IP地址 日期 学号 费用 「 二、概念设计
1、实体届性
图
图一机房实体E-R图 图二学生实体E-R图
2、全局E-R图
三、逻辑设计
1、表间关系
图
Pfgpaid* _____________ . *
_ usertoble
2、关系模式
机房(机房号,机房名,机器数目,管理人) 学生(学号,姓名,性别,行政班) 计算机(编号,机房号,品牌,备注) 用户(用户名,学号,密码,余额)
四、数据库实现
1、创建数据库
1、创建数据库
create database room
on (name='room_data',
filename='E:\\room\\data\\room_data', size=5MB,
maxsize=10MB, filegrowth=1MB )
log on (
name='room_log',
filename='E:\\room\\log\\room_log', size=5MB,
maxsize=10MB, filegrowth=1MB )
2、 room(机房表)的创建 create table room (
rno int not null primary key, rname char(10) not null, number smallint null, manager char(10) not null )
3、 computer(计算机表)的创建 create table computer (
IP char(20) not null primary key, cno smallint not null , rno int not null, brand char(20) null, note varchar(50) null )
4、 student(学生表)的创建 create table student (
sno int not null primary key, sname char(10) not null, sex char(2) null, class char(20) not null
2、创建表
6、 User (用户表)的创建 create table usertable (
uname char(20) not null primary key, sno int not null,
pword char(20) not null, moneys money null, ) 7、 prepaid(充值表)的创建 create table prepaid (
uname char(20) not null, ptime datetime not null, pmoney smallmoney not null, trans char(10) not null,
constraint p_primary primary key(uname,ptime) ) 8、 standard(收费标准表)的创建 create table standard (
rno int not null, stime char(20) not null,
smoney smallmoney not null, constraint c_primary primary key(rno,stime) )
11、 record (上机过程登记表)的创建 create table record (
IP char(20) not null, sno int not null,
begintime datetime not null, endtime datetime null, type char(15) not null,
constraint t1 primary key(IP,begintime) )
12、 statistik(费用统计表)的创建 create table statistik (
IP char(20) not null,
dates datetime not null, sno int not null,
moneys smallmoney not null, constraint t2 primary key(IP,dates) )
2、创建存储过程和触发器
1、 创建存储过程实现各机房上机费用的统计 1)代码
create proc s_room(@rno int) as
select rname 机房名,sum(moneys)费用 from statistik inner join computer
on computer.IP=statistik.IP inner join room on room.rno=computer.rno where room.rno=@rno group by rname
2、 创建触发器实现费用登记时,自动修改该生的账户余
额。
1) 代码
create trigger u_money on statistik for insert as
update usertable
set moneys=moneys-(select moneys from inserted) where sno=(select sno from inserted) 2) 数据测试
查询插入记录前学生的余额
select sno 学号,moneys 余额 from usertable
where sno=2011508092
执行插入操作 insert into statistik
values('001',getdate(),101,2.5)
查询插入记录学生的余额
select sno 学号,moneys 余额 from usertable
where sno=2011508092
3.创建触发器实现充值时自动修改该生余额 1) 代码
create trigger un_money on prepaid for insert as
update usertable
set moneys=moneys+(select pmoney from inserted) where uname=(select uname from inserted)
2) 数据测试
select sno 学号,moneys 余额 from usertable where sno=2011508092 go
insert into prepaid
values('bbb',getdate(),5,'个 vga ') go
select sno 学号,moneys 余额 from usertable where sno=2011508092 go
select * from prepaid
因篇幅问题不能全部显示,请点此查看更多更全内容