系列文章
《数据库应用系统实践》2.0版本 — 1- 班车预约信息系统
👇🏻实践要求👇🏻
一个使用Java语言和SQLServer数据库设计的班车预约信息系统
1.对课题进行需求调研与分析,完成了系统功能图与功能模块设计;完成阶段开发。
2.给出课题的概念模型(即ER图),要求对课题ER图设计中至少5个实体;
3.根据设计的ER模型,结合DBMS(数据库管理系统)特点给出了系统的逻辑模型(关系模式);
4.给出实现数据库的SQL语句,包含创建数据库、数据表(含主键、外键定义及约束性条件设计)、插入数据(各表至少插入5条记录)、更新数据、删除数据、视图(单表或多表)等;根据需要设计了存储过程和触发器;完成阶段开发。
5.完成应用程序开发过程中的编码、调试、测试、Bug修复等工作;开发语言选用Java;开发工具可选用IDEA、Eclipse均可;程序中实现数据库连接、GUI开发、增删改查操作等内容。
包括有 Java源代码+数据库源码+实践报告+部署教程
文章目录
一、需求分析
1、系统背景
本课题旨在设计和实现一个基于 SQL Server 的班车预约信息系统,系统将涵盖管理员、用户、班车、预约和司机等功能模块。管理员将拥有对系统的全面控制权,包括管理用户账户和权限分配,确保系统运行安全和稳定。普通用户通过登录系统,可以浏览班车信息、预约乘坐班车,并实时查看预约状态和通知。班车信息模块将记录每辆班车的基本信息,包括名称、出发时间、出发地点和目的地,为用户提供准确的出行选择。预约信息模块将关联用户和班车信息,记录用户的预约行为和预定状态,确保预约过程的透明和有效性。司机信息模块将管理每位司机的基本信息和所属班车,确保司机信息与具体班车的关联性和一致性。该系统旨在提升班车运输服务的效率和用户体验,为用户提供便捷、可靠的出行解决方案。
2、 系统功能结构
(1)功能结构图
(2)模块说明
包含普通用户信息、管理员信息、班车信息、预约信息、司机信息
二、概念模型设计
1.基本要素(符号介绍说明)
① 矩形:表示实体。
② 椭圆形:表示属性,即实体的属性。
③ 菱形:表示联系。
④ 连线:该连线为没有方向的线段,分为连接实体与属性(矩形与椭圆形之间的连线)和连接实体与联系名(矩形与菱形之间的连线);实体与联系名的连线旁需标注联系的类型,如1:1、1:n、m:n。
注意:在联系类型标注时请按照约定俗成的方式标注,一对多使用1:n,多对多使用m:n,如果超过两个实体请采用m:n:p:q:
2.ER图
三、逻辑模型设计
1.ER模型向关系模型转换规则
(1)实体转换为单独的关系模式。
(2)一对一联系转换为关系模式有两种方法。
①、将联系转换为单独的关系模式;
②、将其中一个实体的之间加入到另外一个实体的关系模式中,作为外键。
(3) 一对多联系转换为关系模式有两种方法。
①、将联系转换为单独的关系模式;
②、将n实体的主键合并到1实体的关系模式中,作为1实体关系模式的外键。
2.转换后的关系模型
管理员 (管理员账号, 密码, 姓名, 邮箱, 手机号)
普通用户 (用户账号, 密码, 姓名, 邮箱, 手机号)
班车信息 (班车ID, 出发时间, 出发地点, 目的地)
预约信息 (用户账号, 班车ID, 预约时间, 是否取消)
司机信息 (司机名, 联系方式, 车牌号)
3.关系模型优化(达到3NF)
以上要素都属于第三范式
四、物理设计
1.创建数据库的SQL语句或截图
CREATE DATABASE 班车预约信息系统 ;
2.创建所有表的SQL语句或截图(包含完整性约束)
-- 创建管理员表
CREATE TABLE 管理员 (
管理员ID INT PRIMARY KEY IDENTITY(1,1),
用户名 NVARCHAR(50) NOT NULL,
密码 NVARCHAR(50) NOT NULL,
姓名 NVARCHAR(50),
邮箱 NVARCHAR(100),
手机号 NVARCHAR(20)
);
-- 创建普通用户表
CREATE TABLE 普通用户 (
用户ID INT PRIMARY KEY IDENTITY(1,1),
用户名 NVARCHAR(50) NOT NULL,
密码 NVARCHAR(50) NOT NULL,
姓名 NVARCHAR(50),
邮箱 NVARCHAR(100),
手机号 NVARCHAR(20)
);
-- 创建班车信息表
CREATE TABLE 班车信息 (
班车ID INT PRIMARY KEY IDENTITY(1,1),
班车名称 NVARCHAR(100) NOT NULL,
出发时间 DATETIME,
出发地点 NVARCHAR(100),
目的地 NVARCHAR(100)
);
-- 创建预约信息表
CREATE TABLE 预约信息 (
预约ID INT PRIMARY KEY IDENTITY(1,1),
用户ID INT FOREIGN KEY REFERENCES 普通用户(用户ID),
班车ID INT FOREIGN KEY REFERENCES 班车信息(班车ID),
预约时间 DATETIME,
是否取消 BIT
);
-- 创建司机信息表
CREATE TABLE 司机信息 (
司机ID INT PRIMARY KEY IDENTITY(1,1),
司机姓名 NVARCHAR(50),
联系方式 NVARCHAR(20),
所属班车ID INT FOREIGN KEY REFERENCES 班车信息(班车ID),
车牌号 NVARCHAR(20)
);
五、数据库实施
1.粘贴所创建的数据库关系图
2.数据录入
-- 插入管理员表数据
INSERT INTO 管理员 (用户名, 密码, 姓名, 邮箱, 手机号)
VALUES
('admin1', 'password1', '张三', 'admin1@example.com', '13812345678'),
('admin2', 'password2', '李四', 'admin2@example.com', '13987654321'),
('admin3', 'password3', '王五', 'admin3@example.com', '13611112222'),
('admin4', 'password4', '赵六', 'admin4@example.com', '13533334444'),
('admin5', 'password5', '钱七', 'admin5@example.com', '13755556666');
-- 插入普通用户表数据
INSERT INTO 普通用户 (用户名, 密码, 姓名, 邮箱, 手机号)
VALUES
('user1', 'password1', '小明', 'user1@example.com', '15800001111'),
('user2', 'password2', '小红', 'user2@example.com', '15800002222'),
('user3', 'password3', '小刚', 'user3@example.com', '15800003333'),
('user4', 'password4', '小美', 'user4@example.com', '15800004444'),
('user5', 'password5', '小亮', 'user5@example.com', '15800005555');
-- 插入班车信息表数据
INSERT INTO 班车信息 (班车名称, 出发时间, 出发地点, 目的地)
VALUES
('班车A', '2024-07-03 08:00:00', '学校东门', '市中心'),
('班车B', '2024-07-03 08:30:00', '小区北门', '火车站'),
('班车C', '2024-07-03 09:00:00', '公司大门', '商业区'),
('班车D', '2024-07-03 09:30:00', '图书馆', '医院'),
('班车E', '2024-07-03 10:00:00', '体育场', '公园');
-- 插入预约信息表数据
INSERT INTO 预约信息 (用户ID, 班车ID, 预约时间, 是否取消)
VALUES
(1, 1, '2024-07-03 07:30:00', 0),
(2, 2, '2024-07-03 08:00:00', 1),
(3, 3, '2024-07-03 08:30:00', 0),
(4, 4, '2024-07-03 09:00:00', 0),
(5, 5, '2024-07-03 09:30:00', 1);
-- 插入司机信息表数据
INSERT INTO 司机信息 (司机姓名, 联系方式, 所属班车ID, 车牌号)
VALUES
('张师傅', '18811112222', 1, '京A12345'),
('李师傅', '18822223333', 2, '京B23456'),
('王师傅', '18833334444', 3, '京C34567'),
('赵师傅', '18844445555', 4, '京D45678'),
('钱师傅', '18855556666', 5, '京E56789');
3.数据处理(包含完整十个,篇幅限制,仅列举前5个)
(1)至少包括2张表的等值连接语句;
(2)创建视图的语句;
(3)更新数据语句;
(4)删除数据语句;
(5)包含聚集函数的查询语句;
(6)包含条件过滤的查询语句;
(7)修改表结构语句;
(8)用T-SQL语句写出一个对数据表处理的人机交互程序;
(9)编写一个触发器;
(10)编写一个存储过程;
六、数据库应用系统实现
1.相关界面截图
用户登录:
信息查询:
管理员登录:
信息查询:
数据增加:
数据修改:
数据删除:
2.和数据库连接的程序语句
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=班车预约信息系统";
String userName = "sa";
String userPwd = "1";
3.具体实现代码
3.具体实现代码
if (jr1.isSelected())// 简单查询
{
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=班车预约信息系统";
String userName = "sa";
String userPwd = "1";
userId = null; // 用户
try {
Class.forName(driverName);
} catch (Exception e1) {
e1.printStackTrace();
}
try {
Connection con = DriverManager.getConnection(dbURL, userName, userPwd);
Statement s = con.createStatement();
String r1 = "select * from 普通用户 where 用户ID=? and 密码=?";
PreparedStatement P = con.prepareStatement(r1);
P.setString(1, jtf1.getText());
P.setString(2, jtf2.getText());
ResultSet rs = P.executeQuery();
if (rs.next()) {
userId = rs.getString("用户ID").trim();
new YG(userId);
jfrm.setVisible(false);
}
else {
JOptionPane.showMessageDialog(null, "用户ID或密码不正确!");
}
s.close();
con.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
if (jr3.isSelected())//
{
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=班车预约信息系统";
String userName = "sa";
String userPwd = "1";
userId = null; // 管理员
try {
Class.forName(driverName);
} catch (Exception e1) {
e1.printStackTrace();
}
try {
Connection con = DriverManager.getConnection(dbURL, userName, userPwd);
Statement s = con.createStatement();
String r1 = "select * from 管理员 where 管理员ID=? and 密码=?";
PreparedStatement P = con.prepareStatement(r1);
P.setString(1, jtf1.getText());
P.setString(2, jtf2.getText());
ResultSet rs = P.executeQuery();
if (rs.next()) {
userId = rs.getString("管理员ID").trim();
new Custom(userId);
jfrm.setVisible(false);
}
else {
JOptionPane.showMessageDialog(null, "管理员ID或密码不正确!");
}
s.close();
con.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
七、小组分工明细
注:1-2人一组,若2人一组,请说明每位组员的具体贡献明细,要求每位组员都需要既参加数据库设计又参加Java GUI项目编码,课程报告中内容组内自行商量分工。
学号-姓名 | 身份 | 贡献比例 | 完成工作 |
---|---|---|---|
组长 | % | ||
组员 | % |
八、开发环境说明
名录 | 内容 |
---|---|
操作系统 | Win11 |
Java GUI开发工具 | Eclipse/Idea |
JDK版本 | 1.8 |
数据库及版本 | SQL Server 2014或以上均可 |
JDBC版本 | 8.2 |
九、总结
200字左右的小结,包括
(1)完成情况和不足之处
(2)心得体会
(3)建议
完成了程序设计,包括管理员、普通用户、班车信息、预约信息和司机信息表的创建与数据插入。设计中成功实现了表结构的规范化和数据的插入操作,确保了数据的完整性和一致性。然而,项目中存在的不足之处包括未对表格中的所有字段添加适当的约束(如唯一性约束、非空约束),可能影响数据的有效性和安全性。通过本课题,深刻体会到了数据库设计的重要性和复杂性,对于如何优化表结构和提升数据管理能力有了更深入的理解和实践经验。希望未来的课程能更加注重数据库设计中约束的应用和实际业务场景的模拟,以提升实际操作能力和解决问题的能力。
十、参考文献
[1] 潘永惠编著.数据库系统设计与项目实践 : 基于SQL Server 2008[M].科学出版社,2011.
[2] 杨晓健.基于SQLServer Reporting Services的集成报表平台设计与实现[D].北京邮电大学[2024-07-06].DOI:CNKI:CDMD:2.2008.140567.
[3] LouisDavidson,Davidson,邝劲筠,等.SQL Server 2000数据库设计权威指南[M].电力出版社,2003.
十一、获取源码
大家 点赞、收藏、关注、评论啦、查看👇🏻 获取联系方式👇🏻
文章👇🏻下方名片👇🏻联系我即可~