#思路:1、先循环插入数据(每个学生的成绩用字典存储,所有的数据又用列表lst[dict]) 2、插入完以后将数据存入txt文件,如果存在直接a追加,不存在w新建写入definsert():
student_list =[]whileTrue:id=input('请输入学生的id:')ifid=='':break
name =input('请输入学生的姓名:')if name =='':breaktry:
english =input('请输入英语成绩:')
python =input('请输入python成绩:')
java =input('请输入java成绩:')except:print('输入格式有误请重新输入\n')continue
student ={'id':id,'name':name,'english':english,'python':python,'java':java}
student_list.append(student)#询问是否插入新的学生
ans =input('请问是否继续插入学生信息y/n:')if ans =='y':continueelse:break#将stulist中的数据存入txt文件中
save(student_list)print('学生信息插入完毕')#思路:先判断文件是否存在,如果存在直接a追加,否则w新建defsave(lst):if os.path.exists(filename):withopen(filename,'a',encoding='utf-8')as wfile:for item in lst:
wfile.write(str(item)+'\n')else:withopen(filename,'w',encoding='utf-8')as wfile:for item in lst:
wfile.write(str(item)+'\n')
save函数还可以这么写
defsave(lst):try:
fp =open(filename,'a',encoding='utf-8')except:
fp =open(filename,'w',encoding='utf-8')for i in lst:#遍历lst中所存的字典(字典中包含学生信息)
fp.write(str(i)+'\n')
fp.close()
search
#思路:1、先判断文件是否存在且有内容 2、如果有的话遍历学生信息然后把它转成字典形式 3、采用不同的模式进行匹配判断defsearch():
student_query =[]#通过姓名查找有可能有多个人,因此需要列表whileTrue:#查找是一个多次的功能,应该设置成循环if os.path.exists(filename):withopen(filename,'r',encoding='utf-8')as rfile:
student = rfile.readlines()if student:#如果文件里面有内容进行判断
choice =input('请输入你的选择:0-用id查询,1-用姓名查询:')if choice =='0':id=input('请输入要查询的id:')elif choice =='1':
name =input('请输入要查询的name:')else:print('输入有误请重新输入:')continuefor item in student:
d =dict(eval(item))if choice =='0':if d['id']==id:
student_query.append(d)else:if d['name']== name:
student_query.append(d)#显示查询到的结果for item in student_query:print(item)#清空列表询问是否继续查询
student_query.clear()
ans =input('请问是否继续查询y/n:')if ans =='y':continueelse:breakelse:print('文件内容为空')returnelse:print('文件不存在')return
insert
#思路:删除的思路就是依次把内容拿出来进行遍历,如果不是要删除的元素就重新写入defdelete():whileTrue:if os.path.exists(filename):withopen(filename,'r',encoding='utf-8')as rfile:
student = rfile.readlines()
flag =Falseif student:withopen(filename,'w',encoding='utf-8')as wfile:id=input('请输入你要删除的id:')for item in student:
d =dict(eval(item))if d['id']==id:
flag =Trueelse:#如果不是要删除的元素,重新写入文件即可
wfile.write(str(d)+'\n')else:print('文件内容为空')breakif flag:print('找到该生信息,已经删除')else:print('未找到该生信息')#删除后看是否继续删除
ans =input('请问是否继续删除y/n:')if ans =='y':continueelse:breakelse:print('文件不存在')return
modify
#思路:和删除思路相似对内容进行遍历,如果找到了要修改的id就修改完写入文件,如果没找到直接写入defmodify():whileTrue:if os.path.exists(filename):withopen(filename,'r',encoding='utf-8')as rfile:
student = rfile.readlines()
flag =Falseif student:withopen(filename,'w',encoding='utf-8')as wfile:id=input('请输入你要修改的id:')for item in student:
d =dict(eval(item))if d['id']==id:#找到了则对内容进行相应修改(修改后也要插入)
d['name']=input('请输入新的名字:')
d['python']=input('请输入新的py成绩:')
d['english']=input('请输入新的english成绩:')
d['java']=input('请输入新的java成绩:')
flag =True#如果id相等说明找到了对内容修改完插入,否则直接插入
wfile.write(str(d)+'\n')else:print('文件内容为空')breakif flag:print('id={0}的学生信息已经修改成功'.format(id))else:print('未找到学生id,请重新输入')continue#删除后看是否继续修改
ans =input('请问是否继续修改y/n:')if ans =='y':continueelse:breakelse:print('文件不存在')return