做一个教学管理系统的设计与实现

教学管理系统的设计与实现 感谢各位程序员解决一下。解
决一下这个问题。

什么要求呢,网上这种挺多,用不用web,后台数据库是什么,这些你得说明,还是没有任何要求,我从github上给你找了一个案例:
框架用flask,数据库是自带的sqllite:

from flask import Flask, render_template, request, redirect, url_for, flash
import sqlite3

app = Flask(__name__)
app.secret_key = 'supersecretkey'

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        email = request.form['email']
        password = request.form['password']
        user_type = request.form['user_type']
        if user_type == 'student':
            conn = sqlite3.connect('edu.db')
            c = conn.cursor()
            c.execute('SELECT * FROM students WHERE email=? AND password=?', (email, password))
            user = c.fetchone()
            conn.close()
            if user:
                flash('Login successful', 'success')
                return redirect(url_for('dashboard', user_id=user[0], user_type='student'))
            else:
                flash('Invalid email or password', 'danger')
                return redirect(url_for('login'))
        elif user_type == 'teacher':
            conn = sqlite3.connect('edu.db')
            c = conn.cursor()
            c.execute('SELECT * FROM teachers WHERE email=? AND password=?', (email, password))
            user = c.fetchone()
            conn.close()
            if user:
                flash('Login successful', 'success')
                return redirect(url_for('dashboard', user_id=user[0], user_type='teacher'))
            else:
                flash('Invalid email or password', 'danger')
                return redirect(url_for('login'))
    else:
        return render_template('login.html')

@app.route('/logout')
def logout():
    return redirect(url_for('index'))

@app.route('/dashboard/<int:user_id>/<string:user_type>')
def dashboard(user_id, user_type):
    if user_type == 'student':
        conn = sqlite3.connect('edu.db')
        c = conn.cursor()
        c.execute('SELECT * FROM students WHERE id=?', (user_id,))
        user = c.fetchone()
        c.execute('SELECT * FROM enrollments WHERE student_id=?', (user_id,))
        enrollments = c.fetchall()
        courses = []
        for enrollment in enrollments:
            c.execute('SELECT * FROM courses WHERE id=?', (enrollment[1],))
            course = c.fetchone()
            c.execute('SELECT * FROM assignments WHERE course_id=?', (course[0],))
            assignments = c.fetchall()
            c.execute('SELECT * FROM exams WHERE course_id=?', (course[0],))
            exams = c.fetchall()
            courses.append({'id': course[0], 'name': course[1], 'description': course[2], 'assignments': assignments, 'exams': exams})
        conn.close()
        return render_template('student_dashboard.html', user=user, courses=courses)
    elif user_type == 'teacher':
        conn = sqlite3.connect('edu.db')
        c = conn.cursor()
        c.execute('SELECT * FROM teachers WHERE id=?', (user_id,))
        user = c.fetchone()
        c.execute('SELECT * FROM courses WHERE teacher_id=?', (user_id,))
        courses = c.fetchall()
        conn.close()
        return render_template('teacher_dashboard.html', user=user, courses=courses)

@app.route('/course/<int:course_id>', methods=['GET', 'POST'])
def course(course_id):
    conn = sqlite3.connect('edu.db')
    c = conn.cursor()
    c.execute('SELECT * FROM courses WHERE id=?', (course_id,))
    course = c.fetchone()
    c.execute('SELECT * FROM assignments WHERE course_id=?', (course_id,))
    assignments = c.fetchall()
    c.execute('SELECT * FROM exams WHERE course_id=?', (course_id,))
    exams = c.fetchall()
    conn.close()
    if request.method == 'POST':
        if 'assignment' in request.form:
            assignment_name = request.form['assignment_name']
            assignment_description = request.form['assignment_description']
            file = request.files['assignment_file']
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                conn = sqlite3.connect('edu.db')
                c = conn.cursor()
                c.execute('INSERT INTO assignments (name, description, course_id) VALUES (?, ?, ?)', (assignment_name, assignment_description, course_id))
                assignment_id = c.lastrowid
                c.execute('INSERT INTO submissions (student_id, assignment_id, file_path) VALUES (?, ?, ?)', (user_id, assignment_id, os.path.join(app.config['UPLOAD_FOLDER'], filename)))
                conn.commit()
                conn.close()
                flash('Assignment submitted', 'success')
                return redirect(url_for('course', course_id=course_id))
            else:
                flash('Invalid file format', 'danger')
                return redirect(url_for('course', course_id=course_id))
        elif 'exam' in request.form:
            exam_name = request.form['exam_name']
            exam_description = request.form['exam_description']
            file = request.files['exam_file']
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
                conn = sqlite3.connect('edu.db')
                c = conn.cursor()
                c.execute('INSERT INTO exams (name, description, course_id) VALUES (?, ?, ?)', (exam_name, exam_description, course_id))
                exam_id = c.lastrowid
                c.execute('INSERT INTO submissions (student_id, exam_id, file_path) VALUES (?, ?, ?)', (user_id, exam_id, os.path.join(app.config['UPLOAD_FOLDER'], filename)))
                conn.commit()
                conn.close()
                flash('Exam submitted', 'success')
                return redirect(url_for('course', course_id=course_id))
            else:
                flash('Invalid file format', 'danger')
                return redirect(url_for('course', course_id=course_id))
    else:
        return render_template('course.html', course=course, assignments=assignments, exams=exams)

//导模块:
import sqlite3

conn = sqlite3.connect('edu.db')
c = conn.cursor()

c.execute('CREATE TABLE students (id INTEGER PRIMARY KEY, name TEXT, email TEXT, password TEXT)')
c.execute('CREATE TABLE teachers (id INTEGER PRIMARY KEY, name TEXT, email TEXT, password TEXT)')
c.execute('CREATE TABLE courses (id INTEGER PRIMARY KEY, name TEXT, description TEXT, teacher_id INTEGER)')
c.execute('CREATE TABLE enrollments (student_id INTEGER, course_id INTEGER, FOREIGN KEY (student_id) REFERENCES students (id), FOREIGN KEY (course_id) REFERENCES courses (id))')
c.execute('CREATE TABLE assignments (id INTEGER PRIMARY KEY, name TEXT, description TEXT, course_id INTEGER)')
c.execute('CREATE TABLE exams (id INTEGER PRIMARY KEY, name TEXT, description TEXT, course_id INTEGER)')
c.execute('CREATE TABLE submissions (id INTEGER PRIMARY KEY, student_id INTEGER, assignment_id INTEGER, exam_id INTEGER, file_path TEXT, grade INTEGER, FOREIGN KEY (student_id) REFERENCES students (id), FOREIGN KEY (assignment_id) REFERENCES assignments (id), FOREIGN KEY (exam_id) REFERENCES exams (id))')

conn.commit()
conn.close()
//HTML前端界面
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>{{ course.name }} - {{ user.name }}</title>
</head>
<body>
  <h1>{{ course.name }}</h1>
  <p>{{ course.description }}</p>
  {% if user_type == 'teacher' %}
    <h2>Assignments</h2>
    <form method="POST" enctype="multipart/form-data">
      <label for="assignment_name">Name:</label>
      <input type="text" name="assignment_name" id="assignment_name" required>


      <label for="assignment_description">Description:</label>


      <textarea name="assignment_description" id="assignment_description"></textarea>


      <label for="assignment_file">File:</label>
      <input type="file" name="assignment_file" id="assignment_file" required>


      <button type="submit" name="assignment">Submit</button>
    </form>
    <h2>Exams</h2>
    <form method="POST" enctype="multipart/form-data">
      <label for="exam_name">Name:</label>
      <input type="text" name="exam_name" id="exam_name" required>


      <label for="exam_description">Description:</label>


      <textarea name="exam_description" id="exam_description"></textarea>


      <label for="exam_file">File:</label>
      <input type="file" name="exam_file" id="exam_file" required>


      <button type="submit" name="exam">Submit</button>
    </form>
  {% else %}
    <h2>Assignments</h2>
    {% for assignment in assignments %}
      <div>
        <h3>{{ assignment[1] }}</h3>
        <p>{{ assignment[2] }}</p>
        <form method="POST" enctype="multipart/form-data">
          <label for="{{ assignment[0] }}">File:</label>
          <input type="file" name="file" id="{{ assignment[0] }}" required>


          <button type="submit">Submit</button>
        </form>
      </div>
    {% endfor %}
    <h2>Exams</h2>
    {% for exam in exams %}
      <div>
        <h3>{{ exam[1] }}</h3>
        <p>{{ exam[2] }}</p>
        <form method="POST" enctype="multipart/form-data">
          <label for="{{ exam[0] }}">File:</label>
          <input type="file" name="file" id="{{ exam[0] }}" required>


          <button type="submit">Submit</button>
        </form>
      </div>
    {% endfor %}
  {% endif %}
</body>
</html>

基于new bing的实现,有帮助望采纳!:

img

class Student:
    def __init__(self, name, id):
        self.name = name
        self.id = id
        self.courses = []
        self.scores = {}

    def add_course(self, course):
        self.courses.append(course)

    def add_score(self, course, score):
        self.scores[course] = score

    def get_scores(self):
        return self.scores


class Teacher:
    def __init__(self, name, id):
        self.name = name
        self.id = id
        self.courses = []

    def add_course(self, course):
        self.courses.append(course)

    def get_courses(self):
        return self.courses


class Course:
    def __init__(self, name, id):
        self.name = name
        self.id = id
        self.students = []
        self.teacher = None

    def add_student(self, student):
        self.students.append(student)

    def set_teacher(self, teacher):
        self.teacher = teacher

    def get_students(self):
        return self.students


class ManagementSystem:
    def __init__(self):
        self.students = []
        self.teachers = []
        self.courses = []

    def add_student(self, name, id):
        student = Student(name, id)
        self.students.append(student)
        return student

    def add_teacher(self, name, id):
        teacher = Teacher(name, id)
        self.teachers.append(teacher)
        return teacher

    def add_course(self, name, id):
        course = Course(name, id)
        self.courses.append(course)
        return course

    def enroll(self, student, course):
        course.add_student(student)
        student.add_course(course)

    def assign_teacher(self, teacher, course):
        course.set_teacher(teacher)
        teacher.add_course(course)

    def record_score(self, student, course, score):
        student.add_score(course, score)

    def get_students(self):
        return self.students

    def get_teachers(self):
        return self.teachers

    def get_courses(self):
        return self.courses

class ManagementSystem:
    def __init__(self):
        self.students = []
        self.teachers = []
        self.courses = []

    def add_student(self, name, id):
        student = Student(name, id)
        self.students.append(student)
        return student

    def add_teacher(self, name, id):
        teacher = Teacher(name, id)
        self.teachers.append(teacher)
        return teacher

    def add_course(self, name, id):
        course = Course(name, id)
        self.courses.append(course)
        return course

    def enroll(self, student, course):
        course.add_student(student)
        student.add_course(course)

    def assign_teacher(self, teacher, course):
        course.set_teacher(teacher)
        teacher.add_course(course)

    def record_score(self, student, course, score):
        student.add_score(course, score)

    def get_students(self):
        return self.students

    def get_teachers(self):
        return self.teachers

    def get_courses(self):
        return self.courses

    def show_menu(self):
        while True:
            print("请选择操作:")
            print("1. 添加学生")
            print("2. 添加教师")
            print("3. 添加课程")
            print("4. 学生选课")
            print("5. 教师授课")
            print("6. 记录成绩")
            print("7. 查看学生列表")
            print("8. 查看教师列表")
            print("9. 查看课程列表")
            print("10. 退出")
            choice = input()
            if choice == "1":
                name = input("输入学生姓名:")
                id = input("输入学生编号:")
                self.add_student(name, id)
            elif choice == "2":
                name = input("输入教师姓名:")
                id = input("输入教师编号:")
                self.add_teacher(name, id)
            elif choice == "3":
                name = input("输入课程名称:")
                id = input("输入课程编号:")
                self.add_course(name, id)
            elif choice == "4":
                student_id = input("输入学生编号:")
                course_id = input("输入课程编号:")
                student = None
                course = None
                for s in self.students:
                    if s.id == student_id:
                        student = s
                        break
                for c in self.courses:
                    if c.id == course_id:
                        course = c
                        break
                if student and course:
                    self.enroll(student, course)
                    print("选课成功!")
                else:
                    print("选课失败!")
            elif choice == "5":
                teacher_id = input("输入教师编号:")
                course_id = input("输入课程编号:")
                teacher = None
                course = None
                for t in self.teachers:
                    if t.id == teacher_id:
                        teacher = t
                        break
                for c in self.courses:
                    if c.id == course_id:
                        course = c
                        break
                if teacher and course:
                    self.assign_teacher(teacher, course)
                    print("授课成功!")
                else:
                    print("授课失败!")
            elif choice == "6":
                student_id = input("输入学生编号:")
                course_id = input("输入课程编号:")
                score = input("输入成绩:")
                student = None
                course = None
                for s in self.students:
                    if s.id == student_id:
                        student = s
                        break
                for c in self.courses:
                    if c.id == course_id:
                        course = c
                        break
                if student and course:
                    self.record_score(student, course, score)
                    print("记录成绩成功!")
                else:
                    print("记录成绩失败!")
            elif choice == "7":
                print("学生列表:")
                for student in self.get_students():
                    print(student.name + "(" + student.id + ")")
            elif choice == "8":
                print("教师列表:")
                for teacher in self.get_teachers():
                    print(teacher.name + "(" + teacher.id + ")")
            elif choice == "9":
                print("课程列表:")
                for course in self.get_courses():
                    print(course.name + "(" + course.id + ")")
            elif choice == "10":
                print("谢谢使用!")
                break
            else:
                print("无效的选择,请重新选择!")
if __name__ == "__main__":
    ms = ManagementSystem()
    ms.show_menu()


# 学生信息放在字典里面
student_info = [
    {'姓名': '婧琪', '语文': 60, '数学': 60, '英语': 60, '总分': 180},
    {'姓名': '巳月', '语文': 60, '数学': 60, '英语': 60, '总分': 180},
    {'姓名': '落落', '语文': 60, '数学': 60, '英语': 60, '总分': 180},
]
 
# 死循环 while True 当一直为真
# 源码自取君羊:708525271
while True:
    # 输出
    print(msg)
    # 输入选项
    num = input('请输入你想要进行操作: ')
    # 进行判断, 判断输入内容是什么, 然后返回相应结果
    """
    if .... elif... 多条件判断语句
    """
    if num == '1':
        # 新建学生信息, 输入内容  input 输入的内容, 返回字符串数据类型
        name = input('请输入学生姓名: ')
        chinese = int(input('请输入语文成绩: '))
        math = int(input('请输入数学成绩: '))
        english = int(input('请输入英语成绩: '))
        # 字符串与字符串相加: 字符串拼接  int 整数数据类型
        score = chinese + math + english  # 总分
        # 把信息内容, 放入字典里面
        student_dit = {
            '姓名': name,
            '语文': chinese,
            '数学': math,
            '英语': english,
            '总分': score,
        }
        # 把学生信息 添加到列表里面
        student_info.append(student_dit)
 
    elif num == '2':
        # for循环遍历, 把列表里元素 一个一个提取出来  \t
        print('姓名\t\t语文\t\t数学\t\t英语\t\t总分')
        for student in student_info:
            # student 字典数据类型, 根据键值对, 提取相关内容
            print(
                student['姓名'], '\t\t',
                student['语文'], '\t\t',
                student['数学'], '\t\t',
                student['英语'], '\t\t',
                student['总分'],
            )
 
    elif num == '3':
        name = input('请输入查询学生姓名: ')
        # 遍历  for else 用法
        for student in student_info:
            # 判断 查询名字和学生名字 是否一致
            if name == student['姓名']:
                print('姓名\t\t语文\t\t数学\t\t英语\t\t总分')
                print(
                    student['姓名'], '\t\t',
                    student['语文'], '\t\t',
                    student['数学'], '\t\t',
                    student['英语'], '\t\t',
                    student['总分'],
                )
                # 跳出本次循环 continue 继续循环下面的代码
                
                break
        else:
            # 字符串格式化方法 format
            print('查无此人, 没有{}学生信息!'.format(name))
 
 
    elif num == '4':
        name = input('请输入删除学生姓名: ')
        # 把每一个学生的信息, 一个一个提取出来
        for student in student_info:
            # 判断, 输入的学生姓名 是否在学生信息库里面
            if name == student['姓名']:
                # 打印成绩, 查看学生情况
                print('姓名\t\t语文\t\t数学\t\t英语\t\t总分')
                print(
                    student['姓名'], '\t\t',
                    student['语文'], '\t\t',
                    student['数学'], '\t\t',
                    student['英语'], '\t\t',
                    student['总分'],
                )
                # 输入是否要真的删除学生信息 <防止>
                choose = input(f'是否确定要删除{name}信息(y/n)')
                # or 或者的意思
                if choose == 'y' or choose == 'Y':
                    # 删除信息  移除列表里面元素 remove()
                    student_info.remove(student)
                    print(f'{name}信息已经被删除!')
                    break
                elif choose == 'n' or choose == 'N':
                    # 跳出循环
                    break
        else:
            print('查无此人, 没有{}学生信息!'.format(name))
 
 
    elif num == '5':
        print('修改学生信息')
        name = input('请输入删除学生姓名: ')
        # 把每一个学生的信息, 一个一个提取出来
        for student in student_info:
            # 判断, 输入的学生姓名 是否在学生信息库里面
            if name == student['姓名']:
                # 打印成绩, 查看学生情况
                print('姓名\t\t语文\t\t数学\t\t英语\t\t总分')
                print(
                    student['姓名'], '\t\t',
                    student['语文'], '\t\t',
                    student['数学'], '\t\t',
                    student['英语'], '\t\t',
                    student['总分'],
                )
                # 输入是否要真的删除学生信息 <防止>
                choose = input(f'是否要修改{name}信息(y/n)')
                # or 或者的意思
                if choose == 'y' or choose == 'Y':
                    # 修改操作 和 新建学生信息 有点类似
                    name = input('请输入学生姓名: ')
                    chinese = int(input('请输入语文成绩: '))
                    math = int(input('请输入数学成绩: '))
                    english = int(input('请输入英语成绩: '))
                    # 字符串与字符串相加: 字符串拼接  int 整数数据类型
                    score = chinese + math + english  # 总分
                    # 修改, 做替换  字典修改值
                    student['姓名'] = name
                    student['语文'] = chinese
                    student['数学'] = math
                    student['英语'] = english
                    student['总分'] = score
                    print(f'{name}信息已经修改了!')
                    break
                elif choose == 'n' or choose == 'N':
                    # 跳出循环
                    break
        else:
             print('查无此人, 没有{}学生信息!'.format(name))