自学完python编写的第一个项目 希望能给小伙伴一点参考
不会的问题可以和我一起探讨 我也是一名学生
如果能给你带来帮助 记得点个赞再走吧
#杜锋
#开发时间 2021/4/2719:16
import os
filename='student.txt'
def main():
while True: #没有break 一直执行下去
menu()
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 menu():
print('=================学生信息管理系统===================')
print('----------------------功能菜单---------------------')
print('--------------------1录入学生信息------------------')
print('--------------------2查找学生信息------------------')
print('--------------------3删除学生信息------------------')
print('--------------------4修改学生信息------------------')
print('--------------------5排序------------------------')
print('--------------------6统计学生总人数----------------')
print('--------------------7显示所有学生信息--------------')
print('--------------------0退出学生系统------------------')
print('-------------------------------------------------')
def insert():
student_list=[]
while True:
id=input('请输入学生id:如1001')
if not id: #如果为空字符串
break
name=input('请输入姓名:')
if not name:
break
try:
english=int(input('请输入英语成绩'))
python=int(input('请输入Python成绩'))
java=int(input('请输入Java成绩'))
except:
print('输入不是整数类型 请重新输入')
continue
#保存到字典当中
student={'id':id,'name':name,'english':english,'python':python,'java':java}
#将学生信息添加到列表当中
student_list.append(student)
answer=input('是否继续添加Y/N')
if answer=='y' or answer=='Y':
continue
else:
break
#调用save()函数
save(student_list)
print('学生信息录用完成')
def save(list):
try:
stu_txt=open(filename,'a',encoding='utf-8')
except:
stu_txt=open(filename,'w',encoding='utf-8')
for item in list:
stu_txt.write(str(item)+'\n')
stu_txt.close()
def search():
student_query=[]
while True:
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 rfile:
student_old=rfile.readlines()
for item in student_old: #遍历列表
d=dict(eval(item)) #转换为字典
if id!='':
if id==d['id']:
student_query.append(d) #将字典写入列表
elif name!=' ':
if name==d['name']:
student_query.append(d) # 将字典写入列表
show_student(student_query)
student_query.clear()
answer=input('是否要继续查询Y/N')
if answer=='Y' or answer=='y':
search()
else:
break
else:
print('暂未存放学生')
return
def show_student(list):
if len(list)==0:
print('没有查询到学生信息!!!')
return
#定义标题的显示格式
format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
print(format_title.format('ID','姓名','英语成绩','python成绩','Java成绩','总成绩'))
#定义内容显示格式
format_date='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
for item in list:
print(format_date.format(
item.get('id'),
item.get('name'),
item.get('english'),
item.get('python'),
item.get('java'),
int(item.get('english'))+int(item.get('python'))+int(item.get('java'))
))
def delete():
while True:
student_id=input('请输入删除学生id:')
if student_id != '':
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as file:
student_old=file.readlines() #读取文件每一行 冰放入列表 student_old 列表
else:
student_old=[] #为空
flage=False#标记是否删除
if student_old:
with open(filename,'w',encoding='utf-8') as wfile:
d={} #定义一个空字典
for item in student_old:
d=dict(eval(item))#将字符串转换成字典
if d['id']!=student_id: #写入记录
wfile.write(str(d)+'\n')
else:
flage=True
if flage==True:
print('id为{0}的学生信息已被删除'.format(student_id))
else:
print('没有找到ID为{0}的学生'.format(student_id))
else:
print('无学生信息')
break
show()
answer=input('是否继续删除Y/N')
if answer=='Y' or answer=='y':
continue
else:
break
def modify():
show()
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
student_old=rfile.readlines()
else:
return
student_id=input('请输入修改学生id:')
with open(filename,'w',encoding='utf-8') as wfile:
for item in student_old:
d=dict(eval(item)) ############转换为字典#########################因为要查找id
if d['id']==student_id:#找到学生id
print('找到学生信息')
while True:
try:
d['name:']=input('请输入姓名')
d['english']=int(input('请输入英语成绩:'))
d['python']=int(input('请输入Python成绩:'))
d['java']=int(input('请输入java成绩:'))
except:
print('你的输入有误请重新输入')
else:
break
wfile.write(str(d)+'\n')
print('修改成功')
else:
wfile.write(str(d)+'\n') ####将id不同的学生重写入文件 因为open w 会重新覆盖原文件
answer=input('是否继续修改学生信息 Y/N')
if answer=='Y' or answer=='y':
modify()
def sort():
show()
if os.path.exists(filename):
studen_new = []
with open(filename,'r',encoding='utf-8') as rfile:
student_list3= rfile.readlines() #字符串
for item in student_list3:
d=dict(eval(item)) #转为字典
studen_new.append(d)
else:
print('文件没有存储学生信息')
return
asc_or_desc=input('请选择0升序 1降序')
if asc_or_desc=='0':
asc_or_desc_bool=False
elif asc_or_desc=='1':
asc_or_desc_bool=True
else:
print('你的输入有误请重新输入') #重新调用sort()方法
sort()
mode=input('请选择排序方式 1.按英语程序排序 2.按Python程序排序 3.按Java成绩排序 0.按总成绩排序')
if mode=='1':
studen_new.sort(key=lambda x : int(x['english']),reverse=asc_or_desc_bool)###x是字典
elif mode=='2':
studen_new.sort(key=lambda x: int(x['python']), reverse=asc_or_desc_bool) # x是字典
elif mode=='3':
studen_new.sort(key=lambda x: int(x['java']), reverse=asc_or_desc_bool) # x是字典
elif mode=='0':
studen_new.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool) #x是字典
else: #key 根据关键字k排序 reverse 表示升序还是降序
print('请重新输入') #重新调用sort(函数
sort()
show_student(studen_new)
def total():
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8') as rfile:
students=rfile.readlines()
if students:
print('一共有{0}个学生'.format(len(students))) #len()判断列表的长度 每一个字典项目占一个长度
else:
print('还没有录用信息')
else:
print('暂未保存数据....')
def show():
student_lst1= []
if os.path.exists(filename): #判断文件是否存在
with open(filename,'r',encoding='utf-8') as rfile:
students1=rfile.readlines() #将文件每行作为独立对象存储列表
for item in students1:
d=dict(eval(item)) #item为列表对象 转换为字典对象
student_lst1.append(d)
if student_lst1:
show_student(student_lst1)
else:
print('文件中暂未存储学生信息')
if __name__ == '__main__':
main()