python希望实现学生信息管理系统的删除模块
import osfilename='student.txt'
def menu():#主菜单界面
print("============================学生信息管理系统===========================")
print('--------------------------------主菜单-------------------------------')
print('\t\t\t\t\t1.录入学生信息')
print('\t\t\t\t\t2.查找学生信息')
print('\t\t\t\t\t3.删除学生信息')
print('\t\t\t\t\t4.修改学生信息')
print('\t\t\t\t\t5.排序')
print('\t\t\t\t\t6.统计学生总人数')
print('\t\t\t\t\t7.显示学生信息')
print('\t\t\t\t\t0.退出系统')
print('--------------------------------------------------------------------')
print("====================================================================")
#******************************************************此模块功能已实现******************************************************************
def main():
while True:
menu()
number=int(input("请选择功能:"))
if number in :
if number == 0:
end=input("请确认是否退出(y/s)")
if end == 'y' or end == 'Y':
print("成功退出,感谢您的使用!!")
break
else:
continue
elif number == 1:
insert()#插入
elif number == 2:
find()#查找
elif number == 3:
delete()#删除
elif number == 4:
modify()#修改
elif number == 5:
sort()#排序
elif number == 6:
total()#统计总数
elif number == 7:
show()#显示学生信息
#******************************************此模块功能已实习********************************************************
def insert():#录入学生数据
stulist=[]#保存学生信息的列表
while True:
try:
stu_id=int(input('请录入学生ID(如:1001)'))
except:#输入错误格式会要求重新输入
print("没有输入正确格式的学生id,返回至主菜单")
break
stu_name=input('请输入学生姓名:')
if not stu_name:#如果名字输入的是空字符
print("学生姓名输入为空,返回至主菜单")
break
stu_chinese=int(input('请输入学生的语文成绩:'))
stu_math = int(input('请输入学生的数学成绩:'))
stu_english = int(input('请输入学生的英语成绩:'))
student_dic={'id':stu_id,'name':stu_name,'chinese':stu_chinese,'math':stu_math,'english':stu_english}#将学生信息存放到字典里
stulist.append(student_dic)#将字典里的学生信息存放到列表中
answer=input("是否继续录入学生信息(y/n)")
if answer == 'y' or answer == 'Y':
continue
else:
break
save(stulist)
def save(lit):#保存
file_stu=open(filename,'a',encoding="utf-8")
for i in lit:
file_stu.write(str(i)+'\n')
file_stu.close()
#**********************************************此模块功能已实现*********************************************************************
def delete():
while True:
id=input("请输入要删除的学生的ID:")
if id != '':#如果输入的id不为空
if os.path.exists(filename):#如果文件不为空,表示这个文件存在
with open(filename,'r',encoding='utf-8') as file:#只读打开文件,utf-8编码
student_old=file.readline()#按行读取
else:
student_old=[]
# else:continue#为空就直接重新循环
flag=False#删除标志初始化为False
if student_old != '':
with open(filename,'w',encoding='utf-8') as wfile:#只写打开文件,打开时会覆盖之前的内容
zidian={} #定义一个空字典,用来暂时存储文件中的每一行内容
for i in student_old: #遍历列表,每个i就是每个学生的信息
zidian = dict(eval(i)) #************显示此处出错!!!************
# 希望实现功能:先将str类型的i转为代码,再转为字典。
if zidian['id'] == id:
flag=True
else:
wfile.write(str(zidian)+'\n')
if flag == True:
print("学号为%s的学生信息已经删除"% id)
else:
print("没有找到学号为%s的学生信息"% id)
answer=input("请问是否继续删除(y/n)")
if answer=='y' or answer == 'Y':
continue
else:break
#*************************************此模块功能有问题*********************************************************
def find():
pass
def modify():#修改
pass
def sort():
pass
def total():#统计总数
pass
def show():
pass
if __name__ == '__main__':
main()
'''zidian = dict(eval(i)) #************显示此处出错!!!************
也不能正常的实现功能。python初学者。找不到问题。只好把写的代码全发上来了
谢谢大家。'''
本帖最后由 jackz007 于 2020-11-28 11:16 编辑
文件没读完先被清空。
函数 delete() 中的这一句
student_old=file.readline()
改为
student_old=list(file) 本帖最后由 suchocolate 于 2020-11-28 11:44 编辑
eval是执行代码,直接用就行:
zidian = eval(i)
另外如果filename是存多个学生的信息,那么delete函数打开文件获取的信息不能保证获取的就是那个id的信息。
用得用re匹配出来才行:
import re
txt = '''
{'id':1001,'name':'小花','chinese':100,'math':100,'english':100}
{'id':1002,'name':'小白','chinese':100,'math':100,'english':100}
{'id':1003,'name':'小黑','chinese':100,'math':100,'english':100}
'''
id = 1002
result = re.findall(f'.*{id}.*', txt, re.M)
print(result)
jackz007 发表于 2020-11-28 11:14
文件没读完先被清空。
函数 delete() 中的这一句
谢谢。确实可以正常运行了。但是我录入1001学号的信息,删除的时候,显示没有这个学生,并且txt会清空,但是我重新录入的时候,数据又全部回来了
张晨旺 发表于 2020-11-28 11:35
谢谢。确实可以正常运行了。但是我录入1001学号的信息,删除的时候,显示没有这个学生,并且txt会清空 ...
请选择功能:3
请输入要删除的学生的ID:1001
1001
{'id': 1001, 'name': '2', 'chinese': 3, 'math': 4, 'english': 4}
没有找到学号为1001的学生信息
请问是否继续删除(y/n)
张晨旺 发表于 2020-11-28 11:41
请选择功能:3
请输入要删除的学生的ID:1001
1001
万分感谢。找到问题了。是因为id接受input输入为str类型。但是字典里面id的值是int类型,对比找不到。 suchocolate 发表于 2020-11-28 11:17
eval是执行代码,直接用就行:
感谢您。现在还只写了两个模块。后面在边学习边写。非常感谢
页:
[1]