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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)