import os
filename = "student.txt"
def main(): # 定义主函数
while True: # 一直保持主界面的存在
menm() # 调用menm()函数
choice = int(input("请输入您的选择"))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0:
answer = input('您确定要退出系统吗?,确定/取消')
if answer == "确定":
print("谢谢使用")
break
elif choice == "取消":
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 menm():
print("=" * 20, "学生信息管理系统", "=" * 20)
print("=" * 22, "功能菜单", "=" * 21)
print("\t" * 1, "1.录入学生信息")
print("\t" * 1, "2.查询学生信息")
print("\t" * 1, "3.删除学生信息")
print("\t" * 1, "4.修改学生信息")
print("\t" * 1, "5.排序")
print("\t" * 1, "6.统计学生总人数")
print("\t" * 1, "7.显示所有学生信息")
print("\t" * 1, "0.退出系统")
print("=" * 50)
def insert():
student_list = []
while True:
student_number = input("请输入学生学号:")
if not student_number:
break
name = input("请输入学生姓名:")
if not name:
break
try:
english_list = int(input('请输入英语成绩:'))
python_list = int(input("请输入python成绩:"))
java_list = int(input("请输入java成绩:"))
except:
print("输入无效,不是整数类型,请重新输入!")
continue
# 将录入的学生信息保存到字典中
student = {'学号': student_number, "姓名": name, '英语成绩': english_list, "python成绩": python_list,
"java成绩": java_list}
# 将学生信息添加到列表中
student_list.append(student)
question1 = input("是否继续添加?确定/取消\n")
if question1 == "确定":
continue
else:
break
# 调用save()函数
save(student_list)
print('学生信息录入完毕,谢谢您的使用!!')
def save(lst):
try:
student_txt = open(filename, "a", encoding="utf-8")
except:
student_txt = open(filename, "w", encoding="utf-8")
for item in lst:
student_txt.write(str(item) + "\n")
student_txt.close()
def search():
student_query = []
while True:
student_number = ""
name = ""
if os.path.exists(filename):
mode = input("请选择查找方式。1.学号/2.姓名")
if mode == "学号":
student_number = input("请输入要查询的学号")
elif mode == "1":
student_number = input("请输入要查询的学生学号")
elif mode == "姓名":
name = input("请输入要查询的学生姓名")
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 = dict(eval(item))
if student_number != "":
if d["学号"] == student_number:
student_query.append(d)
elif name != "":
if d["姓名"] == name:
student_query.append(d)
# 显示查询结果
show_student(student_query)
# 清空列表
student_query.clear()
question2 = input("是否要继续查询?确定/取消")
if question2 == "确定":
continue
else:
break
else:
print("暂未保存学生信息")
return
def show_student(lst):
if len(lst) == 0:
print("没有查询到学生信息,无数据显示!")
return
# 定义标题显示格式
format_title = '{:^12} \t {:^9} \t{:^3}\t{:^3} \t {:^3} \t {:^3}'
print(format_title.format("学号", "姓名", "英语成绩", "python成绩", "java成绩", "总成绩"))
# 定义内容的显示格式
form_data = "{:^12} \t{:^12} \t {:^6} \t {:^6} \t {:^6} \t {:^3}"
for item in lst:
print(form_data.format(item.get("学号"),
item.get("姓名"),
item.get("英语成绩"),
item.get("python成绩"),
item.get("java成绩"),
int(item.get("英语成绩"))+int(item.get("python成绩"))+int(item.get("java成绩"))
))
def delete():
while True:
student_number1 = input("请输入要删除的学生学号:")
if student_number1 != "": # 不等于空字符串,说明已经存在学生了
# 判断磁盘文件是否存在
if os.path.exists(filename):
with open(filename, "r", encoding="utf-8") as file:
student_list = file.readlines() # 读取所有已经存在的学生信息,放入列表中
else:
student_list = []
flag = False # 标记是否删除
if student_list:
with open(filename, "w", encoding="utf-8")as wfile:
d = {}
for item in student_list:
d = dict(eval(item)) # 遍历列表中的元素输出为字符串,这里将字符串转为字典
if d["学号"] != student_number1:
wfile.write(str(d)+'\n')
else:
flag = True
if flag:
print(f"学号为{student_number1}已经被删除")
else:
print(f"没找到学号为{student_number1}的学生信息")
else:
print("无学生信息")
break
show() # 删除之后要重新显示所有学生信息
question2 = input("您还要继续删除吗?确定/取消\n")
if question2 == "确定":
continue
else:
break
def modify():
show() # 调用show()显示所有学生信息
if os.path.exists(filename):
with open(filename, "r", encoding="utf-8") as rfile:
student_old = rfile.readlines() # 将原来的所有读到的所有学生信息放入student_old中
else:
print("暂未保存学生信息文件")
student_id = input("请输入要修改的学生的学号:")
if student_id != "": # 不等于空字符串,说明已经存在学生了
with open(filename, "w", encoding="utf—8") as wfile:
for item in student_old:
d = dict(eval(item))
if d["学号"] == student_id:
print("已找到学生信息,可以进行修改")
while True:
try:
d["姓名"] = input('请输入学生姓名:')
d["英语成绩"] = 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') # 将不是要修改的学生信息重新写进文件
question = input("是否要继续修改其它学生信息?确定/取消\n")
if question == "确定":
modify()
def sort():
show()
if os.path.exists(filename):
with open(filename, "r", encoding="utf-8") as rfile:
student = rfile.readlines()
student_new = []
for item in student:
d = eval(item)
student_new.append(d)
else:
return
mode1 = input("请选择排序方式(0.升序 1.降序):")
if mode1 == "0":
mode1 = False
elif mode1 == "1":
mode1 = True
else:
print("您的输入方式有误,请重新输入")
sort()
mode2 = input("请您选择排序方式(1.按英语成绩排序, 2.按照python成绩排序, 3.按照java成绩排序, 4.按照总成绩排序):")
if mode2 == "1":
student_new.sort(key=lambda n: int(n["英语成绩"]), reverse=mode1)
elif mode2 == "2":
student_new.sort(key=lambda n: int(n["python成绩"]), reverse=mode1)
elif mode2 == "3":
student_new.sort(key=lambda n: int(n["java成绩"]), reverse=mode1)
elif mode2 == "4":
student_new.sort(key=lambda n: int(n['英语成绩']) + int(n['java成绩']) + int(n['python成绩']), reverse=mode1)
else:
print("您的输入有误,请您重新输入!!")
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_lst = []
if os.path.exists(filename): # 判断是否存在文件
with open(filename, "r", encoding="utf-8") as rfile:
students = rfile.readlines() # 读取学生信息
for item in students:
student_lst.append(dict(eval(item))) # 将读取的学生列表转为字典添加到student_lst列表中
if student_lst:
show_student(student_lst)
else:
print("暂未保存数据信息!!")
if __name__ == '__main__':
main()
打包成exe文件
利用pyinstaller
win + r,然后输入pyinstaller -F +py文件所在的文件路径