资源描述
题 目:校园一卡通管理系统
摘要:校园一卡通将管理、生活、消费、身份认证等多种功能集中于一体,提高了学生校园生活的效率。该校园一卡通管理系统涉及三个子系统:校园卡平常管理、消费管理、身份认证。每个子系统又涉及多个功能模块,并提供了对各功能模块的查询和更新功能。该系统开发由系统需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、数据库实行阶段等阶段组成。
关键字:一卡通 平常管理 消费管理 身份认证
1 系统需求分析阶段
1.1 需求分析目的
针对大学学生平常生活和学习管理情况的实地调查加自己的亲身体验,了解了目前应用关于大学的校园一卡通管理系统的应用情况,并充足体会到该模式相对于人工管理模式的简朴、高效。基于以上情况,目的是自行设计一个模拟大学校园一卡通的管理系统,在设计过程中,加深对校园一卡通的了解,增强对数据库知识的理解及SQL语言的实际应用,训练设计开发数据库的能力。
1.2 需求分析任务
(1)解决对象:
该系统重要解决的对象有:学生基本信息、校园卡基本信息、校园卡平常管理基本信息、餐厅消费基本信息、超市基本信息、身份认证基本信息、图书管理基本信息等。各个对象涉及信息如下所示(具体的数据见于数据字典):
1.学生基本信息(Student):涉及学生身份证号、学生学号、学生姓名、学生性别、学生出生年份、学生所在院系、学生的专业、学生所在班级等方面的信息,可以方便学生信息的查询和更新;
2.“校园卡”基本信息(Card):涉及校园卡的卡号、持卡人学生学号、持卡学生姓名、持卡学生性别、校园卡的状态、校园卡内的余额;
3.校园卡平常管理基本信息(CardManage):涉及四个数据结构办卡信息、挂失信息、解挂信息、充值信息,每个数据结构中的数据项见数据字典;
4.餐厅基本信息(cateen):涉及餐厅编号、餐厅名称、餐厅负责人、餐厅位置,具体的数据项见数据字典;
5.超市基本信息(supmanage):涉及超市编号、超市名称、超市负责人、超市位置,具体的数据项见数据字典;
6.消费基本信息(Busmanage):涉及消费编号、消费地点、卡号、消费时间、消费金额,具体数据项见数据字典;
7. 身份认证基本信息(Identity):涉及四个数据构DormInf (学生宿舍楼基本信息),DormPress(学生归宿刷卡信息),LibInf(图书馆基本信息),LibPress(借书基本信息),具体的数据项见数据字典;
(2)解决功能规定
系统重要完毕一下几个功能:
1.学生基本信息查询与更新;
2.校园卡平常事务管理情况基本信息查询与更新;
3.校园卡在某个时刻所处状态的查询;
4.餐厅基本信息的查询和修改;
5.超市基本信息的查询和修改;
6.学生消费额(涉及餐厅,超市,校车消费)基本信息的查询;
(3)安全性和完整性规定
描述学生基本信息、校园卡平常事务管理基本信息、“校园卡”基本信息、餐厅消费基本信息、超市消费基本信息、身份认证基本信息中数据项能否为null,以及一些用户自定义完整性(符合实际规定)。
1.2.3 需求分析阶段成果
(1)校园卡一卡通管理系统业务流程图
校园卡平常管理业务流程图:
校园卡中心
充值
提交费用
申请办卡
学生
审批
提交个人信息
办理挂失
办理解挂
办理业务
合格
超市消费业务流程图:累计本次消费总价格
超市销售员
累计本次消费
挑选商品
学生
消费
够本次消费
刷卡
不够本次消费
取消
卡内信息
宿舍身份认证管理业务流程图:
存储刷卡人信息
刷卡
回宿舍
学生
是否为该宿舍楼学生
获取信息
成功刷卡
否
报警
是
校车管理业务流程图:
上车
累计本次消费
学生
消费
够本次消费
刷卡
不够本次消费
取消
卡内信息
(3)数据流程图
顶层数据流程图:
身份确认申请
审批记录
D0
审批信息
事务申请
消费信息请求
学生个人信息
学生个人信息
P0
学生
事务解决
事务申请
校园卡事务管理系统
校园卡中心
身份确认反馈
消费反馈
图2.0 顶层数据流程图
第1层数据流程图:
P0
身份认证反馈
身份认证申请
消费反馈
消费信息请求
学生个人信息
P1
审批信息
事务申请
学生个人信息
P3
P2
学生
事务申请
平常事务解决
图书借阅
消费事务解决
事务解决
校园卡中心
第1层数据流程图
第2层数据流程图:
从平常事务解决角度出发:
P1
充值记录
D1.4
充值申请
P1.2
P1.1
费用
办卡管理
充值管理
充值申请
个人资料
挂失申请
办卡申请
办卡申请
审批
审批
个人资料
个人资料
学生
办卡记录
D1.1
挂失申请
P1.3
审批
挂失管理
解挂申请
解挂记录
挂失记录
D1.2
个人资料
P1.4
审批
解挂申请
解挂管理
D1.3
D1.3
第2层数据流图(从平常管理角度)
第2层数据流程图:
从校园卡消费管理角度出发:
P2
饭菜名目
饭菜价格
P2.2
P2.1
P2
付费
选择校车
购物名目
学生
消费管理
超市购物
餐厅买饭
物品价格
消费反馈
消费请求
消费记录
D2
P2.3
乘坐校车
第2层数据流图(从消费角度)
第2层数据流程图:
从校园卡的身份认证管理角度出发:
P3
借书刷卡
.....
身份确认
P3.1
身份认证请求
P3
图书馆
学生
身份确认
身份认证
D3
身份认证记录
第2层数据流图(从身份认证角度)
(4)数据字典
(a)数据项:系统涉及的数据项有27项
表1.1 数据项列表
数据项编号
数据项名称
简述
类型及宽度
取值范围
DI-1
Sid
学生身份证号
char(18)
DI-2
Sno
学生学号
char(8)
DI-3
Sname
学生姓名
char(10)
DI-4
Sage
学生性别
char(4)
"男"、"女"
DI-5
Sbirth
学生出生年
char(10)
DI-6
Sdept
学生所在院系
char(20)
DI-7
Sspecial
学生所在专业
char(20)
DI-8
Sclass
学生所在班级
char(20)
DI-9
Saddr
学生生源地
char(6)
DI-10
Cardno
校园卡卡号
char(8)
DI-11
Cardstate
校园卡状态
char(6)
"可用"、"不可用"
DI-12
Cardmoney
校园卡内余额
Float
DI-13
Cardstyle
校园卡类型
char(10)
“学生卡”、“教师卡”
DI-14
Cardtime
办理时间
char(10)
DI-18
Gsrq
挂失所在时间
Datetime
DI-20
Jgrq
解挂的时间
Datetime
DI-21
Czrq
充值的时间
Datetime
DI-22
Czje
充值金额
Float
DI-23
Czno
充值次数编号
Int
DI-24
Pmoney
本次刷卡金额
Float
DI-25
Brno
借书编号
char(10)
DI-26
Bookno
图书编号
char(10)
DI-27
Booklist
已借数量
Int
(b)数据结构:
表1.2 数据结构列表
数据结构编号
数据结构名称
数据结构别名
数据结构含义
数据项组成
DS-1
学生信息
Student
记录学生的信息
Sid、Sno、Sname、Ssex、Sbirth、Sdept、Sspecial、 Sclass、Saddr
DS-2
挂失信息
LosInf
记录挂失信息
Cardno、Sno、Sid、Gsrq、jbr
DS-3
充值信息
FillInf
记录充值相关信息
Czno、Cardno、Sno、Czlx、Czje、jbr
DS-4
校园卡信息
Card
记录校园卡信息
Cardno、Sno、Sid、Cardstates、Cardmoney
DS-5
学生餐厅信息
DinInf
记录餐厅信息
Dinno、Dinname、Dinmanage、Dinaddr
DS-6
超市信息
SupInf
记录超市信息
Supno、Supname、Supmanage、Supaddr
DS-8
消费刷卡信息
PressInf
消费刷卡记录
Pressno、Pplace、Pno、Cardno、Pmoney、ptime、Pmanage、Paddr
DS-10
归宿刷卡信息
DormPress
记录归宿刷卡信息
Sno、Sid、Dormno、Backtime
DS-11
图书馆信息
LibInf
记录图书馆信息
Libno、Libname、Libregion
DS-12
借书信息
LibPress
记录借书信息
Brno、Bookno、Cardstate、Borlist、Libno
2 概念设计阶段
2.1 引言
概念设计阶段重要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程,它是整个数据库设计的关键。
2.2 概念模型设计
(1)各部分E-R图。
(a)学生校园卡关系
1
1
学生
校园卡
拥有
分E-R图1
(b)校园卡平常管理关系
m
1
学生
校园卡中心
服务
分E-R图2
(c)校园卡消费关系
餐厅刷卡
m
n
n
1
具有
餐厅
餐厅刷卡机
校园卡
分E-R图3
超市刷卡
n
m
n
1
具有
超市
超市刷卡机
校园卡
分E-R图4
1
1
m
1
乘车刷卡
校车
具有
校园卡
校车刷卡机
分E-R图5
(d)校园卡身份认证
图书馆刷卡机
1
m
校园卡
分E-R图6
借书刷卡
进出刷卡
校园卡
门禁系统刷卡机
1
m
分E-R图7
(2)各分E-R图中关键实体和联系的属性如下所示:
学生:(学号,姓名,性别,出生日期,身份证号,学院,专业,班级,生源地)
校园卡:(校园卡卡号,持卡人学号,持卡人姓名,持卡人身份证号,持卡人性别,卡内余额,校园卡可用性)
服务:(本次服务编号,校园卡卡号,服务类型,服务时间,服务中心地址)
校园卡中心:(服务中心编号,服务中心地址,服务中心负责人)
超市:(超市编号,超市名称,超市负责人,超市所在校区)
超市刷卡:(本次消费编号,超市编号,校园卡卡号,消费金额,消费时间)
餐厅:(餐厅编号,餐厅名称,餐厅负责人,餐厅所在校区)
餐厅刷卡:(本次消费编号,餐厅编号,校园卡卡号,消费金额,消费时间)
校车:(校车编号,校车类型,校车司机)
乘车刷卡:(本次消费编号,校车编号,校园卡卡号,消费金额,消费时间)
图书馆:(图书馆编号,图书馆名称,图书馆所在校区)
借书:(借书编号,校园卡可用性,已借图书,图书馆编号)
宿舍楼:(宿舍楼编号,宿舍楼学生类型,宿舍楼所在校区)
进出刷卡:(归宿编号,校园卡卡号,学生学号,宿舍楼编号,刷卡时间)
(注:由于属性较多,全都写到E-R图中显得很乱,此处将各属性列出。)
(3)将E-R图合并,按照规定消除属性冲突、命名冲突、结构冲突等,得到初步的E-R图,在此基础上消除冗余得到下图的基本E-R图:
m
1
服务
校园卡中心
学生
拥有
1
1
1
1
归宿检测
借书刷卡
宿舍楼
图书馆
m
m
m
校园卡
1
m
n
m
1
餐厅
具有
餐厅刷卡机
餐厅刷卡
m
n
1
m
具有
超市
超市刷卡机
超市刷卡
乘车刷卡
校车刷卡机
11
11
校车
具有
基本E-R图
3 逻辑设计阶段
3.1逻辑设计的任务和目的
系统逻辑设计的任务是将概念设计阶段设计好的基本E-R图转换为选用DBMS产品所支持的数据模型相符合的逻辑结构。具体内容涉及数据组织(将E-R图转换成具体的关系模型、模型优化、数据库模式定义、用户子模式(视图)设计)、数据解决(画出系统功能模块图)两大任务。
3.2数据组织
3.2.1将E-R图转换为关系模型
由以上分析,可以将学生实体、校园卡实体、校园卡中心实体、餐厅实体、超市实体、校车实体、宿舍楼实体、图书馆实体分别转化为单独的关系模型。为了方便同学查询餐厅、超市和校车的消费情况,特将消费性刷卡联系转化为独立关系模式;为了了解同学的归宿信息,将身份认证型的进出刷卡转化为独立关系模式;为了了解同学借阅图书的情况,将身份认证中的借书刷卡转化为独立的关系模式;同时,考虑同学要向校园卡中充值,在学生校园卡联系中抽取充值关系转化为独立关系模式;考虑同学也许会挂失等,从学生校园卡联系中抽取挂失关系转化为独立关系模式。
具体的关系模式转化结果如下:
学生:student(Sno、Sid、Sname、Ssex、Sbirth、Sdept、Sspecial、Sclass、Saddr)
校园卡:Card(Cardno、Sno、Sid、Cardstyle、Cardstates、Cardmoney、Cardtime)
校园卡中心:CardCenter(CCno、CCaddr、jbr)
充值:FillInf(Czno、Cardno、Sno、Czje、Czrq、jbr)
挂失:LosInf(Gsno、Cardno、Sno、Gsrq、jbr)
餐厅:DinInf(Dinno、Dinname、Dinmanage、Dinaddr)
超市:SupInf(Supno、Supname、Supmanage、Supaddr)
校车: BusInf(Busno、Busstyle、Busdriver)
消费刷卡:PressInf(Pressno、Pplace、Cardno、pmoney、ptime)
宿舍:DormInf(Dormno、Dormstyle、Dormregion)
进出刷卡:DormPress(Backno、Cardno、Sno、Dormno、Backtime)
图书馆:LibInf(Libno、Libname、Libregion)
图书借阅刷卡:BorBookPress(Brno、Bookno、Cardstates、Borlist、Libno)
(注:标有直线下划线的为主属性,标有波浪线下划线的是外键属性)
4 物理设计阶段
4.1物理设计阶段的目的与任务
数据库的物理设计就是根据所选用的DBMS和解决需求,进行物理存储安排,建立索引,形成数据库的内模式,为逻辑数据模型选取一个最适合应用规定的物理结构的过程,在这个阶段中要完毕两大任务:
(1)拟定数据库的物理结构,在关系数据库中重要是存取方法和存储结构;
(2)对物理结构进行评价,评价的重点是时间和空间效率。
4.2数据存储方面
为数据库中各基本表建立的索引如下:
由于基本表Card,Student,DinInf,SupInf的主码Cardno,Sno,Dinno,Supno经常在查询条件和连接操作的连接条件中出现,且它们的取值唯一,考虑在这四个属性上分别建立唯一性索引;
5 数据库实行阶段
5.1建立数据库、数据表、视图、索引
5.1.1 建立数据库
create database sducardsystem;
5.1.2 建立数据表
(1)学生基本信息表的建立:
create table Student(
Sno char(12) primary key,
Sid char(18) not null,
Sname char(10) not null,
Ssex char(4) check(Ssex='男' or Ssex='女') not null,
Sbirth char(10) not null,
Sdept char(20) not null,
Sspecial char(20) not null,
Sclass char(20) not null,
Saddr char(20) not null,);
(2)校园卡基本信息表的建立:
create table Card(
Cardno char(8) primary key,
Sno char(12) not null,
Sid char(18) not null,
Cardstyle char(18) not null,
Cardstate char(10) not null,
Cardmoney Float not null,
Cardtime DateTime not null,
foreign key (Sno) references Student(Sno),);
(3)校园卡中心CardCenter:
create table CardCenter (
CCno char(10) primary key,
CCaddr char(40) not null,
jbr char(10) not null,);
(4)创建充值信息表FillInf:
create table FillInf(
Czno Int primary key,
Cardno char(8) not null,
Sno char(12) not null,
Czrq DateTime not null,
Czje Int not null,
jbr char(10) not null,
foreign key(Cardno) references Card(Cardno),
foreign key(Sno) references Student(Sno),);
(5)创建挂失信息表LosInf:
create table LosInf(
Gsno Int primary key,
Cardno char(8) not null,
Sno char(12) not null,
Gsrq DateTime not null,
jbr char(10) not null,
foreign key(Cardno) references Card(Cardno),
foreign key(Sno) references student(Sno),);
(6)餐厅信息表DinInf;
create table DinInf(
Dinno char(4) primary key,
Dinname char(10) not null
Dinmanage char(10) not null,
Dinaddr char(10) not null,);
(7)超市信息表SupInf:
create table SupInf(
Supno char(4) primary key,
Supname char(40) not null,
Supmanage char(10) not null,
Supaddr char(10) not null,);
(8)校车信息表BusInf:
create table BusInf(
Busno char(4) primary key
Busstyle char(10) not null
Busdriver char(10) not null,);
(9)消费刷卡信息登记表PressInf:
create table PressInf(
Pressno Int primary key,
Pplace char(10) check(Pplace='餐厅'or Pplace='超市'or Pplace='校车') not null,
Cardno char(8) not null,
Pmoney Float not null,
Ptime DateTime not null,
foreign key(Cardno) references Card(Cardno),);
(10)宿舍信息表DormInf:
create table DormInf(
Dormno char(10) primary key,
Dormstyle char(8) check(Dormstyle='男生'or Dormstyle='女生') not null,
Sdept char(20) not null,
Dormregion char(10) not null,
(11)归宿刷卡信息表Dormpress:
create table DormPress(
Backno Int primary key,
Backtime DateTime not null,
Cardno char(8) not null,
Sno char(12) not null,
Dormno char(10) not null,
foreign key(Cardno) references Card(Cardno),
foreign key(Sno) references Student(Sno),
foreign key(Dormno) references DormInf(Dormno),);
(12)图书馆信息表LibInf:
create table LibInf(
Libno char(10) primary key,
Libname char(20) not null,
Libregion char(20) not null,);
(13)图书馆借阅刷卡记录BorBookPress:
create table BorBookPress (
Brno Int primary key,
Bookno char(10) not null,
Cardstate char(10) not null,
Borlist char(40) not null,
Libno char(10) not null,
foreign key(Libno) references LibInf(Libno));
5.1.3 建立视图
(1)用于查询的更新学生在各个餐厅刷卡消费信息的视图定义如下:
create view Dinner2
as
select *
from PressInf
where Place='餐厅'
with check option;
(2)用于查询和更新学生在各个餐厅刷卡消费信息的视图定义如下:
create view Supmarket
as
select *
from PressInf
where Place='超市'
with check option;
(3)将学生信息表和刷卡消费表连接,用于查询相关的学生的基本信息
create view student_ Press
as
select PressInf.Pressno,PressInf.Pplace, PressInf.Cardno,PressInf.pmoney,PressInf.Ptime, Card.Sno
from PressInf,Card
where PressInf.Cardno=Card.Cardno
with check option;
5.1.4 建立索引
依次分别在表Student,Card,DinInf,SupInf的主码Sno,Cardno,Dinno,Supno
上建立唯一性索引,具体SQL代码如下:
create unique index S_Sno on student(Sno asc);
create unique index Card_Cardno on Card(Cardno asc);
create unique index Dinner_Dinno on DinInf(Dinno desc);
create unique index Supmarket_Supno on SupInf(Supno desc);
5.1.5 建立触发器
用触发器来实现在用校园卡刷卡消费和进行各种类型的校园卡充值操作后,不仅要修改PressInf、FillInf里的信息,还要修改相应的Card表里的校园卡余额CardPmoney的值。具体触发器依次定义如下:
create trigger fill
on FillInf
after insert
as
update Card
set Cardmoney=Cardmoney+Czje
from Inserted
where Cardstate='可用'and Card.Cardno=Inserted.Cardno
create trigger consume
on PressInf
after insert
as
update Card
set Cardmoney=Cardmoney-Pmoney
from Inserted
where Cardstate='可用'and Card.Cardno=(select Cardno from Inserted)
6 感言及数据库系统拓展
本次设计过程让我对校园卡管理系统及数据库系统的设计编程有了新的结识,加深了对课本知识的理解,但由于知识的缺少,本系统人存在以下问题:
1. 有些表的属性设计得不够合理,彼此之间外码等联接也许不合适。
2. 由于设计的复杂性,电子账户部分没有加入到数据库系统中。
3. 由于在冗余及系统优化方面知识的缺少,所建立的表也许存在冗余等问题。
在之后的数据库设计中,可以加入电子账户部分,并对系统进行冗余范式等的优化解决。
展开阅读全文