import os
filename='student.txt'
def meunm():
print('======================学生管理系统===========================')
print('-----------------------功能选择-----------------------------')
print('\t1.录入学生信息')
print('\t2.查找学生信息')
print('\t3.删除学生信息')
print('\t4.修改学生信息')
print('\t5.排序')
print('\t6.统计学生总人数')
print('\t7.显示所有学生信息')
print('\t0.退出系统')
print('-----------------------------------------------------------')
def main():
while True:# 无限循环
meunm() # 调用meune函数
choice=int(input('请选择:'))
if choice in [0,1,2,3,4,5,6,7]:
if choice==0:
answer=input('是否确认退出y/n')
if answer=='y' or answer=='Y':
print('谢谢使用!')
break
else:
continue
elif choice==1:
insert() # 录入学生信息
elif choice==2:
search() # 查找学生信息
elif choice==3:
delete() # 删除学生信息
elif choice==4:
modify() # 修改学生信息
elif choice==5:
sort() # 对学生成绩排序
elif choice==6:
total()#统计学生总人数
elif choice==7:
show()# 显示所有学生信息
def insert():# 录入学生信息
student_list=[]
while True:
id=input('请输入学号:')
if not id:
break
name=input('请输入姓名:')
if not name:
break
try:
python=int(input('请输入python成绩:'))
english=int(input('请输入英语成绩:'))
java=int(input('请输入java成绩:'))
except:
print('数据有误,请重新输入')
continue
# 将录入的学生信息保存到字典中
student={'学号':id,'姓名':name,'python':python,'java':java,'英语':english}
# 将学生信息添加到列表中
student_list.append(student)
answer=input('是否继续录入?')
if answer=='y' or answer=='Y':
continue
else:
break
# 调用save()函数将列表信息保存到文件中,student_list为位置传参
save(student_list)
print('学生信息录入完毕!')
def save(lst):
try:
stu_file = open(filename, 'a+', encoding='utf-8')
except:
stu_file = open(filename, 'w', encoding='utf-8')
for item in lst:
stu_file.write(str(item)+'\n')
stu_file.close()
def search():# 查找学生信息
while True:
# 定义空列表用来存放找到的信息
lst_student=[]
if os.path.exists(filename):
answer = int(input('以姓名查找输入1,以学号查找输入2:'))
if answer == 1:
answer1 = input('请输入学生姓名:')
elif answer == 2:
answer1 = input('请输入学生学号:')
else:
print('您输入的信息有误,请重新输入')
search()# 调用search()函数
with open(filename,'r',encoding='utf-8') as rfile:
stu_list=rfile.readlines()
for item in stu_list:
d=dict(eval(item))
if d['姓名'] == answer1 or d['学号'] == answer1:
# append()方法给列表添加内容
lst_student.append(d)
# 调用show_student()函数显示查找内容
show_student(lst_student)
lst_student.clear()
answer2 = input('是否继续查找?\n')
if answer2 == 'y' or answer2 == 'Y':
print('可以继续查找啦!')
continue
else:
break
else:
print('没有学生信息')
return
def show_student(lst):# 显示查询结果
# len()方法
if len(lst)==0:
print('没有要查询的学生信息')
return
# format格式化字符串方法:数字表示所占的宽度,符号^表示居中显示
format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}\t'
print(format_title.format('学号','姓名','python','英语','java','总成绩'))
format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}\t'
for item in lst:
# 获取字典value值:[]、get()方法
print(format_data.format(item['学号'],item['姓名'],
item.get('python'),item.get('英语'),item.get('java')
,int(item.get('python')+int(item.get('英语')+int(item.get('java'))))))
def delete():# 删除学生信息
while True:
answer=input('请输入要删除的学生学号:')
if answer!='':
#调用os模块判断文件是否存在
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as file:
stu_old=file.readlines()# readlines:以列表的形式保存字符串
else:
stu_old=[]
flag=False # 判断是否修改
if stu_old:
with open(filename,'w',encoding='utf-8') as wfile:
for item in stu_old:
d=dict(eval(item))# 调用dict(eval()):将字符串转换为字典
if d['学号']!=answer:
wfile.write(str(d)+'\n')
else:
flag=True# 判断是否修改
if flag:
print(f'学号为{answer}的学生信息已删除')
else:
print(f'没有找到学号为{answer}的学生信息')
else:
print('无学生信息')
show()
ans=input('是否继续删除?')
if ans=='y' or ans=='Y':
continue
else:
break
else:
print('您什么都没输上哦')
continue
def modify():# 修改学生信息
while True:
show()
answer = input('请输入要修改的学生学号:')
if os.path.exists(filename):
with open(filename, 'r', encoding='gbk') as file:
stu_list = file.readlines()
else:
return
if stu_list:
with open(filename, 'w', encoding='gbk') as wfile:
for item in stu_list:
d = dict(eval(item))
if d['学号'] == answer:
print('找到学生信息,请修改')
# 获取字典value值:[]、get()方法
d['姓名'] = input('请输入姓名:')
d['python'] = int(input('请输入python成绩:'))
d['英语'] = int(input('请输入英语成绩:'))
d['java'] = int(input('请输入java成绩:'))
wfile.write(str(d) + '\n')
else:
wfile.write(str(d) + '\n')
print('修改成功!')
else:
print('无学生信息')
answer1 = input('是否继续修改其他学生信息?')
if answer1 == 'y' or answer1 == 'Y':
print('请继续修改')
continue
else:
break
def sort():# 对学生成绩排序
while True:
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_list=rfile.readlines()
else:
return
# 将列表中存入的字符串转换为字典
stu_list=[]
if student_list:
for item in student_list:
d=dict(eval(item))
stu_list.append(d)
else:
print('暂未保存任何信息')
answer=int(input('请输入(0:升序,1:降序):'))
if answer==0:
answer_bool=False
elif answer==1:
answer_bool=True
else:
print('输入数据有误,请重新输入')
sort()
answer1=int(input('请输入(1:英语,2:python,3:java,0:总成绩):'))
if answer1==1:
# 调用sort(self,key,reverse)方法进行排序,reverse=ture表示降序操作
#匿名函数lambda,其中x参数表示列表stu_list当中的每一项
stu_list.sort(key=lambda x:int(x['英语']),reverse=answer_bool)
elif answer1==2:
stu_list.sort(key=lambda x: int(x['python']), reverse=answer_bool)
elif answer1==3:
stu_list.sort(key=lambda x: int(x['java']), reverse=answer_bool)
elif answer1==0:
stu_list.sort(key=lambda x: int(x['英语'])+int(x['python'])+int(x['java']), reverse=answer_bool)
else:
print('输入数据有误,请重新输入')
sort()
# 调用show_student显示排序之后的列表
show_student(stu_list)
answer3=input('是否继续?')
if answer3=='y' or answer3=='Y':
print('请继续排序')
continue
else:
break
def total():#统计学生总人数
if os.path.exists(filename):
with open(filename,'r',encoding='gbk') as rfile:
stu_list=rfile.readlines()
if stu_list:
# 调用len()方法
print('一共有{0}名学生'.format(len(stu_list)))
else:
print('还没有录入学生信息')
else:
print('暂未保存任何数据....')
return
def show():# 显示所有学生信息
stu_list = []
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_list=rfile.readlines()
for item in student_list:
# d=dict(eval(item))
# stu_list.append(d)
# stu_list.append(eval(item))
# 将字符串转换为字典
stu_list.append(dict(eval(item)))
if stu_list:
# 调用show_student()方法,需要是[{},{}]列表存入的字典形式
show_student(stu_list)
else:
print('暂未保存任何信息')
# 只有当以主程序运行时才会运行
if __name__=='__main__':
main()