Advertisement
tampurus

case study 2 railway gsits gourav

Apr 23rd, 2024 (edited)
601
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 8.26 KB | None | 0 0
  1. create database cs2;
  2. use cs2;
  3.  
  4. -- TrainList table
  5.  
  6. CREATE TABLE TrainList (
  7.   train_number INT PRIMARY KEY,
  8.   train_name VARCHAR(255) NOT NULL,
  9.   source VARCHAR(255) NOT NULL,
  10.   destination VARCHAR(255) NOT NULL,
  11.   ac_fair DECIMAL(10,2) NOT NULL,
  12.   general_fair DECIMAL(10,2) NOT NULL,
  13.   weekdays VARCHAR(255)
  14. );
  15.  
  16.  
  17. -- Train_Status table
  18.  
  19. CREATE TABLE Train_Status (
  20.   train_number INT,
  21.   train_date DATE NOT NULL,
  22.   total_ac_seats INT NOT NULL,
  23.   total_general_seats INT NOT NULL,
  24.   ac_seats_booked INT NOT NULL DEFAULT 0,
  25.   general_seats_booked INT NOT NULL DEFAULT 0,
  26.   PRIMARY KEY (train_number, train_date),
  27.   FOREIGN KEY (train_number) REFERENCES TrainList(train_number)
  28. );
  29.  
  30.  
  31. -- Passenger table
  32.  
  33. CREATE TABLE Passenger (
  34.   ticket_id INT PRIMARY KEY AUTO_INCREMENT,
  35.   train_number INT NOT NULL,
  36.   booking_date DATE NOT NULL,
  37.   name VARCHAR(255) NOT NULL,
  38.   age INT,
  39.   sex VARCHAR(10),  
  40.   address TEXT,
  41.   status VARCHAR(20) NOT NULL,
  42.   ticket_category VARCHAR(10) NOT NULL,
  43.   FOREIGN KEY (train_number) REFERENCES TrainList(train_number)
  44. );
  45.  
  46. -- inserting data ramesh boi
  47. INSERT INTO TrainList (train_number, train_name, source, destination, ac_fair, general_fair, weekdays)
  48. VALUES
  49. (1001, 'Gourav U Exp', 'Indore', 'Delhi', 1500.00, 1000.00, 'Monday, Wednesday, Friday'),
  50. (1002, 'Gourav U Ps', 'Delhi', 'Prayagraj', 2000.00, 1200.00, 'Tuesday, Thursday, Saturday'),
  51. (1003, 'Rajdhani Express', 'Kolkata', 'Chennai', 1800.00, 1100.00, 'Daily'),
  52. (1004, 'Kalyan Exp', 'Chennai', 'Bangalore', 1700.00, 1050.00, 'Monday, Friday'),
  53. (1005, 'Maharaja exp', 'Jaipur', 'Jodhpur', 50000.00, 20000.00, 'Wednesday, Saturday');
  54.  
  55. INSERT INTO Train_Status (train_number, train_date,
  56.  total_ac_seats, total_general_seats, ac_seats_booked,
  57.  general_seats_booked)
  58. VALUES
  59. (1001, '2024-05-05', 50, 100, 10, 20),
  60. (1001, '2024-05-06', 50, 100, 15, 30),
  61. (1001, '2024-05-07', 50, 100, 20, 40),
  62. (1002, '2024-05-05', 60, 120, 5, 10),
  63. (1002, '2024-05-06', 60, 120, 10, 20),
  64. (1003, '2024-05-05', 40, 80, 8, 15),
  65. (1003, '2024-05-06', 40, 80, 12, 25),
  66. (1004, '2024-05-05', 45, 90, 6, 12),
  67. (1004, '2024-05-06', 45, 90, 8, 16),
  68. (1005, '2024-05-05', 100, 40, 90, 23),
  69. (1005, '2024-05-06', 101, 40, 95, 35);
  70.  
  71. INSERT INTO Passenger (train_number, booking_date, name, age, sex, address, status, ticket_category)
  72. VALUES
  73. (1001, '2024-05-05', 'Gourav Upadhyay', 21, 'Male', '123 Bandra, Mumbai', 'Confirmed', 'AC'),
  74. (1001, '2024-05-05', 'Priya Singh', 25, 'Female', '456 Kirti Nagar, Delhi', 'Confirmed', 'General'),
  75. (1002, '2024-05-05', 'Ajay Kumar', 40, 'Male', '789 New Friends Colony, Delhi', 'Confirmed', 'AC'),
  76. (1002, '2024-05-05', 'Neha Gupta', 35, 'Female', '987 Ballygunge, Kolkata', 'Confirmed', 'General'),
  77. (1003, '2024-05-05', 'Ankit Patel', 28, 'Male', '654 Bhawanipur, Kolkata', 'Confirmed', 'AC'),
  78. (1003, '2024-05-05', 'Riya Jain', 22, 'Female', '321 Anna Nagar, Chennai', 'Confirmed', 'General'),
  79. (1004, '2024-05-05', 'Vivek Reddy', 45, 'Male', '234 Madhavaram, Chennai', 'Confirmed', 'AC'),
  80. (1004, '2024-05-05', 'Shreya Mishra', 20, 'Female', '567 Walnut Street, Bangalore', 'Confirmed', 'General'),
  81. (1005, '2024-05-05', 'Amit Kumar', 33, 'Male', '345 Jayanagar, Bangalore', 'Confirmed', 'AC'),
  82. (1005, '2024-05-05', 'Pooja Sharma', 27, 'Female', '876 Banjara Hills, Hyderabad', 'Confirmed', 'General');
  83.  
  84.  
  85. -- Booking procedure
  86. DELIMITER //
  87. CREATE PROCEDURE BookTicket (
  88.     IN gu_train_number INT,
  89.     IN gu_train_date DATE,
  90.     IN gu_category VARCHAR(10),
  91.     IN gu_name VARCHAR(255),
  92.     IN gu_age INT,
  93.     IN gu_sex VARCHAR(10),
  94.     IN gu_address TEXT,
  95.     OUT gu_ticket_id INT,
  96.     OUT gu_booking_status VARCHAR(50)
  97. )
  98. BEGIN
  99.     DECLARE total_seats INT;
  100.     DECLARE total_booked_seats INT;
  101.     -- Retrieve total and booked seats based on train number and date
  102.     IF gu_category = 'AC' THEN
  103.         SELECT total_ac_seats, ac_seats_booked INTO total_seats, total_booked_seats
  104.         FROM Train_Status
  105.         WHERE train_number = gu_train_number AND train_date = gu_train_date;
  106.     ELSE
  107.         SELECT total_general_seats, general_seats_booked INTO total_seats, total_booked_seats
  108.         FROM Train_Status
  109.         WHERE train_number = gu_train_number AND train_date = gu_train_date;
  110.     END IF;
  111.    
  112.     -- CHECKIGN DOES SEAST AVAILABLE OR NOT
  113.     IF total_booked_seats < total_seats THEN
  114.         -- Insert passenger details into Passenger table
  115.         INSERT INTO Passenger (train_number, booking_date, name, age, sex, address, status, ticket_category)
  116.         VALUES (gu_train_number, gu_train_date, gu_name, gu_age, gu_sex, gu_address, 'Confirmed', gu_category);
  117.         -- Retrieve the auto-generated ticket ID
  118.         SELECT LAST_INSERT_ID() INTO gu_ticket_id;
  119.         SET gu_booking_status = 'Booking Successful';
  120.            
  121.            
  122.            
  123.     ELSE
  124.         SET gu_ticket_id = NULL;
  125.         SET gu_booking_status = 'No seats available for the selected category';
  126.     END IF;
  127. END //
  128.  
  129. CALL BookTicket(
  130.     1005,                      
  131.     '2024-05-05',              
  132.     'AC',                  
  133.     'Rohit Upadhyay',                    
  134.     21,                        
  135.     'Male',                    
  136.     '13 Palan Nagar near 60 feet road Indore',    
  137.     @ticket_id,                
  138.     @booking_status            
  139. )
  140.  
  141. -- CACELLING PROCEDURE
  142. DELIMITER //
  143. CREATE PROCEDURE CancelTicket4(IN P_Ticket_ID INT)
  144. BEGIN
  145.     DECLARE C_Train_No INT;
  146.     DECLARE C_Train_Date DATE;
  147.     DECLARE C_Category VARCHAR(20);
  148.    
  149.     SELECT train_number, booking_date, ticket_category INTO C_Train_No, C_Train_Date, C_Category
  150.     FROM passenger WHERE ticket_id = P_Ticket_ID;
  151.    
  152.     DELETE FROM passenger WHERE ticket_id = P_Ticket_ID;
  153.    
  154.     IF EXISTS (
  155.         SELECT 1 FROM passenger
  156.         WHERE train_number = C_Train_No AND booking_date = C_Train_Date AND ticket_category = C_Category AND status = 'Waiting'
  157.     ) THEN
  158.         UPDATE passenger SET status = 'Confirmed'
  159.         WHERE train_number = C_Train_No AND booking_date = C_Train_Date AND ticket_category = C_Category AND status = 'Waiting' LIMIT 1;
  160.     ELSE
  161.         IF C_Category = 'AC' THEN
  162.             UPDATE train_status
  163.             SET ac_seats_booked = ac_seats_booked - 1
  164.             WHERE train_number = C_Train_No AND train_date = C_Train_Date;
  165.         ELSE
  166.             UPDATE train_status
  167.             SET general_seats_booked = general_seats_booked - 1
  168.             WHERE train_number = C_Train_No AND train_date = C_Train_Date;
  169.         END IF;
  170.     END IF;
  171.    
  172.     SELECT 'Ticket Deleted Successfully' AS delete_status;
  173. END //
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184. EDITED THE THING GIVEN BY KAUSHAL
  185.  
  186. delimiter //
  187. CREATE PROCEDURE G_BookTicket(
  188.     IN P_Train_No VARCHAR(10),
  189.     IN P_Train_Date DATE,
  190.     IN P_Category VARCHAR(20),
  191.     IN P_Name VARCHAR(30),
  192.     IN P_Age INT,
  193.     IN P_Sex CHAR(1),
  194.     IN P_Address VARCHAR(30)
  195. )
  196. BEGIN
  197.     DECLARE Total_seats INT;
  198.     DECLARE Booked_seats INT;
  199.  
  200.     IF P_Category = 'AC' THEN
  201.         SELECT total_ac_seats, ac_seats_booked INTO Total_seats, Booked_seats
  202.         FROM train_status WHERE train_number = P_Train_No AND train_date = P_Train_Date;
  203.  
  204.     ELSE
  205.         SELECT total_general_seats, general_seats_booked INTO Total_seats, Booked_seats
  206.         FROM train_status
  207.         WHERE train_number = P_Train_No AND train_date = P_Train_Date;
  208.     END IF;
  209.  
  210.     IF Total_seats > Booked_seats THEN
  211.         INSERT INTO passenger (train_number, booking_date, name, age, sex, address, status, ticket_category)
  212.         VALUES (P_Train_No, P_Train_Date, P_Name, P_Age, P_Sex, P_Address, 'Confirmed', P_Category);
  213.  
  214.         SELECT 'Ticket Confirmed' AS message;
  215.  
  216.         IF P_Category = 'AC' THEN
  217.             UPDATE train_status SET ac_seats_booked = ac_seats_booked + 1
  218.             WHERE train_number = P_Train_No AND train_date = P_Train_Date;
  219.         ELSE
  220.             UPDATE train_status SET general_seats_booked = general_seats_booked + 1
  221.             WHERE train_number = P_Train_No AND train_date = P_Train_Date;
  222.         END IF;
  223.  
  224.     ELSE
  225.         INSERT INTO passenger (train_number, booking_date, name, age, sex, address, status, ticket_category)
  226.         VALUES (P_Train_No, P_Train_Date, P_Name, P_Age, P_Sex, P_Address, 'Waiting', P_Category);
  227.  
  228.         SELECT 'Sorry, Ticket not confirmed' AS message;
  229.     END IF;
  230. END;
  231.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement