学生信息排序python_本地学生信息管理系统增删改查排序

这是一个使用Python编写的本地学生信息管理系统,它通过txt文件存储学号、姓名、英语、Python和Java成绩,实现了增、删、改、查、排序、显示总人数和全部信息的功能。
摘要由CSDN通过智能技术生成

'''

学生信息管理系统:

1、采用本地txt文件存储学生信息

2、包括学号、姓名、英语成绩、python成绩、java成绩

3、实现增、删、改、查、排序、计算总人数、显示全部、退出系统,功能

'''

filename="students.txt" # 定义存放学生信息的文件名

def main():

'''

系统主函数

'''

while True: # 循环,知道用户退出

menu() # 显示主菜单

choice = int(input("请选择:"))

if choice == 0:

a = input("是否确定退出系统?y/n :")

if a == 'y':

print("谢谢使用!")

break

else:

continue

elif choice == 1:

insert()

elif choice == 2:

search()

elif choice == 3:

delete()

elif choice == 4:

modify()

elif choice == 5:

sortd()

elif choice == 6:

total()

elif choice == 7:

show()

else:

print("选择有误,请重新选择!")

continue

def menu():

'''

主菜单函数

'''

print("===============学生信息管理系统================")

print("-------------------功能菜单--------------------")

print("\t1.录入学生信息")

print("\t2.查询学生信息")

print("\t3.删除学生信息")

print("\t4.修改学生信息")

print("\t5.排序")

print("\t6.学生总人数")

print("\t7.显示全部学生")

print("\t0.退出系统")

def get_all():

'''

获取储存的全部学生信息,存放到students列表中,每个列表元素为一个学生信息(格式为字符串)

'''

file = open(filename,'r',encoding='utf-8')

students = file.readlines()

return students

def insert():

'''

添加学生信息的函数

'''

students = [] # 保存输入的所有学生信息,每一条是一个学生的信息,保存在一个字典中

while True:

stu_id = input("录入学生ID:")

if not stu_id:

continue

try:

name = input("录入学生姓名:")

english = int(input("录入英语成绩:"))

python = int(input("录入python成绩:"))

java = int(input("录入java成绩:"))

except:

print("录入的信息有误。")

continue # 重新执行insert()函数

# 将学生信息存入字典中

stu = {'stu_id':stu_id,'name':name,'english':english,'python':python,'java':java}

# 将单个学生信息作为一个列表元素放入列表students中

students.append(stu)

answer = input("是否继续添加y/n:")

if answer == 'y':

continue # 如果继续添加,再次执行insert()函数

else:

break

save(students) # 调用保存数据的函数,将数据写入txt文件

def search():

'''

查询功能

'''

while True:

stu_id = input("输入要查询的学生ID:")

if not stu_id:

print('输入的ID有误,请重新输入。')

continue

else:

try:

file = open(filename,'r',encoding='utf-8')

students = get_all() # 调用get_all函数,获取文件中全部学生信息

except:

print('无学生信息')

break # 文件中没有学生信息,结束本函数,此处可以用return也一样

for stu in students:

stu = eval(stu) # 将学生信息字符串转换成字典

mark = 0

if stu['stu_id'] == stu_id:

print(f'查询到ID为{stu_id}的学生信息')

mark = 1

show(all=0,infos=[str(stu)]) # 调用显示函数

break

if not mark:

print(f'未找到ID为{stu_id}的学生信息')

answer = input('是否继续查询y/n:')

if answer == 'y':

continue

else:

break

def delete():

'''

删除学生信息函数

'''

while True:

students = get_all() # 获取全部学生信息

mark = 0

students_new = [] # 保留删除后的其他学生信息

show() # 显示全部学生信息

stu_id = input("请输入要删除的学生ID:")

if not stu_id:

print("输入有误")

continue # 回到delete函数头部,显示全部学生信息

else:

for stu in students:

stu = eval(stu) # 遍历全部学生信息,匹配要删除的ID值

if stu['stu_id'] == stu_id:

mark = 1 # 如果找到要删除的学生ID,标记mark为1

continue # 要删除的学生信息不放入students_new

else:

students_new.append(stu) # 如果该学生不是要删除的,则放入删除后的学生信息列表中

if not mark:

print(f"未找到ID为{stu_id}的学生信息") # 如果没有做出任何删除,则不保存

else:

print(f'已删除ID为{stu_id}的学生信息')

save(students_new,mode='w') # 如果删除了学生信息,则重新保存剩下的学生信息

answer = input("是否继续删除y/n:")

if answer == 'y':

continue

else:

break

def modify():

'''

修改学生信息函数

'''

show() # 显示全部学生信息

while True:

students_new = [] # 用于保存修改后的全部学生信息

mark = 0 # 修改标记

stu_id = input("请输入要修改的学生ID:")

if not stu_id:

print("输入的ID有误,请重新输入。")

continue

students = get_all()

for student in students:

student = eval(student)

if student['stu_id'] == stu_id:

try:

name = input("录入学生姓名:")

english = int(input("录入英语成绩:"))

python = int(input("录入python成绩:"))

java = int(input("录入java成绩:"))

except:

print("录入的信息有误。")

continue

stu = {'stu_id':stu_id,'name':name,'english':english,'python':python,'java':java}

students_new.append(stu) # 将修改的信息存入修改后的列表中

mark = 1

else:

students_new.append(student)

if mark == 0: # 标记为0,表示没有做任何修改,不做保存动作

print(f"未找到ID为{stu_id}的学生信息")

else:

save(students_new,mode='w') # 如果修改了学生信息,则重新保存全部信息

show() # 再次显示全部学生信息

answer = input("是否继续修改y/n:")

if answer == 'y':

continue

else:

break

def sortd():

'''

学生信息排序

'''

while True:

students_new = [] # 用来保存排好序的学生信息

students = get_all() # 获取全部学生信息

show() # 显示全部学生信息

asc_or_desc = input("请选择1.升序 2.降序:") # 选择排序方式

if asc_or_desc=='1':

asc_or_desc_bool = False

elif asc_or_desc=='2':

asc_or_desc_bool = True

else:

print("您的输入有误。")

sortd() # 重新调用sortd函数,效果与continue一样

sort_mode = int(input("按什么排序1.英语成绩 2.python成绩 3.java成绩 4.总成绩 :"))

for student in students:

# 遍历全部学生信息变为字典,作为单个元素,存入students_new列表中

students_new.append(eval(student))

if sort_mode==1:

# students_new列表调用系统排序函数sort,key表示用来排序的元素,reverse表示排序方式 True降序 False升序

students_new.sort(key=lambda x : int(x['english']),reverse=asc_or_desc_bool)

elif sort_mode==2:

students_new.sort(key=lambda x : int(x['python']),reverse=asc_or_desc_bool)

elif sort_mode==3:

students_new.sort(key=lambda x : int(x['java']),reverse=asc_or_desc_bool)

elif sort_mode==4:

students_new.sort(key=lambda x : int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool)

else:

print("输入有误,请重新输入")

# continue

sortd() # 此处递归,效果与continue一样

# 利用列表推导式,将列表students_new中的字典元素转换成字符串,放入show函数进行显示

show(0,[str(stu) for stu in students_new])

answer = input("是否重新排序y/n:")

if answer == 'y':

continue

else:

break

def total():

'''

显示当前学生总人数

'''

students = get_all()

print('当前学生总人数是%s:'%len(students))

def show(all=1,students=[]):

'''

格式化显示函数

all=1显示全部学生信息,all!=1 显示students参数传入的学生信息

students需要显示的学生信息,默认为空,则显示全部学生

'''

# 标题栏格式化显示

format_title = "{:^5}\t{:^6}\t{:^8}\t{:^8}\t{:^8}\t{:^8}"

print(format_title.format('ID','姓名','英语成绩','python成绩','java成绩','总成绩'))

# 数据栏格式化,^5表当前列占5格

format_data = "{:^5}\t{:^6}\t{:^8}\t{:^8}\t{:^8}\t{:^8}"

if all==1:

try:

students = get_all()

except:

print('无学生信息')

for stu in students:

# 遍历需要显示的学生信息,格式化输出,单个学生信息为字符串,需要转换成字典,才能提取具体的数据

stu = eval(stu)

print(format_data.format(stu['stu_id'],stu['name'],stu['english'],stu['python'],stu['java'],stu['english']+stu['python']+stu['java']))

def save(students,mode='a'):

'''

信息保存到本地txt文件的函数

students需要保存的学生信息

mode文件打开方式,默认为a追加,w为重写,r为只读,a+为读写

'''

try:

stu_txt = open(filename,mode,encoding='utf-8')

except:

stu_txt = open(filename,mode,encoding='utf-8')

for stu in students:

# 逐条写入文件,每个学生信息换行写入

stu_txt.write(str(stu)+'\n')

stu_txt.close() # 关闭文件流

if __name__ == '__main__':

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值