You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.4 KiB

from flask import Flask, jsonify, request
import mysql.connector
import random
app = Flask(__name__)
# 数据库连接配置
db_config = {
'host': 'localhost',
'user': 'root',
'password': '123456',
'database': 'stu'
}
# 获取学生名单
def get_students():
try:
connection = mysql.connector.connect(**db_config)
cursor = connection.cursor(dictionary=True)
cursor.execute("SELECT * FROM studentlist")
students = cursor.fetchall()
connection.close()
return students
except mysql.connector.Error as err:
print(f"Error: {err}")
return []
# 更新学生积分
def update_student_score(student_id, new_score):
try:
connection = mysql.connector.connect(**db_config)
cursor = connection.cursor()
cursor.execute("UPDATE studentlist SET 积分 = %s WHERE 学号 = %s", (new_score, student_id))
connection.commit()
print(f"Updated student_id {student_id} with new score {new_score}")
connection.close()
except mysql.connector.Error as err:
print(f"Error: {err}")
# 根据积分设置权重,积分越高,权重越低
def calculate_weights(students):
max_score = max([s['积分'] for s in students])
weights = [(max_score - s['积分'] + 1) for s in students]
return weights
# 随机点名,积分越高,权重越低
def pick_random_student(students):
weights = calculate_weights(students)
selected_student = random.choices(students, weights=weights, k=1)[0]
return selected_student
# 增加课堂出席积分
def add_attendance_score(student):
student['积分'] = student['积分'] + 1
update_student_score(student['学号'], student['积分'])
# 回答问题后的积分更新
def update_answer_score(student, repeated_correctly, answer_score):
if repeated_correctly:
student['积分'] = student['积分'] + 0.5
else:
student['积分'] = student['积分'] - 1
student['积分'] += answer_score
update_student_score(student['学号'], student['积分'])
# 获取随机点名学生
@app.route('/get_random_student', methods=['GET'])
def get_random_student():
students = get_students()
selected_student = pick_random_student(students)
return jsonify({'name': selected_student['姓名'], 'student_id': selected_student['学号']})
# 更新出席积分
@app.route('/update_attendance_score', methods=['POST'])
def handle_attendance_score():
data = request.json
print(f"Received data: {data}")
student_id = data['student_id']
students = get_students()
for student in students:
if student['学号'] == student_id:
add_attendance_score(student)
break
return jsonify({'message': 'Attendance score updated', 'student_id': student_id})
# 更新回答问题的积分
@app.route('/update_answer_score', methods=['POST'])
def handle_answer_score():
data = request.json
print(f"Received data: {data}")
student_id = data['student_id']
repeated_correctly = data['repeated_correctly']
answer_score = data['answer_score'] # 前端传来的回答得分0.5到3之间
students = get_students()
for student in students:
if student['学号'] == student_id:
update_answer_score(student, repeated_correctly, answer_score)
break
return jsonify({'message': 'Answer score updated', 'student_id': student_id})
if __name__ == '__main__':
app.run(debug=True)