火车站票务管理系统
1.实现车次管理
2.实现车次及价格管理(含到各站的价格)
3.实现业务员管理:
4.实现车票销售管理,车票销售时不能超员,并自动修改剩余的座位数(用触发器
实现);
5.创建查询语句统计指定车次指定发车时间的车票销售情况:
6.创建查询语句统计指定日期各业务员车票的销售收入;
7.实现退票管理,退票时自动修改相应车次的剩余座位数(用触发器实现)
8.创建表间关系。
要求:四、提交要求(电子材料)
1.数据库设计说明书
格式:
2.
3.
封面:题目、姓名、学号:
题目及要求说明:
说明书(含需求分析、概念设计、逻辅设计。物理设计、数据库及数据库对象创
建的SQL语句、其他题目要求完成的查询。视图、触发器等的创建代码)
1.问题的描述
2.需求分析
2.1需求分析2.2数据流图2.3 数据字典3.概念设计
3.1局部E-R图3.2全局E-R图4.逻辑设计
5.物理设计
6.数据库对象创建的SQL语句
7,题目要求的完成的内容的代码
8.结论
由于题目要求是在SQL环境中实现火车站票务管理系统,所以需要进行数据库设计,以确保系统的功能完备。
需求分析:
通过分析题目中的要求,需要建立的数据库表有:车次、价格、业务员、车票销售、车票退票。
数据流图:
可以利用数据流图对数据的流动关系进行描述,以确保数据的有效流通。
数据字典:
数据字典描述了每一个数据项的详细信息,包括数据类型、数据长度、是否为空等。
概念设计:
利用E-R图对数据库进行概念设计,以确保数据库的结构合理。
逻辑设计:
利用逻辑模型对数据库进行逻辑设计,以确保数据库的功能完备。
物理设计:
利用物理模型对数据库进行物理设计,以确保数据库的实现方案。
数据库对象创建的SQL语句:
利用SQL语句创建数据库对象,以确保数据库的正确实现。题目要求的完成的内容的代码:
车次管理:
CREATE TABLE TrainInfo (
train_id INT PRIMARY KEY,
train_name VARCHAR(20),
start_station VARCHAR(20),
end_station VARCHAR(20),
total_seats INT,
remaining_seats INT
);
车次价格管理:
CREATE TABLE TrainPrice (
train_id INT,
station_name VARCHAR(20),
price INT,
FOREIGN KEY (train_id) REFERENCES TrainInfo(train_id)
);
业务员管理:
CREATE TABLE SalesmanInfo (
salesman_id INT PRIMARY KEY,
salesman_name VARCHAR(20),
salesman_tel VARCHAR(20)
);
车票销售管理:
CREATE TABLE TicketSaleInfo (
ticket_id INT PRIMARY KEY,
train_id INT,
salesman_id INT,
sale_date DATE,
seat_num INT,
FOREIGN KEY (train_id) REFERENCES TrainInfo(train_id),
FOREIGN KEY (salesman_id) REFERENCES SalesmanInfo(salesman_id)
);
触发器:自动修改剩余座位数
CREATE TRIGGER tr_update_remaining_seats
AFTER INSERT ON TicketSaleInfo
FOR EACH ROW
BEGIN
UPDATE TrainInfo
SET remaining_seats = remaining_seats - NEW.seat_num
WHERE train_id = NEW.train_id;
END;
查询语句:统计指定车次指定发车时间的车票销售情况
SELECT train_name, sale_date, SUM(seat_num) AS total_sold
FROM TicketSaleInfo tsi
JOIN TrainInfo ti ON tsi.train_id = ti.train_id
GROUP BY train_name, sale_date;
查询语句:统计指定日期各业务员车票的销售收入
SELECT salesman_name, SUM(price) AS total_income
FROM TicketSaleInfo tsi
JOIN TrainInfo ti ON tsi.train_id = ti.train_id
JOIN TrainPrice tp ON tsi.train_id = tp.train_id
JOIN SalesmanInfo si ON tsi
在数据库中创建车次信息表,其中包含车次编号、起点站、终点站、发车时间、到达时间等信息。这个表可以用下面的 SQL 语句创建:
CREATE TABLE TrainInfo (
train_id INT PRIMARY KEY,
start_station VARCHAR(50),
end_station VARCHAR(50),
departure_time TIME,
arrival_time TIME
);
创建价格信息表,其中包含车次编号、到达站、价格等信息。这个表可以用下面的 SQL 语句创建:
CREATE TABLE PriceInfo (
train_id INT,
station VARCHAR(50),
price FLOAT,
PRIMARY KEY (train_id, station),
FOREIGN KEY (train_id) REFERENCES TrainInfo(train_id)
);
创建业务员信息表,其中包含业务员编号、姓名等信息。这个表可以用下面的 SQL 语句创建
CREATE TABLE SalesmanInfo (
salesman_id INT PRIMARY KEY,
name VARCHAR(50)
);
创建车票销售信息表,其中包含车票编号、车次编号、业务员编号、销售日期、座位数等信息
CREATE TABLE TicketSaleInfo (
ticket_id INT PRIMARY KEY,
train_id INT,
salesman_id INT,
sale_date DATE,
seat_num INT,
FOREIGN KEY (train_id) REFERENCES TrainInfo(train_id),
FOREIGN KEY (salesman_id) REFERENCES SalesmanInfo(salesman_id)
);
创建完数据库表 "TicketSaleInfo" 后,你需要对其进行数据插入,才能使用该表。比如:
INSERT INTO TicketSaleInfo (ticket_id, train_id, salesman_id, sale_date, seat_num)
VALUES (1, 1, 1, '2023-02-09', 20);
这个语句会向表 "TicketSaleInfo" 中插入一条数据,其中 ticket_id 为 1,train_id 为 1,salesman_id 为 1,sale_date 为 '2023-02-09',seat_num 为 20。
注意:你需要先创建 "TrainInfo" 和 "SalesmanInfo" 这两个表,并且需要确保表中已经存在对应的数据,否则会报错。
为了实现退票管理,你可以创建一个触发器来修改车次剩余座位数。如果在TicketSaleInfo表中删除一个票,触发器将执行以下操作:
1.检索票的信息,包括车次ID和座位号。
2.根据车次ID更新TrainInfo表中的剩余座位数。
下面是实现触发器的SQL语句:
DELIMITER $$
CREATE TRIGGER update_remaining_seats
AFTER DELETE
ON TicketSaleInfo
FOR EACH ROW
BEGIN
UPDATE TrainInfo
SET remaining_seats = remaining_seats + 1
WHERE train_id = OLD.train_id;
END$$
DELIMITER ;
为了创建表间关系,你需要在各个表中定义外键。外键是指一个表中的列,该列引用另一个表中的主键。
以下是在TrainInfo表和SalesmanInfo表中定义外键的SQL语句:
ALTER TABLE TrainInfo
ADD FOREIGN KEY (line_id) REFERENCES LineInfo(line_id);
ALTER TABLE SalesmanInfo
ADD FOREIGN KEY (department_id) REFERENCES DepartmentInfo(department_id);
在TicketSaleInfo表中定义两个外键,分别引用TrainInfo表和SalesmanInfo表中的主键:
ALTER TABLE TicketSaleInfo
ADD FOREIGN KEY (train_id) REFERENCES TrainInfo(train_id),
ADD FOREIGN KEY (salesman_id) REFERENCES SalesmanInfo(salesman_id);