js實現的學生管理系統


let readline = require("readline-sync"); // 引入輸入模塊
// 清屏函數
let clear = () => process.stdout.write(process.platform === 'win32' ? '\x1Bc' : '\x1B[2J\x1B[3J\x1B[H');
// 管理員信息
let adminInfo = [
{ "adminID": "dengfeng", "adminPWD": "123" },
{ "adminID": "liangdaye", "adminPWD": "321" }
];
// 初始化3個班級的學生信息 使用2維數組來存儲
let stuInfo = [
[
{ "stuID": "1", "stuName": "bdy", "stuAge": "18", "stuGender": "male", "stuScore": "100", "className": "1班" },
{ "stuID": "2", "stuName": "luc", "stuAge": "23", "stuGender": "female", "stuScore": "89", "className": "1班" },
{ "stuID": "3", "stuName": "lc", "stuAge": "17", "stuGender": "male", "stuScore": "93", "className": "1班" },
{ "stuID": "4", "stuName": "xu", "stuAge": "19", "stuGender": "female", "stuScore": "91", "className": "1班" },
{ "stuID": "5", "stuName": "chao", "stuAge": "20", "stuGender": "male", "stuScore": "95", "className": "1班" }
],
[
{ "stuID": "1", "stuName": "wf", "stuAge": "18", "stuGender": "female", "stuScore": "85", "className": "2班" },
{ "stuID": "2", "stuName": "xtf", "stuAge": "19", "stuGender": "female", "stuScore": "91", "className": "2班" },
{ "stuID": "3", "stuName": "xj", "stuAge": "19", "stuGender": "male", "stuScore": "92", "className": "2班" },
{ "stuID": "4", "stuName": "ls", "stuAge": "21", "stuGender": "male", "stuScore": "94", "className": "2班" },
{ "stuID": "5", "stuName": "xjs", "stuAge": "22", "stuGender": "female", "stuScore": "89", "className": "2班" }
],
[
{ "stuID": "1", "stuName": "yaj", "stuAge": "22", "stuGender": "male", "stuScore": "86", "className": "3班" },
{ "stuID": "2", "stuName": "xj", "stuAge": "25", "stuGender": "female", "stuScore": "89", "className": "3班" },
{ "stuID": "3", "stuName": "xiz", "stuAge": "24", "stuGender": "female", "stuScore": "80", "className": "3班" },
{ "stuID": "4", "stuName": "yhq", "stuAge": "26", "stuGender": "female", "stuScore": "92", "className": "3班" },
{ "stuID": "5", "stuName": "npa", "stuAge": "19", "stuGender": "male", "stuScore": "96", "className": "3班" }
]
];
// 管理員登錄驗證函數 賬號密碼能匹配上返回true 不能匹配上返回false
let adminLogin = function (adminID, adminPWD) {
for (let i = 0; i < adminInfo.length; i++) {
if (adminID === adminInfo[i].adminID && adminPWD === adminInfo[i].adminPWD) {
return true;
}
}
return false;
}
// 班級選擇函數 用於打印出用戶可選的班級 返回一個字符串
let classSelect = function () {
let str = "";
// 使用for循環拼接出所有的班級,例如:1.第1班 2.第2班 3.第3班 4.返回
for (let i = 0; i < stuInfo.length; i++) {
if (stuInfo[i] !== null) {
str += (i + 1) + "." + "第" + (i + 1) + "班 ";
}
}
return "請選擇班級:" + str + (stuInfo.length + 1) + ".返回";
}
// 班級確認函數 用於確認用戶輸入的班級是否正確
let classCheck = function (classNo) {
for (let i = 0; i < stuInfo.length; i++) {
if (classNo === (i + 1) && stuInfo[i] !== null) {
return true;
}
}
return false;
}
// 班級查詢函數 接收一個參數 用戶想要查詢的班級編號 打印出該班級所有學生的信息
let classQuery = function (classNo) {
clear();
console.log("班級信息如下:");
console.log("班級 學號 姓名 年齡 性別 分數");
let str = "";// 聲明一個空字符串用於拼接班級里面的學生信息
for (let i = 0; i < stuInfo[classNo - 1].length; i++) {
str += stuInfo[classNo - 1][i].className + "\t" + stuInfo[classNo - 1][i].stuID + "\t" + stuInfo[classNo - 1][i].stuName + "\t" + stuInfo[classNo - 1][i].stuAge + "\t" + stuInfo[classNo - 1][i].stuGender + "\t" + stuInfo[classNo - 1][i].stuScore;
console.log(str); // 拼接好一行就打印一行
str = "";// 清空字符串 以便下一次拼接
}
}
// 學生查詢函數 接收一個參數 學生姓名(字符串) 打印出該姓名的所有學生
let stuQuery = function (stuName) {
let num = 0;
let str = "";// 聲明一個空字符串用於拼接班級里面的學生信息
for (let i = 0; i < stuInfo.length; i++) {
for (let j = 0; j < stuInfo[i].length; j++) {
if (stuName === stuInfo[i][j].stuName) {
num++;
if (num === 1) {
console.log("找到該姓名學生,該學生具體信息如下:");
console.log("班級 學號 姓名 年齡 性別 分數");
}
str += stuInfo[i][j].className + "\t" + stuInfo[i][j].stuID + "\t" + stuInfo[i][j].stuName + "\t" + stuInfo[i][j].stuAge + "\t" + stuInfo[i][j].stuGender + "\t" + stuInfo[i][j].stuScore;
console.log(str);
str = "";
}
}
}
if (num === 0) {
console.log("對不起,沒有找到該學生");
}
}
// 學生確認函數 接收兩個參數 班級編號和學生學號 確認該學生是否存在
let stuCheck = function (classNo, stuNo) {
for (let i = 0; i < stuInfo[classNo - 1].length; i++) {
if (stuNo === stuInfo[classNo - 1][i].stuID) {
return stuInfo[classNo - 1][i];// 返回該學生的具體信息
}
}
return false;
}
// 學生信息修改函數 接收兩個參數 學生對象和修改選項
let editInfo = function (singleStuInfo, editSelect) {
switch (editSelect) {
//修改姓名
case 1:
{
console.log("請輸入修改后的學生姓名:");
let newStuName = readline.question("");
singleStuInfo.stuName = newStuName;
console.log("修改成功,按回車鍵返回");
}
break;
//修改年齡
case 2:
{
console.log("請輸入修改后的學生年齡:");
let newStuAge = readline.question("");
singleStuInfo.stuAge = newStuAge;
console.log("修改成功,按回車鍵返回");
}
break;
//修改性別
case 3:
{
let editGender = true;
let str = "";
while (editGender) {
clear();
str = "";
console.log("當前該學生信息為:");
console.log("班級 學號 姓名 年齡 性別 分數");
str += singleStuInfo.className + "\t" + singleStuInfo.stuID + "\t" + singleStuInfo.stuName + "\t" + singleStuInfo.stuAge + "\t" + singleStuInfo.stuGender + "\t" + singleStuInfo.stuScore;
console.log(str);
console.log("請選擇您要進行修改的學生信息: 1.姓名 2.年齡 3.性別 4.分數 5.返回");
console.log("請選擇學生的性別: 1.男 2.女");
let newStuGender = parseInt(readline.question(""));
switch (newStuGender) {
case 1:
singleStuInfo.stuGender = "male";
editGender = false;
console.log("修改成功,按回車鍵返回");
break;
case 2:
singleStuInfo.stuGender = "female";
editGender = false;
console.log("修改成功,按回車鍵返回");
break;
default:
console.log("輸入有誤,請重新輸入");
console.log("按回車鍵繼續");
readline.question("");
}
}
}
break;
//修改分數
case 4:
{
console.log("請輸入修改后的學生分數:");
let newStuScore = readline.question("");
singleStuInfo.stuScore = newStuScore;
console.log("修改成功,按回車鍵返回");
}
break;
default:
console.log("選擇有誤,請重新選擇");
break;
}
readline.question("");
}
// 添加學生信息函數 接收5個參數 班級編號,學生姓名,年齡,性別,分數
let addStu = function (classNo, addStuName, addStuAge, addStuGender, addStuScore) {
for (let i = 0; i < stuInfo.length; i++) {
if (classNo === (i + 1)) {
let length = stuInfo[i].length;
stuInfo[i][length] = {};
stuInfo[i][length].stuID = length + 1 + "";
stuInfo[i][length].stuName = addStuName;
stuInfo[i][length].stuAge = addStuAge;
addStuGender === 1 ? stuInfo[i][length].stuGender = "male" : stuInfo[i][length].stuGender = "female";
stuInfo[i][length].stuScore = addStuScore;
stuInfo[i][length].className = classNo + "班";
console.log("新增學生成功!");
}
}
}
// 刪除班級函數 接收一個參數 要刪除的班級的編號
let delClass = function (classNo) {
while (true) {
clear();
console.log(classNo + "班");
let str = "";
for (let i = 0; i < stuInfo[classNo - 1].length; i++) {
str += stuInfo[classNo - 1][i].className + "\t" + stuInfo[classNo - 1][i].stuID + "\t" + stuInfo[classNo - 1][i].stuName + "\t" + stuInfo[classNo - 1][i].stuAge + "\t" + stuInfo[classNo - 1][i].stuGender + "\t" + stuInfo[classNo - 1][i].stuScore;
console.log(str); // 拼接好一行就打印一行
str = "";// 清空字符串 以便下一次拼接
}
console.log("是否確認刪除此班級?(Y/N)");
let isDel = readline.question("");
switch (isDel) {
case "Y":
case "y":
stuInfo[classNo - 1] = null;
console.log("刪除班級成功,按回車鍵返回");
readline.question("");
return;
case "N":
case "n":
return;
default:
console.log("輸入有誤,請重新輸入!");
readline.question("");
}
}
}
// 刪除學生函數 接收2個參數 所要刪除的學生所在班級編號以及該學生對象
let delStu = function (classNo, stu, func) {
let str = "";
for (let i = 0; i < stuInfo[classNo - 1].length; i++) {
if (stu.stuID === stuInfo[classNo - 1][i].stuID) {
if (func === "del") {
while (true) {
clear();
str = "";
console.log("你要刪除的學生信息為:");
console.log("班級 學號 姓名 年齡 性別 分數");
str += stuInfo[classNo - 1][i].className + "\t" + stuInfo[classNo - 1][i].stuID + "\t" + stuInfo[classNo - 1][i].stuName + "\t" + stuInfo[classNo - 1][i].stuAge + "\t" + stuInfo[classNo - 1][i].stuGender + "\t" + stuInfo[classNo - 1][i].stuScore;
console.log(str);
console.log("是否確認刪除?(Y/N)");
let isDel = readline.question("");
switch (isDel) {
case "Y":
case "y":
stuInfo[classNo - 1].splice(i, 1);
console.log("刪除學生成功,按回車鍵返回");
readline.question("");
return;
case "N":
case "n":
return;
default:
console.log("輸入有誤,請重新輸入,按回車鍵繼續");
readline.question("");
}
}
}
else {
stuInfo[classNo - 1].splice(i, 1);
}
}
}
}
// 轉班函數 接收3個參數 原本的班級編號 學生對象 要去的班級編號
let classTransfer = function (classNo, singleStuInfo, classNo2) {
delStu(classNo, singleStuInfo, "trans");
let length = stuInfo[classNo2 - 1].length;
if (length === 0) {
singleStuInfo.stuID = length + 1 + "";
}
else {
singleStuInfo.stuID = (parseInt(stuInfo[classNo2 - 1][length - 1].stuID) + 1) + "";
}
singleStuInfo.className = classNo2 + "班";
stuInfo[classNo2 - 1][length] = singleStuInfo;
}
let main = function () {
let loginChance = 3; // 登錄機會初始化為3次
while (loginChance) // 只要登錄機會不為0 就可以進入系統
{
clear();
console.log("請輸入您的賬號:");
let adminID = readline.question("");
console.log("請輸入您的密碼:");
let adminPWD = readline.question("");
if (adminLogin(adminID, adminPWD)) // 如果管理員身份驗證通過 就進入if
{
let useSys = true;// 設置使用系統的標識 useSys的值為true
while (useSys) {
clear();
console.log("歡迎使用學生管理系統");
console.log("請選擇您要執行的功能:1.查詢 2.修改 3.增加 4.刪除 5.轉班 6.退出");
let funcSelect = parseInt(readline.question(""));
switch (funcSelect) {
// 查詢功能
case 1:
let query = true;// 設置查詢的標識 query的值為true
while (query) {
clear()
console.log("請選擇您要進行的查詢:1.班級查詢 2.學生查詢 3.返回");
let querySelect = parseInt(readline.question(""));
switch (querySelect) {
// 班級查詢
case 1:
{
clear();
let str = "";// 聲明一個臨時字符串用於拼接提示信息
let classSelectStr = classSelect();
while (true) {
clear();
console.log(classSelectStr);
let classNo = parseInt(readline.question(""));
if (classCheck(classNo)) {
classQuery(classNo);
}
else {
if (classNo === stuInfo.length + 1) {
break;
}
else {
console.log("輸入有誤,請重新輸入");
}
}
console.log("按回車鍵返回");
readline.question("");
}
break;
}
// 學生查詢
case 2:
{
clear();
console.log("請輸入您要查詢的學生的姓名:");
let stuName = readline.question("");
stuQuery(stuName);
console.log("按回車鍵返回");
readline.question("");
break;
}
case 3:
query = false;// 設置查詢的標識 query的值為false
break;
default:
console.log("輸入有誤,請重新輸入!(按回車鍵繼續)");
readline.question("");
}
}
break;
// 修改功能
case 2:
{
let editChoose = true;
while (editChoose) {
clear();
let str = "";
let classSelectStr = classSelect();
console.log(classSelectStr);
let classNo = parseInt(readline.question(""));
if (classCheck(classNo)) {
clear();
console.log("請輸入您要修改的學生的學號:");
let stuNo = readline.question("");
let singleStuInfo = stuCheck(classNo, stuNo);
if (singleStuInfo) {
while (true) {
clear();
str = "";
console.log("當前該學生信息為:");
console.log("班級 學號 姓名 年齡 性別 分數");
str += singleStuInfo.className + "\t" + singleStuInfo.stuID + "\t" + singleStuInfo.stuName + "\t" + singleStuInfo.stuAge + "\t" + singleStuInfo.stuGender + "\t" + singleStuInfo.stuScore;
console.log(str);
console.log("請選擇您要進行修改的學生信息: 1.姓名 2.年齡 3.性別 4.分數 5.返回");
let editSelect = parseInt(readline.question(""));
if (editSelect !== 5) {
editInfo(singleStuInfo, editSelect);
}
else {
editChoose = false;
break;
}
}
}
else {
console.log("對不起!沒有找到對應的學生");
console.log("按回車鍵返回");
readline.question("");
break;
}
}
else {
if (classNo === stuInfo.length + 1) {
break;
}
else {
console.log("輸入有誤,請重新輸入");
console.log("按回車鍵返回");
readline.question("");
}
}
}
}
break;
// 增加功能
case 3:
{
let addInfo = true;
while (addInfo) {
clear();
console.log("請選擇您要添加的內容: 1.添加班級 2.添加學生 3.返回");
let addSelect = parseInt(readline.question(""));
switch (addSelect) {
case 1:
{
clear();
let length = stuInfo.length;
stuInfo[length] = [];
console.log("新增班級成功!按回車鍵返回");
readline.question("");
}
break;
case 2:
{
clear();
let classSelectStr = classSelect();
console.log(classSelectStr);
let classNo, addStuName, addStuAge, addStuGender, addStuScore;
classNo = parseInt(readline.question(""));
if (classCheck(classNo)) {
clear();
console.log("請輸入要添加的學生的姓名:");
addStuName = readline.question("");
clear();
console.log("請輸入要添加的學生的年齡:");
addStuAge = readline.question("");
while (true) {
clear();
console.log("請選擇學生的性別: 1.男 2.女");
addStuGender = parseInt(readline.question(""));
if (addStuGender === 1 || addStuGender === 2) {
break;
}
else {
console.log("選擇有誤,請重新選擇,按回車鍵繼續");
readline.question("");
}
}
clear();
console.log("請輸入要添加的學生的分數:");
addStuScore = parseInt(readline.question(""));
addStu(classNo, addStuName, addStuAge, addStuGender, addStuScore);
console.log("按回車鍵返回");
readline.question("");
}
else {
if (classNo === stuInfo.length + 1) {
break;
}
else {
console.log("輸入有誤,請重新輸入");
console.log("按回車鍵返回");
readline.question("");
}
}
}
break;
case 3:
addInfo = false;
break;
default:
console.log("選擇有誤,請重新選擇,按回車鍵繼續");
readline.question("");
}
}
}
break;
// 刪除功能
case 4:
{
let delInfo = true;
while (delInfo) {
clear();
console.log("請選擇您要刪除的項目: 1.刪除班級 2.刪除學生 3.返回");
let delSelect = parseInt(readline.question(""));
switch (delSelect) {
// 刪除班級
case 1:
let delClassInfo = true;
while (delClassInfo) {
clear();
let classSelectStr = classSelect();
console.log(classSelectStr);
let classNo = parseInt(readline.question(""));
if (classCheck(classNo)) {
delClass(classNo);
delClassInfo = false;

}
else {
if (classNo === stuInfo.length + 1) {
break;
}
else {
console.log("輸入有誤,請重新輸入");
console.log("按回車鍵返回");
readline.question("");
}
}
}
break;
// 刪除學生
case 2:
{
let delStuInfo = true;
while (delStuInfo) {
clear();
let classSelectStr = classSelect();
console.log(classSelectStr);
let classNo = parseInt(readline.question(""));
if (classCheck(classNo)) {
clear();
console.log("請輸入您要刪除的學生的學號:");
let stuNo = readline.question("");
let singleStuInfo = stuCheck(classNo, stuNo);
delStuInfo = false;
if (singleStuInfo) {

delStu(classNo, singleStuInfo, "del");
}
else {
console.log("對不起!沒有找到對應的學生");
console.log("按回車鍵返回");
readline.question("");
}
}
else {
if (classNo === stuInfo.length + 1) {
break;
}
else {
console.log("輸入有誤,請重新輸入");
console.log("按回車鍵返回");
readline.question("");
}
}
}
}
break;
case 3:
delInfo = false;
break;
default:
console.log("輸入有誤,請重新輸入,按回車鍵繼續");
readline.question("");
}
}
}
break;
// 轉班功能
// 核心思路:首先刪除該學生,然后在其他班級上添加該學生
case 5:
{
let transfer = true;
let str = "";
while (transfer) {
clear();
let classSelectStr = classSelect();
console.log("(學生原本所在的班級)" + classSelectStr);
let classNo = parseInt(readline.question(""));
if (classCheck(classNo)) {
clear();
console.log("請輸入您要轉班的學生的學號:");
let stuNo = readline.question("");
let singleStuInfo = stuCheck(classNo, stuNo);
if (singleStuInfo) {
while (true) {
clear();
str = "";
let classSelectStr2 = classSelect();
console.log("班級 學號 姓名 年齡 性別 分數");
str += singleStuInfo.className + "\t" + singleStuInfo.stuID + "\t" + singleStuInfo.stuName + "\t" + singleStuInfo.stuAge + "\t" + singleStuInfo.stuGender + "\t" + singleStuInfo.stuScore;
console.log(str);
console.log("(學生要轉去的班級)" + classSelectStr2);
let classNo2 = parseInt(readline.question(""));
if (classCheck(classNo2)) {
if (classNo === classNo2) {
transfer = false;
console.log("和原來班級相同!按回車鍵返回主菜單");
readline.question("");
}
else {
classTransfer(classNo, singleStuInfo, classNo2);
transfer = false;
console.log("轉班成功,按回車鍵返回主菜單");
readline.question("");
}
break;
}
else {
if (classNo2 === stuInfo.length + 1) {
transfer = false;
break;
}
else {
console.log("輸入有誤,請重新輸入");
console.log("按回車鍵返回");
readline.question("");
}
}
}
}
else {
console.log("對不起!沒有找到對應的學生");
console.log("按回車鍵返回");
readline.question("");
break;
}
}
else {
if (classNo === stuInfo.length + 1) {
break;
}
else {
console.log("輸入有誤,請重新輸入");
console.log("按回車鍵返回");
readline.question("");
}
}
}
}
break;
// 退出功能
case 6:
useSys = false;// 設置使用系統的標識 useSys的值為false
break;
default:
console.log("輸入有誤,請重新輸入!(按回車鍵繼續)");
readline.question("");
}
}
break;// 跳出外層的循環
}
else {
// 沒有進入上面的if 說明賬號密碼輸入有問題
loginChance--; // 登陸機會自減1
if (loginChance === 0)// 如果登錄機會為0 直接跳出while循環
{
break;
}
else {
clear();
console.log(`賬號密碼錯誤,你還剩下${loginChance}次機會!(按回車鍵繼續)`);
readline.question("");
}
}
}
// 根據loginChance的值來判斷是用戶主動跳出的,還是登錄機會為0跳出的
if (loginChance === 0) {
clear();
console.log("錯誤次數過多!請稍后再試");
}
else {
clear();
console.log("感謝您的使用!");
}
}
main();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM