一、题目说明
本项目要求基于 Swift 5.0+ 开发一个带交互式菜单的学生成绩管理系统,综合运用 Swift 基础核心知识点(元组、可选型、运算符、字符串、循环、分支、函数等),通过控制台菜单交互实现学生信息的结构化存储、多维度查询、成绩统计、评优资格校验等功能,考察对 Swift 基础语法的综合应用能力与交互式程序开发思维。
分组要求:每组3-4人
二、核心要求 - 数据结构定义(基础层)
- 必选属性:姓名(String)、学号(String,唯一标识)、年龄(Int)、语文成绩(Int)、数学成绩(Int)、英语成绩(Int)
- 可选型属性:是否缺考(Bool?)、评优备注(String?)
typealias StudentInfo = (
name: String, // 姓名
studentID: String, // 学号(唯一)
age: Int, // 年龄
chinese: Int, // 语文成绩
math: Int, // 数学成绩
english: Int, // 英语成绩
isAbsent: Bool?, // 是否缺考(可选型)
awardRemark: String? // 评优备注(可选型)
)
场景1:全科目及格、平均分≥80(有评优资格)
let student1: StudentInfo = ("张三", "2023001", 18, 92, 88, 90, false, "成绩优异")
场景2:有科目不及格(无评优资格)
let student2: StudentInfo = ("李四", "2023002", 17, 85, 58, 78, false, "数学需补考")
场景3:存在缺考(无评优资格)
let student3: StudentInfo = ("王五", "2023003", 18, 0, 95, 89, true, "语文缺考")
场景4:可选属性全为 nil(无评优资格)
let student4: StudentInfo = ("赵六", "2022004", 19, 75, 79, 82, nil, nil)
二、核心要求 - 核心功能实现(功能层)
- 遍历学生数组,格式化打印每个学生的信息卡片
- 可选属性 nil 替换为「无」,平均分保留 1 位小数
- 排版清晰(用分隔符区分不同学生)
- 接收用户输入的学号,遍历数组匹配对应学生
- 找到:打印完整信息卡片;未找到:提示「未查询到学号为 XXX 的学生」
- 接收用户输入的科目名称(「语文」/「数学」/「英语」),校验输入合法性
- 统计该科目的:最高分、最低分、平均分(保留 1 位小数)、及格人数(≥60 分)
评优条件
- 无缺考(可选属性 nil 视为无缺考)
- 平均分 ≥80
- 所有科目 ≥60
- 筛选出符合条件的学生,打印姓名、学号、平均分
- 无符合条件学生 → 提示「暂无有评优资格的学生」
- 接收用户输入的科目名称,筛选该科目成绩 ≥90 分的学生
- 打印筛选结果(姓名、学号、该科成绩)
- 无符合条件学生 → 提示「暂无该科目≥90分的学生」
系统总学生数
三科平均分(语文/数学/英语)
缺考学生数
有评优资格的学生数
二、核心要求 - 代码规范要求
函数拆分
每个菜单功能对应独立函数
注释要求
- 函数添加文档注释
- 关键代码行添加单行注释
鲁棒性要求
- 成绩合法性校验
- 可选型安全处理
- 输入异常友好提示
关键注意点
- 避免可选型强制拆包(!),优先使用可选绑定/ nil 聚合运算符(??)
- 成绩范围校验(0-100 分),非法成绩需标注并提示
- 用户输入非预期值时,程序不崩溃,给出友好提示
三、评分标准(总分 100 分)
| 考核维度 | 分值 | 考核要点 |
|---|---|---|
| 数据结构定义 | 10 | 元组类型定义正确,学生实例覆盖指定场景,数组存储合理 |
| 交互式菜单 | 10 | 菜单循环显示正常,输入校验完整,返回菜单逻辑合理 |
| 核心功能实现 | 30 | 逻辑准确、结果正确 |
| 代码规范与鲁棒性 | 5 | 函数拆分合理、注释完整、可选型/输入处理安全 |
| 输出格式化 | 5 | 排版清晰,数值格式化正确,提示语友好 |
| 文档编写与提交 | 40 | 排版整齐,界面美观,分工明确,按时提交(电子版未上传此项为0)注意:电子版只保留个人信息并附上完整代码,纸质版封皮要有所有成员信息,最后不附代码,纸质版学委收齐后交至谷园417办公室。 |
四、输出示例(参考)
1. 菜单显示示例
==================== 学生成绩管理系统 ====================
请选择操作(输入数字序号):
1. 查询所有学生完整信息
2. 按学号查询单个学生信息
3. 统计指定科目成绩(语文/数学/英语)
4. 筛选有评优资格的学生
5. 筛选单科成绩≥90分的学生
6. 查看系统数据汇总(总人数、平均分等)
0. 退出系统
=========================================================
请输入:1
2. 功能1 输出示例
==================== 所有学生信息 ====================
【学生 1】
姓名:张三
学号:2023001(入学年份:2023)
年龄:18岁
语文:92分(优秀) | 数学:88分(普通) | 英语:90分(优秀)
总分:270分 | 平均分:90.0分(及格)
是否缺考:否 | 评优备注:成绩优异
评优资格:√ 有评优资格
-----------------------------------------------------
【学生 2】
姓名:李四(姓氏:李,长度:2字)
学号:2023002(入学年份:2023)
年龄:17岁
语文:85分(普通) | 数学:58分(不及格) | 英语:78分(普通)
总分:221分 | 平均分:73.7分(及格)
是否缺考:否 | 评优备注:数学需补考
评优资格:× 无评优资格
...
按回车键返回主菜单...
五、交互演示
==================== 学生成绩管理系统 ====================
请选择操作(输入数字序号):
1. 查询所有学生完整信息
2. 按学号查询单个学生信息
3. 统计指定科目成绩(语文/数学/英语)
4. 筛选有评优资格的学生
5. 筛选单科成绩≥90分的学生
6. 查看系统数据汇总(总人数、平均分等)
0. 退出系统
=========================================================
等待输入...