在线课程管理系统(系统的基础功能,如教师上传课程资料、布置作业,学生提交作业和查看成绩等。)

现在我们可以继续开发在线课程管理系统 。接下来的步骤将包括实现系统的基础功能,如教师上传课程资料、布置作业,学生提交作业和查看成绩等。我们可以从数据库设计、前后端接口、以及相应的 Vue 组件入手。

1. 数据库设计

为了支持不同角色(教师和学生)、课程、作业等功能,我们需要为系统设计数据库表:

建议的数据库表:

  • users: 存储用户信息(包括教师和学生)。
  • courses: 存储课程信息。
  • assignments: 存储作业信息。
  • submissions: 存储学生提交的作业和成绩。

数据库表设计:

sql 复制代码
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    role ENUM('teacher', 'student') NOT NULL
);

CREATE TABLE courses (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    description TEXT,
    teacher_id INT,
    FOREIGN KEY (teacher_id) REFERENCES users(id)
);

CREATE TABLE assignments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    due_date DATE,
    course_id INT,
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

CREATE TABLE submissions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT,
    assignment_id INT,
    file_path VARCHAR(255),
    grade DECIMAL(5,2),
    submission_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (student_id) REFERENCES users(id),
    FOREIGN KEY (assignment_id) REFERENCES assignments(id)
);

2. 实现后端 API

a. 用户注册/登录

在前面的测试过程中已经有了用户注册的 API,接下来我们可以创建用户登录的 API。

b. 课程管理

创建教师可以创建课程的 API。

c. 作业管理

创建教师布置作业、学生提交作业的 API。

基础 API 设计:

javascript 复制代码
// 登录 API
app.post('/login', (req, res) => {
    const { username, password } = req.body;
    const sql = 'SELECT * FROM users WHERE username = ? AND password = ?';
    db.query(sql, [username, password], (err, results) => {
        if (err) return res.status(500).send('Database error');
        if (results.length > 0) {
            res.send(results[0]); // 返回用户信息
        } else {
            res.status(401).send('Invalid credentials');
        }
    });
});

// 创建课程 API
app.post('/courses', (req, res) => {
    const { name, description, teacher_id } = req.body;
    const sql = 'INSERT INTO courses (name, description, teacher_id) VALUES (?, ?, ?)';
    db.query(sql, [name, description, teacher_id], (err, result) => {
        if (err) return res.status(500).send('Database error');
        res.send('Course created successfully');
    });
});

// 创建作业 API
app.post('/assignments', (req, res) => {
    const { title, description, due_date, course_id } = req.body;
    const sql = 'INSERT INTO assignments (title, description, due_date, course_id) VALUES (?, ?, ?, ?)';
    db.query(sql, [title, description, due_date, course_id], (err, result) => {
        if (err) return res.status(500).send('Database error');
        res.send('Assignment created successfully');
    });
});

// 提交作业 API
app.post('/submissions', (req, res) => {
    const { student_id, assignment_id, file_path } = req.body;
    const sql = 'INSERT INTO submissions (student_id, assignment_id, file_path) VALUES (?, ?, ?)';
    db.query(sql, [student_id, assignment_id, file_path], (err, result) => {
        if (err) return res.status(500).send('Database error');
        res.send('Submission created successfully');
    });
});

3. 前端开发

a. 课程页面

教师可以在这个页面创建课程,学生可以查看课程列表。

b. 作业页面

教师可以在课程页面下布置作业,学生可以在作业页面提交作业。

示例:课程创建组件 CreateCourse.vue

javascript 复制代码
<template>
  <div>
    <h2>Create a Course</h2>
    <form @submit.prevent="createCourse">
      <div>
        <label for="name">Course Name:</label>
        <input type="text" v-model="name" id="name" />
      </div>
      <div>
        <label for="description">Description:</label>
        <textarea v-model="description" id="description"></textarea>
      </div>
      <button type="submit">Create Course</button>
    </form>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      name: '',
      description: '',
    };
  },
  methods: {
    async createCourse() {
      try {
        const teacherId = 1; // 假设当前用户是教师,id为1
        const response = await axios.post('http://localhost:3000/courses', {
          name: this.name,
          description: this.description,
          teacher_id: teacherId
        });
        alert('Course created successfully!');
      } catch (error) {
        console.error('Error creating course:', error);
      }
    }
  }
};
</script>

你可以根据需求进一步实现其他功能,比如学生查看课程、提交作业、查看成绩等。

接下来,我们可以继续根据这些功能逐步实现具体模块。如果有特别的功能或模块需要优先实现,可以告诉我!

接下来我将在练手项目专栏不定期更新以上在线课程管理系统,如果你对这些项目感兴趣可以先收藏、点赞、关注,在评论区留言。

相关推荐
韩楚风17 分钟前
【参天引擎】事务生命周期 / MVCC / Undo / ACID / 分布式事务 功能域整体解析
数据库·分布式·mysql·架构·cantian
renhongxia11 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
海上彼尚1 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
程序员无隅1 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
愿做无知一猿1 小时前
Nacos连接MySQL异常?DataGrip竟成救星
数据库·mysql
G.O.G.O.G1 小时前
LeetCode SQL 从入门到精通(MySQL)06(上)
数据库·sql·mysql·leetcode
To_OC2 小时前
从 “卡死半天” 到 “打字机效果”:大模型流式输出前端实现全记录
前端·javascript·llm
rockey6272 小时前
基于AScript的JavaScript脚本语言发布啦
javascript·c#·.net·js·script
研究员子楚2 小时前
GEO行业发展标准体系白皮书V2.0-第10卷 · 全球篇:跨国标准协同与全球品牌语义治理框架
数据库·人工智能·microsoft·架构·geo
kyriewen3 小时前
我看完这篇安全论文——AI推荐的npm包,92%是编出来的
前端·javascript·ai编程