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

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

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

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

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

相关推荐
abandondyy1 小时前
MySQL---主从复制和读写分离
数据库·mysql
DEARM LINER2 小时前
mysql 巧妙的索引
数据库·spring boot·后端·mysql
码农幻想梦3 小时前
实验九 视图的使用
前端·数据库·oracle
影子落人间3 小时前
Oracle创建存储过程,创建定时任务
数据库·oracle
大G哥3 小时前
02、Oracle过滤和排序数据
数据库·oracle
喵手3 小时前
Java 与 Oracle 数据泵实操:数据导入导出的全方位指南
java·开发语言·oracle
Python私教5 小时前
Flutter颜色和主题
开发语言·javascript·flutter
代码吐槽菌5 小时前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车
伏虎山真人5 小时前
开源数据库 - mysql - 组织结构(与oracle的区别)
数据库·mysql·开源
大力水手~6 小时前
css之loading旋转加载
前端·javascript·css