Ticket Management System Using HTML, CSS and JS With Source Code

Ticket Mangement System Using HTML CSS JAVASCRIPT

Introduction :

An innovative Ticket Management System, where simplicity and efficiency converge to redefine the ticket booking experience. Designed to cater to diverse event management needs, our system empowers users with seamless booking capabilities, automated ticket generation, and convenient access to booking history.

With an intuitive interface crafted using HTML, we invite users to effortlessly navigate through the booking process. Our structured layout ensures clarity and ease of use, guiding users to input their details and reserve their desired seats with utmost convenience.

CSS elevates the visual appeal of our system, with captivating designs and responsive layouts that adapt seamlessly to various devices. From vibrant color schemes to sleek animations, our CSS styling enhances user engagement and creates a visually pleasing experience.

JavaScript drives interactivity at every stage, enabling dynamic features such as real-time validation and error handling. Through client-side scripting, we provide instant feedback, ensuring a smooth and intuitive booking journey for our users.

Central to our system is the automatic generation and storage of ticket IDs, eliminating the need for manual intervention. Users can easily view their booking history, complete with ticket details and unique IDs, offering transparency and accountability in the booking process.

Moreover, our integrated view history feature provides users with the option to review past bookings and seamlessly delete them if needed. With just a few clicks, users can manage their bookings efficiently, ensuring a clutter-free and organized ticketing experience.

“Welcome to our Ticket Management System – effortless event planning, streamlined ticketing.”

Steps to Create Ticket Management System

  • Plan and Define Requirements: Clearly define the objectives and requirements of your Ticket Management System. Determine what features you want to include, such as booking tickets, viewing booking history, and deleting bookings.
  • Design User Interface: Sketch out the layout and design of your ticket management system. Decide on the placement of elements such as input fields for booking details, buttons for submitting bookings and viewing history, and tables for displaying booking history.
  • Set Up HTML Structure: Create the HTML file for your ticket management system. Structure the file with appropriate tags for elements like forms, input fields, buttons, and tables.
  • Style with CSS: Write CSS code to style your ticket management system. Apply styles to enhance the appearance of elements, such as setting colors, fonts, padding, and margins.
  • Implement Functionality with JavaScript:Add event listeners to capture user interactions, such as form submissions and button clicks.Write JavaScript functions to handle these interactions, such as booking tickets, displaying booking history, and deleting bookings.Implement logic to generate unique ticket IDs and store booking details.
  • Test and Debug: Test your ticket management system thoroughly to ensure it functions as expected. Check for any bugs or errors and debug them as necessary.

Explanation :

Your download is starting now...

HTML (index.html​)

The HTML code serves as the backbone of our Ticket Management System, providing the structural framework for a user-friendly interface. We begin by defining the document type and language to ensure compatibility and accessibility across platforms.

Next, we set up the viewport meta tag to optimize the display on various devices, ensuring a responsive design that adapts to different screen sizes. The title tag sets the stage for our system, giving users a clear understanding of its purpose.

For Crafting the User Experience our system’s interface is designed to be intuitive and straightforward, guiding users through the ticket booking process with ease. The HTML markup includes elements such as forms and buttons, allowing users to input their booking details and navigate the system effortlessly.
The form element, identified by its unique ID, houses input fields for essential booking information, such as name, seat number, date, and location. This structured approach ensures clarity and consistency, making it easy for users to provide the necessary details.

Additionally, the inclusion of a “View History” button provides users with access to their booking history, enhancing transparency and accountability in the ticket management process.

For Displaying Booking History, our Ticket Management System goes beyond just booking tickets; it also allows users to view their booking history conveniently. The HTML code includes a section dedicated to displaying this history, complete with a table that dynamically populates with ticket details.

When users click the “View History” button, the table becomes visible, presenting ticket information such as ticket ID, name, seat number, date, and locations. This organized display enables users to track their bookings effectively and make informed decisions.

Integrating Interactive Functionality, JavaScript functionality is seamlessly integrated into the system. While not explicitly shown in the HTML code, JavaScript enhances the user experience by adding interactivity and dynamic features such as form validation, error handling, and the generation of unique ticket IDs.
By combining HTML, CSS, and JavaScript, our Ticket Management System offers users unparalleled convenience and control over their event bookings.

CSS Styling

  • Body Styles:
    The body selector lays the groundwork for our Ticket Management System’s visual appeal and readability. By employing a familiar font stack including Arial and sans-serif fallbacks, we ensure consistent legibility across various platforms. The chosen background color of #f1f1f1 creates a calming backdrop for the system, promoting user focus and clarity.
  • Background Image Container Styling:
    Within the .background-img class, we define the essential styling parameters for the container housing our ticket management section. The transparent background color (rgba(255, 255, 255, 0.8)) adds a subtle overlay effect to the background image, enhancing readability without overshadowing the content. The specified padding, border radius, and maximum width ensure a visually pleasing and well-contained layout, maintaining a balance between aesthetics and functionality.
  • Header Styles:
    Our ticket management system’s header design exudes professionalism and clarity. The centered alignment and color (#333) of the h2 element ensure prominent visibility and readability, guiding users seamlessly through the booking process.
  • Ticket Booking Section Layout:
    The .ticket-section class governs the layout of the ticket booking section, establishing a maximum width and centered alignment for optimal presentation. By setting a maximum width of 400 pixels and utilizing auto margins, we create a visually appealing and well-structured interface that adapts gracefully to different screen sizes.
  • Input Field and Button Styling:
    Input fields (input[type=”text”], input[type=”date”], input[type=”submit”]) are styled for consistency and usability. The specified width, padding, margin, border, and border radius ensure a uniform appearance and comfortable user interaction. The submit button is accentuated with a vibrant background color (#4CAF50), transitioning to a darker shade on hover, providing visual feedback and enhancing user engagement.
  • View History Button Styling:
    The #view-history-btn class defines the visual presentation of the “View History” button, ensuring it stands out as a prominent call-to-action. With a bold background color (rgb(24, 24, 92)) and contrasting white text, the button commands attention and invites users to explore their booking history. The specified width, padding, margin, border, and border radius maintain consistency with other interface elements, promoting a cohesive user experience.
  • Ticket History Display Styles:
    The #ticket-history class governs the appearance of the ticket history section, ensuring it complements the overall design aesthetic while providing clear and accessible information. A subtle margin-top adds spacing between the ticket booking section and the history display, enhancing visual separation and organization. The defined background color, padding, border radius, and box shadow create a visually appealing container for displaying booking history, while the display: none; property initially hides the section until triggered by user interaction.
  • Ticket History Table Styling:
    The #history-table class and its associated table elements (th, td) dictate the presentation of booking history data in a structured and visually appealing format. With a collapsed border style and consistent padding, the table maintains clarity and readability, while alternating row colors enhance visual distinction and organization. The specified text alignment ensures uniformity and coherence, facilitating easy comprehension of booking details.
  • Delete Button Styling:
    The .delete-btn class defines the visual appearance of the delete button within the ticket history table, providing users with a clear and intuitive means of managing their booking history. With a bold background color (#dc3545) and contrasting white text, the button communicates its action effectively, while the specified border radius and padding ensure comfortable interaction and visual appeal.

script.js

  • Streamlined Booking Process:
    By attaching an event listener to the ticket booking form, we intercept the submission process. This ensures that when users submit the form, the default action of the browser is prevented, allowing us to handle the booking process programmatically.
  • Gathering Passenger Details:
    Using JavaScript, we access the values entered by the user into the form fields. This allows us to capture essential information such as the passenger’s name, preferred seat, travel date, and departure and destination points.
  • Crafting Unique Ticket IDs:
    To ensure each booking has a unique identifier, we generate a ticket ID using JavaScript. This ID is constructed by appending the letter ‘T’ to a randomly generated 4-digit number, creating a distinct identifier for each booking.
  • Building Booking History:
    Upon successful form submission, we dynamically add a new row to the booking history table. This row contains the ticket ID, passenger details, and a button for deleting the booking. JavaScript enables us to seamlessly update the table with the latest booking information.
  • Celebrating Successful Bookings:
    After a successful booking, we notify the user with an alert message, confirming the booking’s completion. Additionally, we reset the form fields to their default state, ready for the next booking. JavaScript facilitates this interaction, providing real-time feedback to the user.
  • Offering Booking Management:
    To empower users with booking management capabilities, we implement a delete functionality. By clicking the delete button associated with a booking, users can remove it from the booking history table. JavaScript handles this functionality seamlessly, ensuring a smooth and intuitive user experience.

Source Code :

HTML (index.html)

				
					<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ticket Management System</title>
<link data-asynced="1" as="style" onload="this.onload=null;this.rel='stylesheet'"  rel="preload" type="text/css" href="styles.css">
</head>
<body>


<div class="background-img">
<div class="ticket-section">
    <form id="ticket-form">
        <h2>Ticket Management System</h2>
        <input type="text" id="name" placeholder="Name" required><br>
        <input type="text" id="seat" placeholder="Seat No" required><br>
        <input type="date" id="date" required><br>
        <input type="text" id="from" placeholder="From Location" required><br>
        <input type="text" id="to" placeholder="To Location" required><br>
        <input type="submit" value="Book Ticket">
    </form>
    <button id="view-history-btn">View History</button>
</div>
</div>
<div id="ticket-history" style="display: none;">
    <h3>Ticket History</h3>
    <table id="history-table">
        <thead>
            <tr>
                <th>Ticket ID</th>
                <th>Name</th>
                <th>Seat No</th>
                <th>Date</th>
                <th>From Location</th>
                <th>To Location</th>
                <th>Action</th>
            </tr>
        </thead>
        <tbody id="history-table-body">
            
        </tbody>
    </table>
</div> <script type="litespeed/javascript" data-src="script.js"></script> <script data-no-optimize="1">!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).LazyLoad=e()}(this,function(){"use strict";function e(){return(e=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n,a=arguments[e];for(n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])}return t}).apply(this,arguments)}function i(t){return e({},it,t)}function o(t,e){var n,a="LazyLoad::Initialized",i=new t(e);try{n=new CustomEvent(a,{detail:{instance:i}})}catch(t){(n=document.createEvent("CustomEvent")).initCustomEvent(a,!1,!1,{instance:i})}window.dispatchEvent(n)}function l(t,e){return t.getAttribute(gt+e)}function c(t){return l(t,bt)}function s(t,e){return function(t,e,n){e=gt+e;null!==n?t.setAttribute(e,n):t.removeAttribute(e)}(t,bt,e)}function r(t){return s(t,null),0}function u(t){return null===c(t)}function d(t){return c(t)===vt}function f(t,e,n,a){t&&(void 0===a?void 0===n?t(e):t(e,n):t(e,n,a))}function _(t,e){nt?t.classList.add(e):t.className+=(t.className?" ":"")+e}function v(t,e){nt?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}function g(t){return t.llTempImage}function b(t,e){!e||(e=e._observer)&&e.unobserve(t)}function p(t,e){t&&(t.loadingCount+=e)}function h(t,e){t&&(t.toLoadCount=e)}function n(t){for(var e,n=[],a=0;e=t.children[a];a+=1)"SOURCE"===e.tagName&&n.push(e);return n}function m(t,e){(t=t.parentNode)&&"PICTURE"===t.tagName&&n(t).forEach(e)}function a(t,e){n(t).forEach(e)}function E(t){return!!t[st]}function I(t){return t[st]}function y(t){return delete t[st]}function A(e,t){var n;E(e)||(n={},t.forEach(function(t){n[t]=e.getAttribute(t)}),e[st]=n)}function k(a,t){var i;E(a)&&(i=I(a),t.forEach(function(t){var e,n;e=a,(t=i[n=t])?e.setAttribute(n,t):e.removeAttribute(n)}))}function L(t,e,n){_(t,e.class_loading),s(t,ut),n&&(p(n,1),f(e.callback_loading,t,n))}function w(t,e,n){n&&t.setAttribute(e,n)}function x(t,e){w(t,ct,l(t,e.data_sizes)),w(t,rt,l(t,e.data_srcset)),w(t,ot,l(t,e.data_src))}function O(t,e,n){var a=l(t,e.data_bg_multi),i=l(t,e.data_bg_multi_hidpi);(a=at&&i?i:a)&&(t.style.backgroundImage=a,n=n,_(t=t,(e=e).class_applied),s(t,ft),n&&(e.unobserve_completed&&b(t,e),f(e.callback_applied,t,n)))}function N(t,e){!e||0<e.loadingCount||0<e.toLoadCount||f(t.callback_finish,e)}function C(t,e,n){t.addEventListener(e,n),t.llEvLisnrs[e]=n}function M(t){return!!t.llEvLisnrs}function z(t){if(M(t)){var e,n,a=t.llEvLisnrs;for(e in a){var i=a[e];n=e,i=i,t.removeEventListener(n,i)}delete t.llEvLisnrs}}function R(t,e,n){var a;delete t.llTempImage,p(n,-1),(a=n)&&--a.toLoadCount,v(t,e.class_loading),e.unobserve_completed&&b(t,n)}function T(o,r,c){var l=g(o)||o;M(l)||function(t,e,n){M(t)||(t.llEvLisnrs={});var a="VIDEO"===t.tagName?"loadeddata":"load";C(t,a,e),C(t,"error",n)}(l,function(t){var e,n,a,i;n=r,a=c,i=d(e=o),R(e,n,a),_(e,n.class_loaded),s(e,dt),f(n.callback_loaded,e,a),i||N(n,a),z(l)},function(t){var e,n,a,i;n=r,a=c,i=d(e=o),R(e,n,a),_(e,n.class_error),s(e,_t),f(n.callback_error,e,a),i||N(n,a),z(l)})}function G(t,e,n){var a,i,o,r,c;t.llTempImage=document.createElement("IMG"),T(t,e,n),E(c=t)||(c[st]={backgroundImage:c.style.backgroundImage}),o=n,r=l(a=t,(i=e).data_bg),c=l(a,i.data_bg_hidpi),(r=at&&c?c:r)&&(a.style.backgroundImage='url("'.concat(r,'")'),g(a).setAttribute(ot,r),L(a,i,o)),O(t,e,n)}function D(t,e,n){var a;T(t,e,n),a=e,e=n,(t=It[(n=t).tagName])&&(t(n,a),L(n,a,e))}function V(t,e,n){var a;a=t,(-1<yt.indexOf(a.tagName)?D:G)(t,e,n)}function F(t,e,n){var a;t.setAttribute("loading","lazy"),T(t,e,n),a=e,(e=It[(n=t).tagName])&&e(n,a),s(t,vt)}function j(t){t.removeAttribute(ot),t.removeAttribute(rt),t.removeAttribute(ct)}function P(t){m(t,function(t){k(t,Et)}),k(t,Et)}function S(t){var e;(e=At[t.tagName])?e(t):E(e=t)&&(t=I(e),e.style.backgroundImage=t.backgroundImage)}function U(t,e){var n;S(t),n=e,u(e=t)||d(e)||(v(e,n.class_entered),v(e,n.class_exited),v(e,n.class_applied),v(e,n.class_loading),v(e,n.class_loaded),v(e,n.class_error)),r(t),y(t)}function $(t,e,n,a){var i;n.cancel_on_exit&&(c(t)!==ut||"IMG"===t.tagName&&(z(t),m(i=t,function(t){j(t)}),j(i),P(t),v(t,n.class_loading),p(a,-1),r(t),f(n.callback_cancel,t,e,a)))}function q(t,e,n,a){var i,o,r=(o=t,0<=pt.indexOf(c(o)));s(t,"entered"),_(t,n.class_entered),v(t,n.class_exited),i=t,o=a,n.unobserve_entered&&b(i,o),f(n.callback_enter,t,e,a),r||V(t,n,a)}function H(t){return t.use_native&&"loading"in HTMLImageElement.prototype}function B(t,i,o){t.forEach(function(t){return(a=t).isIntersecting||0<a.intersectionRatio?q(t.target,t,i,o):(e=t.target,n=t,a=i,t=o,void(u(e)||(_(e,a.class_exited),$(e,n,a,t),f(a.callback_exit,e,n,t))));var e,n,a})}function J(e,n){var t;et&&!H(e)&&(n._observer=new IntersectionObserver(function(t){B(t,e,n)},{root:(t=e).container===document?null:t.container,rootMargin:t.thresholds||t.threshold+"px"}))}function K(t){return Array.prototype.slice.call(t)}function Q(t){return t.container.querySelectorAll(t.elements_selector)}function W(t){return c(t)===_t}function X(t,e){return e=t||Q(e),K(e).filter(u)}function Y(e,t){var n;(n=Q(e),K(n).filter(W)).forEach(function(t){v(t,e.class_error),r(t)}),t.update()}function t(t,e){var n,a,t=i(t);this._settings=t,this.loadingCount=0,J(t,this),n=t,a=this,Z&&window.addEventListener("online",function(){Y(n,a)}),this.update(e)}var Z="undefined"!=typeof window,tt=Z&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),et=Z&&"IntersectionObserver"in window,nt=Z&&"classList"in document.createElement("p"),at=Z&&1<window.devicePixelRatio,it={elements_selector:".lazy",container:tt||Z?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",data_bg_hidpi:"bg-hidpi",data_bg_multi:"bg-multi",data_bg_multi_hidpi:"bg-multi-hidpi",data_poster:"poster",class_applied:"applied",class_loading:"litespeed-loading",class_loaded:"litespeed-loaded",class_error:"error",class_entered:"entered",class_exited:"exited",unobserve_completed:!0,unobserve_entered:!1,cancel_on_exit:!0,callback_enter:null,callback_exit:null,callback_applied:null,callback_loading:null,callback_loaded:null,callback_error:null,callback_finish:null,callback_cancel:null,use_native:!1},ot="src",rt="srcset",ct="sizes",lt="poster",st="llOriginalAttrs",ut="loading",dt="loaded",ft="applied",_t="error",vt="native",gt="data-",bt="ll-status",pt=[ut,dt,ft,_t],ht=[ot],mt=[ot,lt],Et=[ot,rt,ct],It={IMG:function(t,e){m(t,function(t){A(t,Et),x(t,e)}),A(t,Et),x(t,e)},IFRAME:function(t,e){A(t,ht),w(t,ot,l(t,e.data_src))},VIDEO:function(t,e){a(t,function(t){A(t,ht),w(t,ot,l(t,e.data_src))}),A(t,mt),w(t,lt,l(t,e.data_poster)),w(t,ot,l(t,e.data_src)),t.load()}},yt=["IMG","IFRAME","VIDEO"],At={IMG:P,IFRAME:function(t){k(t,ht)},VIDEO:function(t){a(t,function(t){k(t,ht)}),k(t,mt),t.load()}},kt=["IMG","IFRAME","VIDEO"];return t.prototype={update:function(t){var e,n,a,i=this._settings,o=X(t,i);{if(h(this,o.length),!tt&&et)return H(i)?(e=i,n=this,o.forEach(function(t){-1!==kt.indexOf(t.tagName)&&F(t,e,n)}),void h(n,0)):(t=this._observer,i=o,t.disconnect(),a=t,void i.forEach(function(t){a.observe(t)}));this.loadAll(o)}},destroy:function(){this._observer&&this._observer.disconnect(),Q(this._settings).forEach(function(t){y(t)}),delete this._observer,delete this._settings,delete this.loadingCount,delete this.toLoadCount},loadAll:function(t){var e=this,n=this._settings;X(t,n).forEach(function(t){b(t,e),V(t,n,e)})},restoreAll:function(){var e=this._settings;Q(e).forEach(function(t){U(t,e)})}},t.load=function(t,e){e=i(e);V(t,e)},t.resetStatus=function(t){r(t)},Z&&function(t,e){if(e)if(e.length)for(var n,a=0;n=e[a];a+=1)o(t,n);else o(t,e)}(t,window.lazyLoadOptions),t});!function(e,t){"use strict";function a(){t.body.classList.add("litespeed_lazyloaded")}function n(){console.log("[LiteSpeed] Start Lazy Load Images"),d=new LazyLoad({elements_selector:"[data-lazyloaded]",callback_finish:a}),o=function(){d.update()},e.MutationObserver&&new MutationObserver(o).observe(t.documentElement,{childList:!0,subtree:!0,attributes:!0})}var d,o;e.addEventListener?e.addEventListener("load",n,!1):e.attachEvent("onload",n)}(window,document);</script><script data-no-optimize="1">var litespeed_vary=document.cookie.replace(/(?:(?:^|.*;\s*)_lscache_vary\s*\=\s*([^;]*).*$)|^.*$/,"");litespeed_vary||fetch("/wp-content/plugins/litespeed-cache/guest.vary.php",{method:"POST",cache:"no-cache",redirect:"follow"}).then(e=>e.json()).then(e=>{console.log(e),e.hasOwnProperty("reload")&&"yes"==e.reload&&(sessionStorage.setItem("litespeed_docref",document.referrer),window.location.reload(!0))});</script><script data-optimized="1" type="litespeed/javascript" data-src="https://codewithcurious.com/wp-content/litespeed/js/6ae0562e48986e0126d75ce614c6f2a2.js?ver=e7392"></script><script>const litespeed_ui_events=["mouseover","click","keydown","wheel","touchmove","touchstart"];var urlCreator=window.URL||window.webkitURL;function litespeed_load_delayed_js_force(){console.log("[LiteSpeed] Start Load JS Delayed"),litespeed_ui_events.forEach(e=>{window.removeEventListener(e,litespeed_load_delayed_js_force,{passive:!0})}),document.querySelectorAll("iframe[data-litespeed-src]").forEach(e=>{e.setAttribute("src",e.getAttribute("data-litespeed-src"))}),"loading"==document.readyState?window.addEventListener("DOMContentLoaded",litespeed_load_delayed_js):litespeed_load_delayed_js()}litespeed_ui_events.forEach(e=>{window.addEventListener(e,litespeed_load_delayed_js_force,{passive:!0})});async function litespeed_load_delayed_js(){let t=[];for(var d in document.querySelectorAll('script[type="litespeed/javascript"]').forEach(e=>{t.push(e)}),t)await new Promise(e=>litespeed_load_one(t[d],e));document.dispatchEvent(new Event("DOMContentLiteSpeedLoaded")),window.dispatchEvent(new Event("DOMContentLiteSpeedLoaded"))}function litespeed_load_one(t,e){console.log("[LiteSpeed] Load ",t);var d=document.createElement("script");d.addEventListener("load",e),d.addEventListener("error",e),t.getAttributeNames().forEach(e=>{"type"!=e&&d.setAttribute("data-src"==e?"src":e,t.getAttribute(e))});let a=!(d.type="text/javascript");!d.src&&t.textContent&&(d.src=litespeed_inline2src(t.textContent),a=!0),t.after(d),t.remove(),a&&e()}function litespeed_inline2src(t){try{var d=urlCreator.createObjectURL(new Blob([t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1")],{type:"text/javascript"}))}catch(e){d="data:text/javascript;base64,"+btoa(t.replace(/^(?:<!--)?(.*?)(?:-->)?$/gm,"$1"))}return d}</script></body>
</html>

				
			

CSS (styles.css)

				
					body {
    font-family: Arial, sans-serif;
    background-color: #f1f1f1;
    padding: 20px;
    background-image: url('tkt.jpg');
    background-size: cover;
    background-position: center;
    height: 100vh;
}

.background-img {
    background-color: rgba(255, 255, 255, 0.8);
    padding: 20px;
    border-radius: 10px;
    max-width: 400px;
    margin: 50px auto;
}

h2 {
    text-align: center;
    color: #333;
}

.ticket-section {
    max-width: 400px;
    margin: 0 auto;
}

input[type="text"], input[type="date"], input[type="submit"] {
    width: calc(100% - 20px);
    padding: 10px;
    margin: 10px 0;
    border: 1px solid #ccc;
    border-radius: 5px;
}

input[type="submit"] {
    background-color: #4CAF50;
    color: white;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    transition: background-color 0.3s;
}

input[type="submit"]:hover {
    background-color: #45a049;
}

#ticket-history {
    margin-top: 20px;
    background-color: #fff;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
    display: none;
}
#view-history-btn{
    background-color:rgb(24, 24, 92);
    color: white;
    cursor: pointer;
    transition: background-color 0.3s;
    width: calc(100% - 20px);
    padding: 10px;
    margin: 10px 0;
    border: 1px solid #ccc;
    border-radius: 5px;

}

#history-table {
    width: 100%;
    border-collapse: collapse;
}

#history-table th, #history-table td {
    padding: 8px;
    border-bottom: 1px solid #ddd;
}

#history-table th {
    background-color: #f2f2f2;
    text-align: left;
}

#history-table td {
    text-align: center;
}

.delete-btn {
    background-color: #dc3545;
    color: white;
    border: none;
    border-radius: 5px;
    padding: 5px 10px;
    cursor: pointer;
}

				
			

JS (script.js)

				
					


document.getElementById("ticket-form").addEventListener("submit", function(event) {
    event.preventDefault();
    
    // Gather user input
    var name = document.getElementById("name").value;
    var seat = document.getElementById("seat").value;
    var date = document.getElementById("date").value;
    var from = document.getElementById("from").value;
    var to = document.getElementById("to").value;
    
    // Generate ticket ID (simple demonstration)
    var ticketId = "T" + Math.floor(Math.random() * 10000);
    
    // Add ticket details to history table
    var tableBody = document.getElementById("history-table-body");
    var newRow = tableBody.insertRow();
    newRow.innerHTML = "<td>" + ticketId + "</td><td>" + name + "</td><td>" + seat + "</td><td>" + date + "</td><td>" + from + "</td><td>" + to + "</td><td>Booked</td><td><button class='delete-btn' data-ticket-id='" + ticketId + "'>Delete</button></td>";

    // Display alert for successful booking and generated ticket ID
    alert("Ticket with ID " + ticketId + " has been booked successfully.");
    document.getElementById("ticket-form").reset();
});

document.getElementById("view-history-btn").addEventListener("click", function() {
    document.getElementById("ticket-history").style.display = "block";
});

document.getElementById("ticket-history").addEventListener("click", function(event) {
    if (event.target.classList.contains('delete-btn')) {
        var ticketIdToDelete = event.target.getAttribute('data-ticket-id');
        // Delete ticket logic (for demonstration, we'll remove the row from table)
        event.target.closest('tr').remove();
        alert("Ticket with ID " + ticketIdToDelete + " has been deleted.");
    }
});



				
			

Output :

Find More Projects

Bank Management System Using Python Django Introduction The Bank Management System V2.0.2 is a feature-rich online banking solution built using the Python …

Pharmacy Management System Using Python Django Introduction The Pharmacy Dispensing Management System is a robust and user-friendly software solution developed using Python …

Build a Quiz Game Using HTML CSS and JavaScript Introduction Hello coders, you might have played various games, but were you aware …

Emoji Catcher Game Using HTML CSS and JavaScript Introduction Hello Coders, Welcome to another new blog. In this article we’ve made a …

Typing Challenge Using HTML CSS and JavaScript Introduction Hello friends, all you developer friends are welcome to our new project. If you …

Breakout Game Using HTML CSS and JavaScript With Source Code Introduction Hello friends, welcome to today’s new blog post. All of you …

More HTML CSS JS Projects
Get Huge Discounts

Download 1000+ Coding Projects Code