iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
JavaScript

Javascript網頁程式管理系統系列 第 9

Day 9 JavaScript 演唱會網頁程式管理系統

  • 分享至 

  • xImage
  •  

今天是第九天我們可以寫一個JavaScript 演唱會網頁程式管理系統,以下是我的程式碼

  1. 活動管理

    • 新增、刪除、更新演唱會活動資訊(如日期、地點、門票數量等)。
  2. 門票管理

    • 管理門票的銷售(如購買、退票、確認付款狀態等)。
  3. 用戶管理

    • 註冊、登入、管理用戶資料。

這是一個基礎的網頁管理系統範例:

1. HTML - 網頁結構

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>演唱會管理系統</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>演唱會管理系統</h1>

    <div id="event-form">
        <h2>新增演唱會</h2>
        <form id="add-event-form">
            <label for="event-name">活動名稱:</label>
            <input type="text" id="event-name" required><br><br>
            <label for="event-date">活動日期:</label>
            <input type="date" id="event-date" required><br><br>
            <label for="event-location">活動地點:</label>
            <input type="text" id="event-location" required><br><br>
            <label for="ticket-count">門票數量:</label>
            <input type="number" id="ticket-count" required><br><br>
            <button type="submit">新增活動</button>
        </form>
    </div>

    <div id="event-list">
        <h2>演唱會列表</h2>
        <ul id="event-list-ul">
            <!-- 動態生成活動列表 -->
        </ul>
    </div>

    <script src="script.js"></script>
</body>
</html>

2. CSS - 基本樣式

body {
    font-family: Arial, sans-serif;
    background-color: #f4f4f4;
    color: #333;
}

h1, h2 {
    text-align: center;
}

#event-form, #event-list {
    margin: 20px auto;
    padding: 20px;
    width: 80%;
    background-color: #fff;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}

label {
    font-weight: bold;
}

input {
    width: 100%;
    padding: 8px;
    margin: 10px 0;
    box-sizing: border-box;
}

button {
    width: 100%;
    padding: 10px;
    background-color: #007bff;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

button:hover {
    background-color: #0056b3;
}

ul {
    list-style: none;
    padding: 0;
}

li {
    padding: 10px;
    background-color: #f4f4f4;
    margin-bottom: 10px;
    border-radius: 4px;
    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.1);
}

3. JavaScript - 動態管理活動資料

document.getElementById("add-event-form").addEventListener("submit", addEvent);

let eventList = [];

function addEvent(event) {
    event.preventDefault();

    // 獲取表單資料
    let eventName = document.getElementById("event-name").value;
    let eventDate = document.getElementById("event-date").value;
    let eventLocation = document.getElementById("event-location").value;
    let ticketCount = document.getElementById("ticket-count").value;

    // 建立新活動物件
    let newEvent = {
        name: eventName,
        date: eventDate,
        location: eventLocation,
        tickets: ticketCount
    };

    // 將活動加入活動列表
    eventList.push(newEvent);
    
    // 重新渲染活動列表
    renderEventList();

    // 清空表單
    document.getElementById("add-event-form").reset();
}

function renderEventList() {
    let eventListUl = document.getElementById("event-list-ul");
    eventListUl.innerHTML = ""; // 清空現有列表

    // 生成新的活動列表
    eventList.forEach((event, index) => {
        let li = document.createElement("li");
        li.innerHTML = `
            <strong>活動名稱:</strong> ${event.name}<br>
            <strong>活動日期:</strong> ${event.date}<br>
            <strong>活動地點:</strong> ${event.location}<br>
            <strong>門票數量:</strong> ${event.tickets}<br>
            <button onclick="deleteEvent(${index})">刪除活動</button>
        `;
        eventListUl.appendChild(li);
    });
}

function deleteEvent(index) {
    eventList.splice(index, 1); // 從活動列表中移除活動
    renderEventList(); // 重新渲染列表
}

功能解說:

  1. HTML 部分:定義了表單,用來輸入演唱會的名稱、日期、地點及門票數量,並有一個按鈕用來提交表單資料。
  2. CSS 部分:提供了基本的樣式設計,讓頁面看起來更清爽。
  3. JavaScript 部分:
    • 透過 addEvent 函數來處理表單提交,新增活動資料到 eventList
    • renderEventList 用來動態生成活動列表。
    • 每個活動都可以按 "刪除活動" 按鈕移除該活動。

接下來我會以JavaScript 為主解釋程式碼

1. 表單提交事件綁定

document.getElementById("add-event-form").addEventListener("submit", addEvent);

這段程式碼會選取網頁中的表單(透過 getElementById 來獲取),並將一個 "submit" 事件綁定到該表單。當使用者點擊提交按鈕時,addEvent 函數會被呼叫,並執行新增演唱會的邏輯。

2. 活動列表的變數

let eventList = [];

這是一個用來儲存所有演唱會活動的陣列,每新增一個活動,該活動的資料就會儲存在這個 eventList 陣列中。

3. 新增活動的函數

function addEvent(event) {
    event.preventDefault();  // 阻止表單預設行為(即頁面重新加載)

    // 獲取表單中的資料
    let eventName = document.getElementById("event-name").value;
    let eventDate = document.getElementById("event-date").value;
    let eventLocation = document.getElementById("event-location").value;
    let ticketCount = document.getElementById("ticket-count").value;

    // 建立一個活動物件,包含活動的基本資訊
    let newEvent = {
        name: eventName,
        date: eventDate,
        location: eventLocation,
        tickets: ticketCount
    };

    // 將新活動加入活動列表
    eventList.push(newEvent);
    
    // 呼叫渲染函數,更新畫面上的活動列表
    renderEventList();

    // 清空表單的輸入框
    document.getElementById("add-event-form").reset();
}

主要概念介紹

  • event.preventDefault():阻止表單的預設提交行為,避免頁面重新加載。這樣可以讓我們使用 JavaScript 來處理表單提交。
  • getElementById().value:抓取使用者在表單中輸入的資料(如活動名稱、日期、地點等)。
  • 活動物件 newEvent:儲存一個活動的所有相關資訊,如名稱、日期、地點和門票數量。這個物件會被加入到 eventList 陣列中。

4. 渲染活動列表的函數

function renderEventList() {
    let eventListUl = document.getElementById("event-list-ul");
    eventListUl.innerHTML = ""; // 清空目前的列表,防止重複顯示

    // 遍歷每個活動,為每個活動建立列表項目
    eventList.forEach((event, index) => {
        let li = document.createElement("li");
        li.innerHTML = `
            <strong>活動名稱:</strong> ${event.name}<br>
            <strong>活動日期:</strong> ${event.date}<br>
            <strong>活動地點:</strong> ${event.location}<br>
            <strong>門票數量:</strong> ${event.tickets}<br>
            <button onclick="deleteEvent(${index})">刪除活動</button>
        `;
        eventListUl.appendChild(li);
    });
}

主要概念介紹

  • innerHTML = "":每次重新渲染活動列表前,先清空現有的列表,避免重複顯示相同內容。
  • forEach:用來遍歷 eventList 陣列,對每個活動物件進行操作。
  • createElementinnerHTML:透過 JavaScript 動態創建 HTML 元素,將活動資訊插入到 <li> 元素中,並將它附加到 <ul> 列表中。
  • deleteEvent(${index}):為每個活動生成一個 "刪除活動" 按鈕,點擊該按鈕會執行 deleteEvent 函數並傳入該活動的索引值。

5. 刪除活動的函數

function deleteEvent(index) {
    eventList.splice(index, 1); // 從活動列表中刪除指定索引的活動
    renderEventList(); // 刪除後重新渲染活動列表
}

主要概念介紹

  • splice():從陣列中刪除指定索引位置的項目,這裡用來從 eventList 中刪除選定的活動。
  • 刪除後重新呼叫 renderEventList,以更新畫面上的活動列表,確保刪除後的活動不再顯示。

總結:

  1. 活動新增:使用者透過表單提交新活動資訊,addEvent 函數會將該活動資訊加入到 eventList 陣列中。
  2. 動態渲染活動列表renderEventList 會根據 eventList 中的活動,生成並顯示每個活動的詳細資訊,包括名稱、日期、地點、門票數量。
  3. 活動刪除:使用者可以透過點擊刪除按鈕來刪除特定的活動,deleteEvent 函數負責從列表中移除該活動並重新渲染畫面。

這個系統使用了基礎的 JavaScript 操作 DOM 的方法來動態管理演唱會活動,你可以根據需求進一步擴充,如加入購票功能、用戶管理、數據儲存等功能。


上一篇
day 8 javascript結合line bot網頁程式記帳管理系統
下一篇
day 10 javascript行動支付手機網頁程式管理系統
系列文
Javascript網頁程式管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言