OJSystem/
├─ app.py # 主程序入口,配置Flask、注册蓝图、数据库初始化等
├─ config.py # 配置文件,存放数据库连接、大模型API密钥等配置
├─ models/ # 数据库模型,定义各表结构及关系
│ ├─ user.py # 用户(学生、教师、管理员)、用户角色、权限相关模型
│ ├─ problem.py # 题目(编程题、简答题等)、题目类型、测试用例相关模型
│ ├─ homework.py # 作业、作业-题目关联、作业提交记录相关模型
│ └─ course.py # 课程、教师-课程关联相关模型
├─ routes/ # 后端路由,处理HTTP请求,分模块管理
│ ├─ auth/ # 认证相关路由
│ │ ├─ student_auth.py # 学生登录、密码修改路由
│ │ ├─ teacher_auth.py # 教师登录、密码找回(可选)路由
│ │ └─ admin_auth.py # 管理员登录路由
│ ├─ admin/ # 管理员功能路由
│ │ ├─ teacher_manage.py # 教师账号添加、课程权限分配路由
│ │ └─ course_manage.py # 课程管理路由
│ ├─ teacher/ # 教师功能路由
│ │ ├─ user_manage/ # 用户管理子路由
│ │ │ ├─ single_import.py # 单用户录入、修改、删除、移动、复制路由
│ │ │ └─ batch_import.py # 批量用户导入(含分类导入)路由
│ │ ├─ problem_manage/ # 题目管理子路由
│ │ │ ├─ generate.py # 题目智能生成(调用大模型)路由
│ │ │ ├─ edit.py # 题目编辑、提交前自检路由
│ │ │ └─ encrypt.py # 代码加密(避免非法关键字)工具类(或在对应逻辑中)
│ │ └─ homework_manage/ # 作业管理子路由
│ │ ├─ manual_select.py # 手工选题布置作业路由
│ │ └─ auto_select.py # 自动选题(调用大模型筛选)布置作业路由
│ └─ student/ # 学生功能路由
│ ├─ homework.py # 作业查看、提交路由
│ └─ password.py # 学生密码修改路由
├─ services/ # 业务逻辑服务,封装核心业务操作
│ ├─ auth_service.py # 认证相关业务逻辑(登录验证、密码加密等)
│ ├─ user_service.py # 用户管理业务逻辑(单用户、批量用户操作)
│ ├─ llm_service.py # 大模型调用服务(题目生成、简答题评分、自动选题)
│ ├─ judge_service.py # 判题服务(C/C++、Python评测,代码解密、编译运行等)
│ └─ homework_service.py # 作业相关业务逻辑(作业创建、查询等)
├─ static/ # 前端静态资源
│ ├─ student/ # 学生端页面及资源
│ ├─ teacher/ # 教师端页面及资源
│ └─ admin/ # 管理员端页面及资源
└─ templates/ # 模板文件(若使用服务端渲染,如Jinja2)├─ student/├─ teacher/└─ admin/
各目录 / 文件功能说明
config.py
:集中管理项目配置,比如数据库的连接 URL(如 MySQL 的连接地址、用户名、密码)、大模型(如 OpenAI)的 API 密钥等,方便统一修改和维护。models/
:user.py
:定义用户表,包含用户 ID、姓名、密码(加密存储)、角色(学生、教师、管理员)等字段;还有用户角色表,用于管理不同角色的权限;以及可能的用户与课程关联表,记录教师所负责的课程。problem.py
:定义题目表,包含题目 ID、类型(选择题、填空题、简答题、编程题、片段编程题)、题干、难度等字段;题目类型表,对题目类型进行分类管理;测试用例表,存储各题目的测试用例,包括输入、输出、是否为样例等信息。homework.py
:定义作业表,包含作业 ID、标题、截止时间、布置对象等字段;作业 - 题目关联表,记录作业包含的题目;作业提交记录表,存储学生提交作业的相关信息,如提交时间、得分等。course.py
:定义课程表,包含课程 ID、课程名称等字段;教师 - 课程关联表,记录教师与课程的对应关系,用于管理员分配课程权限。
routes/
:auth/
:分别处理不同角色的登录逻辑,学生、教师、管理员登录后会进入不同的功能页面,同时学生登录后可在此模块下进行密码修改操作,教师也可在此进行密码找回(若实现该可选功能)。admin/
:管理员可通过teacher_manage.py
添加教师账号,通过course_manage.py
为教师分配课程权限,管理课程信息。teacher/
:user_manage/
:single_import.py
实现单用户的录入、信息修改、删除、用户信息在不同类别间的移动和复制;batch_import.py
实现多用户的批量导入,支持按类别、子类等层级结构导入用户。problem_manage/
:generate.py
调用大模型生成各类题目(编程题、简答题等);edit.py
对生成或已有题目进行编辑,在题目提交前进行自检,确保测试案例正确;encrypt.py
(或在相关逻辑中)对编程题代码进行加密,避免出现非法关键字。homework_manage/
:manual_select.py
从已有题目中手工挑选布置作业,设置作业时间、对象等;auto_select.py
调用大模型根据需求描述自动筛选题目来布置作业。
student/
:homework.py
供学生查看作业、提交作业;password.py
实现学生修改自己密码的功能。
services/
:auth_service.py
:处理登录验证的业务逻辑,如密码加密与验证,生成登录凭证(如 JWT)等。user_service.py
:封装用户管理的业务逻辑,包括单用户和批量用户的增删改查等操作。llm_service.py
:封装大模型调用的逻辑,包括调用大模型生成题目、对简答题进行评分、根据需求自动筛选题目等。judge_service.py
:处理判题的业务逻辑,对 C/C++、Python 代码进行解密、编译、运行,与测试用例比对,给出评测结果。homework_service.py
:封装作业相关的业务逻辑,如作业的创建、查询学生作业提交情况等。
static/
和 templates/
:存放前端页面和相关资源,static
放 CSS、JavaScript、图片等静态文件,templates
放服务端渲染用的 HTML 模板,分别为学生、教师、管理员提供不同的页面界面,展示各自功能。