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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
深入分析在Python模块顶层运行的代码引起的一个Bug
Jul 04 Python
Python中的赋值、浅拷贝、深拷贝介绍
Mar 09 Python
基于Python os模块常用命令介绍
Nov 03 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
使用python生成杨辉三角形的示例代码
Aug 29 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
python暴力解压rar加密文件过程详解
Jul 05 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
用python删除文件夹中的重复图片(图片去重)
May 12 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
JS 继承实例分析
2008/11/04 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
React如何避免重渲染
2018/04/10 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
js实现整体缩放页面适配移动端
2020/03/31 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Python模拟登录验证码(代码简单)
2016/02/06 Python
Python Django的安装配置教程图文详解
2019/07/17 Python
使用pandas读取文件的实现
2019/07/31 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
python链表类中获取元素实例方法
2021/02/23 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
购买英国原创艺术:Art Gallery
2018/08/25 全球购物
庆祝教师节活动方案
2014/01/31 职场文书
公司运动会策划方案
2014/05/25 职场文书
结对共建协议书
2014/08/20 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
社区节水倡议书
2015/04/29 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL