实际干活的时候,发现系统一启动装好,最大的难题就是界面忒丑。 登录页面那个默认的背景图,到处都有点不清楚,那就是典型的渲染难题。我先把 CSS 的透明度设了 0.1,再用 Canvas 画了个好办的网,别看挺现代,但加载工夫还是有点长。

要是真让老师进系统,起初得让他知道如何登录。 登录页面设计得挺简洁,头像和名字放在最上面,密码框设成了磨砂效果,这样输入的时候不会忒刺眼。测试的时候发现,要是浏览器是旧版的,那个磨砂效果就失效了,直接变得黑白分明,这肯定不能用。 接着是成绩录入这块。老师平时最头疼的就是填表。系统里有个字段叫“科目”,下拉列表里学生姓名那一栏,本来想做成按拼音查的,结局输入拼音不对,系统就一直提示“找不到”,根本没法选。最终我就硬把字段名改成英文,连起来试,总算能选上,但赶明儿老师想填汉字就费事了。 再说查询功能。学生一学期开了七八次课,每次都要录入一个科目分,数据量大了,查询页面就卡得慌。

特别是搜索成绩的时候,要是 filtering 参数没写对,浏览器就会一直转圈,直到用户手动刷新一下。 界面底部有个操作按钮,我一启动认定用个绿色的“提交”最好,结局改成蓝色,颜色对比度不够,仿佛是灰色的背景配上了蓝色文字,看着有点浊。 数据结构方面,学生表挺好办,学号、姓名、班级这些字段。成绩表略微复杂点,除了学生学号和科目,还加了一个“分数”字段。 有个细节是算分时。

要是学生选了“数学”这道题,系统自动求和,但遇到那种带括号的式子,比如 (3+2) 或 322,直接求和就变成 10 了,彻底不对。

后来我查了文档,发现要是是数组里的元素,才适用那个逻辑。 还有那个“删除”功能。老师想删掉一个错的分数,直接点按钮,系统会提示“确认删除吗?"。我用了个弹窗,背景灰一下,选“取消”要么“确定”,但确认之后,后台的数据还没变呢。 前端和后端要分开写,这点挺关键。 后端用的是 Java 写的 Spring Boot,架构挺标准的,有 Controller、Service、DAO 这三个层。 数据库是 MySQL,用了 InnoDB 引擎,赞成事务。 前端用的是 React,组件化做得凑合,像个台阶,一级一级往上爬。 接口设计的时候,发现响应工夫忒慢。 调用 /api/v1/classroom/student 接口,响应工夫有一秒多。我加了个 50ms 的缓存 Key,把结局都存到 Redis 里,下次查直接拿,效率立马就上去了。 还有那个统计报表,每次生成都要跑个 SQL 查询,慢得像蜗牛。 后来我写了个好办的 Java 代码,把数据查一遍做聚合,生成 JSON 字符串,直接推送到前端渲染。生成工夫从 5 秒掉到 300 毫秒,差不多是十倍的提升。 需求分析阶段,我列了几个务必得有的功能点: 1.学生信息录入。 2.成绩录入管理。 3.成绩查询功能。 4.成绩管理功能。 5.数据导出功能。 6.统计报表功能。 在需求分析时,我发现大量老师对“成绩”的定义不忒清楚。有的老师认定,一道题得了 80 分就是好成绩;有的老师认定,一道题得 90 分才算好成绩

故此我在系统里做了一个“评价标准”的选项,老师能够自定义。 比如,有人选“及格”,分数低于 60 分就算不及格。

有人选“出色”,分数高于 90 分就算出色。 还有一个难题,就是多科目处理。一个学生一门课有三次测验,系统得能自动把这三次成绩加起来。我写了一个好办的算法,把科目、日期、分数存起来,最终算总分。 测试阶段,发现有个漏洞。 要是老师录入的成绩是 85 分,系统显示为 85。但后来又录入了一次,分数变成了 86。系统不应当直接覆盖之前的数据,而应当提示“已存有,是否覆盖?”。 我加了一个确认弹窗,选覆盖,后台就更新。

要是不选,就保留旧数据。 另外,导出功能有个坑。 导出 Excel 的时候,要是数据量特别大,比如几千条,Excel 软件会卡死。 我用了 Apache POI 库,写了个循环,每导出 1000 条,暂停 0.5 秒,然后持续。别看有点影响体验,但起码不会把页面打烂。 在写代码的时候,我遇到了一堆注释。 比如 class Student { private String id; private String name; private Date birthDate; // 这个字段是必填的,不能为空 @NotBlank(message = "学号不能为空") private String id; } 注释分了三级,一级是类下面,二级是方式下面,三级是字段下面。

这样意思是清楚的。 最终,系统上线后,有个小插曲。 那天下午,有几位老师急着要赶课表。 我让数据接口直接回格式化好的 JSON。前端解析出来,自动按工夫排序,然后生成了表格。老师看的时候,愣住了地发现,原来系统里乱糟糟的原始数据,整理得井井有条。 系统就是这样,从一启动的满嘴理论,到目前能真正帮老师干活。 别看路上也有坑,比如那个学生名字带中文和英文混用的难题,就连还有一些接口超时的时候,界面会白屏一下。 但总的来说,感觉还是挺靠谱的。 数据方面,学生表目前 5000 行左右。 课程表表,每节课都有学号、科目、日期、工夫等字段。 还有一个“教师信息表”,关联着教务处的老师信息。 这个系统不是完美无缺的,比如导出功能间或还是会有一些格式毛病,出现乱码。 但这些都能够在后续迭代里优化。 目前,老师每天能花 15 分钟填个表,系统也没崩溃。 数据录入撇脱,查询结局准。 别看比理想状态差那么一点点,但起码能维持运转。 这就是一个真场景下的系统,没有那么多虚头巴脑的功能,就是能帮人干活。 有时候,好办点挺好。 比如用户登录,不用填密码。 比如查询成绩,不用查数据库,直接查缓存。 这种“够用就好”的设计,在实际工作中往往比追求“完美”更能解决难题。 自然,也不是说所有功能都如此干。 比如导出功能,别看有时候慢,但务必得有个本事,万一需求呢。 再比如,要是有老师认定某个科目分忒高,想调低,系统得赞成。 别看这个功能还没写进去,但在设计阶段就得寻思进去。 毕竟,系统是为人服务的,不是人服务系统的。 要是老师认定登录界面不舒服,那是系统没做好。 要是老师录入数据认定费事,那是界面没做好。 要是老师查成绩发现数据不对,那是逻辑没写好。 要是老师导出报表认定乱,那是数据没整理好。 故此,在设计的时候,一定要多站在用户的角度想想。 别看我们在技术上是专家,要在代码上精益求精,但在应用上,还是得寻思实际如何用。 比如,要是用户是小白,界面能不能再好办点? 要是用户是专家,界面能不能再智能点? 这个平衡点,实际上也没那么难找。 只要明确需求,合理分配资源,就能做出一个好用的系统。 至于性能优化,那是锦上添花,不是雪中送炭。 能先让系统跑起来,比啥都关键。 runtime 工夫嘛,反正目前 CPU 挺强的,不至于卡死。 只是间或还会遇到那个“找不到”的学生,要么那个“超时的查询”,这种小毛病,间或出现一下,也没啥大不了的。 总而言之,这个系统,算是个及格线以上的产品。 功能齐套,数据能存,接口通畅,重心在业务上,而不是堆砌技术名词上。 毕竟,技术是为业务服务的,别把业务弄丢了,技术再牛也是帮倒忙的。 希望各位同学能看懂,也能用起来。 要是还有啥难题,欢迎随时提。 比如界面忒难看,要么功能忒复杂。 都能够聊聊。 咱们一起把这个系统做得更棒。