sql
CREATE TABLE Course (
CourseID VARCHAR(20) PRIMARY KEY,
CourseName VARCHAR(50),
Credit DECIMAL(2,1),
TeacherID VARCHAR(20),
FOREIGN KEY (TeacherID) REFERENCES Teacher(TeacherID)
);
sql
CREATE TABLE Teacher (
TeacherID VARCHAR(20) PRIMARY KEY,
TeacherName VARCHAR(50),
MaxTeachingLoad INT
);
sql
CREATE TABLE Student (
StudentID VARCHAR(20) PRIMARY KEY,
StudentName VARCHAR(50),
Major VARCHAR(30),
Grade INT
);
sql
CREATE TABLE Classroom (
ClassroomID VARCHAR(20) PRIMARY KEY,
Capacity INT,
Equipment VARCHAR(100)
);
sql
CREATE TABLE CourseSchedule (
ScheduleID VARCHAR(20) PRIMARY KEY,
CourseID VARCHAR(20),
TeacherID VARCHAR(20),
ClassroomID VARCHAR(20),
ClassTime DATETIME,
FOREIGN KEY (CourseID) REFERENCES Course(CourseID),
FOREIGN KEY (TeacherID) REFERENCES Teacher(TeacherID),
FOREIGN KEY (ClassroomID) REFERENCES Classroom(ClassroomID)
);
python
from flask import Flask, request, jsonify
app = Flask(__name__)
# 模拟数据库连接
import sqlite3
def get_db_connection():
conn = sqlite3.connect('教务管理.db')
conn.row_factory = sqlite3.Row
return conn
@app.route('/course/add', methods=['POST'])
def add_course():
data = request.get_json()
CourseID = data['CourseID']
CourseName = data['CourseName']
Credit = data['Credit']
TeacherID = data['TeacherID']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('INSERT INTO Course (CourseID, CourseName, Credit, TeacherID) VALUES (?,?,?,?)',
(CourseID, CourseName, Credit, TeacherID))
conn.commit()
conn.close()
return jsonify({'message': '课程添加成功'})
@app.route('/course/update', methods=['PUT'])
def update_course():
data = request.get_json()
CourseID = data['CourseID']
CourseName = data['CourseName']
Credit = data['Credit']
TeacherID = data['TeacherID']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('UPDATE Course SET CourseName =?, Credit =?, TeacherID =? WHERE CourseID =?',
(CourseName, Credit, TeacherID, CourseID))
conn.commit()
conn.close()
return jsonify({'message': '课程更新成功'})
@app.route('/course/delete/', methods=['DELETE'])
def delete_course(CourseID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('DELETE FROM Course WHERE CourseID =?', (CourseID,))
conn.commit()
conn.close()
return jsonify({'message': '课程删除成功'})
@app.route('/course/query/', methods=['GET'])
def query_course(CourseID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM Course WHERE CourseID =?', (CourseID,))
course = cursor.fetchone()
conn.close()
if course:
course_dict = dict(course)
return jsonify(course_dict)
else:
return jsonify({'message': '课程未找到'})
if __name__ == '__main__':
app.run(debug=True)
get_db_connection
函数用于建立与 SQLite 数据库的连接。/course/add
路由用于添加课程,接收 JSON 格式的数据,将课程信息插入到数据库中。/course/update
路由用于更新课程信息,根据传入的课程编号更新相应的字段。/course/delete/
路由用于删除课程,根据课程编号从数据库中删除记录。/course/query/
路由用于查询课程,根据课程编号从数据库中获取课程信息并以 JSON 格式返回。python
@app.route('/teacher/add', methods=['POST'])
def add_teacher():
data = request.get_json()
TeacherID = data['TeacherID']
TeacherName = data['TeacherName']
MaxTeachingLoad = data['MaxTeachingLoad']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('INSERT INTO Teacher (TeacherID, TeacherName, MaxTeachingLoad) VALUES (?,?,?)',
(TeacherID, TeacherName, MaxTeachingLoad))
conn.commit()
conn.close()
return jsonify({'message': '教师添加成功'})
@app.route('/teacher/update', methods=['PUT'])
def update_teacher():
data = request.get_json()
TeacherID = data['TeacherID']
TeacherName = data['TeacherName']
MaxTeachingLoad = data['MaxTeachingLoad']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('UPDATE Teacher SET TeacherName =?, MaxTeachingLoad =? WHERE TeacherID =?',
(TeacherName, MaxTeachingLoad, TeacherID))
conn.commit()
conn.close()
return jsonify({'message': '教师更新成功'})
@app.route('/teacher/delete/', methods=['DELETE'])
def delete_teacher(TeacherID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('DELETE FROM Teacher WHERE TeacherID =?', (TeacherID,))
conn.commit()
conn.close()
return jsonify({'message': '教师删除成功'})
@app.route('/teacher/query/', methods=['GET'])
def query_teacher(TeacherID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM Teacher WHERE TeacherID =?', (TeacherID,))
teacher = cursor.fetchone()
conn.close()
if teacher:
teacher_dict = dict(teacher)
return jsonify(teacher_dict)
else:
return jsonify({'message': '教师未找到'})
python
@app.route('/student/add', methods=['POST'])
def add_student():
data = request.get_json()
StudentID = data['StudentID']
StudentName = data['StudentName']
Major = data['Major']
Grade = data['Grade']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('INSERT INTO Student (StudentID, StudentName, Major, Grade) VALUES (?,?,?,?)',
(StudentID, StudentName, Major, Grade))
conn.commit()
conn.close()
return jsonify({'message': '学生添加成功'})
@app.route('/student/update', methods=['PUT'])
def update_student():
data = request.get_json()
StudentID = data['StudentID']
StudentName = data['StudentName']
Major = data['Major']
Grade = data['Grade']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('UPDATE Student SET StudentName =?, Major =?, Grade =? WHERE StudentID =?',
(StudentName, Major, Grade, StudentID))
conn.commit()
conn.close()
return jsonify({'message': '学生更新成功'})
@app.route('/student/delete/', methods=['DELETE'])
def delete_student(StudentID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('DELETE FROM Student WHERE StudentID =?', (StudentID,))
conn.commit()
conn.close()
return jsonify({'message': '学生删除成功'})
@app.route('/student/query/', methods=['GET'])
def query_student(StudentID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM Student WHERE StudentID =?', (StudentID,))
student = cursor.fetchone()
conn.close()
if student:
student_dict = dict(student)
return jsonify(student_dict)
else:
return jsonify({'message': '学生未找到'})
python
@app.route('/classroom/add', methods=['POST'])
def add_classroom():
data = request.get_json()
ClassroomID = data['ClassroomID']
Capacity = data['Capacity']
Equipment = data['Equipment']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('INSERT INTO Classroom (ClassroomID, Capacity, Equipment) VALUES (?,?,?)',
(ClassroomID, Capacity, Equipment))
conn.commit()
conn.close()
return jsonify({'message': '教室添加成功'})
@app.route('/classroom/update', methods=['PUT'])
def update_classroom():
data = request.get_json()
ClassroomID = data['ClassroomID']
Capacity = data['Capacity']
Equipment = data['Equipment']
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('UPDATE Classroom SET Capacity =?, Equipment =? WHERE ClassroomID =?',
(Capacity, Equipment, ClassroomID))
conn.commit()
conn.close()
return jsonify({'message': '教室更新成功'})
@app.route('/classroom/delete/', methods=['DELETE'])
def delete_classroom(ClassroomID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('DELETE FROM Classroom WHERE ClassroomID =?', (ClassroomID,))
conn.commit()
conn.close()
return jsonify({'message': '教室删除成功'})
@app.route('/classroom/query/', methods=['GET'])
def query_classroom(ClassroomID):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM Classroom WHERE ClassroomID =?', (ClassroomID,))
classroom = cursor.fetchone()
conn.close()
if classroom:
classroom_dict = dict(classroom)
return jsonify(classroom_dict)
else:
return jsonify({'message': '教室未找到'})
python
import random
def generate_schedule():
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT CourseID FROM Course')
course_ids = [row[0] for row in cursor.fetchall()]
cursor.execute('SELECT TeacherID FROM Teacher')
teacher_ids = [row[0] for row in cursor.fetchall()]
cursor.execute('SELECT ClassroomID FROM Classroom')
classroom_ids = [row[0] for row in cursor.fetchall()]
schedules = []
for course_id in course_ids:
teacher_id = random.choice(teacher_ids)
classroom_id = random.choice(classroom_ids)
class_time = '2025-09-01 08:00:00' # 这里简单固定一个时间,实际需要更复杂逻辑
schedule_id = f'sch_{len(schedules)+1}'
schedules.append((schedule_id, course_id, teacher_id, classroom_id, class_time))
for schedule in schedules:
cursor.execute('INSERT INTO CourseSchedule (ScheduleID, CourseID, TeacherID, ClassroomID, ClassTime) VALUES (?,?,?,?,?)',
schedule)
conn.commit()
conn.close()
return schedules
@app.route('/schedule/generate', methods=['GET'])
def generate_schedule_route():
schedules = generate_schedule()
return jsonify([dict(zip(['ScheduleID', 'CourseID', 'TeacherID', 'ClassroomID', 'ClassTime'], schedule)) for schedule in schedules])
generate_schedule
函数从数据库中获取课程、教师和教室的 ID 列表,然后随机组合生成排课结果,并将结果插入到排课表中。/schedule/generate
路由调用generate_schedule
函数生成排课结果,并以 JSON 格式返回。实际应用中,排课算法需要更复杂的逻辑来处理时间冲突等问题。python
@app.route('/schedule/query', methods=['GET'])
def query_schedule():
args = request.args
CourseID = args.get('CourseID')
TeacherID = args.get('TeacherID')
ClassroomID = args.get('ClassroomID')
conn = get_db_connection()
cursor = conn.cursor()
query = 'SELECT * FROM CourseSchedule'
conditions = []
values = []
if CourseID:
conditions.append('CourseID =?')
values.append(CourseID)
if TeacherID:
conditions.append('TeacherID =?')
values.append(TeacherID)
if ClassroomID:
conditions.append('ClassroomID =?')
values.append(ClassroomID)
if conditions:
query +='WHERE'+ " AND ".join(conditions)
cursor.execute(query, tuple(values))
schedules = cursor.fetchall()
conn.close()
result = [dict(schedule) for schedule in schedules]
return jsonify(result)
/schedule/query
路由接收GET
请求,通过request.args
获取查询参数,如CourseID
、TeacherID
、ClassroomID
等。conditions
和值列表values
来动态生成查询条件,避免 SQL 注入风险。本教务管理系统的排课教务系统模块设计涵盖了数据库设计、多个功能模块开发以及用户界面设计等方面。数据库设计为系统提供了数据存储的基础,通过合理设计数据表结构,保证了数据的完整性和一致性。
各个功能模块实现了课程、教师、学生、教室信息的管理以及排课和查询功能。在代码实现上,以 Python 和 Flask 框架为例,展示了如何通过路由和数据库操作来完成不同的业务逻辑。这些模块相互协作,共同满足了教务管理中排课及相关信息管理的需求。
用户界面设计部分则从用户体验角度出发,提供了直观、便捷的操作界面,方便教务管理人员、教师和学生使用系统。通过合理的布局和交互设计,提高了系统的易用性和工作效率。
然而,本设计在实际应用中还可以进一步优化和完善。例如,排课算法可以更加智能和复杂,充分考虑各种实际情况,如教师的特殊教学要求、学生的课程冲突等。同时,系统的安全性和性能方面也需要进一步加强,如用户权限管理、数据备份与恢复等功能的添加。通过不断地优化和改进,该排课教务系统模块能够更好地服务于学校的教务管理工作。