学校管理系统是一个基于 Web 的应用程序,使用 MERN(MongoDB、Express.js、React.js、Node.js)堆栈构建。它旨在简化学校管理、班级组织,并促进学生、教师和管理人员之间的沟通。
用户角色:系统支持三种用户角色:管理员、教师和学生。每个角色都有特定的功能和访问级别。
管理仪表板:管理员可以添加新学生和教师、创建班级和科目、管理用户帐户以及监督系统设置。
出勤跟踪:教师可以轻松记录课堂出勤情况,将学生标记为出勤或缺勤,并生成出勤报告。
表现评估:教师可以通过提供分数和反馈来评估学生的表现。学生可以查看他们的分数并跟踪他们随时间的进展。
数据可视化:学生可以通过交互式图表将自己的成绩数据可视化,帮助他们一目了然地了解自己的学习成绩。
沟通:用户可以通过系统轻松沟通。教师可以向学生发送消息,反之亦然,促进有效的沟通和协作。
git clone https://github.com/Yogndrr/MERN-School-Management-System.git
在单独的窗口/选项卡中打开 2 个终端。
终端 1:设置后端
cd backend
npm install
npm start
在后端文件夹中创建一个名为 .env 的文件。在里面写下这样的内容:
MONGO_URL = mongodb://127.0.0.1/school
如果您使用 MongoDB Compass,则可以使用此数据库链接,但如果您使用 MongoDB Atlas,则不用此链接编写您自己的数据库链接。
Terminal 2:设置前端
cd frontend
npm install
npm start
现在,在浏览器中导航到localhost:3000
。后端 API 将在localhost:5000
运行。
您在注册时可能会遇到错误,可能是网络错误,也可能是无限期持续的加载错误。
解决方法:
导航到frontend > .env
文件。
取消第一行的注释。之后,终止前端终端。打开一个新终端并执行以下命令:
cd frontend
npm start
完成这些步骤后,请尝试重新注册。如果问题仍然存在,请按照以下附加步骤解决问题:
导航到frontend > src > redux > userRelated > userHandle.js
文件。
在 import 语句后添加以下行:
const REACT_APP_BASE_URL = "http://localhost:5000" ;
process.env.REACT_APP_BASE_URL
的所有实例替换为REACT_APP_BASE_URL
。重要信息:对名称中包含“Handle”的所有其他文件重复相同的过程。
例如,在redux
文件夹中,还有其他文件夹,例如userRelated
。在teacherRelated
文件夹中,您将找到一个名为teacherHandle
的文件。同样,其他文件夹包含名称中带有“Handle”的文件。请确保也更新这些文件。
出现此问题的原因是前端中的.env
文件可能不适用于所有用户,但它适用于我。
此外:
测试项目时,请先注册,而不是以访客身份登录或使用常规登录(如果您尚未创建帐户)。
要使用访客模式,请导航到LoginPage.js
并提供系统中已创建的项目的电子邮件和密码。这简化了登录过程,创建帐户后,您可以使用您的凭据。
这些步骤应该可以解决前端的网络错误。如果问题仍然存在,请随时与我联系以获取进一步帮助。
尝试删除项目时,您可能会遇到一条弹出消息,指出“抱歉,删除功能暂时已禁用”。出现此消息是因为我在实时网站上禁用了删除功能,以防止访客删除项目。如果您想启用删除功能,请按照以下步骤操作:
导航到frontend > src > redux > userRelated > userHandle.js
文件。
如果您没有进行任何更改,您应该在第 71 行找到deleteUser
函数。它可能已被注释掉。它可能看起来像这样:
// export const deleteUser = (id, address) => async (dispatch) => {
// dispatch(getRequest());
// try {
// const result = await axios.delete(`${process.env.REACT_APP_BASE_URL}/${address}/${id}`);
// if (result.data.message) {
// dispatch(getFailed(result.data.message));
// } else {
// dispatch(getDeleteSuccess());
// }
// } catch (error) {
// dispatch(getError(error));
// }
// }
deleteUser
函数的注释,并注释掉当前正在运行的第87行到第90行的这个deleteUser
函数: export const deleteUser = ( id , address ) => async ( dispatch ) => {
dispatch ( getRequest ( ) ) ;
dispatch ( getFailed ( "Sorry the delete function has been disabled for now." ) ) ;
}
如果您之前修改过代码,您可能会在不同的行中找到deleteUser
函数。在这种情况下,请取消注释原始代码并注释掉当前代码。
接下来,导航到frontend > src > pages > admin
文件夹。在这里,您会发现后缀为“相关”的不同文件夹。打开每个文件夹并找到前缀为“Show”的文件。
打开每个以“Show”为前缀的文件并搜索名为deleteHandler
函数。例如:
const deleteHandler = ( deleteID , address ) => {
console . log ( deleteID ) ;
console . log ( address ) ;
setMessage ( "Sorry, the delete function has been disabled for now." ) ;
setShowPopup ( true ) ;
// dispatch(deleteUser(deleteID, address))
// .then(() => {
// dispatch(getAllSclasses(adminID, "Sclass"));
// })
}
这是ShowClasses
的示例片段。在其他以“Show”作为前缀的文件中,它可能有所不同。
取消deleteHandler
函数内被注释掉的代码的注释,并注释掉现有的代码。它应该类似于这样:
const deleteHandler = ( deleteID , address ) => {
// console.log(deleteID);
// console.log(address);
// setMessage("Sorry, the delete function has been disabled for now.");
// setShowPopup(true);
dispatch ( deleteUser ( deleteID , address ) )
. then ( ( ) => {
dispatch ( getAllSclasses ( adminID , "Sclass" ) ) ;
} )
}
deleteHandler
函数也可能出现在以“View”为前缀的文件中。检查这些文件并重复相同的过程。如果问题仍然存在,请随时与我联系以获取进一步帮助。
如果您发现该解决方案有帮助,请不要忘记为此项目留下一颗星。谢谢你!