数据库软件设计(8684)

 

                                       《数据库原理与应用》课程设计

  

课设题目:                                     

8684公交数据库分析设计

院    系:                                     

计算机科学与技术学院

专    业:                                     

计算机科学与技术

学生姓名:

胡庐林

学 号:        

20163823007

       


 

 

 

 

2018  年 06 月

目录

前言 2

1. 需求分析 3

1.1系统数据需求 3

1.2系统功能需求 4

1.3系统安全性与完整性需求 5

1.3.1数据安全性 5

1.3.2数据完整性 5

1.3.3E-R图设计................................................................................. 10

      1.3.4数据流图设计............................................................................11

2.系统设计..........................................................................................................12

2.1定义.........................................................................................................15

2.2系统模块图...........................................................................................16

2.3 数据表的设计......................................................................................17

2.4 用例列举...............................................................................................20

2.4.1建立数据表.................................................................................20

2.4.2建立视图....................................................................................26

2.4.3建立索引....................................................................................27

2.4.4查询语句....................................................................................28

2.4.5建立存储过程............................................................................29

2.4.6建立触发器...............................................................................31

3.体会与心得...............................................................................................34

 

前言

 

由于现行公交信息越来越复杂,公交线路越来越多,站点越来越复杂,不管是公交公司管理者,还是乘客都可能对当前这类软件提出要求。一方面,因为公交信息一些新的内容的出现,对软件提出了新的要求,另一方面,现在市场上的8684公交软件可能存在着一些问题和缺陷,无法满足现在管理职工的需求。所以,我们提出这一任务,第一可以运用我们所学知识对8684公交软件进行数据分析,看下是否有地方可以值得改进,第二可以锻炼我们对软件设计的整体把握能力和团队协作能力。

我们做此设计的目标有以下几点:

1.完善现有的8684公交软件管理系统的一些缺陷。

2.提供更加简易的操作界面,适当增加功能。

3.规范公交管理,提高服务质量。

 

 

 1.1系统数据需求

  1. 公交路线信息 ,对公交路线的添加,修改,删除,根据该地地理环境的变化,对公交路线进行修改及添加新的公交路线。
  2. 公交站点信息,随着城市的建设发展,对站点信息做出适当的添加、修改、删除。
  3. 公交车辆信息,车辆信息应该包括车辆使用年限,车牌号,对应的公交路线编号,车辆型号(大,中,小),开始运营时间,维修信息。
  4. 公交司机以及维修员信息,公交司机信息包括:姓名、性别、年龄,驾龄,身份证;维修员信息包括:姓名、性别、年龄,工号,身份证号。
  5. 用户表,用户表包括:用户名,密码,电话,(微信号,QQ号,地址)《括号里面非必选》
  6. 签到表,签到表包括:签到时间,积分,用户id
  7. 收藏数据表 ,收藏数据表包括:收藏时间,收藏站点,收藏路线。

 

1.2系统功能需求

    系统数据维护功能:

  1. 公交路线信息维护

        使用者首先通过密码验证,然后进入路线信息管理界面,通过查看和编辑进行相应的修改。当然对路线的修改,应该包括路线的增加,路线站点的变更,路线的删除等操作。  

         (详细来讲:公交路线记录的插入、修改一条公交路线所经过的站点或者服务时间、公交路线的删除。对于公交路线的插入,要进行相应的站点查询,如果没有相应的站点,那么就要添加站点到数据库,然后再进行路线信息的插入。对于修改一条公交路线所经过的站点,依然需要注意其修改的以后的站点在站点信息表中是否含有,如果没有,那么也要进行相应的站点添加。)  

         所以,将该快功能细划分为以下几个部分:

  1. 插入路线
  2. 删除路线
  3. 修改路线

(2)公交车辆信息维护

        当通过密码验证以后,然后进入车辆信息管理界面,通过查看和编辑进行相应的修改。

         (详细来讲:包括添加新车辆、删除现有车辆、修改现有车辆、维修车辆查看。添加新车辆,需要将该车辆信息加入到车辆信息表中,删除现有车辆的时候一定要将跟该车辆所有的有联系的地方都删除掉,比如:排班表中的相关记录,维修车辆表中的相关记录)

         所以,将该快功能细划分为以下几个部分:

         A.添加新的车辆

         B.删除现有车辆

         C.修改现有车辆

(3)排班信息维护

        当通过密码验证进入系统以后,可以使用这一功能来查看和修改排班信息。也就是司机、维修员、车辆、是否是首班车之间的联系。

         功能划分如下:

  1. 添加排班

B.删除排班

C. 修改排班

   (4)职工(公交司机、维修员)信息维护

        进入系统,然后进入这一功能选项。通过查看和编辑进行相

         应的修改。

  1. 添加人员
  2. 删除人员
  3. 修改信息

(5)站点信息维护

     当通过密码验证之后,管理员就可以对站点信息进行修改了。可以

     查看已有的站点,在已有的基础上进行编辑和修改。

  1.  添加新站点
  2.  删除站点
  3.  修改站点
  1. 签到表

         当用户每天登陆的时候,可以通过签到方式进行积分获取。

 

1.3系统安全性与完整性需求

1.3.1数据安全性

     数据的安全性是指保护数据库以防止不合法的使用造成的数据泄露、更改和破坏。

在本设计中,因该管理端并没有涉及到最终用户直接共享,只是简单的数据管理和维护,其中可能有多个人有管理权限,所以在设计时进行了密码验证,该密码存放在数据库中。

    

   1.3.2数据完整性

   (1)避免插入异常。

       A.将维修车辆插入到车辆信息表时候,应该立即将该条记录

          从数据库当中删除,应该所有车辆信息由这两个表构成。

          此时,应该在排班信息表中增加相应的和该车有关的记录,或者将其添加到空闲车辆表中。

        B.同样,在将车辆信息表插入到维修车辆表中的时候,也要

          将对应的记录从车辆表中删除。应该在排班信息表中将与该车辆的相关记录删除。

        C.在插入排班信息的时候,需要从空闲车辆表、驾驶员信息表、维护员信息表、路线信息表进行汇总处理。也就是说,在插入排班信息时候必须避免将车辆信息和人员重复排班。

        D.在插入新的车辆时,必须将其同时插入到车辆信息表和空闲车辆表中。

        E.在插入新的职工时候,必须将其插入到驾驶员信息表或者维修员人员表中,并且注明是否工作状态。

        F.插入公交车路线信息时,应该检查站点信息表查看站点信息是否有重复,或者将新出现的站点加入到站点信息表中。并将新加入的路线代号加入到相应的站点信息表中。

        G.插入站点的时候,应该避免站名的重复。

   (2)避免删除异常。

        A.删除车辆信息的时候,应该同时将空闲车辆表中的记录、该车有关的排班记录都删除掉。

B.删除站点信息的时候,应该检查与其关联的路线是否还存在,然后再进行删除操作。

C.删除维修车辆时,应该删除该车在车辆信息表中的相关记录。

(3)避免修改异常

     A.修改车辆所属的路线的时候,首先检查是否有该车的排班信息,如果有,必须删除该信息,并将该车放入空闲车辆表中。

     B.当改变人员所属的路线的时候,首先检查是否有与该人员联系起来

       的排班信息,如果有,则将该记录删除,将联系的车辆加入到空闲车辆表中。

         C.当改变路线中的站点信息时候需要,需要修改站点表中的记录。

1.3.3E-R图设计

  所涉及的的各实体:用户,公交站点,公交路线,公交车辆,公交职工(司机和维护员(管理员))

如图(1):

 

 

 

                        

ER图(1)

 

所涉及的各实体间的联系的局部ER图如下图(2):

 

 

细化总体E-R图:

 

1.3.4数据流图设计

                             数据流图

 

2.系统设计

2.1定义

  1. 系统名称:8684公交软件系统
  2. 数据库管理软件:Microsoft SQL Server 2005
  3. 数据库设计采用软件:EZDML
  4. 运行平台:windows 2012/xp/linux
  5. 数据库的安全性设计:准确、高效、实时

 

2.2系统模块图

系统模块图

 

 

2.3数据表的设计

站点信息表:(站点ID,站点名,站点所属省,站点所属市,站点所属县,站点所属区,站点所属镇,站点所属村,站点经度,站点纬度)

线路信息表:(线路ID,站点ID,线路号)

排班信息表:(排班路线,车牌号,驾驶员工号,维修员工号)

车辆信息表:(车牌号,线路ID,车辆型号,使用年限,购买时间,驾驶员工号,服务时间)

驾驶员信息表:(姓名,性别,驾龄,年龄,工号,是否空闲)

车辆维护表:(车牌号,维护员,故障原因,维修时间)

维护员信息表:(姓名,性别,年龄,工号,是否空闲)

用户信息表:(用户名,用户ID,密码,电话,微信号,qq号,地址)

收藏数据表:(收藏时间,收藏站点,收藏路线)

签到表:(签到时间,积分,用户ID)

表1 站点信息表

属性名

类型

长度

完整性约束

备注

站点ID

Int

 

主码

站点id唯一标识某个站点,不因地域而重名

站点名

char

10

非空

站点名因地域不同允许同名

站点所属省

char

10

非空

主要是针对中国国内的省市,省份进行check约束,只能在{北京市,天津市,上海市,重庆市,河北省,山西省,辽宁省,吉林省,黑龙江省,江苏省,浙江省,安徽省,福建省,江西省,山东省,河南省,湖北省,湖南省,广东省,海南省,四川省,贵州省,云南省,陕西省}中选择

站点所属市

char

10

非空

站点所属县

char

10

非空

站点所属区

char

10

非空

站点所属镇

char

10

非空

站点所属村

char

10

非空

站点经度

float

20

非空

站点精度和纬度主要是为了在地图上定位站点,方便精准查找

站点纬度

float

20

非空

 

 

 

 

 

表2 线路信息表

属性名

类型

长度

完整性约束

备注

线路ID

int

 

主码

路线id唯一标识某条路线,不因地域而重名

站点ID

int

 

非空

站点id作为路线组成部分,作外键

线路号

char

3

非空

 

 

表3 排班信息表

属性名

类型

长度

完整性约束

备注

排班线路

char

3

非空

 

车牌号

char

10

主码

 

驾驶员工号

char

10

外码

 

维修员工号

int

 

外码

 

表4 车辆信息表

属性名

类型

长度

完整性约束

备注

车牌号

char

10

主码

因为每个省份的车牌号前缀都不一样,可以起到唯一标示的效果

线路ID

int

 

非空

路线ID作为车辆表的外键,指定车辆按照哪条路线行驶

车辆型号

char

4

非空

 

使用年限

int

 

非空

 

购买时间

datetime

 

非空

格式"XX-YY-ZZ"  年-月-日

驾驶员工号

char

10

非空

每辆车的驾驶员根据排班表确定

服务时间

char

12

非空

服务时间一般遵循7:00-22:00,特殊情况不出车

 

 

 

 

表5  驾驶员信息表

属性名

类型

长度

完整性约束

备注

姓名

char

20

非空

 

性别

char

20

非空

只能选择男或者女

驾龄

int

 

非空

根据驾龄来评定熟练度

年龄

int

 

非空

必须大于18,小于60

工号

char

10

主码

 

是否空闲

bit

 

非空

0表示空闲状态,1表示工作状态

 

表6 车辆维护表

属性名

类型

长度

完整性约束

备注

车牌号

char

    10

主码

 

维护员

char

10

非空

 

故障原因

ntext

 

非空

方便后期查看日志,评定损耗情况

维修时间

datetime

 

非空

根据检修时间来判断维修员工作积极性

表7  维护员信息表

属性名

类型

长度

完整性约束

备注

姓名

char

 

非空

 

性别

char

20

非空

只能选择男或者女

年龄

int

 

非空

必须大于18,小于60

工号

int

 

主码

 

是否空闲

bit

 

非空

 

 

 

 

 

 

 

表8  用户信息表

属性名

类型

长度

完整性约束

备注

用户名

char

12

非空

 

用户ID

int

 

主码

 

  密码

char

10

非空

 

电话

char

11

非空

 

微信号

char

11

 

 

Qq号

char

11

 

 

地址

char

30

 

 

表9  收藏数据表

属性名

类型

长度

完整性约束

备注

收藏时间

datetime

 

主码

 

收藏站点

char

20

 

 

收藏路线

char

20

 

 

 

表10  签到表

属性名

类型

长度

完整性约束

备注

签到时间

datetime

 

主码

 

积分

int

 

 

 

用户ID

int

 

外码

 

 

 

 

 

 

 

 

2.4用例列举

2.4.1建立数据表

  1. 站点信息表

create table Bus_sta_info(

Sid int primary key,--站点ID

Sname char(10) not null,--站点名

Sprovince char(10) default '湖北省',--站点所属省 默认湖北省

check(Sprovince in ('北京市','天津市','上海市','重庆市','河北省','山西省','辽宁省','吉林省','黑龙江省','江苏省','浙江省','安徽省','福建省','江西省','山东省','河南省','湖北省','湖南省','广东省','海南省','四川省','贵州省','云南省','陕西省')),

Scity char(10) default '黄冈市',--站点所属市 默认黄冈市

Scounty char(10) default '黄梅县',--站点所属县 默认黄梅县

Sarea char(10),--站点所属区 默认为空

Stown char(10) default'分路镇',--站点所属镇

Svillage char(10) default'港西村',--站点所属村

Slongi float(20),--站点经度

Slati float(20),--站点纬度

);

  1. 线路信息表

create table Bus_route_info(

rid int primary key,--路线ID

Sid int,--站点ID

foreign key(Sid)references Bus_sta_info(Sid),--路线ID作为唯一标识,站点ID作为外键是路线组成部分

rno char(10) not null,--路线号

)

 

  1. 排班信息表

create table Sch_info(

--排班信息表

rno char(3),--排班路线

bno char(10)primary key,--车牌号

DNo char(10),--驾驶员工号

WorkNo int,--维修员工号

foreign key(DNo)references Bus_Driver_info(DNo),

foreign key(WorkNo)references Bus_Defender(WorkNo),

foreign key(bno)references Bus_info(bno),

)

  1. 车辆信息表

create table Bus_info(

bno char(10) primary key,--车牌号

rid char(3),

btype char(1),--车辆型号

usetime int,--使用年限

buytime datetime,--购买时间

foreign key(rid)references Bus_route_info(rno),

)

  1. 驾驶员信息表

create table Bus_Driver_info(

D_name char(20) not null,--驾驶员姓名

sex char(2) not null,--驾驶员性别

check(sex in('男','女')),

Driver_age int,--驾驶员驾龄,可评定熟练度

age int,--驾驶员年龄

check(age between 18 and 60),--年龄在18到60之间

DNo char(10) primary key,--驾驶员工号

Dfree bit,--是否空闲,0表示空闲,1表示工作状态

)

  1. 车辆维护表

create table Bus_maintain(

--方便后期查看日志,评定损耗情况

bno char(10) primary key,--车牌号

De_name char(10),--维护员姓名

F_reason ntext,--故障原因

time datetime,--维修时间

foreign key(bno)references Bus_info(bno),

)

  1. 维护员信息表

create table Bus_Defender(

De_name char(4),--维护人员姓名

sex char(2),--维护人员性别

check(sex in('男','女')),

age int,--维护人员年龄

check(age between 18 and 60),

WorkNo int primary key,--维护人员工号

Dfree bit,--是否空闲

)

  1. 用户信息表

create table User_info(

uname char(12),--用户名

uid int primary key,--用户ID

pas char(10) not null,--密码

tel char(11),--电话

wxno char(11),--微信号

qqno char(11),--qq号

addr char(30),--地址

)

  1. 收藏数据表

create table User_collection(

--收藏数据表

Ctime datetime primary key,--收藏时间

CStation char(20),--收藏站点

Spoint char(20),--收藏路线

)

  1. 签到表

create table User_signin(

--签到表

Stime datetime primary key,--签到时间

SIntegral int,--积分

uid int,--用户id

foreign key(uid)references User_info(uid),

)

2.4.2建立视图

  1. 建立查询男性司机驾龄的视图

Create view 男性司机驾龄

as

Select D_name,Driver_age

From dbo.Bus_Driver

Where sex=‘男’

  1. 建立查询张晨司机的个人信息的视图

Create   view 张晨司机信息

As

SELECT   D_name, sex, DNo, Driver_age, age, Dfree

FROM      dbo.Bus_Driver

WHERE   (D_name = '张晨')

  1. 建立所有处于空闲状态的维修员信息视图

Create  view  空闲维修员

As

Select De_name,sex,age,WorkNo

From dbo.Bus_DEefender

Where Dfree=1

  1. 建立所有在路线id为1111的公交车信息视图

Create view  路线id为1111的公交车信息

As

Select bno,btype,usetime,buytime

From  dbo.Bus_info

Where rid=1111

2.4.3建立索引

create unique index 车辆_购买时间 on Bus_info(buytime);         //unique表示每个索引值只对应一个唯一数据记录

create cluster index 维护员——是否空闲 on Bus_Defender(Dfree );  //clusterb表示聚簇索引

2.4.4查询语句

  1. 查询长城站站点所在经纬度

Select Slongi,Slati

From  dbo.Bus_sta_info

Where Sname=’长城站’

  1. 查询处于空闲状态的驾驶员的信息

Select *

From  dbo.Bus_Driver

Where Dfree=1

2.4.5建立存储过程

查询某个驾驶员的信息

Create proc pro

 @workno  char(10)

/* 给存储过程定义一个参数:查询的工号*/

 AS

     Select  *     

From  Bus_Driver

     where DNo=@workno

 

 

 

2.4.6建立触发器

Bus_Defender创建一个触发器trigger_delete_Defender”,

当删除Bus_Defender表中维护员信息时同时修改Bus_Driver表中相关记录的Dfree 0

if exists(select name from sysobjects where xtype='tr'and name='trigger_delete_Defender')

drop trigger trigger_delete_Defender

go

create trigger trigger_delete_Defender

on Bus_Defender

after delete

as 

 

begin

 update Bus_Driver set Dfree=0

from deleted,Bus_Defender

where deleted.WorkNo =Bus_Defender.WorkNo  

 end

 

 

 

 

 

  1. 体会与心得

怎么说呢,我个人以前也设计过数据库,但是没有这样全面系统做过,这次系统的设计让我知道一个人的力量还是有限的,感谢团队队员的一起通力合作让我们可以完成这个8684公交车数据库分析与设计,这次数据库实训我们把sql语句,视图,索引,触发器,默认,存储过程这些点都用上了,还有数据流图,系统流程图这些UML画图工具也有机结合在一起,最让我们花时间的部分就是系统功能需求具体分析,要将所有的关系与关系之间的关系都弄清楚才能建表(主键,外键),同时再触发器这里也花了不少时间,总是理解不了触发器的update,delete,insert的相互联系,通过上网查询,最终明白了这些的关系联系,这是值得我们高兴的,当然了,由于时间比较紧,因此我们所做的课程设计肯定还存在许多的不足之处,程序中也存在许多小错误。这将激励我们在以后的学习当中积累更多的经验,努力减少错误的发生。

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_39209492/article/details/81126193