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)