日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【Java+JSP+MySql】12306购票系统(二)数据库

發布時間:2023/12/20 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java+JSP+MySql】12306购票系统(二)数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 視圖
  • 存儲過程
  • 觸發器

  • 用戶表
  • 用戶表的創建:

    CREATE TABLE user_info( id CHAR(18) NOT NULL, username VARCHAR(10) NOT NULL, telephone CHAR(11) NOT NULL, upassword VARCHAR(20) NOT NULL, PRIMARY KEY(id), CONSTRAINT CU1 CHECK(telephone LIKE '1%') )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

    插入數據:

    INSERT INTO `user_info` VALUES ('110108200001011111','趙倩','18310710700','password'), ('110108200002022222','張三','18310710711','123456'), ('110108200003033333','李四','18310710722','654321');
  • 車次表
  • 車次表的創建:

    CREATE TABLE train( trainnum CHAR(5) NOT NULL, origin VARCHAR(10) NOT NULL, destination VARCHAR(10) NOT NULL, stime CHAR(5), prize00 INT, prize01 INT, prize02 INT, PRIMARY KEY(trainnum), CONSTRAINT CU2 CHECK(stime LIKE '__:__') );

    插入數據:

    INSERT INTO `train` VALUES ('G1101','北京','天津','09:00',89,59,39), ('G1323','北京','天津','13:30',89,59,39), ('G1434','北京','天津','17:05',89,59,39), ('G2141','天津','北京','09:40',89,59,39), ('G2363','天津','北京','18:00',89,59,39), ('C3444','北京','上海','10:50',319,289,259), ('C3555','北京','上海','16:30',319,289,259), ('C3666','北京','上海','19:50',319,289,259), ('C4566','上海','北京','11:05',319,289,259), ('C4788','上海','北京','18:05',319,289,259), ('C5077','上海','天津','15:25',319,289,259), ('C6098','天津','上海','16:30',319,289,259);
  • 余票表
  • 余票表的創建:

    CREATE TABLE `left_tickets`( `sdate` DATE, `trainnum` CHAR(5), `leftnum00` INT, `leftnum01` INT, `leftnum02` INT, PRIMARY KEY(`sdate`,`trainnum`), FOREIGN KEY(`trainnum`) REFERENCES train(`trainnum`), CONSTRAINT CU3 CHECK(`leftnum00`>=0 AND `leftnum01`>=0 AND `leftnum02`>=0) );

    插入數據:

    INSERT INTO `left_tickets` VALUES ('2021-12-31','G1101',12,20,36), ('2021-12-31','G1323',12,20,36), ('2021-12-31','G1434',12,20,36), ('2021-12-31','G2141',12,20,36), ('2021-12-31','G2363',12,20,36), ('2021-12-31','C3444',12,20,34), ('2021-12-31','C3555',12,20,36), ('2021-12-31','C3666',12,20,36), ('2021-12-31','C4566',12,20,36), ('2021-12-31','C4788',12,20,36), ('2021-12-31','C5077',12,20,36), ('2021-12-31','C6098',12,20,36), ('2022-01-01','G1101',12,19,36), ('2022-01-01','G1323',12,20,36), ('2022-01-01','G1434',12,20,36), ('2022-01-01','G2141',12,20,36), ('2022-01-01','G2363',12,20,36), ('2022-01-01','C3444',12,20,36), ('2022-01-01','C3555',12,20,36), ('2022-01-01','C3666',12,20,36), ('2022-01-01','C4566',12,20,36), ('2022-01-01','C4788',12,20,36), ('2022-01-01','C5077',12,20,36), ('2022-01-01','C6098',12,20,36), ('2022-01-02','G1101',12,20,36), ('2022-01-02','G1323',12,20,36), ('2022-01-02','G1434',12,20,36), ('2022-01-02','G2141',11,20,36), ('2022-01-02','G2363',12,20,36), ('2022-01-02','C3444',12,20,36), ('2022-01-02','C3555',12,20,36), ('2022-01-02','C3666',12,20,36), ('2022-01-02','C4566',12,20,36), ('2022-01-02','C4788',12,20,36), ('2022-01-02','C5077',12,20,36), ('2022-01-02','C6098',12,20,36), ('2022-01-03','G1101',12,20,36), ('2022-01-03','G1323',12,20,36), ('2022-01-03','G1434',12,20,36), ('2022-01-03','G2141',12,20,36), ('2022-01-03','G2363',12,20,36), ('2022-01-03','C3444',12,20,36), ('2022-01-03','C3555',12,20,36), ('2022-01-03','C3666',12,20,36), ('2022-01-03','C4566',12,20,36), ('2022-01-03','C4788',12,20,34), ('2022-01-03','C5077',12,20,36), ('2022-01-03','C6098',12,20,36);
  • 已售車票表
  • 已售車票表的創建

    CREATE TABLE `sold_tickets`( `sdate` DATE, `trainnum` CHAR(5), `seat` VARCHAR(20), `userid` CHAR(18) NOT NULL, PRIMARY KEY(`sdate`,`trainnum`,`seat`), FOREIGN KEY(`sdate`,`trainnum`) REFERENCES `left_tickets`(`sdate`,`trainnum`), FOREIGN KEY(`userid`) REFERENCES `user_info`(`id`) );

    插入數據:

    INSERT INTO `sold_tickets` VALUES ('2021-12-31','C3444','02-1A','110108200001011111'), ('2022-01-03','C4788','02-4D','110108200001011111'), ('2022-01-01','G1101','01-5C','110108200002022222'), ('2022-01-02','G2141','00-2B','110108200002022222'), ('2021-12-31','C3444','02-8C','110108200003033333'), ('2022-01-03','C4788','02-9A','110108200003033333');

    視圖

    前面3個視圖是幾種常見的分類,后面2個視圖是系統中所需要的。

  • 出發城市
  • #行列子視圖 CREATE VIEW 出發城市 AS SELECT DISTINCT origin FROM train;
  • 學生車票
  • #帶表達式視圖 CREATE VIEW 學生車票(出發城市,到達城市,二等座價格) AS SELECT origin,destination,`prize02`*0.5 FROM train;
  • 乘車量
  • #分組視圖 CREATE VIEW 乘車量(日期,車次號,乘客數) AS SELECT sdate,trainnum,COUNT(*) FROM sold_tickets GROUP BY sdate,trainnum;
  • 車票余量及用戶完整信息
  • #完整系統需要的視圖 #車票余量完整信息視圖 CREATE VIEW train_info(start_date,origin,destination,trainnum,stime,num00,num01,num02) AS SELECT left_tickets.`sdate`,train.`origin`,train.`destination`,left_tickets.`trainnum`, train.`stime`,left_tickets.`leftnum00`,left_tickets.`leftnum01`,left_tickets.`leftnum02` FROM train,left_tickets WHERE train.`trainnum`=left_tickets.`trainnum`;
  • 已購車票及用戶完整信息
  • #用戶購買車票完整信息視圖 CREATE VIEW user_tickets_info(userid,origin,destination,sdate,stime,trainnum,seat) AS SELECT sold_tickets.`userid`,train.`origin`,train.`destination`,sold_tickets.`sdate`, train.`stime`,sold_tickets.`trainnum`,sold_tickets.`seat` FROM train,sold_tickets WHERE train.`trainnum`=sold_tickets.`trainnum`;

    所有視圖的截圖在這個專欄的第一個文章里包含了,可以看到。這里也放出鏈接:
    12306購票系統(一)項目介紹

    存儲過程

  • 登錄
  • DELIMITER $ CREATE PROCEDURE login(IN telenum CHAR(11),IN pwd VARCHAR(20)) BEGINDECLARE result INT DEFAULT 0;SELECT COUNT(*) INTO resultFROM `user_info`WHERE `user_info`.`telephone`=telenumAND `user_info`.`upassword`=pwd;SELECT result; END $
  • 注冊
  • DELIMITER $ CREATE PROCEDURE sign_in(IN id CHAR(18),IN nm VARCHAR(10),IN telenum CHAR(11),IN pwd VARCHAR(20)) BEGININSERT INTO `user_info` VALUES(id,nm,telenum,pwd);SELECT ('注冊成功'); END $
  • 取消訂票
  • DELIMITER $ CREATE PROCEDURE cancel_ticket(IN stdate DATE, IN trainnum CHAR(5),IN userid CHAR(18)) BEGINDELETE FROM `sold_tickets`WHERE `sold_tickets`.`sdate`=stdate AND`sold_tickets`.`trainnum`=trainnum AND`sold_tickets`.`userid`=userid; END $
  • 更新購票信息
  • DELIMITER $ CREATE PROCEDURE buy_update(IN stdate DATE,IN trainnum CHAR(5),IN sw_newnum INT,IN yd_newnum INT,IN ed_newnum INT) BEGINUPDATE `left_tickets` SET `left_tickets`.`leftnum00`=sw_newnum,`left_tickets`.`leftnum01`=yd_newnum,`left_tickets`.`leftnum02`=ed_newnumWHERE `left_tickets`.`sdate`=stdate AND `left_tickets`.`trainnum`=trainnum; END $

    以上存儲過程中,只有1. 登錄和2.注冊在購票系統中有應用。但是這四個觸發器把增刪改查都應用到了。

    觸發器

  • 購票
    根據所購車票等級,余票量減一
  • DELIMITER $ CREATE TRIGGER buy_tickets BEFORE INSERT ON sold_tickets FOR EACH ROW BEGINIF new.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEIF new.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;END IF; END $
  • 取消訂票
    根據取消的車票等級,相應余票加一
  • DELIMITER $ CREATE TRIGGER cancel_t AFTER DELETE ON sold_tickets FOR EACH ROW BEGINIF old.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEIF old.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;END IF; END $
  • 修改座位等級
  • DELIMITER $ CREATE TRIGGER update_seat AFTER UPDATE ON sold_tickets FOR EACH ROW BEGINIF new.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEIF new.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`-1WHERE `sdate`=new.`sdate` AND `trainnum`=new.`trainnum`;END IF;IF old.`seat` LIKE '02%' THENUPDATE `left_tickets` SET `leftnum02` =`leftnum02`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEIF old.`seat` LIKE '01%' THENUPDATE `left_tickets` SET `leftnum01` =`leftnum01`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;ELSEUPDATE `left_tickets` SET `leftnum00` =`leftnum00`+1WHERE `sdate`=old.`sdate` AND `trainnum`=old.`trainnum`;END IF; END $

    觸發器前兩個1. 購票和2.取消訂票在系統中有應用,但三個合起來將增刪改都實現了。

    系列更新結束后會把源代碼和相關的文檔打包上傳成資源。
    如果你覺得這篇文章對你有用的話,麻煩點贊,收藏,關注一下。
    感謝您的閱讀,您的支持是對我最大的鼓勵~

    總結

    以上是生活随笔為你收集整理的【Java+JSP+MySql】12306购票系统(二)数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。