学生信息管理系统
from os.path import exists
fileName='student.txt'
def main():
while True:
menu()
try:
choice=int(input('请选择:'))
if choice in range(0,9):#[0,1,2,3,4,5,6,7,8]:
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:
show_all()
elif choice==6:
sort()
elif choice==7:
total_num()
elif choice==8:
del_all()
else:
print('输入有误!')
continue
except:
print('输入有误!请重新输入')
continue
def menu():
print('=============================学生信息管理系统=============================')
print('---------------------------------功能菜单---------------------------------')
print('\t\t\t 1.添加学生信息')
print('\t\t\t 2.查找学生信息')
print('\t\t\t 3.删除学生信息')
print('\t\t\t 4.修改学生信息')
print('\t\t\t 5.显示所有学生信息')
print('\t\t\t 6.排序')
print('\t\t\t 7.统计学生总数')
print('\t\t\t 8.清空所有学生信息')
print('\t\t\t 0.退出')
print('-------------------------------------------------------------------------')
def insert():
stu_lst=[]
while True:
id=input('请输入学生id:')
if not id:
continue
name=input('请输入学生姓名:')
if not name:
continue
try:
Python_score=int(input('请输入Python成绩:'))
C_score=int(input('请输入C语言成绩:'))
Cpp_score=int(input('请输入C++成绩:'))
except:
print('非整型数据,输入有误!')
continue
#将学生信息保存到字典中
stu={'id':id,'name':name,'Python_score':Python_score,'C_score':C_score,'Cpp_score':Cpp_score}
#将学生信息添加到列表中
stu_lst.append(stu)
#是否继续添加
answer=input('是否继续添加?y/n:')
if answer=='y' or answer=='Y':
continue
else:
break
save(stu_lst)
print('学生信息添加完毕!\n')
def save(lst):
try:
stu_txt=open(fileName,'a',encoding='utf-8')
except:
stu_txt=open(fileName,'w',encoding='utf-8')
for i in lst:
stu_txt.write(str(i)+'\n')
stu_txt.close()
def search():
stu_query=[]
while True:
id=''
name=''
if exists(fileName):
mode=input('请输入要查找的方式(1.按id查找。2.按姓名查找。):')
if mode=='1':
id=input('请输入学生id:')
elif mode=='2':
name=input('请输入学生姓名:')
else:
print('输入有误,请重新输入!')
search()
with open(fileName,'r',encoding='utf-8') as file:
stu=file.readlines()
if stu:
for i in stu:
d=dict(eval(i))
if id!='':
if d['id']==id:
stu_query.append(d)
elif name!='':
if d['name']==name:
stu_query.append(d)
show_stu(stu_query)
stu_query.clear()
answer=input('是否继续查找?y/n:')
if answer=='y' or answer=='Y':
continue
else:
break
else:
print('文件没有内容\n')
return
else:
print('文件不存在\n')
return
def delete():
if exists(fileName):
while True:
del_id=input('请输入要删除的学生id:')
if del_id!='':
with open(fileName,'r',encoding='utf-8') as file:
stu_old=file.readlines()
flag=False
if stu_old:
with open(fileName,'w',encoding='utf-8') as wfile:
d={}
for i in stu_old:
d=dict(eval(i))
if d['id']!=del_id:
wfile.write(str(d)+'\n')
else:
flag=True
if flag:
print(f'id为{del_id}的学生信息已被删除了')
else:
print(f'未找到id为{del_id}的学生信息')
else:
print('文件没有内容\n')
break
show_all()
answer=input('是否继续删除?y/n:')
if answer=='y' or answer=='Y':
continue
else:
break
else:
print('文件不存在\n')
return
def modify():
show_all()
if exists(fileName):
with open(fileName,'r',encoding='utf-8') as file:
stu_old=file.readlines()
if stu_old:
mod_id=input('请输入要修改的学生id:')
flag=False
with open(fileName,'w',encoding='utf-8') as wfile:
d={}
for i in stu_old:
d=dict(eval(i))
if d['id']==mod_id:
print(f'已找到id为{mod_id}的学生信息,可以开始修改了')
while True:
try:
d['name']=input('请输入学生姓名:')
d['Python_score']=int(input('请输入Python成绩:'))
d['C_score']=int(input('请输入C语言成绩:'))
d['Cpp_score']=int(input('请输入C++成绩:'))
except:
print('输入有误,非整型数据,请重新输入')
else:
break
flag=True
print('修改成功')
wfile.write(str(d)+'\n')
if flag:
show_all()
else:
print('修改失败,输入有误')
answer=input('是否继续修改?y/n:')
if answer=='y' or answer=='Y':
modify()
else:
return
else:
print('文件没有内容\n')
return
else:
print('文件不存在\n')
return
def show_stu(lst):
if len(lst)==0:
print('未查询到该学生的信息\n')
return
format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
print(format_title.format('id','姓名','Python成绩','C语言成绩','C++成绩','总成绩'))
format_data='{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^10}\t{:^11}'
for i in lst:
print(format_data.format(i.get('id'),
i.get('name'),
i.get('Python_score'),
i.get('C_score'),
i.get('Cpp_score'),
int(i.get('Python_score'))+int(i.get('C_score'))+int(i.get('Cpp_score'))))
print('\n')
def show_all():
if exists(fileName):
stu_show=[]
with open(fileName,'r',encoding='utf-8') as file:
stu=file.readlines()
if stu:
for i in stu:
d=dict(eval(i))
stu_show.append(d)
show_stu(stu_show)
else:
print('文件没有内容\n')
return
else:
print('文件不存在\n')
return
def sort():
if exists(fileName):
with open(fileName,'r',encoding='utf-8') as file:
stu=file.readlines()
if stu:
stu_new=[]
d={}
for i in stu:
d=dict(eval(i))
stu_new.append(d)
else:
print('文件没有内容\n')
return
else:
print('文件不存在\n')
return
asc_or_desc=input('请选择要排序的方式(1.升序。2.降序。):')
if asc_or_desc=='1':
asc_or_desc_bool=False
elif asc_or_desc=='2':
asc_or_desc_bool=True
else:
print('输入有误,请重新输入!')
sort()
while True:
mode=input('请选择要排序的内容(1.Python。2.C语言。3.C++。0.总成绩。):')
if mode=='1':
stu_new.sort(key=lambda stu_new:int(stu_new['Python_score']),reverse=asc_or_desc_bool)
break
elif mode=='2':
stu_new.sort(key=lambda stu_new:int(stu_new['C_score']),reverse=asc_or_desc_bool)
break
elif mode=='3':
stu_new.sort(key=lambda stu_new:int(stu_new['Cpp_score']),reverse=asc_or_desc_bool)
break
elif mode=='0':
stu_new.sort(key=lambda stu_new:int(stu_new['Python_score'])+int(stu_new['C_score'])+int(stu_new['Cpp_score']),reverse=asc_or_desc_bool)
break
else:
print('输入有误,请重新输入!')
show_stu(stu_new)
answer=input('是否保存排序?y/n:')
if answer=='y' or answer=='Y':
with open(fileName,'w',encoding='utf-8') as file:
for i in stu_new:
file.write(str(i)+'\n')
else:
return
def total_num():
if exists(fileName):
with open(fileName,'r',encoding='utf-8') as file:
stu=file.readlines()
if stu:
print(f'一共有{len(stu)}名学生\n')
else:
print('文件没有内容\n')
return
else:
print('文件不存在\n')
return
def del_all():
if exists(fileName):
answer=input('是否删除全部信息?y/n:')
if answer=='y' or answer=='Y':
with open(fileName,'w',encoding='utf-8') as file:
file.write('')
else:
return
else:
print('文件不存在\n')
return
if __name__ =='__main__':
main()