import os
filename = "student.txt"
def main():
while 1:
menu()
try:
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()
except ValueError:
print("请输入数字!")
def menu():
print("===================学生信息管理系统===================")
print("----------------------功能菜单-----------------------")
print("\t\t\t\t\t\t1.录入学生信息")
print("\t\t\t\t\t\t2.查找学生信息")
print("\t\t\t\t\t\t3.删除学生信息")
print("\t\t\t\t\t\t4.修改学生信息")
print("\t\t\t\t\t\t5.排序")
print("\t\t\t\t\t\t6.统计学生总人数")
print("\t\t\t\t\t\t7.显示所有学生信息")
print("\t\t\t\t\t\t0.退出")
print("----------------------------------------------------")
def insert():
student_list = []
while 1:
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 ValueError:
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(student_list)
def save(lst):
stu_txt = open(filename, 'a', encoding='UTF-8') # notepad默认ANSI编码
for item in lst:
stu_txt.write(str(item)+'\n')
stu_txt.close()
def search():
student_query = []
while 1:
id = ""
name = ""
if os.path.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 rfile:
student = rfile.readlines()
for item in student:
d = eval(item)
if id != "":
if d["id"] == id:
student_query.append(d)
if name != "":
if d["name"] == name:
student_query.append(d)
show_student(student_query)
student_query.clear()
answer = input("是否要继续查询?(y/n):")
if answer == "y" or answer == "Y":
continue
else:
break
else:
print("无学生信息!")
def show_student(lst):
if len(lst) == 0:
print("没有查询到学生信息")
return
format_title = "{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}"
print(format_title.format("ID", "姓名", "英语成绩", "python成绩", "java成绩", "总成绩"))
format_data = "{:^6}\t{:^12}\t{:^8}\t{:^8}\t{:^8}\t{:^8}"
for item in lst:
print(format_data.format(item.get("id"),
item.get("name"),
item.get("English"),
item.get("python"),
item.get("java"),
item.get("English")+item.get("python")+item.get("java")))
def delete():
while 1:
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() # readlines返回列表
else:
student_old = []
flag = False
if student_old:
with open(filename, 'w', encoding='UTF-8') as wfile:
for item in student_old:
d = eval(item) # eval()执行字符串表达式
if d['id'] != student_id:
wfile.write(str(d)+"\n")
else:
flag = True
if flag:
print(f"ID为{student_id}的学生信息已经被删除")
else:
print(f"没有找到ID为{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:
print("无学生信息!")
return
student_id = input("请输入要修改的学生ID:")
with open(filename, 'w', encoding='UTF-8')as wfile:
for item in student_old:
d = eval(item)
if d["id"] == student_id:
print("ID存在,请输入要修改的学生的信息!")
while 1:
try:
d["id"] = input("请输入ID:")
d["name"] = input("请输入姓名:")
d["English"] = int(input("请输入英语成绩:"))
d["python"] = int(input("请输入python成绩:"))
d["java"] = int(input("请输入java成绩:"))
except ValueError:
print("输入有误,成绩输入须为整数。请重新输入!")
else:
break
wfile.write(str(d)+"\n")
print("修改成功!!!")
else:
wfile.write(str(d)+"\n")
answer = input("是否继续修改其他学生信息?(y/n):")
if answer == "y" or answer == "Y": # 输入n 则该功能函数结束
modify()
def sort():
show()
if os.path.exists(filename):
with open(filename, 'r', encoding='UTF-8') as rfile:
student_list = rfile.readlines()
student_new = []
for item in student_list:
d = eval(item)
student_new.append(d)
else:
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("错误!请输入0或1!")
sort()
mode = input("请选择排序方式(1.英语成绩2.python成绩3.java成绩0.总成绩)")
if mode == "1":
student_new.sort(key=lambda x: int(x["English"]), reverse=asc_or_desc_bool)
elif mode == "2":
student_new.sort(key=lambda x: int(x["python"]), reverse=asc_or_desc_bool)
elif mode == "3":
student_new.sort(key=lambda x: int(x["java"]), reverse=asc_or_desc_bool)
elif mode == "0":
student_new.sort(key=lambda x: int(x["English"]+int(x["python"])+int(x["java"])), reverse=asc_or_desc_bool)
else:
print("错误!请输入1、2、3或0:")
sort()
show_student(student_new)
def total():
if os.path.exists(filename):
with open(filename, 'r', encoding='UTF-8') as rfile:
students = rfile.readlines()
if students:
print(f"一共有{len(students)}")
else:
print("未录入信息!")
else:
print("无学生信息!")
def show():
student_list = []
if os.path.exists(filename):
with open(filename, 'r', encoding='UTF-8') as rfile:
student = rfile.readlines()
for item in student:
student_list.append(eval(item))
if student_list:
show_student(student_list)
else:
print("未录入信息!")
else:
print("无学生信息!")
if __name__ == '__main__':
main()
Python 学生信息管理系统
最新推荐文章于 2024-03-28 09:59:02 发布