编写一个成绩管理系统(SPMS)。最多有100个学生,每个学生有如下属性。
- SID:学生编号,包含10位数字。
- CID:班级编号,为不超过20的正整数。
- 姓名:不超过10的字母和数字组成,第一个字符为大写字母。名字中不能有空白字符。
- 4门课程(语文、数学、英语、编程)成绩,均为不超过100的非负整数。
进入SPMS后,应显示主菜单:
Welcome to Student Performance Management System (SPMS).
1 - Add
2 - Remove
3 - Query
4 - Show ranking
5 - Show Statistics
0 - Exit
1. 选择1之后,会出现添加学生记录的提示信息:
Please enter the SID, CID, name and four scores. Enter 0 to finish.
然后等待输入。本题保证输入总是合法的(不会有非法的SID、CID,并且恰好有4个分数等),但可能会输入重复SID。在这种情况下,需要输出一行提示:
不过名字是可以重复的。你的程序应当不停地打印前述提示信息,直到用户输入单个0。然后应当再次打印主菜单。
2. 选择2之后,会出现如下提示信息:
Please enter SID or name. Enter 0 to finish.
然后等待输入,在数据库中删除能匹配上述SID或者名字的所有学生,并且打印如下信息(xx可以等于0):
你的程序应当不停地打印前述提示信息,直到用户输入单个0,然后再次打印主菜单。
3. 选择3之后,会出现如下提示信息:
Please enter SID or name. Enter 0 to finish.
然后等待输入。如果数据库中没有能匹配上述SID或者名字的学生,什么都不要做;否则输出所有满足条件的学生,按照进入数据库的顺序排列。
输出格式和添加的格式相同,但增加3列:年级排名(第一列)、总分和平均分(最后两列)。
所有班级中总分最高的学生获得第1名,如果有两个学生并列第2名,则下一个学生的排名为4(而非3)。
你的程序应当不停地打印前述提示信息,直到用户输入单个0。然后应当再次打印主菜单。
4. 选择4之后,会出现如下提示信息:
Showing the ranklist hurts students' self-esteem. Don't do that.
然后自动返回主菜单。
5. 选择5之后,会出现如下提示信息:
Chinese
Average Score: xx.xx
Number of passed students: xx
Number of failed students: xx
…(为了节约篇幅,此处省略了Mathematics、English和Programming的统计信息)
Overall:
Number of students who passed all subjects: xx
Number of students who passed 3 or more subjects: xx
Number of students who passed 2 or more subjects: xx
Number of students who passed 1 or more subjects: xx
Number of students who failed all subjects: xx
然后自动回到主菜单。
6. 选择0之后,程序终止。
注意,单科成绩和总分都应格式化为整数,但平均分应恰好保留两位小数。