本文最后更新于 207 天前,其中的信息可能已经有所发展或是发生改变。
功能菜单:
- 录入学生信息
- 查找学生信息
- 删除学生信息
- 修改学生信息
- 排序
- 统计学生总人数
- 显示所有学生信息
- 退出系统
主函数流程
步骤流程图
1.录入学生信息
save(student) #用于将学生信息保存到文件
insert()函数,用于录入学生信息
2.查找学生信息
3.删除学生信息
4.修改学生信息
5.排序
6.统计学生总人数
7.显示所有学生信息
8.退出系统
代码:实现基本简单的学生管理系统
import os
filename = r'D:/casset/student.txt'
def main():
while True:
menu()
choice = int(input("请选择一个数字:"))
if choice in range(8):
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()
def menu():
print('=============学生信息管理系统==================')
print('-----------功能菜单------------')
print('\t\t\t\t\t\t\t\t\t1.录入学生信息')
print('\t\t\t\t\t\t\t\t\t2.查找学生信息')
print('\t\t\t\t\t\t\t\t\t3.删除学生信息')
print('\t\t\t\t\t\t\t\t\t4.修改学生信息')
print('\t\t\t\t\t\t\t\t\t5.排序')
print('\t\t\t\t\t\t\t\t\t6.统计学生总人数')
print('\t\t\t\t\t\t\t\t\t7.显示所有学生信息')
print('\t\t\t\t\t\t\t\t\t0.退出系统')
def insert():
student_list = []
while True:
id = input('请输入id:')
if not id:
break
name = input('请输入姓名:')
if not name:
break
try:
english = float(input('请输入英语成绩:'))
python = float(input('请输入python成绩:'))
java = float(input('请输入java成绩:'))
except:
print('输入无效,不是成绩类型,请重新输入:')
continue
student = {'id':id, 'name':name, 'english':english, 'python':python, 'java':java}
student_list.append(student)
answer = input('是否继续录入:y/n')
if answer == 'y':
continue
if answer == 'n':
break
save(student_list)
print('录入完毕')
def save(lst):
try:
stu_txt = open(filename,'a',encoding='utf-8')
except:
stu_txt = open(filename,'w',encoding='utf-8')
for item in lst:
stu_txt.write(str(item)+'\n')
stu_txt.close()
def search():
student_query = []
while True:
id = ''
name = ''
if os.path.exists(filename):
mode = input('若按id查找请输入1,如果按name查找请输入2:')
if mode == '1':
id = input('请输入要查找学生的id:')
elif mode == '2':
name = input('请输入要查找学生的name:')
else:
print('请重新输入指令:')
search()
with open(filename, 'r',encoding='utf-8')as rfile:
student = rfile.readlines()
for item in student:
d = dict(eval(item))
if id != '':
if d['id'] == id:
student_query.append(d)
elif name != '':
if d['name'] == name:
student_query.append(d)
show_student(student_query) #显示查询结果
student_query.clear()
answer = input('是否要继续查找:y/n')
if answer == 'y':
continue
else:
break
else:
print('暂未保存学生信息')
return
def show_student(lst):
if len(lst)==0:
print('未找到学生信息,数据无法显示!')
return
#定义标题显示格式
format_title = '{:^6}\t{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:^10}\t'
print(format_title.format('id','姓名','英语成绩','python成绩','java成绩','总成绩'))
#定义内容显示格式
format_data = '{:^6}\t{:^14}\t{:^12}\t{:^10}\t{:^12}\t{:^14}\t'
for item in lst:
print(format_data.format(item['id'],
item['name'],
item['english'],
item['python'],
item['java'],
float(item['english'])+float(item['python'])+float(item['java'])
))
def delete():
while True:
student_id = int(input('请输入要删除学生的id:'))
if student_id != '':
if os.path.exists(filename): # 检查文件是否存在
with open(filename,'r',encoding='utf-8')as file:
student_old = file.readlines()
else:
student_old = []
flag = False #标记是否删除
if student_old:
with open(filename,'w',encoding='utf-8')as wfile:
d = {}
for item in student_old:
d = dict(eval(item))
if int((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:
return
student_id = int(input('请输入您要修改的学生id:'))
with open(filename,'w',encoding='utf-8')as wfile:
for item in student_old:
d = dict(eval(item))
if int(d['id']) == student_id:
print('找到学生信息,可以修改该学生信息')
while True:
try:
d['name'] = input('请重新输入学生姓名:')
d['english'] = float(input('请重新输入英语成绩:'))
d['python'] = float(input('请重新输入python成绩:'))
d['java'] = float(input('请重新输入java成绩:'))
except:
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':
modify()
else:
print('已返回初始界面!')
def sort():
show()
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8')as rfile:
students_list = rfile.readlines()
students_new = []
for item in students_list:
students_new.append(eval(item))
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('输入错误,请重新输入:')
sort()
mond = input('请选择要排列的成绩:(0.总成绩 1.英语成绩 2.python成绩 3.java成绩):')
if mond == '0':
students_new.sort(key=lambda students_new : float(students_new['english'])+float(students_new['python'])+float(students_new['java']),reverse=asc_or_desc_bool)
elif mond == '1':
students_new.sort(key=lambda students_new : float(students_new['english']),reverse=asc_or_desc_bool)
elif mond == '2':
students_new.sort(key=lambda students_new : float(students_new['python']),reverse=asc_or_desc_bool)
elif mond == '3':
students_new.sort(key=lambda students_new : float(students_new['java']),reverse=asc_or_desc_bool)
else:
print('输入错误请重新输入')
sort()
show_student(students_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():
students_lst = []
if os.path.exists(filename):
with open(filename,'r',encoding='utf-8')as rfile:
students = rfile.readlines()
for item in students:
students_lst.append(eval(item)) #将学生信息转换成字典保存在列表中
if students_lst:
show_student(students_lst)
else:
print('无录入信息')
else:
print('暂未保存数据信息')
if __name__ == '__main__':
main()
修改完善
将已有功能封装在字典中,通过函数传递的功能实现调用(放在所有功能函数后)
func_dic = {'1':insert,'2':search,'3':delete,'4':modify,'5':sort,'6':total,'7':show}
def main():
while True:
menu()
choice = input("请选择一个数字:")
if choice == '0':
answer = input('您确定要退出吗:y/n')
if answer == 'y' or answer == 'Y':
print('谢谢使用!!!')
break
else:
continue
elif choice in func_dic:
func_dic[choice]()
else:
print("请输入正确的功能编号! ")
continue
if __name__ == '__main__':
main()