# 第8章：个人 M2 活动管理基础版；本章还不定义函数。
# 教学虚构数据；学号是字符串，同名不等于同一人。
members = {
    "20260001": "陈晨",
    "20260002": "陈晨",
    "20260003": "王宁",
    "20260004": "李悦",
}
activity = {"code": "EV-0021", "name": "Python体验营", "capacity": 2}
registrations = set()
checkins = set()

while True:
    print("\n1 查询活动 | 2 报名 | 3 取消 | 4 签到 | 5 统计 | 0 退出")
    choice = input("请选择：").strip()
    if choice == "0":
        print("已退出，以下是最终汇总")
        break
    elif choice == "1":
        for key, value in activity.items():
            print(f"{key}：{value}")
        print(f"剩余名额：{activity['capacity'] - len(registrations)}")
    elif choice == "2":
        student_id = input("报名学号：").strip()
        if student_id not in members:
            print("报名失败：学号不存在")
        elif student_id in registrations:
            print("报名失败：请勿重复报名")
        elif len(registrations) >= activity["capacity"]:
            print("报名失败：名额已满")
        else:
            registrations.add(student_id)
            print(f"报名成功：{student_id} {members[student_id]}")
    elif choice == "3":
        student_id = input("取消学号：").strip()
        if student_id not in members:
            print("取消失败：学号不存在")
        elif student_id not in registrations:
            print("取消失败：尚未报名")
        else:
            registrations.discard(student_id)
            checkins.discard(student_id)
            print(f"取消成功：{student_id}，签到同步撤销")
    elif choice == "4":
        student_id = input("签到学号：").strip()
        if student_id not in members:
            print("签到失败：学号不存在")
        elif student_id not in registrations:
            print("签到失败：请先报名")
        elif student_id in checkins:
            print("签到失败：请勿重复签到")
        else:
            checkins.add(student_id)
            print(f"签到成功：{student_id} {members[student_id]}")
    elif choice == "5":
        print(f"报名人数：{len(registrations)}")
        print(f"签到人数：{len(checkins)}")
        print(f"剩余名额：{activity['capacity'] - len(registrations)}")
        print(f"报名学号：{sorted(registrations)}")
        print(f"签到学号：{sorted(checkins)}")
    else:
        print("菜单无效，请输入0～5")

print(f"报名人数：{len(registrations)}")
print(f"签到人数：{len(checkins)}")
print(f"剩余名额：{activity['capacity'] - len(registrations)}")
print(f"报名学号：{sorted(registrations)}")
print(f"签到学号：{sorted(checkins)}")
