摘要:校园一卡通将管理、生活、消费、身份认证等多种功能集中于一体,提高了学生校
园生活的效率。该校园一卡通管理系统包括三个子系统:校园卡日常管理、消费管理、身份认证。每个子系统又包括多个功能模块,并提供了对各功能模块的查询和更新功能。该系统开发由系统需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、数据库实施阶段等阶段组成。
关键字:一卡通 日常管理 消费管理 身份认证
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)校园卡一卡通管理系统业务流程图 校园卡日常管理业务流程图:
充值 申请办卡 学 办理挂失 生 办理解挂 提交费用 校园卡中心 提交个人信息 审批 办理业务 合格
超市消费业务流程图:
累计本次消费总价格 顶层数据流程图: 身份确认申请 消费信息请求 学生个人信息 事务申请 学生 事务处理 消费反馈 身份确认反馈 第1层数据流程图:
学生个人信息 事务申请 学生 事务处理
D0 审批记录 P0 校园卡事务管理系统 学生个人信息 事务申请 审批信息 校园卡中心 图2.0 顶层数据流程图 P0 身份认证反馈 身份认证申请 消费反馈 消费信息请求 P1 日常事务处理 P2 消费事务处理 P3 图书借阅 学生个人信息 事务申请 审批信息 校园卡中心 第1层数据流程图
第2层数据流程图:
从日常事务处理角度出发: P1 D1.4 充值记录 审批 充值申请 P1.1 充值申请 费用 充值管理 办卡申请 P1.2 办卡申请 个人资料 审批 办卡管理 个人资料 D1.1 办卡记录 学生 挂失申请 P1.3 个人资料 挂失申请 审批 挂失管理 D1.2 P1.4 解挂申请 挂失记录 解挂申请 个人资料 审批 解挂管理 D1.3 解挂记录 第2层数据流图(从日常管理角度)
第2层数据流程图:
从校园卡消费管理角度出发: 学生 P2 饭菜名目 P2.1 饭菜价格 餐厅买饭 消费请求 消费反馈 P2 消费管理 购物名目 P2.2 物品价格 选择校车 超市购物 D2 消费记录 付费 P2.3 乘坐校车 第2层数据流图(从消费角度) 第2层数据流程图: 从校园卡的身份认证管理角度出发: P3 ..... 借书刷卡 身份确认 身份认证请求 P3 学生 身份确认 身份认证 D3 身份认证记录 第2层数据流图(从身份认证角度) (4)数据字典
(a)数据项:系统涉及的数据项有27项
表1.1 数据项列表
数据项编号 DI-1 DI-2 DI-3 DI-4 DI-5 DI-6 DI-7 DI-8 DI-9 DI-10 DI-11 DI-12 DI-13 DI-14 DI-18 DI-20 DI-21
数据项名称 Sid Sno Sname Sage Sbirth Sdept Sspecial Sclass Saddr Cardno Cardstate Cardmoney Cardstyle Cardtime Gsrq Jgrq Czrq
简述 学生身份证号 学生学号 学生姓名 学生性别 学生出生年 学生所在院系 学生所在专业 学生所在班级 学生生源地 校园卡卡号 校园卡状态 校园卡内余额 校园卡类型 办理时间 挂失所在时间 解挂的时间 充值的时间
类型及宽度 char(18) char(8) char(10) char(4) char(10) char(20) char(20) char(20) char(6) char(8) char(6) Float char(10) char(10) Datetime Datetime Datetime
取值范围
\"男\"、\"女\"
\"可用\"、\"不可用\"
“学生卡”、“教师卡”
P3.1 图书馆 数据项编号 DI-22 DI-23 DI-24 DI-25 DI-26 DI-27
数据项名称 Czje Czno Pmoney Brno Bookno Booklist
简述 充值金额 充值次数编号 本次刷卡金额 借书编号 图书编号 已借数量
类型及宽度 Float Int Float char(10) char(10) Int
取值范围
(b)数据结构:
表1.2 数据结构列表
数据结构编号
数据结构名称
数据结构别名
数据结构含义
数据项组成
Sid、Sno、Sname、Ssex、
DS-1
学生信息
Student
记录学生的信息
Sbirth、Sdept、Sspecial、 Sclass、Saddr
DS-2 DS-3 DS-4 DS-5 DS-6
挂失信息 充值信息 校园卡信息 学生餐厅信息 超市信息
LosInf FillInf Card DinInf SupInf
记录挂失信息 记录充值相关信息 记录校园卡信息 记录餐厅信息 记录超市信息
Cardno、Sno、Sid、Gsrq、jbr
Czno、Cardno、Sno、Czlx、Czje、jbr Cardno、Sno、Sid、Cardstates、Cardmoney Dinno、Dinname、Dinmanage、Dinaddr Supno、Supname、Supmanage、Supaddr Pressno、Pplace、Pno、
DS-8
消费刷卡信息
PressInf
消费刷卡记录
Cardno、Pmoney、ptime、Pmanage、Paddr
DS-10 DS-11
归宿刷卡信息 图书馆信息
DormPress LibInf
记录归宿刷卡信息 记录图书馆信息
Sno、Sid、Dormno、Backtime Libno、Libname、Libregion Brno、Bookno、
DS-12
借书信息
LibPress
记录借书信息
Cardstate、Borlist、Libno
2 概念设计阶段
2.1 引言
概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过
程,它是整个数据库设计的关键。
2.2 概念模型设计
(1)各部分E-R图。 (a)学生校园卡关系
学生
1 拥有 分E-R图1 1 校园卡 (b)校园卡日常管理关系
学生 m 服务 分E-R图2 1 校园卡中心 (c)校园卡消费关系 m 校园卡 餐厅刷卡
校园卡 n 餐厅刷卡机 n 含有 1 餐厅 分E-R图3
m 超市刷卡 n 超市刷卡机 分E-R图4
n 含有 1 超市
校园卡 m 乘车刷卡 1 校车刷卡机 分E-R图5 1 含有 1 校车 (d)校园卡身份认证
校园卡 m 借书刷卡 分E-R图6
1 图书馆刷卡机 校园卡 m 进出刷卡 1 门禁系统刷卡机 分E-R图7
(2)各分E-R图中关键实体和联系的属性如下所示:
学生:(学号,姓名,性别,出生日期,身份证号,学院,专业,班级,生源地) 校园卡:(校园卡卡号,持卡人学号,持卡人姓名,持卡人身份证号,持卡人性别,卡内余额,校园卡可用性)
服务:(本次服务编号,校园卡卡号,服务类型,服务时间,服务中心地址)
校园卡中心:(服务中心编号,服务中心地址,服务中心负责人) 超市:(超市编号,超市名称,超市负责人,超市所在校区)
超市刷卡:(本次消费编号,超市编号,校园卡卡号,消费金额,消费时间) 餐厅:(餐厅编号,餐厅名称,餐厅负责人,餐厅所在校区)
餐厅刷卡:(本次消费编号,餐厅编号,校园卡卡号,消费金额,消费时间) 校车:(校车编号,校车类型,校车司机)
乘车刷卡:(本次消费编号,校车编号,校园卡卡号,消费金额,消费时间) 图书馆:(图书馆编号,图书馆名称,图书馆所在校区) 借书:(借书编号,校园卡可用性,已借图书,图书馆编号) 宿舍楼:(宿舍楼编号,宿舍楼学生类型,宿舍楼所在校区)
进出刷卡:(归宿编号,校园卡卡号,学生学号,宿舍楼编号,刷卡时间)
(注:由于属性较多,全都写到E-R图中显得很乱,此处将各属性列出。)
(3)将E-R图合并,按照要求消除属性冲突、命名冲突、结构冲突等,得到初步的E-R图,在此基础上消除冗余得到下图的基本E-R图:
1 m 校园卡学生 服务 中心 1 1 1 宿舍楼 归宿借书图书馆 拥有 检测 刷卡 1 超市刷 卡机 m 含有 1 超市 m m n 超市刷卡 m 校园卡 m 餐厅刷卡 n 餐厅刷卡机 m 乘车刷卡 m 含有 1 校车刷卡机 1 餐厅 校车 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. 由于在冗余及系统优化方面知识的缺乏,所建立的表可能存在冗余等问题。 在之后的数据库设计中,可以加入电子账户部分,并对系统进行冗余范式等的优化处理。
因篇幅问题不能全部显示,请点此查看更多更全内容