python学生信息管理系统(完整版)
本文是基于上一篇(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)|
#|退出:其他任意按键<回车>|
#+----------------------+|
defmeun():
menu_info='''+----------------------+
|1)添加学生信息|
|2)显示所有学生的信息|
|3)删除学生信息|
|4)修改学生信息|
|5)按学生成绩高-低显示学生信息|
|6)按学生成绩低-高显示学生信息|
|7)按学生年龄高-低显示学生信息|
|8)按学生年龄低-高显示学生信息|
|9)保存学生信息到文件(students.txt)|
|10)从文件中读取数据(students.txt)|
|退出:其他任意按键<回车>|
+----------------------+
'''
print(menu_info)
#以下二个函数用于sorted排序,key的表达式函数
defget_age(*l):
forxinl:
returnx.get("age")
defget_score(*l):
forxinl:
returnx.get("score")
#1)添加学生信息
defadd_student_info():
L=[]
whileTrue:
n=input("请输入名字:")
ifnotn:#名字为空跳出循环
break
try:
a=int(input("请输入年龄:"))
s=int(input("请输入成绩:"))
except:
print("输入无效,不是整形数值....重新录入信息")
continue
info={"name":n,"age":a,"score":s}
L.append(info)
print("学生信息录入完毕!!!")
returnL
#2)显示所有学生的信息
defshow_student_info(student_info):
ifnotstudent_info:
print("无数据信息.....")
return
print("名字".center(8),"年龄".center(4),"成绩".center(4))
forinfoinstudent_info:
print(info.get("name").center(10),str(info.get("age")).center(4),str(info.get("score")).center(4))
#3)删除学生信息
defdel_student_info(student_info,del_name=''):
ifnotdel_name:
del_name=input("请输入删除的学生姓名:")
forinfoinstudent_info:
ifdel_name==info.get("name"):
returninfo
raiseIndexError("学生信息不匹配,没有找到%s"%del_name)
#4)修改学生信息
defmod_student_info(student_info):
mod_name=input("请输入修改的学生姓名:")
forinfoinstudent_info:
ifmod_name==info.get("name"):
a=int(input("请输入年龄:"))
s=int(input("请输入成绩:"))
info={"name":mod_name,"age":a,"score":s}
returninfo
raiseIndexError("学生信息不匹配,没有找到%s"%mod_name)
#5)按学生成绩高-低显示学生信息
defscore_reduce(student_info):
print("按学生成绩高-低显示")
mit=sorted(student_info,key=get_score,reverse=True)
show_student_info(mit)
#6)按学生成绩低-高显示学生信息
defscore_rise(student_info):
print("按学生成绩低-高显示")
mit=sorted(student_info,key=get_score)
show_student_info(mit)
#7)按学生年龄高-低显示学生信息
defage_reduce(student_info):
print("按学生年龄高-低显示:")
mit=sorted(student_info,key=get_age,reverse=True)
show_student_info(mit)
#8)按学生年龄低-高显示学生信息
defage_rise(student_info):
print("按学生年龄低-高显示:")
mit=sorted(student_info,key=get_age)
show_student_info(mit)
#9)保存学生信息到文件(students.txt)
defsave_info(student_info):
try:
students_txt=open("students.txt","w")#以写模式打开,并清空文件内容
exceptExceptionase:
students_txt=open("students.txt","x")#文件不存在,创建文件并打开
forinfoinstudent_info:
students_txt.write(str(info)+"\n")#按行存储,添加换行符
students_txt.close()
#10)从文件中读取数据(students.txt)
defread_info():
old_info=[]
try:
students_txt=open("students.txt")
except:
print("暂未保存数据信息")#打开失败,文件不存在说明没有数据保存
return
whileTrue:
info=students_txt.readline()
ifnotinfo:
break
#print(info)
info=info.rstrip()#去掉换行符
#print(info)
info=info[1:-1]#去掉{}
#print(info)
student_dict={}#单个学生字典信息
forxininfo.split(","):#以,为间隔拆分
#print(x)
key_value=[]#开辟空间,key_value[0]存key,key_value[0]存value
forkinx.split(":"):#以:为间隔拆分
k=k.strip()#去掉首尾空字符
#print(k)
ifk[0]==k[-1]andlen(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()
returnold_info
defmain():
student_info=[]
whileTrue:
#print(student_info)
meun()
number=input("请输入选项:")
ifnumber=='1':
student_info=add_student_info()
elifnumber=='2':
show_student_info(student_info)
elifnumber=='3':
try:
student_info.remove(del_student_info(student_info))
exceptExceptionase:
#学生姓名不匹配
print(e)
elifnumber=='4':
try:
student=mod_student_info(student_info)
exceptExceptionase:
#学生姓名不匹配
print(e)
else:
#首先按照根据输入信息的名字,从列表中删除该生信息,然后重新添加该学生最新信息
student_info.remove(del_student_info(student_info,del_name=student.get("name")))
student_info.append(student)
elifnumber=='5':
score_reduce(student_info)
elifnumber=='6':
score_rise(student_info)
elifnumber=='7':
age_reduce(student_info)
elifnumber=='8':
age_rise(student_info)
elifnumber=='9':
save_info(student_info)
elifnumber=='10':
student_info=read_info()
else:
break
input("回车显示菜单")
main()
关于管理系统的更多内容请点击《管理系统专题》进行学习
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。