python学生信息管理系统(完整版)


Posted in Python onApril 05, 2020

本文是基于上一篇(python项目:学生信息管理系统(初版) )进行了完善,并添加了新的功能。

主要包括有:

完善部分:输入错误;无数据查询等异常错误

新的功能:文件的操作:文件的读写,其中重点是对文本字符串的详细解析(关于整个解析拆解和重组详见代码,以及添加了注释)

学生信息管理系统(完整版)

学生信息管理项目,要求带操作界面,并完成每项操作:

+----------------------+
| 1)添加学生信息

 |
| 2)显示所有学生的信息


| 3)删除学生信息

 |
| 4)修改学生信息

 |
| 5)按学生成绩高-低显示学生信息

 |
| 6)按学生成绩低-高显示学生信息

 |
| 7)按学生年龄高-低显示学生信息

 |
| 8)按学生年龄低-高显示学生信息

 |
|  9)保存学生信息到文件(students.txt)                |
| 10)从文件中读取数据(students.txt)                |
| 退出:其他任意按键<回车>                                  |
+----------------------+   

详细代码如下:

# student_info.py
# 学生信息管理项目,要求带操作界面,并完成每项操作:
# +----------------------+
# | 1)添加学生信息









|
# | 2)显示所有学生的信息







 |
# | 3)删除学生信息










|
# | 4)修改学生信息










|
# | 5)按学生成绩高-低显示学生信息



 |
# | 6)按学生成绩低-高显示学生信息



 |
# | 7)按学生年龄高-低显示学生信息



 |
# | 8)按学生年龄低-高显示学生信息



 |
# | 9)保存学生信息到文件(students.txt) |
# | 10)从文件中读取数据(students.txt) |
# | 退出:其他任意按键<回车> |
# +----------------------+ 



 |
 
 
def meun():
 menu_info = '''+----------------------+
| 1)添加学生信息 |
| 2)显示所有学生的信息 |
| 3)删除学生信息 |
| 4)修改学生信息 |
| 5)按学生成绩高-低显示学生信息 |
| 6)按学生成绩低-高显示学生信息 |
| 7)按学生年龄高-低显示学生信息 |
| 8)按学生年龄低-高显示学生信息 |
| 9)保存学生信息到文件(students.txt) |
| 10)从文件中读取数据(students.txt) |
| 退出:其他任意按键<回车> |
+----------------------+
'''
 print(menu_info)
 
 
# 以下二个函数用于sorted排序, key的表达式函数
def get_age(*l):
 for x in l:
 return x.get("age")
def get_score(*l):
 for x in l:
 return x.get("score")
 
# 1)添加学生信息
def add_student_info():
 L = []
 while True:
 n = input("请输入名字:")
 if not n: # 名字为空 跳出循环
 break
 try:
 a = int(input("请输入年龄:"))
 s = int(input("请输入成绩:"))
 except:
 print("输入无效,不是整形数值....重新录入信息")
 continue
 info = {"name":n,"age":a,"score":s}
 L.append(info)
 print("学生信息录入完毕!!!")
 return L
 
# 2)显示所有学生的信息
def show_student_info(student_info):
 if not student_info:
 print("无数据信息.....")
 return
 print("名字".center(8),"年龄".center(4),"成绩".center(4))
 for info in student_info:
 print(info.get("name").center(10),str(info.get("age")).center(4),str(info.get("score")).center(4))
 
# 3)删除学生信息
def del_student_info(student_info,del_name = ''):
 if not del_name:
 del_name = input("请输入删除的学生姓名:")
 for info in student_info:
 if del_name == info.get("name"):
 return info
 raise IndexError("学生信息不匹配,没有找到%s" %del_name)
 
# 4)修改学生信息
def mod_student_info(student_info):
 mod_name = input("请输入修改的学生姓名:")
 for info in student_info:
 if mod_name == info.get("name"):
 a = int(input("请输入年龄:"))
 s = int(input("请输入成绩:"))
 info = {"name":mod_name,"age":a,"score":s}
 return info
 raise IndexError("学生信息不匹配,没有找到%s" %mod_name)
 
# 5)按学生成绩高-低显示学生信息
def score_reduce(student_info):
 print("按学生成绩高-低显示")
 mit = sorted(student_info ,key = get_score,reverse = True)
 show_student_info(mit)
 
# 6)按学生成绩低-高显示学生信息
def score_rise(student_info):
 print("按学生成绩低-高显示")
 mit = sorted(student_info ,key = get_score)
 show_student_info(mit)
 
# 7)按学生年龄高-低显示学生信息
def age_reduce(student_info): 
 print("按学生年龄高-低显示:")
 mit = sorted(student_info ,key = get_age,reverse = True)
 show_student_info(mit)
 
# 8)按学生年龄低-高显示学生信息
def age_rise(student_info): 
 print("按学生年龄低-高显示:")
 mit = sorted(student_info ,key = get_age)
 show_student_info(mit)
 
# 9)保存学生信息到文件(students.txt)
def save_info(student_info):
 try:
 students_txt = open("students.txt","w") # 以写模式打开,并清空文件内容
 except Exception as e:
 students_txt = open("students.txt", "x") # 文件不存在,创建文件并打开
 for info in student_info:
 students_txt.write(str(info)+"\n") # 按行存储,添加换行符
 students_txt.close()
 
# 10)从文件中读取数据(students.txt) 
def read_info():
 old_info = []
 try:
 students_txt = open("students.txt")
 except:
 print("暂未保存数据信息") # 打开失败,文件不存在说明没有数据保存
 return
 while True:
 info = students_txt.readline()
 if not info:
 break
 # print(info)
 info = info.rstrip() # 去掉换行符
 # print(info)
 info = info[1:-1] # 去掉{}
 # print(info)
 student_dict = {} # 单个学生字典信息
 for x in info.split(","): # 以,为间隔拆分
 # print(x)
 key_value = [] # 开辟空间,key_value[0]存key,key_value[0]存value
 for k in x.split(":"): # 以:为间隔拆分
 k = k.strip() # 去掉首尾空字符
 # print(k)
 if k[0] == k[-1] and len(k) > 2: # 判断是字符串还是整数
 key_value.append(k[1:-1]) # 去掉 首尾的'
 else:
 key_value.append(int(k))
 # print(key_value)
 student_dict[key_value[0]] = key_value[1] # 学生信息添加
 # print(student_dict)
 old_info.append(student_dict) # 所有学生信息汇总
 students_txt.close() 
 return old_info 
 
def main():
 student_info = []
 while True:
 # print(student_info)
 meun()
 number = input("请输入选项:")
 if number == '1':
 student_info = add_student_info()
 elif number == '2':
 show_student_info(student_info)
 elif number == '3':
 try:
 student_info.remove(del_student_info(student_info))
 except Exception as e:
 # 学生姓名不匹配
 print(e) 
 elif number == '4':
 try: 
 student = mod_student_info(student_info)
 except Exception as e:
 # 学生姓名不匹配
 print(e)
 else:
 # 首先按照根据输入信息的名字,从列表中删除该生信息,然后重新添加该学生最新信息
 student_info.remove(del_student_info(student_info,del_name = student.get("name"))) 
 student_info.append(student)
 elif number == '5':
 score_reduce(student_info)
 elif number == '6':
 score_rise(student_info)
 elif number == '7':
 age_reduce(student_info)
 elif number == '8':
 age_rise(student_info)
 elif number == '9':
 save_info(student_info)
 elif number == '10':
 student_info = read_info()
 else:
 break
 input("回车显示菜单")
 
main()

关于管理系统的更多内容请点击《管理系统专题》进行学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python登录QQ邮箱发信的实现代码
Feb 10 Python
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
python中子类调用父类函数的方法示例
Aug 18 Python
TensorFLow用Saver保存和恢复变量
Mar 10 Python
python用户评论标签匹配的解决方法
May 31 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
python实现flappy bird小游戏
Dec 24 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 Python
解决python 读取 log日志的编码问题
Dec 24 Python
python内置进制转换函数的操作
Jun 02 Python
python3的输入方式及多组输入方法
Oct 17 #Python
Python3.6使用tesseract-ocr的正确方法
Oct 17 #Python
python学生信息管理系统(初级版)
Oct 17 #Python
学生信息管理系统python版
Oct 17 #Python
python 使用sys.stdin和fileinput读入标准输入的方法
Oct 17 #Python
Python实现Dijkstra算法
Oct 17 #Python
使用Python抓取豆瓣影评数据的方法
Oct 17 #Python
You might like
PHP的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php无限遍历目录示例
2014/02/21 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
js字符串的各种格式的转换 ToString,Format
2011/08/08 Javascript
jQuery div层的放大与缩小简单实现代码
2013/03/28 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
jQuery实现手机上输入后隐藏键盘功能
2017/01/04 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
大学生年度自我鉴定
2013/10/31 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
投资合作协议书
2014/04/17 职场文书
小学语文教研活动总结
2014/07/01 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
综合测评个人总结
2015/03/03 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript