# encoding utf=8
# 定义一个函数,显示可以使用的功能列表给用户
import os
storage = []
def showInfo() -> None:
print("\t\t\tφ(゜▽゜*)? 欢迎来到南工学生系统! φ(゜▽゜*)?")
print("\t\t\t***********************菜单**********************\n")
print("\t\t\t* 1.添加学生的信息 *\n")
print("\t\t\t* 2.删除学生的信息 *\n")
print("\t\t\t* 3.修改学生的信息 *\n")
print("\t\t\t* 4.查询学生的信息 *\n")
print("\t\t\t* 5.遍历所有学生的信息 *\n")
print("\t\t\t* 6.按总成绩排序 *\n")
print("\t\t\t* 0.退出系统 *\n")
print("\t\t\t*************************************************\n")
# 定义一个列表,用来存储多个学生的信息
def jianbiao():
while True:
# 把功能列表进行显示给用户
# 提示用户选择功能
# 获取用户选择的功能
key = int(input("请选择功能(序号):"))
# 根据用户选择,完成相应功能
if key == 1:
print("您选择了添加学生信息功能")
name = input("请输入学生姓名:")
stuid = input("请输入学生学号(学号不可重复):")
age = input("请输入学生年龄:")
English = int(input("请输入学生英语成绩:"))
python = int(input("请输入学生python成绩:"))
sum1 = English + python
# 验证学号是否唯一
i = panduan(stuid)
if i != len(storage):
print("输入学生学号重复,添加失败!")
else:
# 定义一部字典,存放单个学生信息
stuinfo = {'name': name, 'id': stuid, 'age': age, 'English': English, 'python': python, 'sum': sum1}
# 单个学生信息放入列表
storage.append(stuinfo)
print("添加成功!")
elif key == 2:
print("您选择了删除学生功能")
stuid = input("请输入要删除的学生学号:")
# i记录要删除的下标,leap为标志位,如果找到leap=1,否则为0
i = panduan(stuid)
print(len(storage))
if i == len(storage):
print("没有此学生学号,删除失败!")
else:
del storage[i]
print("删除成功!")
elif key == 3:
print("您选择了修改学生信息功能")
stuid = input("请输入你要修改学生的学号:")
# 检测是否有此学号,然后进行修改信息
i = panduan(stuid)
if i != len(storage):
while True:
alternum = int(input(" 1.修改学号\n 2.修改姓名 \n 3.修改年龄 \n 4.退出修改\n"))
if alternum == 1:
newid = input("输入更改后的学号:")
# 修改后的学号要验证是否唯一
i = panduan(stuid)
if i == len(storage):
print("输入学号不可重复,修改失败!")
else:
storage[i]['id'] = newid
print("学号修改成功")
elif alternum == 2:
newname = input("输入更改后的姓名:")
storage[i]['name'] = newname
print("姓名修改成功")
elif alternum == 3:
newage = input("输入更改后的年龄:")
storage[i]['age'] = newage
print("年龄修改成功")
elif alternum == 4:
break
else:
print("输入错误请重新输入")
else:
print("没有此学号,修改失败!")
elif key == 4:
print("您选择了查询学生信息功能")
stuid = input("请输入你要查询学生的学号:")
# 验证是否有此学号
i = panduan(stuid)
if i != len(storage):
print("没有此学生学号,查询失败!")
else:
print("找到此学生,信息如下:")
print("学号:%s\n姓名:%s\n年龄:%s\n" % (storage[i]['id'], storage[i]['name'], storage[i]['age']))
elif key == 5:
# 遍历并输出所有学生的信息
print('*' * 20)
print("接下来进行遍历所有的学生信息...")
printf()
elif key == 6:
# 排序并输出排序后学生信息
paixu()
elif key == 0:
# 退出功能,尽量往不退出的方向引
quitconfirm = input("亲,真的要退出么 (yes或者no)??~~(>_<)~~??")
if quitconfirm == 'yes':
print("欢迎使用本系统,谢谢")
break
else:
print("您输入有误,请重新输入")
print('按Enter键返回菜单!')
os.system("pause") # 暂停运行,便于上一个选项的显示
showInfo()
return storage
def txthas():
# 判断是否有文件数据,若没有就新建一个
if not os.path.isfile("学生信息.txt"):
f1 = open("学生信息.txt", 'w')
print("暂无任何数据,需要添加学生信息!")
num = int(input("请输入添加学生个数:"))
for i in range(num):
name = input("请输入学生姓名:")
stuid = input("请输入学生学号(学号不可重复):")
age = input("请输入学生年龄:")
English = int(input("请输入学生英语成绩:"))
python = int(input("请输入学生python成绩:"))
sum1 = English + python
# 验证学号是否唯一
i = panduan(stuid)
if i != len(storage):
print("输入学生学号重复,添加失败!")
else:
# 定义一部字典,存放单个学生信息
stuinfo = {'name': name, 'id': stuid, 'age': age, 'English': English, 'python': python, 'sum': sum1}
# 单个学生信息放入列表
storage.append(stuinfo)
print("添加成功!")
settxt()
f1.flush()
f1.close()
else:
readtxt()
# 若有文件就提取出来
def panduan(stuid):
# 判断是否学号重复,并返回该学号在列表中的索引
i = 0
for temp in storage:
if temp['id'] == stuid:
break
else:
i += 1
return i
def printf():
# 打印列表中的全部数据
id1 = "学号"
name1 = "姓名"
age1 = "年龄"
English = "英语"
python = "python"
sum1 = "总分"
print(f"{id1:^15}" + f"{name1:^15}" + f"{age1:^17}" + f"{English:^10}" + f"{python:^19}" + f"{sum1:^10}")
for temp in storage:
print(
f"{temp['id']:^15}" + f"{temp['name']:^17}" + f"{temp['age']:^15}" + f"{temp['English']:^15}" + f"{temp['python']:^15}" + f"{temp['sum']:^15}")
print("*" * 20)
def settxt():
# 将列表中的数据存入文件
f1 = open("学生信息.txt", 'w')
for i in range(len(storage)):
for s, v in storage[i].items():
f1.write(str(v) + ' ')
f1.flush()
f1.close()
def readtxt():
# 将文件中的数据存入列表
duct = {}
with open('学生信息.txt', 'r') as f1:
linelen = f1.readlines()
if linelen:
for i in linelen:
n = i.split(' ')
n2 = n
for j in range(len(n) // 6):
n1 = n2[:6]
for v, i in zip(['name', 'id', 'age', 'English', 'python', 'sum'], n1):
duct[v] = i
if len(duct) == 3:
storage.append(duct)
duct = {}
n2 = n2[6:]
def paixu():
# 根据总分将列表中的数据从大到小排列
for i in range(len(storage)):
for j in range(len(storage) - i - 1):
if int(storage[j]['sum']) < int(storage[j + 1]['sum']):
storage[j], storage[j + 1] = storage[j + 1], storage[j]
else:
pass
print("排序完毕!")
print('*' * 20)
print("下列为排名:")
printf()
if __name__ == "__main__":
txthas()
showInfo()
jianbiao()
settxt()
欢迎大家学习交流,也感谢博主楼下丶小黑,给予了我初始代码,十分感谢!也同样希望大家学习交流!