用Python编写成绩管理分析系统(故事升级版)

目录

项目总览

生活小故事引入

项目思路

项目实现

功能改善

代码展示

效果演示

项目后期

项目适用

每文一语


项目总览

生活小故事引入

微风和煦,散乱在办公桌上的测验小试卷还有几分“热度”,在小学助教的小王老师刚刚批改完昨天的语文单元测评,显得有些疲惫,但脸上却是慢慢的欣慰。看来通过最近的监督学习模型的转化和实践,他们的成绩有大幅度的提升,正准备把这个学习方法分享给其他在办公室的老师,上课铃响起了。像往常一样,教室外面陆陆续续的孩子,钻进了教室,清脆的“老师好!”成了这一时刻的主题曲,虽然只有短短的几秒钟,但却让每一位老师很“享受”,感觉就是一种动力加速着每一位老师的转化率。

本想休息一下的小王老师,想了想下下节课就是他的课了,得赶紧把成绩登记了待会给大家公布一下,顺便分析一下成绩。像往常一样正要新建一个Excel表格的时候,电脑桌面突然弹出一个广告页面“学习Python升职加薪.....”,心里正嘀咕着:“现在电脑的自动拦截功能也不好使了”,正准备关掉的时候,小王老师发现前几天不是在自学Python吗,感觉掌握了基础语法用处也不大呀。可不可以用Python写一个成绩录入加分析智能的小程序,这样就不用每次还要打开Excel,点各种排序,各种函数来分析了,平日里喜欢创新的它,正在想要不要实现一下。

 

这时窗外突然传来几声:“加油”!他探头欲望,原来是正在上体育课的小二班在组织跑步比赛,本来有点犹豫的他现在似乎被这几声突如其来的鼓励所打动,不说了还有35分钟,不试一试怎么知道可不可以呢?于是他自信满满的打开了之前安装好的pycharm......

 

项目思路

经过一番构思后,他把需要实现的功能打在编辑器屏幕上,接下来就是开始搭建框架了,封装函数了,首先引入了两个库


  
  
  1. import numpy as np
  2. import csv

 

项目实现

这个时候,小王老师开始码代码了,说是迟那时快,思路来了就是无法阻挡,花了15分钟就写好了框架代码,结果试了几次感觉不够智能,因为写的记录只保存在电脑的内存里面,并没有写入磁盘,那岂不是每一次运行之后关闭就没了,他想了一下如果要是录入不完那岂不是下次又要从头再来。他想了想那不行,必须要写入文件,这样下次运行就可以直接按照上一次还没录入完毕的开始,花了几分钟改善了这个。

 

功能改善

测试成功之后,他发现自己可以根据自己需要来选择场景按钮,如果是想要重新录入就直接清空之前的,如果不想要清空这个就追加在文件后面,代码构造如下:


  
  
  1. def write_record_0():
  2. import csv
  3. a = []
  4. dict = records[ 0]
  5. for headers in sorted(dict.keys()): # 把字典的键取出来
  6. a.append(headers)
  7. header = a # 把列名给提取出来,用列表形式呈现
  8. with open( '成绩数据.csv', 'w', newline= '', encoding= 'utf-8') as f:
  9. writer = csv.DictWriter(f, fieldnames=header) # 提前预览列名,当下面代码写入数据时,会将其一一对应。
  10. writer.writeheader() # 写入列名
  11. writer.writerows(records) # 写入数据

  
  
  1. def write_record_1():
  2. import csv
  3. with open( '成绩数据.csv', 'w', newline= '', encoding= 'utf-8') as f:
  4. for i in records:
  5. data = []
  6. data.append(i[ 'name'])
  7. data.append(i[ 'score'])
  8. wf = csv.writer(f)
  9. wf.writerow(data) # 写入一行数据

一个是追加一个为覆盖,这里没有送到a属性,只是用自己的方法思路设计的一个,还是可以的,如果用a这个属性,测试过程中后面有一个小功能好像无法尽善尽美

但是小王老师又发现一个问题,如果自己在录入的过程中过于激动,点快了按钮它总是报错,这样岂不是就成为了bug了吗,那不行如果要推广给其他老师,到时候他们会吐槽我的,他又开始改了一些代码,发现现在可以避免bug出现了,目前优化之后好像还没发现什么bug

 

 

 

 

利用Python的异常处理和循环判断控制,达到了使用者的最大便利

 

代码展示

功能打印函数


  
  
  1. def print_menu():
  2. print( """
  3. \t学生成绩管理系统-智能录入+分析系统
  4. 0 - 退出
  5. 1 - 打印功能菜单栏
  6. 2 - 显示所有学生信息
  7. 3 - 添加学生信息
  8. 4 - 查找学生信息
  9. 5 - 删除学生信息
  10. 6 - 排序功能
  11. 7 - 写入此次操作数据并完成更新
  12. 8 - 数据分析展示功能(最高分,最低分,平均分,及格人数,及格率,分数段详情)
  13. """)

文件加载函数


  
  
  1. def csv_students():
  2. global student_infos
  3. global records
  4. import csv
  5. student_infos = []
  6. with open( r"成绩数据.csv", encoding= 'utf-8-sig') as file: # 将你的CSV文件和该程序文件放在一个文件夹下面
  7. f_csv = csv.reader(file) # 读取文件里面的每一行数据,转换为列表赋值给新的变量
  8. header = next(f_csv) # 利用迭代的方法,直接取出表头行(标题行),更新f_csv的数据,去除了标题行
  9. for row in f_csv:
  10. student_info = {}
  11. for index in range( 2):
  12. if index == 0:
  13. student_info[header[index]] = row[index]
  14. if index == 1:
  15. student_info[header[index]] = float(row[index])
  16. # print(type(student_info[header[index]]))
  17. student_infos.append(student_info)
  18. records = student_infos

功能按钮函数


  
  
  1. def user_choice():
  2. try:
  3. choice = input( "请选择(0~8):")
  4. # 确保用户的选择是在0~8
  5. while int(choice) > 8 or int(choice) < 0:
  6. choice = input( "请重新选择(0~8):")
  7. return choice
  8. except:
  9. print( "你的输入有错,程序已终结!请慢一点输入哟!")

增删改查函数


  
  
  1. def add_record():
  2. name = input( '请输入学生的名字:')
  3. while name == '':
  4. name = input( '请输入学生的名字:')
  5. # 确定学生信息是否已经录入
  6. for info in records:
  7. if info[ 'name'] == name:
  8. print( "该学生已经存在")
  9. break
  10. else:
  11. score = float(input( '请输入成绩(0~100):'))
  12. while score < 0.0 or score > 100.0:
  13. score = float(input( '请输入成绩(0~100):'))
  14. info = {
  15. 'name': name,
  16. 'score': score
  17. }
  18. records.append(info)
  19. print(records)
  20. def display_records():
  21. print( "\t所有学生信息")
  22. for info in records:
  23. print( "姓名:", info[ 'name'], '\t成绩:', info[ 'score'])
  24. def search_record():
  25. name = input( '请输入学生的名字:')
  26. while name == '':
  27. name = input( '请输入学生的名字:')
  28. for info in records:
  29. if info[ 'name'] == name:
  30. print( "该学生成绩为:", info[ 'score'])
  31. break
  32. else:
  33. print( "没有该学生")
  34. def del_record():
  35. name = input( '请输入学生的名字:')
  36. while name == '':
  37. name = input( '请输入学生的名字:')
  38. for info in records:
  39. if info[ 'name'] == name:
  40. records.remove(info)
  41. print( "已删除!")
  42. break
  43. else:
  44. print( "没有该用户")

数据分析函数


  
  
  1. def dis_data():
  2. pjj = []
  3. for pj in records:
  4. pjj.append(float((pj[ 'score'])))
  5. print( "\t本次成绩数据的平均分是:{}".format(round(np.mean(pjj)), 3))
  6. bjg = int(sum(i < 60 for i in pjj))
  7. print( "\t本次数据不及格的有{}人!".format(bjg))
  8. zs = int(len(pjj))
  9. print( "\t本次数据的及格率为{}".format((zs - bjg) / zs))
  10. print( "\t大于90分的有{}人\t等级为优秀!".format(sum(i > 90 for i in pjj)))
  11. print( "\t80-90分的有{}人\t等级为良好!".format(sum( 90 >= i > 80 for i in pjj)))
  12. print( "\t70-80分的有{}人\t等级为中等!".format(sum( 80 >= i > 70 for i in pjj)))
  13. print( "\t60-70分的有{}人\t等级为合格!".format(sum( 70 >= i > 60 for i in pjj)))
  14. print( "\t小于60分的有{}人\t等级为差!".format(bjg))

 

效果演示

 

 

经过敲代码完成,小王老师发现了一个道理,就是这个东西要自己去寻找漏洞,才能做的十分的实用

项目后期

刚好下课了,小王老师把本次的程序分享给办公室的其他老师,让他们也试一试这个,然后他就去上课去了,你觉得他是去激励学生还是奖励学生?

 

项目适用

1.平时的小测验成绩登记分析

2.边改边登记的作业

3.体育测验登记

4.单科成绩管理

5.......

 

时间过得真快,慢慢的小王老师发现这个代码被很多人拿去用,于是他写下博客,发现阅读量非常大,于是他又深耕于算法设计与Python代码里面

本次的项目采用的故事类的解说,希望大家喜欢,故事情节都是虚构的,我不是那个小王老师哟,哈哈哈,如果有需要代码的请私信我,送上自己的一份力,帮助大家解决更多的日常烦恼!

 

每文一语

自己的故事永远是讲给别人听的,只有别人故事的才能讲给自己听,己所不欲,勿施于人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值