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中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
Python统计列表中的重复项出现的次数的方法
Aug 18 Python
python进阶教程之词典、字典、dict
Aug 29 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
利用python实现周期财务统计可视化
Aug 25 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
详解python polyscope库的安装和例程
Nov 13 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 Python
深入理解python多线程编程
Apr 18 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 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实现递归无限级分类
2015/10/22 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
判断多个元素(RADIO,CHECKBOX等)是否被选择的原理说明
2009/02/18 Javascript
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
JavaScript中提前声明变量或函数例子
2014/11/12 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
用实例分析Python中method的参数传递过程
2015/04/02 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
jupyter实现重新加载模块
2020/04/16 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
HTML5是什么 HTML5是什么意思 HTML5简介
2012/10/26 HTML / CSS
迟到检讨书300字
2014/02/14 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
担保书格式及范文
2014/04/01 职场文书
公司捐款倡议书
2014/05/14 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
电影雨中的树观后感
2015/06/15 职场文书
常住证明范本
2015/06/23 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书