我最近在折腾一个学生成绩管理系统,说实话一开始真没把这东西想得多复杂,无非就是记个名字、存个分数。可敲了几行代码发现,里面最基础也最要紧的,是那个学生类怎么定义。类设计得顺不顺,直接决定后面写排序、查成绩、改分数的时候,是行云流水还是到处打补丁。
先说姓名,这个最简单。一个字符串就行,谁的名字都丢进去,中文、英文、带个空格都没问题。但有一点得注意,别用单个字符那种类型去存,有些系统偷懒用char,结果名字一长就崩,真实项目里见过这种坑。姓名该是完整的字符串,不用管多长,哪怕是个复姓加生僻字,字符串都扛得住。
然后是学号。这个字段看着容易,实际上有不少讲究。学号应该用字符串而不是数字,别被“号”这个字骗了。为什么?学号不是拿来算加减法的,它有可能有好几千那么长的数字,也可能带个前缀字母,甚至有些学校用上了二维码格式的编号,存成数字类型容易溢出或者开头丢零,到时候补都补不回来。用字符串存学号,稳得很。具体项目里,常见学号像是“2024030122”这样的,一位也不能丢。
性别这个字段,也属于那种看着简单、细想麻烦的类型。用整型存,例如1表示男,0表示女,倒也没毛病,但代码读到的时候得去查注释才知道什么意思。干脆直接存一个字符,比如“男”、“女”,可读性更好,打印出来也方便。还有人考虑要不要为了国际化搞个什么性别代号,对成绩管理系统来说真没必要,这不是户口系统,不用整那些花活。
类里面当然不能只有这几个字段。既然叫成绩管理系统,总得装点成绩相关的数据,平均分、各科成绩、绩点这些肯定得有。我建议用一个数值数组或者列表来存各科分数,这样以后排序、统计比较方便。也有同学为了图省事存三个独立的整数,语文、数学、英语各一个变量,看起来直观,可要是想扩展到十门课,那代码改起来可得哭,所以我宁可用一个集合字段把成绩放一起,逻辑也好写,遍历起来也简单。

说完了字段,再说方法。学生类不该只是个装数据的容器,得带些行为,哪怕就一个简简单单计算平均分的函数也好。比如有个方法负责返回学生的所选科目平均分,另一个方法处理更新某科成绩,还有一个负责判断是否及格,都可以塞在这个类里。这样主程序那边调用起来特别清爽,也不用到处去计算,哪里需要一把抓过来用就行。实际写的时候,我还会再加个方法返回完整信息,方便直接打印出来看。
还有一点,学生类设计时最好留个可扩展的口子。比如有些系统后面要加班级、加电话、加邮箱,甚至还要存个生活照路径,这些迟早都会遇到。如果一开始就把字段写死成十几个属性全堆上去,后期维护真的闹心。不如在类设计时留一个map之类的结构,把扩展信息扔进去,程序跑起来以后想加什么属性,直接往里塞,不用改类定义。我做过一个系统,最开始也是只有姓名学号性别,后来老师突然说要加一个“是否住宿”的标记,幸亏当初留了这种灵活的扩展方式,不然得动前端后端一堆代码。
另外有个小细节可能没人提,但真做起来很要紧——类里一定要有查看或修改单个字段的简单方法,别把所有字段全设为公开。全公开的后果就是,哪里都能改,哪天手一滑把性别改成“不知道”了,查都查不着。你用一些专门的方法去操作字段,至少可以在入口做点数据校验,比如性别只能填“男”或“女”,学号不能为空,分数范围在0到100之间,这些规则集中放着,不容易乱。
写到这里,你可能会觉得一个学生类嘛,不过如此。但真到用起来,比如要把一个班三十个人按平均分排个序,或者把不及格的学生全筛出来,这些动作全都依赖学生类定义得好不好。排序的时候,你得知道拿哪个字段出来比,比较规则写在哪,是写在外部还是写在类内部的比较方法里,这些都是设计时的选择。我的习惯是把比较逻辑写在类外面,避免类本身背上太多业务逻辑,毕竟一个学生类职责应该单纯一些,就负责描述一个学生长什么样,至于排序、统计那些主程序的责任,不该甩到学生头上。
另外,类做出来后,实例化的时候也别太死板。有的构造函数要求你一次性把所有参数传全,可实际建对象时学号可能还没有生成,姓名性别倒是先拿到了。这时候把构造做成可以分步设置的形式,先建一个空壳学生,再慢慢把各个属性填进去,用起来会灵活得多,代码写起来也更自然。
还有一道坑,是内存里的对比问题。两个学生类对象怎么算相等?很多人默认用地址比较,结果明明同一个学生,因为从不同表里读出来,就是比不出“是同一人”,最后成绩更新出错。解决办法是重写equals和哈希方法,用学号作为唯一标识去判断。这个细节在写类的时候就要想好,不能等出bug了再来补。
最后分享一下我目前比较满意的学生类布局,其实也不复杂,基础属性就四个:姓名是字符串,学号是字符串,性别是字符,各科成绩放在列表里。加上几个增强用的方法,再一个便捷的构造器,尾部预留可扩展的属性字典。这个结构跑起来,从录入成绩到期末排名,再到打印通知单,全部顺畅,维护起来也省心。就算以后学校突然想加个“班级序号”或者“入学年份”,改动都很小。
这个成绩管理系统虽然看着小,但学生类写得好不好,真的会影响整个项目的心情。一开始做得随意,后面全是磕磕绊绊;一开始多花点心思把理清,后面就是享受通勤公路的爽感。希望你也能写出一个自己满意的学生类来。