数据库学期实训
题目 | IB智慧公交系统的设计与实现 |
作者姓名 | |
学号 | |
所在院系 | 计算机与信息工程学院 |
学科专业名称 | 计算机科学与技术 |
导师及职称 | |
撰写时间 | 2022年6月26日 |
目 录
1 系统简介
2 系统需求分析
2.1 系统用例图 1
2.2 数据流图 1
3 系统数据库设计
3.1 E-R图
3.2 概念模型
3.3 物理模型
4 系统SQL
4.1创建排班表
4.2创建权限表 12
4 3创建用户表 13
4.4创建站点 13
4.5创建线路 14
4.6创建线路站点关系表 15
4.7创建角色 16
4.8创建角色权限表 16
4.9创建车辆表 16
4.10表之间的关系 17
5系统测试和后台的连接
6系统测试
7 总结
IB智慧公交系统的设计与实现
1 系统简介
智慧公交项目(简称IB)是由大连智森科技有限公司为某城市公交公司开发的应用软件。旨在提高员工的日常工作便捷性、工作效率,降低管理及运营成本。本软件系统将为该公司提供车辆信息管理、员工信息管理、线路信息管理、站点信息管理、排班方案管理等功能,同时提供了近场通讯功能(NFC)。利用这些功能充分满足该公交公司日常工作中的管理及信息同步需求。
2 系统需求分析
系统结构总体分为客户端与服务端。客户端负责人机交互及数据展示,服务端负责业务及数据处理。客户端与服务器通信采用mina通信框架实现,数据读写采用物理文件形式读写。
该文档的主要阅读对象是为以下人员
-
- 项目接口负责人
- 项目维护人员
- 项目运营人员
- 项目设计人员
- 项目开发人员
- 项目测试人员
2.1系统用例图
图2.1-1 总用例图
图2.1-2 车辆信息用例图
图2.1-3 排班信息用例图
图2.1-4 用户信息用例图
图2.1-5 线路信息用例图
图2.1-6 站点信息用例图
2.2 数据流图
图2.2-1一级数据流图
图2.2-2二级数据流图
图2.2-3二级再分解流图
图2.2-4总数据流图
3 系统数据库设计
3.1 ER图
画ER图有四个步骤:
A.实体及其属性
用户(用户编号、姓名、角色、驾龄、用户状态、身份证、登录密码、手机号、登录名)
角色(角色描述、角色编码、角色名称)
权限(权限描述、权限编码、权限名称)
排班(始发站、终点站、每趟时间、趟次、车牌号、线路编号、排班编号、司机编号)
站点(站点编号、所在街道、站点名称、经度、纬度、所在区域)
线路(线路编号、线路名称、状态、开线时间、运行方向)
车辆(车辆编号、车牌号、车型、状态、起运时间)
B.画单个ER图
图3.1-1 用户ER图
图3.1-2 角色ER图
图3.1-3 权限ER图
图3.1-4 排班ER图
图3.1-5 站点ER图
图3.1-6 车辆ER图
C.关系描述
用户和角色存在属于关系(1:1)
角色和权限存在拥有关系(m:n)
用户和排班(1:n)
线路和排班(1:n)
线路和站点(m:n)
排班和车辆(1:n)
排班和站点(1:n)
局部再合并ER图(主键已通过下划线标识)
图3.1-7 合并ER图
3.2 概念模型
图3.2 概念模型
3.3物理模型
4 系统SQL
4.1创建排班表
创建排班表的SQL语句如下:
CREATE TABLE `scheduling` (
`code` int NOT NULL AUTO_INCREMENT,
`lineCode` int NULL DEFAULT NULL,
`tcNumber` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`tcTime` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`userCode` int NULL DEFAULT NULL,
`startStation` int NULL DEFAULT NULL,
`endStation` int NULL DEFAULT NULL,
`busLicense` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`code`) USING BTREE,
INDEX `FK_Reference_4`(`lineCode` ASC) USING BTREE,
INDEX `FK_Reference_5`(`userCode` ASC) USING BTREE,
INDEX `FK_SCH_REF_STATION_START`(`startStation` ASC) USING BTREE,
INDEX `FK_SCH_REF_STATION_END`(`endStation` ASC) USING BTREE,
INDEX `FK_Reference_3`(`busLicense` ASC) USING BTREE,
CONSTRAINT `FK_Reference_3` FOREIGN KEY (`busLicense`) REFERENCES `bus` (`busLicense`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `FK_Reference_4` FOREIGN KEY (`lineCode`) REFERENCES `line` (`lineCode`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `FK_Reference_5` FOREIGN KEY (`userCode`) REFERENCES `sysuser` (`code`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `FK_SCH_REF_STATION_END` FOREIGN KEY (`endStation`) REFERENCES `station` (`stationCode`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `FK_SCH_REF_STATION_START` FOREIGN KEY (`startStation`) REFERENCES `station` (`stationCode`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.2创建权限表
创建权限表的SQL语句如下:
CREATE TABLE `permission` (
`permissionCode` int NOT NULL AUTO_INCREMENT,
permissionName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,permissionDescribe` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`permissionCode`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.3创建用户表
创建用户表的SQL语句如下:
CREATE TABLE `sysuser` (
`code` int NOT NULL AUTO_INCREMENT,
`loginName` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`idCard` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`role` int NULL DEFAULT NULL,
`driving` decimal(10, 0) NULL DEFAULT NULL,
`status` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`code`) USING BTREE,
INDEX `FK_Reference_10`(`role` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.4创建站点
创建站点表的SQL语句如下:
CREATE TABLE `station` (
`stationCode` int NOT NULL AUTO_INCREMENT,
`stationName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`longitude` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`latitude` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`region` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`street` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`stationCode`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.5创建线路
创建线路表的SQL语句如下:
CREATE TABLE `line` (
`lineCode` int NOT NULL AUTO_INCREMENT,
`lineName` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`status` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`startLineTime` datetime NULL DEFAULT NULL,
`direction` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`lineCode`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.6创建线路站点关系表
创建线路站点关系表的SQL语句如下:
CREATE TABLE `line_station_ref` (
`id` int NOT NULL AUTO_INCREMENT,
`lineCode` int NULL DEFAULT NULL,
`stationCode` int NULL DEFAULT NULL,
`stationOrder` int NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `FK_Reference_8`(`lineCode` ASC) USING BTREE,
INDEX `FK_Reference_9`(`stationCode` ASC) USING BTREE,
CONSTRAINT `FK_Reference_8` FOREIGN KEY (`lineCode`) REFERENCES `line` (`lineCode`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `FK_Reference_9` FOREIGN KEY (`stationCode`) REFERENCES `station` (`stationCode`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.7创建角色
创建角色表的SQL语句如下:
CREATE TABLE `role` (
`roleCode` int NOT NULL AUTO_INCREMENT,
`roleName` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`roledescribe` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`roleCode`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.8创建角色权限表
创建角色权限表的SQL语句如下:
CREATE TABLE `role_permission_ref` (
`relationCode` int NOT NULL AUTO_INCREMENT,
`roleCode` int NULL DEFAULT NULL,
`permissionCode` int NULL DEFAULT NULL,
PRIMARY KEY (`relationCode`) USING BTREE,
INDEX `FK_Reference_1`(`roleCode` ASC) USING BTREE,
INDEX `FK_Reference_2`(`permissionCode` ASC) USING BTREE,
CONSTRAINT `FK_Reference_1` FOREIGN KEY (`roleCode`) REFERENCES `role` (`roleCode`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `FK_Reference_2` FOREIGN KEY (`permissionCode`) REFERENCES `permission` (`permissionCode`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.9创建车辆表
创建车辆表的SQL语句如下:
CREATE TABLE `bus` (
`busCode` int NOT NULL AUTO_INCREMENT,
`busLicense` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`busType` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`busStatus` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`startTime` datetime NULL DEFAULT NULL,
PRIMARY KEY (`busCode`) USING BTREE,
INDEX `AK_Key_2`(`busLicense` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
4.10表之间的关系
图4-10 表之间的关系
5 系统前端和后台的链接
图5-1数据库和Navicat连接
图5-2 前端网页
6 系统测试
1 车辆
1.1增加车辆信息
图6-1添加鄂A-66666到bus
1.2删除车辆信息
图6-2从bus删除鄂A-66666
图6-3 数据库bus浏览
1.3查询车辆信息
图6-4 成功查询车辆鄂A-88888
图6-5 删除车辆鄂A-66666
1.4修改车辆信息
图6-6 修改车辆鲁B-55554信息
图6-7 数据库bus浏览
2站点
2.1添加站点信息
图6-8 添加汉西一路到station
图6-9 数据库station浏览
2.2删除站点信息
图6-10 删除汉西一路
图6-11 数据库station浏览
2.3查询站点信息
图6-12 查询中山公园
3线路
图6-13 添加线路信息
图6-14 数据库
3.2删除线路信息
图6-15 删除该信息
图6-16 数据库
3.3查询线路信息
图6-16 查询6路信息
3.4修改线路信息
图6-17 禁用6路
图6-18 数据库
4排班信息
4.1添加排班信息
图6-19 添加该排班信息
图6-20 数据库浏览
4.2删除排班信息
图6-21 删除该信息
图6-22 数据库浏览
4.3查询排班信息
4.4修改排班信息
5用户
5.1添加用户信息
图6-23 添加该用户信息
图6-24 数据库浏览
5.2删除用户信息
图6-25 删除该用户
图6-26 数据库浏览
5.3查询用户信息
5.4修改用户信息
图6-27 修改用户手机号、身份证号
7 总结
在这次实训中,我学到了很多,有之前学过的知识,如画ER图、概念模型、物理模型,这次的练习让我更熟能生巧,当然也有之前没学到的知识,如数据字典、数据流图、用例图和前端代码连mysql数据库操作。前三者只是在我大二上学期的软件工程导论上有涉及到,但只是学了一下很浅显的点,第一次画显得格外地吃力,后来陈洁洁老师给我们发了一些参考资料,我便自己不断专研,最后花时间自己动手做出来了,老师在腾讯会议上也是给我们讲的很细,生怕我们不会或者是存在有那些不懂的地方,在实训前期,我的进度还比较顺畅,可到了前端代码连数据库操作这一步时,便遇到了困难,因为有几种方法,有几种软件可以实现。我便不断摸索,但总以失败告终,看了看老师在学习通的资料,也是发复看,代码总是有问题,就这样,可能我有点沉不住气,可能有点烦躁,最后,还是调整了自己的心态,一步一步地解决了问题,最后完成了实训任务。实训的顺利完成也离不开老师的指导,感谢陈洁洁老师的辛勤指导!