前言
坐标:广油电信19某L姓氏男子
自己做的比较满意的python学生信息管理系统,拿出来跟大家分享交流一下
提示:以下是本篇文章正文内容,下面案例可供参考
一、各模块功能展示
二、源码如下
1.student_main
# -*- coding = utf-8 -*-
# @Time : 2021/3/14 16:04
# @Author : gydxljj
# @File : student_main.py
# @Software : PyCharm
# 导入学生方法模块
import student_methods
# 无限循环,由用户决定循环是否退出
while True:
# TODO 显示功能菜单
student_methods.show_menu()
function = input("->输入功能键(0-5):")
print("你选择的操作是:" + function)
# 成员运算符,判断用户输入是否在指定列表内
choice_list = ["0", "1", "2", "3", "4", "5"]
if function in choice_list:
# TODO 新增学生
if function == "1":
student_methods.add_student()
# TODO 查询学生
elif function == "2":
student_methods.search_info()
# TODO 修改学生
elif function == "3":
student_methods.student_revise()
# TODO 删除学生
elif function == "4":
student_methods.student_del()
# TODO 遍历/排序学生
elif function == "5":
student_methods.show_student()
elif function == "0":
print("欢迎再来哦~")
break
else:
print("输入错误,请重新输入:")
2.student_methods
# -*- coding = utf-8 -*-
# @Time : 2021/3/14 16:04
# @Author : gydxljj
# @File : student_methods.py
# @Software : PyCharm
# 记录所有学生列表
student_list = []
# 记录分数列表
total_list = []
# 记录添加学生人数
num = 0
def show_menu():
""" 显示菜单 """
menu = [
"-学生信息-",
"*管理系统*",
"•1.新增学生",
"•2.查询学生",
"•3.修改学生",
"•4.删除学生",
"•5.遍历排序",
"•0.退出系统"
]
print_1()
for i in menu:
print("┃┉┄%s┄┉.┃" % i.strip().center(10))
print_2()
def print_1():
"""打印函数"""
print("┏" + "━" * 20 + "┓")
def print_2():
print("┗" + "━" * 20 + "┛")
def add_student():
"""新增学生"""
# 记录已添加的学生个数
global num
print("*建议*()內提示信息是为了字段对齐")
print("-" * 50)
while True:
# 1.提示用户输入学生信息
classroom_str = input("->请输入班级(几班?):")
name_str = input("->请输入姓名(中文三字):")
num_str = input("->请输入学号(三位):")
sex_str = input("->请输入性别(男女?):")
print("输入三门成绩:")
# 2.使用用户输入的信息建立一个学生字典
student_dict = {"name": name_str,
"classroom": classroom_str,
"num": num_str,
"sex": sex_str}
math = float(input("->请输入数学成绩:"))
english = float(input("->请输入英语成绩:"))
chinese = float(input("->请输入语文成绩:"))
total = math + english + chinese
average = (math + english + chinese)/3
student_dict['math'] = math
student_dict['english'] = english
student_dict['chinese'] = chinese
student_dict['total'] = total
student_dict['average'] = average
total_list.append(student_dict['total'])
# 3.将学生字典添加到列表中
student_list.append(student_dict)
num += 1
answer = input("是否继续添加?yes/no\n")
# 判断是否一次输入多个学生记录
if answer == "yes":
continue
else:
break
print("-" * 50)
# 4.提示用户添加成功
print("%d位学生信息添加成功" % num)
def show_student():
"""遍历列表"""
print("-" * 60)
# 打印表头
# 判断列表是否为空
if not student_list:
print("没有任何记录,请新增一个学生记录")
else:
print("遍历的学生列表如下↓")
print("=" * 88)
for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
print("|%s" % name.center(7), end="")
print(" ")
print("-" * 88)
# 打印分割线
# 遍历学生列表以此输出字典信息
student_new = []
for student_dict in student_list:
# 将遍历出来的字典重新加入新的列表中
student_new.append(student_dict)
print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
str(student_dict["name"]).center(6),
str(student_dict["num"]).center(10),
str(student_dict["sex"]).center(8),
str(student_dict["math"]).center(8),
str(student_dict["english"]).center(10),
str(student_dict["chinese"]).center(10),
str(student_dict["total"]).center(10),
student_dict["average"]))
print("-" * 88)
# 学生个数大于等于2则进行排序询问
if len(student_list) == 1:
print("(alert____:)大于等于2个学生才能排序喔~")
if len(student_list) >= 2:
answer = input("是否进行排序?yes/no\n")
if answer == "yes":
# 在新的列表对总分进行重新排序,目的保留原来列表的顺序
switch = input("->对一下哪项排序(1.总分 2.平均分 3.数学成绩 4.语文成绩 5.英语成绩)\n")
if switch == "1":
choose = input("1.升序 2.降序\n")
if choose == "1":
# 匿名函数:lambda关键字来定义
# 根据参数key制定根据哪个字段对列表元素进行排序
student_new.sort(key=lambda x: x['total'], reverse=False)
else:
student_new.sort(key=lambda x: x['total'], reverse=True)
elif switch == "2":
choose = input("1.升序 2.降序\n")
if choose == "1":
student_new.sort(key=lambda x: x['average'], reverse=False)
else:
student_new.sort(key=lambda x: x['average'], reverse=True)
elif switch == "3":
choose = input("1.升序 2.降序\n")
if choose == "1":
student_new.sort(key=lambda x: x['math'], reverse=False)
else:
student_new.sort(key=lambda x: x['math'], reverse=True)
elif switch == "4":
choose = input("1.升序 2.降序\n")
if choose == "1":
student_new.sort(key=lambda x: x['chinese'], reverse=False)
else:
student_new.sort(key=lambda x: x['chinese'], reverse=True)
else:
choose = input("1.升序 2.降序\n")
if choose == "1":
student_new.sort(key=lambda x: x['english'], reverse=False)
else:
student_new.sort(key=lambda x: x['english'], reverse=True)
print("->排序后的学生列表")
print("=" * 88)
for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
print("|%s" % name.center(7), end="")
print(" ")
print("-" * 88)
for student_dict in student_new:
print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
str(student_dict["name"]).center(6),
str(student_dict["num"]).center(10),
str(student_dict["sex"]).center(8),
str(student_dict["math"]).center(8),
str(student_dict["english"]).center(10),
str(student_dict["chinese"]).center(10),
str(student_dict["total"]).center(10),
student_dict["average"]))
print("-" * 88)
else:
return
else:
return
def search_info():
"""查询信息"""
print("-" * 60)
# 1.提示用户输入要搜索的姓名
name_match = input("请输入要查找信息的姓名:")
# 2.遍历学生列表,查询要搜索的姓名,如果没有找到应该提示用户
for student_dict in student_list:
if student_dict["name"] == name_match:
print("=" * 88)
for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
print("|%s" % name.center(7), end="")
print(" ")
print("-" * 88)
print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
str(student_dict["name"]).center(6),
str(student_dict["num"]).center(10),
str(student_dict["sex"]).center(8),
str(student_dict["math"]).center(8),
str(student_dict["english"]).center(10),
str(student_dict["chinese"]).center(10),
str(student_dict["total"]).center(10),
student_dict["average"]))
print("-" * 88)
break
else:
print("输入错误或没有该学生哦~")
def input_info(dict_value, tips_message):
"""
输入判断
:param dict_value: 原字典值
:param tips_message: 用户输入信息
:return:用户输入内容返回内容,否则返回原内容
"""
result = input(tips_message)
# 针对用户输入进行判断,若用户输入内容,直接返回结果,
if len(result) > 0:
return result
# 如果用户没有输入内容,返回字典中原有的值
else:
return dict_value
def student_revise():
"""修改学生"""
print("-" * 60)
# 1.提示用户输入要修改的姓名
name_match = input("请输入要修改信息的姓名:")
# 2.遍历学生列表,查询要搜索的姓名,如果没有找到应该提示用户
for student_dict in student_list:
if student_dict["name"] == name_match:
print("=" * 88)
for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
print("|%s" % name.center(7), end="")
print(" ")
print("-" * 88)
print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
str(student_dict["name"]).center(6),
str(student_dict["num"]).center(10),
str(student_dict["sex"]).center(8),
str(student_dict["math"]).center(8),
str(student_dict["english"]).center(10),
str(student_dict["chinese"]).center(10),
str(student_dict["total"]).center(10),
student_dict["average"]))
print("-" * 88)
student_dict['classroom'] = input_info(student_dict['classroom'], "->请输入新的班级:[回车不输入]")
student_dict['name'] = input_info(student_dict['name'], "->请输入新的名字:[回车不输入]")
student_dict['num'] = input_info(student_dict['num'], "->请输入新的学号:[回车不输入]")
student_dict['sex'] = input_info(student_dict['sex'], "->请输入新的性别:[回车不输入]")
student_dict['math'] = float(input_info(student_dict['math'], "->请输入新的数学成绩:[回车不输入]"))
student_dict['english'] = float(input_info(student_dict['english'], "->请输入新的英语成绩:[回车不输入]"))
student_dict['chinese'] = float(input_info(student_dict['chinese'], "->请输入新的语文成绩:[回车不输入]"))
student_dict['total'] = count_score(student_dict)
student_dict['average'] = average_score(student_dict)
print("学生%s信息修改成功" % student_dict['name'])
break
else:
print("输入错误或没有该学生哦~")
def student_del():
"""删除学生"""
print("-" * 60)
# 1.提示用户输入要搜索的姓名
name_match = input("请输入要删除信息的姓名:")
# 2.遍历学生列表,查询要搜索的姓名,如果没有找到应该提示用户
for student_dict in student_list:
if student_dict["name"] == name_match:
print("=" * 88)
for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
print("|%s" % name.center(7), end="")
print(" ")
print("-" * 88)
print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
str(student_dict["name"]).center(6),
str(student_dict["num"]).center(10),
str(student_dict["sex"]).center(8),
str(student_dict["math"]).center(8),
str(student_dict["english"]).center(10),
str(student_dict["chinese"]).center(10),
str(student_dict["total"]).center(10),
student_dict["average"]))
print("-" * 88)
question = input("确定要删除该学生信息吗?yes/no\n")
if question == "yes":
print(" ")
student_list.remove(student_dict)
print("删除成功了哦~")
break
else:
print("输入错误或没有该学生哦~")
def count_score(find_score):
"""
计算总分
:param find_score:修改后的学生字典
:return:返回重新计算后的total
"""
total = find_score['math'] + find_score['english'] + find_score['chinese']
return total
def average_score(find_average):
"""
计算平均分
:param find_average:修改后的学生字典
:return:返回重新计算后的average
"""
average = (find_average['math'] + find_average['english'] + find_average['chinese'])/3
return average
总结
使用该代码最好用pycharm新建两个文件夹,一个是student_main导入上面student_main的代码,另一个你懂得~~
本人也是菜鸟一枚,欢迎大家吐槽。