second commit

main
Lyanling 10 months ago
parent 5933adeb5b
commit 04a9e09679

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/homework3" vcs="Git" />
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -18,7 +18,7 @@ class Student(models.Model):
score = models.FloatField(default=0) # 积分允许为小数
attendance_count = models.IntegerField(default=0) # 到课次数
called_count = models.IntegerField(default=0) # 被点名次数
protected = models.BooleanField(default=False) # 是否有保护权
# protected = models.BooleanField(default=False) # 是否有保护权
def __str__(self):
return self.name

@ -1,3 +1,38 @@
<!--<!DOCTYPE html>-->
<!--<html lang="en">-->
<!--<head>-->
<!-- <meta charset="UTF-8">-->
<!-- <title>确认点名</title>-->
<!--</head>-->
<!--<body>-->
<!--<form method="post">-->
<!-- {% csrf_token %}-->
<!-- <h2>确认点名学生:</h2>-->
<!-- <p>姓名: {{ student.name }}</p>-->
<!-- <p>学号: {{ student.student_id }}</p>-->
<!-- <label for="attended">是否到达课堂:</label>-->
<!-- <input type="checkbox" name="attended" id="attended">-->
<!-- <label for="question_repeat">是否准确重复问题:</label>-->
<!-- <select name="question_repeat" id="question_repeat">-->
<!-- <option value="inaccurate">不准确</option>-->
<!-- <option value="accurate">准确</option>-->
<!-- </select>-->
<!-- <label for="answer_accuracy">回答问题准确性:</label>-->
<!-- <select name="answer_accuracy" id="answer_accuracy">-->
<!-- <option value="0">0分 - 未回答准确</option>-->
<!-- <option value="0.5">0.5分 - 回答部分正确</option>-->
<!-- <option value="1.5">1.5分 - 回答大部分正确</option>-->
<!-- <option value="3">3分 - 完全正确</option>-->
<!-- </select>-->
<!-- <button type="submit">确认并提交</button>-->
<!--</form>-->
<!--</body>-->
<!--</html>-->
<!DOCTYPE html>
<html lang="en">
<head>
@ -31,5 +66,10 @@
<button type="submit">确认并提交</button>
</form>
{% if protection_awarded %}
<p>该学生获得保护权自动加2分</p>
{% endif %}
</body>
</html>
</html>

@ -1,3 +1,22 @@
<!--<!DOCTYPE html>-->
<!--<html lang="en">-->
<!--<head>-->
<!-- <meta charset="UTF-8">-->
<!-- <title>随机点名</title>-->
<!--</head>-->
<!--<body>-->
<!--<form method="post">-->
<!-- {% csrf_token %}-->
<!-- <button type="submit" name="start_roll_call">开始点名</button>-->
<!--</form>-->
<!--{% if selected_student %}-->
<!-- <h2>被选中的学生:</h2>-->
<!-- <p>姓名: {{ selected_student.name }}</p>-->
<!-- <p>学号: {{ selected_student.student_id }}</p>-->
<!--{% endif %}-->
<!--</body>-->
<!--</html>-->
<!DOCTYPE html>
<html lang="en">
<head>
@ -14,6 +33,14 @@
<h2>被选中的学生:</h2>
<p>姓名: {{ selected_student.name }}</p>
<p>学号: {{ selected_student.student_id }}</p>
<p>当前积分: {{ selected_student.score }}</p>
<p>被点名次数: {{ selected_student.called_count }}</p>
<!-- 检查学生是否获得保护权 -->
{% if protection_awarded %}
<p style="color: green;">该学生已被点名 {{ selected_student.called_count }} 次获得保护权下次自动加2分。</p>
{% endif %}
{% endif %}
</body>
</html>
</html>

@ -76,33 +76,74 @@ def roll_call(request):
return render(request, 'roll_call.html', {'selected_student': selected_student}) # 渲染点名页面
# 确认点名的视图
# def confirm_roll_call(request):
# # 从 session 中获取被点名的学生
# student_id = request.session.get('selected_student_id')
# student = get_object_or_404(Student, student_id=student_id)
#
# if request.method == 'POST':
# # 学生是否到课
# if 'attended' in request.POST: # 如果选择了到课
# student.score += 1 # 到课加1分
# student.attendance_count += 1 # 到课次数加1
#
# # 处理是否准确重复问题
# if request.POST['question_repeat'] == 'accurate':
# student.score += 0.5 # 重复问题准确加0.5分
# else:
# student.score -= 1 # 重复问题不准确扣1分
#
# # 处理回答问题的准确性0-3分
# answer_accuracy = float(request.POST.get('answer_accuracy', 0))
# student.score += answer_accuracy # 根据回答准确性加分
# else:
# student.score -= 5 # 未到课扣5分
#
# student.save() # 保存更新后的学生信息
# return redirect('roll_call') # 返回点名页面,进行下一轮点名
#
# return render(request, 'confirm_roll_call.html', {'student': student}) # 渲染确认点名页面
def confirm_roll_call(request):
# 从 session 中获取被点名的学生
student_id = request.session.get('selected_student_id')
student = get_object_or_404(Student, student_id=student_id)
protection_awarded = False # 初始化保护权标志
if request.method == 'POST':
# 学生是否到课
if 'attended' in request.POST: # 如果选择了到课
student.score += 1 # 到课加1分
student.attendance_count += 1 # 到课次数加1
# 处理是否准确重复问题
if request.POST['question_repeat'] == 'accurate':
student.score += 0.5 # 重复问题准确加0.5分
else:
student.score -= 1 # 重复问题不准确扣1分
# 处理回答问题的准确性0-3分
answer_accuracy = float(request.POST.get('answer_accuracy', 0))
student.score += answer_accuracy # 根据回答准确性加分
# 增加学生的被点名次数
student.called_count += 1
# 检查学生是否有“保护权”
if student.called_count % 3 == 0:
# 如果被点名次数是3的倍数赋予保护权自动加2分
student.score += 2
protection_awarded = True # 设置保护权标志
print(f"Student {student.name} ({student.student_id})获得保护权自动加2分")
else:
student.score -= 5 # 未到课扣5分
# 学生是否到课
if 'attended' in request.POST: # 如果选择了到课
student.score += 1 # 到课加1分
student.attendance_count += 1 # 到课次数加1
# 处理是否准确重复问题
if request.POST['question_repeat'] == 'accurate':
student.score += 0.5 # 重复问题准确加0.5分
else:
student.score -= 1 # 重复问题不准确扣1分
# 处理回答问题的准确性0-3分
answer_accuracy = float(request.POST.get('answer_accuracy', 0))
student.score += answer_accuracy # 根据回答准确性加分
else:
student.score -= 5 # 未到课扣5分
student.save() # 保存更新后的学生信息
# 保存更新后的学生信息
student.save()
return redirect('roll_call') # 返回点名页面,进行下一轮点名
return render(request, 'confirm_roll_call.html', {'student': student}) # 渲染确认点名页面
return render(request, 'confirm_roll_call.html', {'student': student, 'protection_awarded': protection_awarded}) # 渲染确认点名页面
# 积分排行榜
def leaderboard(request):

Loading…
Cancel
Save