小明:嘿,小华,我最近在做一个研究生综合管理系统,想听听你的意见。
小华:好啊!我一直对这种项目很感兴趣。你从哪里开始的?
小明:首先,我定义了几个关键模块:用户管理、课程管理、成绩管理、论文管理和活动管理。
小华:听起来不错。那你准备怎么存储数据呢?
小明:我打算使用MySQL数据库来存储所有信息。这样可以方便地进行数据查询和更新。
小华:好的,那我们来看看数据库的设计吧。
-- 创建数据库 CREATE DATABASE GraduateManagementSystem; USE GraduateManagementSystem; -- 用户表 CREATE TABLE Users ( UserID INT AUTO_INCREMENT PRIMARY KEY, UserName VARCHAR(50) NOT NULL, Password VARCHAR(100) NOT NULL, Email VARCHAR(100), Role ENUM('admin', 'teacher', 'student') NOT NULL ); -- 课程表 CREATE TABLE Courses ( CourseID INT AUTO_INCREMENT PRIMARY KEY, CourseName VARCHAR(100) NOT NULL, TeacherID INT, FOREIGN KEY (TeacherID) REFERENCES Users(UserID) ); -- 成绩表 CREATE TABLE Grades ( GradeID INT AUTO_INCREMENT PRIMARY KEY, StudentID INT, CourseID INT, Grade DECIMAL(5,2), FOREIGN KEY (StudentID) REFERENCES Users(UserID), FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) ); ]]>
小华:看起来很完整。接下来,我们谈谈后端逻辑吧。
小明:后端我打算用Node.js和Express框架来实现。这里有一个简单的用户登录验证函数:
const express = require('express'); const bcrypt = require('bcryptjs'); const app = express(); app.use(express.json()); // 假设这是从数据库获取的用户列表 let users = [ { id: 1, username: 'admin', password: '$2a$10$9yLWjUZkFJvRzQG7qXsO7uN.' } // 加密后的密码 ]; app.post('/login', (req, res) => { const { username, password } = req.body; const user = users.find(u => u.username === username); if (!user) return res.status(400).send('User not found.'); bcrypt.compare(password, user.password, (err, result) => { if (result) { res.send('Login successful!'); } else { res.status(400).send('Incorrect password.'); } }); }); ]]>
小华:这很好。最后,前端部分你打算怎么做?
小明:我想用React来创建用户界面。这将包括登录页面、课程列表页面等。
小华:看来你已经考虑得很周到了。加油吧!