数据库火车站票务管理系统

火车站票务管理系统
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);