資料庫期末project proposal
DESCRIPTION
TRANSCRIPT
資料庫期末 Project Proposal
高鐵訂票系統
資工三乙
494512102 張逸豪
494512059 孫于婷
494512217 吳則漢
一、 系統介紹:本系統提供使用者透過網路來訂取、查詢、及取消高鐵車廂
座位;並提供管理者介面供管理者做售票等相關紀錄的查詢。
二、 功能、規則:
1. 依起迄站、日期及欲搭乘時段查詢仍有空位之列車車次。
2. 查詢票價。
3. 查詢訂位紀錄。
4. 查詢空位數量。
5. 取消訂位紀錄。
6. 提供旅客預訂當日及未來 14 日以內之車票。訂位開放時間為乘車日(含)
前 14 日凌晨 0 點開始,但當日車次之預訂僅受理至列車起站出發時間前
2 小時為止。
7. 車廂數目:5,單一車廂座位數量:100,共 500 個座位。
8. 座位號碼依序排列(一排四人):
1 2 3 4
5 6 7 8
9 10 11 12
‧ ‧ ‧ ‧
9. 站數:共八站-台北,板橋,桃園,新竹,台中,嘉義,台南,左營。
10. 不可一票多買。
11. 座位可被分段購買。
12. 被取消訂票之座位還可再被訂。
13. 管理者可以利用匯入檔案的方式來完成大量訂票(僅限訂票功能)。
14. 系統管理者可對系統做售票的統計。
15. 系統管理者可將所有交易的資料匯出成 record.txt 檔。
16. 系統管理者可將不合理之購票紀錄刪除。
17. 當使用者完成訂票後,將自動產生其所訂座位資訊及流水號給使用者。
三、 系統架構:
1. 使用者介面:
(1) 訂票:
使用者需輸入其身分證字號(SSID)、姓名、E-mail、購票數、車次、
乘車日期、起點、終點等資訊訂票。當資料送出並確定無誤時,系
統訂票完成後會給予一組流水號做識別用;在完成每”次”的訂票後
系統都會提供一組不同的流水號。
(2) 查詢自己的訂票紀錄:
使用者需輸入其身分證字號(SSID)來查詢自己所訂的票。
(3) 取消訂票:
使用者需輸入其身分證字號(SSID)、及系統所提供之流水號查詢自己
已訂的票,而後勾選所要取消之班次。
(4) 查詢時課表:
點入連結頁面即顯示時課表。
(5)查詢空座位及乘車率:
輸入車次、日期、起站與迄站並顯示所剩空位及乘車率百分比。
2. 管理者介面:管理者有其獨立之頁面可做帳號的登入。
(1) 查詢:
管理者可以查詢某一天各個班次的訂票人數(Group by Date)。也可查
詢某位乘客的購票資訊。
(2) 訂票:
管理者可以手動大量新增資料,並利用管理者介面處理電話訂票的
資料。
(3) 刪除:
管理者可以手動刪除任何一筆資料。
(4) File 輸入:
當需要大量訂票的資料輸入時,管理者可以匯入 input.txt 檔,裡面
記載著所有所需訂票之資訊,其格式為:
編號、身分證字號(SSID)、姓名、E-mail、購票數、車次、乘車日期、
起點、終點。若成功,系統將會自動完成訂票並產生座位資訊及流
水號;若格式不符,系統將會拒絕檔案匯入。
(5) File 輸出:
管理者可以將所有交易的資料輸出成:record.txt,其包含:
編號、身分證字號(SSID)、姓名、購票/退票時間、購票數、退票數、
車次、北上/南下、乘車日期、起點、終點、車廂、座位…資訊。
四、 Schema:
customers(cus_name,cus_ SSID, cus_email, tickets, reservation_No, cus_date,
cus_time)
train(train_No, [0],[1], [2], [3],[4], [5], [6],[7] )
seat_info(reservation_No, train_No,
carriage_No,seat_No,seat_date,seat_dep,seat_dest)
state_table(city_No, city_name)
cancel_seat(cus_name, train_No, carriage_No, seat_No, seat_date, seat_dep,
seat_dest)
五、E-R model:
六、SQL:
(1) 訂票:
a. 加入到 customer 表格:
INSERT INTO customer(reservation_No, cus_name, cus_SSID,
cus_email, cus_time, cus_date, tickets)
VALUES (‘使用者所輸入的資料’)
b. 加入到 seat_info 表格:
INSERT INTO seat_info (reservation_No, train_No, seat_date,
carriage_No, seat_No, seat_dep, seat_dest)
VALUES (‘使用者所輸入的資料’)
c. 從退票表格中取出座位來訂:
SELECT TOP ‘ 多 餘 需 要 從 退 票 表 格 中 訂 的 票 數 ’ * FROM
cancel_seat WHERE train_No = ‘使用者所輸入的車次 ’ AND
seat_date = ‘使用者所輸入的日期’
(2) 查詢訂票紀錄:
SELECT (train_No, dep_time, carriage_No, seat_date, seat_No,
seat_dep, seat_dest)
FROM customer INNER JOIN seat_info
WHERE reservation = ‘使用者輸入的流水號碼’ AND cus_SSID = ‘使用
者輸入的身分證字號’
(3) 取消所有訂票紀錄:
網頁端需先判斷所輸入的數字是否等於 0,若不符則無法刪除:
DELETE FROM customer, seat_info
WHERE reservation_No = ‘使用者所輸入的流水號碼’
(4) 取消某個座位訂票紀錄:
Memo:網頁端需先判斷所輸入的數字是否大於該使用者所訂票數,
若超過則顯示錯誤訊息。
UPDATE customer
SET tickets = tickets – ‘使用者所輸入需取消的票數’
WHERE reservation_No = ‘使用者所輸入的流水號碼’
DELETE FROM seat_info
WHERE IN(
SELECT TOP 3 seat_No
FROM seat_info
WHERE reservation_No = ‘使用者所輸入的流水號碼’)
(5) 查詢某一天各班的乘車人數:
SELECT train_No, SUM (tickets)
FROM customer INNER JOIN seat_info
WHERE seat_date = ‘管理者所輸入的日期’
ORDER BY train_No
(6) 管理者強制刪票功能:
DELETE FROM customer, seat_info
WHERE reservation_No = ‘管理者所輸入的流水號碼’
(7) File 輸出:
SELECT (cus_SSID, cus_name, tickets, train_No, seat_date, seat_dep,
seat_dest)
FROM ((customer INNER JOIN seat_info) INNER JOIN train_info) INNER
JOIN state_table
WHERE reservation = ‘使用者輸入的流水號碼’ AND cus_SSID = ‘使用
者輸入的身分證字號’
(8) 列出時刻表:
南下列車:SELECT * FROM train WHERE ‘台北出發的時間’ < ‘板橋站
出發的時間’ ORDER BY ‘台北出發的時間’
北上列車:SELECT * FROM train WHERE ‘台北出發的時間’ > ‘板橋站
出發的時間’ ORDER BY ‘台北出發的時間
(9) 查詢乘車率:
南下列車:SELECT train_No FROM seat_info WHERE train_No = ‘使用
者所輸入的車次 ’ AND seat_date = ‘使用者所輸入的日期’ AND
seat_dep < ‘使用者所輸入的迄站’ AND seat_dest > ‘使用者所輸入的
起站’
北上列車:SELECT train_No FROM seat_info WHERE train_No = ‘使用
者所輸入的車次 ’ AND seat_date = ‘使用者所輸入的日期’ AND
seat_dep > ‘使用者所輸入的迄站’ AND seat_dest < ‘使用者所輸入的
起站’
(10) 退票紀錄查詢:
SELECT train_No, carriage_No, seat_No, seat_date, seat_dep, seat_dest
FROM cancel_seat WHERE cus_name = ‘使用者所輸入的姓名’ ORDER
BY carriage_No, seat_No
七、前端網頁瀏覽畫面截圖:
首頁:
網路訂票:
查詢、變更、取消訂票:
時刻表:
乘車率查詢:
退票紀錄查詢:
八、後端管理者介面截圖:
訂票:
存檔:
刪票:
查詢訂票記錄:
查詢乘車人數:
檔案輸入: