前端学习笔记之学生管理系统增删查改

* {
    margin: 0;
    padding: 0;
}

header, .main, .main_informationDisplay>div {
    padding: 20px;
}

header {
    background-color: rgb(53, 138, 136);
    color: #fff;
    letter-spacing: 5px;
}

.main {
    display: flex;
}

.main_menu:hover {
    cursor: pointer;
}

.main_informationDisplay {
    display: flex;
    flex-grow: 1;
    margin-left: 20px;
}

.main_informationDisplay>div {
    flex-grow: 1;
    border-width: 2px;
    border-style: solid;
    border-color: transparent;
}

table, th, td {
    border: 1px solid #ccc;
}

table {
    width: 100%;
}

.studentsList>caption {
    font: 1.17em bolder;
}


/* h2 样式 */

.main_menu {
    padding: 10px 20px;
    background-color: rgb(32, 82, 80);
    margin-bottom: 4px;
    color: rgb(53, 138, 136);
}


/* 效果 */

.menu_checked {
    background-color: rgb(53, 138, 136);
    color: #fff;
}

.main_informationDisplay_checked {
    border-color: #006363 !important;
}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>student system 3.0</title>
    <link rel="stylesheet" href="./style.css">
</head>

<body>
    <div class="container">
        <header>
            <h1>学生管理系统</h1>
        </header>
        <div class="main">
            <section>
                <h2 class="main_menu menu_checked">学生列表</h2>
                <h2 class="main_menu">新增学生</h2>
                <h2 class="main_menu">修改学生</h2>
                <h2 class="main_menu">查询学生</h2>
            </section>
            <div class="main_informationDisplay">
                <div class="main_informationDisplay_checked">
                    <table class="studentsList">
                        <caption>学生列表</caption>
                        <thead>
                            <tr>
                                <th>学号</th>
                                <th>姓名</th>
                                <th>年龄</th>
                                <th>性别</th>
                                <th>操作</th>
                            </tr>
                        </thead>
                        <tbody></tbody>
                    </table>
                    <span id="tips"></span>
                </div>
                <div>
                    <h3>新增学生</h3>
                    <form action="#" id="addForm">
                        <div>
                            <label for="addname">姓名</label>
                            <input type="text" id="addname" class="name">
                        </div>
                        <div>
                            <label for="addage">年龄</label>
                            <input type="text" id="addage" class="age">
                        </div>
                        <div>
                            <span>性别</span>
                            <label for="addmale"></label>
                            <input type="radio" name="gender" id="addmale" value="男">
                            <label for="addfemale"></label>
                            <input type="radio" name="gender" id="addfemale" value="女">
                        </div>
                        <input type="button" value="确认新增" id="addBtn">
                    </form>
                </div>
                <div>
                    <h3>修改学生</h3>
                    <form action="#" id="modifyForm">
                        <div>
                            <label for="modifyname">姓名</label>
                            <input type="text" id="modifyname" class="name">
                        </div>
                        <div>
                            <label for="modifyage">年龄</label>
                            <input type="text" id="modifyage" class="age">
                        </div>
                        <div>
                            <span>性别</span>
                            <label for="modifymale"></label>
                            <input type="radio" name="gender" id="modifymale" value="男">
                            <label for="modifyfemale"></label>
                            <input type="radio" name="gender" id="modifyfemale" value="女">
                        </div>
                        <input type="button" value="确认修改" id="modifyBtn" disabled>
                    </form>
                </div>
                <div>
                    <h3>查询学生</h3>
                    <form action="#" id="queryForm">
                        <select name="" id="">
                            <option value="name">姓名</option>
                            <option value="age">年龄</option>
                            <option value="gender">性别</option>
                        </select>
                        <input type="text" placeholder="查询内容">
                        <input type="button" value="搜索" id="queryBtn">
                    </form>
                </div>
            </div>
        </div>
    </div>
    <script src="./common.js"></script>
</body>

</html>
let studentsData = [
    { id: 1, name: '汪印星', age: '24', gender: '男' },
    { id: 2, name: '李寅峰', age: '22', gender: '男' },
    { id: 3, name: '钟鑫茂', age: '22', gender: '女' },
    { id: 4, name: '张胜江', age: '24', gender: '男' },
    { id: 5, name: '徐阳', age: '25', gender: '男' },
    { id: 6, name: '杨烨', age: '26', gender: '男' },
    { id: 7, name: '杨恩', age: '25', gender: '女' },
    { id: 8, name: '夏琪琦', age: '22', gender: '女' },
    { id: 9, name: '罗雷', age: '26', gender: '男' },
    { id: 10, name: '陈阳吉', age: '22', gender: '男' }
];
let lastId = studentsData[studentsData.length - 1].id;

// ------------ 右侧 div 点击、input 点击 添加效果
let main_info_arr = document.querySelectorAll(".main_informationDisplay>div");  // 所有 div
let h2_arr = document.querySelectorAll(".main>section>h2"); // 所有 h2

main_info_arr.forEach((item, index) => {
    item.onclick = function () {
        main_info_arr.forEach(item => item.classList.remove("main_informationDisplay_checked"));    // 去掉所有 div 框
        item.classList.add("main_informationDisplay_checked"); // 某一个 div 添加边框
        h2_arr.forEach(item => item.classList.remove("menu_checked"));// 去掉所有 h2 样式
        h2_arr[index].classList.add("menu_checked");
    }
});
// ------ h2 点击改变样式
h2_arr.forEach((item, index) => {
    item.addEventListener("click", () => {
        h2_arr.forEach(item => item.classList.remove("menu_checked"));
        item.classList.add("menu_checked");
        main_info_arr.forEach(item => item.classList.remove("main_informationDisplay_checked"));
        main_info_arr[index].classList.add("main_informationDisplay_checked");
    });
});

// --------------- 渲染学生数据
let tbody = document.querySelector(".studentsList>tbody");
function render(arr = studentsData) {
    tbody.innerHTML = arr.map(item =>
        `<tr>
            <td>${item.id}</td>
            <td>${item.name}</td>
            <td>${item.age}</td>
            <td>${item.gender}</td>
            <td>
                <input type="button" value="修改" data-func="modify" data-index='${item.id}'>
                <input type="button" value="删除" data-func="delete" data-index='${item.id}'>
            </td>
        </tr>`
    ).join("");
}
render();

// ------ 公用元素
let name, age, gender;
let tips = document.getElementById("tips");

// -------------- 新增学生
let add_btn = document.getElementById("addBtn");
add_btn.onclick = function () {
    name = document.querySelector("#addForm .name");
    age = document.querySelector("#addForm .age");
    gender = document.getElementById("addForm").gender.value;
    if (name.value && age.value) {
        studentsData.push({ id: lastId + 1, name: name.value, age: age.value, gender: gender ? gender : "男" });
        lastId++;
        render();
    }
    name.value = "";
    age.value = "";
}
// -------------- 修改学生 从表格里点击 修改
let modify_btn = document.getElementById("modifyBtn");  // 右侧 确认修改 按钮
let student;
tbody.onclick = function (event) {
    if (event.target.nodeName == "INPUT") {
        if (event.target.dataset.func == "modify") {    // 点击修改
            modify_btn.disabled = false;
            name = document.querySelector("#modifyForm .name");
            age = document.querySelector("#modifyForm .age");
            gender_Arr = document.querySelectorAll("#modifyForm [type='radio']");
            [student] = studentsData.filter(item => item.id == event.target.dataset.index); // 获得需要修改的学生对象
            name.value = student.name;
            age.value = student.age;
            student.gender == "男" ? gender_Arr[0].checked = true : gender_Arr[1].checked = true;
        } else if (event.target.dataset.func == "delete") {  // 点击删除
            studentsData.forEach((item, index) => {
                if (item.id == event.target.dataset.index) {
                    let result = confirm("是否删除:" + item.name + "?");
                    result ? studentsData.splice(index, 1) : "";
                }
            });
            render();
        }
    }
}
// ----------  点击修改学生
modify_btn.onclick = function () {
    name = document.querySelector("#modifyForm .name").value;
    age = document.querySelector("#modifyForm .age").value;
    gender = document.getElementById("modifyForm").gender.value;

    for (let i = 0; i < studentsData.length; i++) {
        if (studentsData[i].id == student.id) {
            studentsData.splice(i, 1, { id: student.id, name, age, gender });
            break;
        }
    }
    render();
}

// -------- 查询学生
let query_btn = document.getElementById("queryBtn");
query_btn.onclick = function () {
    let type = document.querySelector("#queryForm>select").value;
    let content = document.querySelector("#queryForm [type='text']").value;
    let arr;
    if (content) {
        arr = studentsData.filter(item => item[type] == content);
    }
    arr.length ? tips.innerText = "" : tips.innerText = "无数据";
    render(arr);
}

// ---------- 点击左侧 学生列表 刷新显示区域
let student_list = document.querySelector(".main>section>h2:first-child");
student_list.addEventListener("click", () => {
    render();
    tips.innerText = "";
})
原文地址:https://www.cnblogs.com/Yangyecool/p/13171736.html