学生成绩信息管理系统

#_author:来童星
#date:2020/4/17
import re
import os
def menu():
print(
"""
|----------学生信息管理系统----------|
|1.录入学生信息
|2.查找学生信息
|3.删除学生信息
|4.修改学生信息
|5.排序
|6.统计学生总人数
|7.显示所有学生信息
|8.退出系统
|-----------------------------------|
|说明:通过数字或者↑↓来选择菜单
"""
)
def save(student):
try:
student_txt=open("student.txt","a")
except Exception as e:
student_txt=open("student.txt","w")
for s in student:
student_txt.write(str(s)+"\n")
student_txt.close()

def insert():
student_list=[]
mark=True
while mark:
id=input("请输入ID(如:1001):")
if not id:
break
name=input("请输入名字:")
if not name:
break
try:
english=int(input("请输入英语成绩:"))
py=int(input("请输入python成绩:"))
c=int(input("请输入C语言成绩:"))
except:
print('输入无效,不是整数类型,请重新输入')
continue
#将输入的学生信息保存到字典
student={"id":id,"name":name,"english":english,"python":py,"C语言":c}
student_list.append(student)
inputcont=input("是否继续添加:(y/n)")
if inputcont=="y":
mark=True
else:
mark=False
save(student_list)#将学生信息保存到文件
print("学生信息录入完毕!")



def show_student(query):
if not query:
print("@__无数据信息__@")
return
format_title="{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}"
print(format_title.format("ID","名字","英语成绩","python成绩","C语言成绩","总成绩"))

format_data="{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"
for info in query:
print(format_data.format(info.get('id',0),info.get('name',0),str(info.get('english',0)),str(info.get('python',0)),str(info.get('C语言',0)),str(info.get('english',0)+info.get('py',0)+info.get('c',0)).center(12)))

def search():
mark=True
student_query=[]
while mark:
id=""
name=""
if os.path.exists('student.txt'):
mode=input("按ID查找输入1,按姓名查找输入2")
if mode=='1':
id=input("请输入学生ID")
elif mode=="2":
name=input("请输入学生姓名")
else:
print("你的输入有误,请重新输入")
search()
with open("student.txt","r") as rfile:
student=rfile.readlines()
for list in student:
d=dict(eval(list))
if id is not "":#判断是否按照id查询
if d["id"]==id:
student_query.append(d)
elif name is not "":
if d['name']==name:
student_query.append(d)
show_student(student_query)
student_query.clear()#清空列表
inputsearch=input("是否继续查找(y/n)")
if inputsearch=="y":
search()
else:
mark=False
            return
else:
print("暂未保存数据信息")
return



def delete():
mark=True
while mark:
studentId=input("请输入需要删除的学生ID:")
if studentId is not "":
if os.path.exists("student.txt"):
with open("student.txt","r") as rfile:
stu_old_news=rfile.readlines()
else:
stu_old_news=[]
flag_del=False
if stu_old_news: #如果存在学生信息
with open("student.txt","w") as wfile:
d={}
for list in stu_old_news:
d=dict(eval(list))#字符串转字典
if d["id"]!=studentId:
wfile.write(str(d)+"\n")
else:
flag_del=False #标记已经删除,前面已经都出来了,此处不做操作就代表删除
if flag_del:
print("ID为%s的学生信息已经删除"%studentId)
else:
print("没有找到ID为%s的学生信息"%studentId)
else:
print("无学生信息")
break
show()
inputdel=input("是否继续删除:(y/n)")
if inputdel=="y":
delete()
else:
mark=False
def modify():
show()
if os.path.exists("student.txt"):
with open("student.txt","r") as rfile:
stu_old_news=rfile.readlines()
else:
return
studentId=input("请输入修改的学生ID:")
with open("student.txt","w") as wfile:
for s in stu_old_news:
d=dict(eval(s))
if d["id"]==studentId:
print("找到了这名学生,可以修改他的信息")
while True:
try:
d['name']=input("请输入名字:")
d['english']=int(input("请输入英语成绩:"))
d['python']=int(input("请输入python成绩:"))
d['C语言']=int(input("请输入C语言成绩:"))
except:
print("你的输入有误,请重新输入")
else:
break

student=str(d)
wfile.write(student+"\n") #将已经修改的信息写入到文件
print("修改成功")
else:
wfile.write(student)#将未修改的信息写入到文件
inputmod=input("是否继续修改其他学生信息?(y/n)")
if inputmod=="y":
modify()



def sort():
show()
if os.path.exists("student.txt"):
with open("student.txt","r") as rfile:
student_old=rfile.readlines()
student_news=[]
for list in student_old:
d=dict(eval(list))
student_news.append(d)
else:
return
ascORdesc=input("请选择:(0:升序;1:降序)")
if ascORdesc=="0":
ascORdescbool=False
elif ascORdesc=="1":
ascORdescbool=True
else:
print("您的输入有误,请重新输入")
sort()
mode=input("请选择排序方式:1按英语成绩排序;2按python成绩排序;3按C语言成绩排序;4.按总成绩排序")
if mode=="1":
student_news.sort(key=lambda x:x['english'],reverse=ascORdescbool)
elif mode=="2":
student_news.sort(key=lambda x:x['python'],reverse=ascORdescbool)
elif mode=="3":
student_news.sort(key=lambda x:x['C语言'],reverse=ascORdescbool)
elif mode=="4":
student_news.sort(key=lambda x:x['english']+x['python']+x['C语言'],reverse=ascORdescbool)
else:
print("您的输入有误,请重新输入")
sort()
show_student(student_news)



def total():
if os.path.exists("student.txt"):
with open("student.txt","r") as rfile:
student_old=rfile.readlines()
if student_old:
print("一共有 %s 名学生"%len(student_old))
else:
print("还没有录入学生信息")
else:
print("暂未保存数据信息")

def show():
student_news=[]
if os.path.exists('student.txt'):
with open("student.txt","r") as rfile:
student_old=rfile.readlines()
for list in student_old:
student_news.append(eval(list)) #将找到的学生信息保存到字典中
if student_news:
show_student(student_news)

else:
print("暂未保存数据信息")


def main():
flag=True
while(flag):
menu()
option=input("请选择:")
option_str=re.sub("\D","",option)
if option in ["0","1","2","3","4","5","6","7"]:
option_int=int(option_str)
if option_int==0:
print("你已经退出学生管理系统")
elif option_int==1:
insert()
elif option_int==2:
search()
elif option_int==3:
delete()
elif option_int==4:
modify()
elif option_int==5:
sort()
elif option_int==6:
total()
elif option_int==7:
show()
if __name__=="__main__":
main()
运行结果如下:

猜你喜欢

转载自www.cnblogs.com/startl/p/12728559.html