1. 立项背景和目标
每次期中考试期末考试后,老师都会发成绩单,但是要自己算总分和排名真的太麻烦了!我作为初二学生,每次算全班成绩排名都要算好久,还容易算错。所以就想用刚学的Python写一个小工具,帮我自动算成绩、排排名,还能保存下来,这样就不用每次都手动算了。目标就是做一个简单好用、不用安装复杂软件的命令行小工具,同学也能一起用。
2. 软件功能、核心功能模块的介绍
这个工具主要有5个功能:
- 添加学生成绩:可以输入学生姓名、语文、数学、英语三科成绩,程序自动算总分
- 查询学生成绩:输入名字就能查到某个人的所有成绩和排名
- 修改学生成绩:输错了可以改,不用重新输入
- 删除学生成绩:有人转走了可以删掉
- 显示排名表:自动按总分从高到低排序,显示全班的排名、总分、平均分
还有一个很重要的功能就是自动保存,退出程序再打开,之前输的成绩都还在,不会丢!
3. 业务流程、功能路径描述
运行程序后,首先会显示一个主菜单,有5个选项:1添加、2查询、3修改、4删除、5退出。输入数字就能选功能。比如选1添加,就会提示你输入姓名,然后依次输入语文数学英语分数,输完自动算总分告诉你。选5退出的时候,程序会自动把所有成绩保存到一个txt文件里,下次打开自动读取。整个操作都是在黑框框里输入数字和文字就行,不用点鼠标,特别简单。
1. 整体架构和设计思路,不同模块使用的技术栈
整个程序就是一个Python文件,不到200行代码,用的都是Python最基础的东西,没有用任何复杂框架。主要分成几个部分:
- 数据存储:用列表存字典,每个字典存一个学生的所有信息
- 文件读写:用Python的open函数,退出时save,启动时load
- 菜单循环:用while True做无限循环,直到选5退出
- 排序功能:用sorted函数,key参数指定按总分排序
每个功能都是一个函数,比如add_student()、show_rank()这样,主程序调用这些函数就行。
2. "我"的负责模块和结果(尽可能量化)
整个程序都是我一个人写的,从想法到写完调试好用了3天时间。
- 第一天:写了菜单和添加功能,能输入成绩显示总分
- 第二天:加了查询、修改、删除,还有排序排名
- 第三天:搞定了文件保存和读取,解决了各种bug
最后统计了一下,一共写了187行代码,实现了5个主要功能。现在我们班有5个同学在用这个工具算成绩,都说比手动算快多了,而且不会算错。
3. "我"遇到的难点、坑,和解决方案
写的时候遇到好几个问题,都是查资料问老师才解决的:
第一个坑:排序不会写。一开始不知道怎么按总分排序,查了好久才知道sorted函数可以用key=lambda x:x['total'],试了好多次才成功。
第二个坑:文件保存路径不对。一开始保存的文件找不到,后来才知道要写绝对路径,或者和py文件放同一个文件夹里。
第三个坑:输入非数字会崩溃。如果输成绩的时候不小心输了字母,程序就直接报错退出了。后来加了try-except异常处理,输错了会提示重新输入,不会崩溃。
最大的收获就是:编程不是一下子就能写对的,要慢慢调试,遇到问题不要怕,查资料总能解决的。