#coding:'utf-8'
#学生成绩管理系统
#Python练习
import os
import re
filename='student.txt'
def menu():
#输入出菜单
print('‘’※※※※※※※※※学生信息成绩管理系统 ※※※※※※※※※※※※\n'
' ╔════════════════════☆功能菜单☆═════════════════════╗\n'
' ║ 1.录入学生信息 ║\n'
' ║ 2.查找学生信息 ║\n'
' ║ 3.删除学生信息 ║\n'
' ║ 4.修改学生信息 ║\n'
' ║ 5.排 序 ║\n'
' ║ 6.统计学生总数 ║\n'
' ║ 7.显示学生信息 ║\n'
' ║ 0.退 出 系 统 ║\n'
' ╚═════════════════程序设计:琴棋书画═══════════════════╝''')
#主函数
def main():
ctrl=True
while ctrl:
menu()
option=input('请选择操作序号:')
option_str=re.sub('\D','',option)
s=['0','1','2','3','4','5','6','7']
if option_str in s:
option_int=int(option_str)
if option_int==0:
print('您已经退出学生信息成绩管理系统!')
ctrl=False
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()
#录入学生信息
def insert():
studentlist=[]
mark=True
while mark:
id=input('请输入学生ID(身份证号码):')
if not id:
break
name=input('请输入学生姓名:')
if not name:
break
sex = input('请输入学生性别:')
phone = input('请输入联系电话:')
try:
chinese=input('请输入语文成绩:')
math = input('请输入数学成绩:')
english=input('请输入英语成绩:')
zh = input('请输入综合成绩:')
except:
print('输入无效,不是整数型数值......重新录入信息')
continue
student={'ID':id,'姓名':name,'性别':sex,'电话':phone,'语文':chinese,'数学':math,'英语':english,'综合':zh}
studentlist.append(student)
inputmark=input('是否继续添加?(y/n)')
if inputmark=='y'or inputmark=='Y':
mark=True
else:
mark=False
save(studentlist)
print('学生信息录入完毕!!')
#保存学生信息到文件
def save(student):
with open(filename,'a+',encoding='utf-8') as file:
for info in student:
file.write(str(info)+'\n')
#查找学生
def search():
mark=True
student_query=[] #保存查找到的学生信息至列表
while mark:
id=''
name=''
if os.path.exists(filename):
mode=input('按ID查找输入1;按姓名查找输入2:')
if mode=='1':
id=input('请输入要查找学生的id:')
elif mode=='2':
name=input('请输入要查找学生的姓名:')
else:
print('你的输入有误,请重新输入。')
search()
with open(filename,'r',encoding='utf-8') as file:
student=file.readlines()
for list in student:
d=dict(eval(list))
if id!='':
if d['ID']==id:
student_query.append(d)
elif name is not'':
if d['姓名']==name:
student_query.append(d)
show_student(student_query)
student_query.clear()
inputMark=input('是否继续查询?y/n:')
if inputMark=='y' or inputMark=='Y':
mark=True
else:
mark=False
else:
print('暂未保存数据信息......')
return
def delete():
mark=True
while mark:
id=input('请输入你要删除学生的身份证号码:')
if id is not '':
if os.path.exists(filename):
with open(filename,'r',encoding='utf=8') as rfile:
student_old=rfile.readlines()
else:
student_old=[]
ifdel=False
if student_old:
with open(filename,'w',encoding='utf-8') as wfile:
d={}
for list in student_old:
d=dict(eval(list))
if d['ID']!=id:
wfile.write(str(d)+'\n')
else:
ifdel=True
if ifdel==True:
print('ID是%s的学生信息已经被册除......'%id)
else:
print('没有找到ID为%s的学生信息......'%id)
else:
print('无学生信息.....')
break
show()
inputmark=input('是否继续删除?(y/n):')
if inputmark=='y' or inputmark=='Y':
mark=True
else:
mark=False
def modify():
while True:
studentid = input('请输入要修改的学生ID(身份证号码):')
if studentid:
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_old=rfile.readlines()
else:
student_old=[]
if student_old:
with open(filename,'w',encoding='utf-8') as wfile:
d={}
for list in student_old:
d=dict(eval(list))
if studentid==d['ID']:
answer=input('已找到学生信息,确定要修改吗?y/n:')
flag=False
if answer:
d['ID']=input('请输入身份证号:')
d['姓名']=input('请输入姓名:')
d['性别']=input('请输入性别:')
d['电话']=input('请输入联系电话:')
d['语文'] = input('请输入语文成绩:')
d['数学'] = input('请输入数学成绩:')
d['英语'] = input('请输入英语成绩:')
d['综合'] = input('请输入综合成绩:')
list=str(d)
wfile.write(list+'\n')
flag=True
else:
wfile.write(str(d) + '\n')
else:
wfile.write(str(d) + "\n")
if flag:
print('修改成功!')
else:
print('修改失败......')
mark=input('是否继续修改其他学生信息?(Y/n)')
if mark=='y' and mark=='Y':
continue
else:
break
else:
print('输入错误......')
def sort():
show()
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_old=rfile.readlines()
student_new=[]
for list in student_old:
d=dict(eval(list))
student_new.append(d)
else:
return
order=input('请选择(0、升序排序;1、降序排序:)')
if order=='0':
orderBool=False
elif order=='1':
orderBool=True
else:
print('您的输入有误,请重新输入!')
sort()
mode=input('请选择排序方式(1按语文成绩排序;2按数学成绩排序;3按英语成绩排序;4按综合成绩排序;5按总成绩排序):')
if mode=='1':
student_new.sort(key=lambda x:x['语文'],reverse=orderBool)
elif mode=='2':
student_new.sort(key=lambda x: x['数学'], reverse=orderBool)
elif mode=='3':
student_new.sort(key=lambda x: x['英语'], reverse=orderBool)
elif mode=='4':
student_new.sort(key=lambda x: x['综合'], reverse=orderBool)
elif mode=='5':
student_new.sort(key=lambda x: x['语文']+x['数学']+x['英语']+x['综合'], reverse=orderBool)
else:
print('您的输入有误,请重新选择......')
show()
show_student(student_new)
def total():
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_old=rfile.readlines()
if student_old:
print('一共有%d名学生!'%len(student_old))
else:
print('还没有录入学生信息!!')
else:
print('暂没有保存的数据信息.....')
def show():
student_list=[]
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_old=rfile.readlines()
for list in student_old:
d=dict(eval(list))
student_list.append(d)
if student_list:
show_student(student_list)
else:
print('暂未保存数据信息......')
#保存到列表中的学生信息显示出来
def show_student(studentlist):
if not studentlist:
print('没有数据信息!!.......\n')
return
title='{:18}\t{:6}\t{:4}\t{:12}{:6}\t{:8}\t{:8}\t{:8}\t{:8}'
print(title.format('ID'.center(18),'姓名','性别'.center(4),'联系电话','语文成绩','数学成绩','英语成绩','综合成绩','总成绩'))
date='{:18}\t{:8}{:2}\t{:14}\t{:8}\t{:8}\t{:8}\t{:8}\t{:4}'
for info in studentlist:
print(date.format(info.get('ID'),
info.get('姓名'),
info.get('性别'),
info.get('电话'),
info.get('语文'),
info.get('数学'),
info.get('英语'),
info.get('综合'),
int(info.get('语文'))+int(info.get('数学'))+int(info.get('英语'))+int(info.get('综合'))))
if __name__=='__main__':
main()