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中Continue语句的用法的举例详解
May 14 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
Python实现进程同步和通信的方法
Jan 02 Python
python实现在IDLE中输入多行的方法
Apr 19 Python
python 数字类型和字符串类型的相互转换实例
Jul 17 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
python中import与from方法总结(推荐)
Mar 21 Python
python实现简易学生信息管理系统
Apr 05 Python
Python全局锁中如何合理运用多线程(多进程)
Nov 06 Python
Python日志logging模块功能与用法详解
Apr 09 Python
Python操作CSV格式文件的方法大全
Jul 15 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
yii gridview实现时间段筛选功能
2017/08/15 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
套娃式文件夹如何通过Python批量处理
2020/08/23 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
使用索引有什么好处
2016/07/27 面试题
Hibernate持久层技术
2013/12/16 面试题
2014三八妇女节活动总结
2014/03/01 职场文书
教堂婚礼主持词
2014/03/14 职场文书
施工协议书范本
2014/04/22 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL