本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、前言
相信很多小伙伴在学校期间都会被要求实现一个学生管理系统,很多是让用C语言实现,有的是要求Python。 这里通过python实现了一个学生管理系统,考试/交作业必备!
网上很多的学生管理系统版本是用列表来存储学生的,实际上这样并不是最好的实现方案。 既然学生的学号是唯一的,那我们可以直接使用字典来做,这样在查询学生是否存在的速度上会更快一些。而且更方便排序等。
二、实现效果
包含的功能(学号为唯一标识):
- 添加学生
- 修改学生信息
- 删除学生信息
- 查询单个学生信息
- 查询所有学生信息
还做了一些保护判断:
- 输入错误的序号会给予提示;
- 创建已存在学号的学生会提示“已存在”;
- 删除/修改不存在的学生会提示“不存在”;
三、代码特点
上图菜单页的功能映射传递的实现方案往往更多的是下面这样:
key = int(input("请选择功能(序号):"))
if key==1: # key等于1时,调用增加学生的方法
add_new_student()
elif key==2:
del_student()
elif key==3:
update_student()
else:
exit()
通过if else 判断key值来调用不同的方法,这样有个不好的地方是,当方法越来越多后,代码量也会增加不少,所以这里我使用了字典里面包含方法的方式来实现:
func_dict = {1: add_new_student, 2: del_student, 3: update_student, 4: search_student, 5: print_all_student, 6: exit}
key = int(input("请选择功能(序号):"))
func = func_dict.get(key)
func() if func else print('输入错误!请重新输入!'+space)
这样哪怕增加的方法越来越多,也不会增加更多的代码。
源码如下:
def index():
"""
管理系统主页
"""
print("*" * 30)
print("Python学生管理系统\n\n1.添加学生的信息\n2.删除学生的信息\n3.修改学生的信息\n4.查询学生的信息\n5.查询所有学生的信息\n6.退出系统")
print("*" * 30)
def add_new_student():
"""
新增学生信息
"""
stu_id = input("请输入学号:")
res = students.get(stu_id)
if res:
print('该学生已存在!' + space)
return
name = input("请输入姓名:")
age = input("请输入年龄:")
students[stu_id] = {'stu_id': stu_id, 'name': name, 'age': age}
print('添加成功!' + space)
def del_student():
"""
删除学生信息
"""
del_stu_id = input("请输入要删除的学生学号:")
print('删除成功!' + space) if students.pop(del_stu_id, None) else print("该学生不存在!" + space)
def update_student():
"""
修改学生的信息
"""
stu_id = input("请输入要修改的学生的学号:")
stu = search_student(stu_id)
if stu:
name = input("请输入新的姓名:")
age = input("请输入新的年龄:")
students[stu_id].update({'name': name, 'age': age})
print('修改成功!' + space)
else:
print('该学生不存在!' + space)
def search_student(stu_id=None):
"""
查询学生的信息
"""
stu_id = stu_id or input("请输入要查询的学生的学号:")
stu = students.get(stu_id)
print(f"{stu['stu_id']}\t{stu['name']}\t{stu['age']}" + space) if stu else print('学生不存在!' + space)
return stu
def print_all_student():
"""
查询所有学生信息
"""
print('学号\t姓名\t年龄')
for i in students.values():
print(f"{i['stu_id']}\t{i['name']}\t{i['age']}")
print(space)
def exit():
"""
退出系统
"""
exit_flag = input("您确定要退出吗?输入1退出\输入0不退出\n")
if exit_flag == '1':
print('退出成功!')
quit()
students, space = {}, '\n\n' # 初始化学生信息为空,段落间隔空两行
func_dict = {1: add_new_student, 2: del_student, 3: update_student, 4: search_student, 5: print_all_student, 6: exit}
while True:
index() # 显示主界面
key = int(input("请选择功能(序号):"))
func = func_dict.get(key)
func() if func else print('输入错误!请重新输入!'+space)
四、总结
整个代码内容不多,实现也很简单,在我大学的时候,老师要求我们用C语言来写,现在越来越多的要求python了,用pytho实现比C语言会简单不少,毕竟语法简洁很多。 小伙伴们拿到源码后可自己进行diy,实现诸如排序、密码管理,批量操作的功能等。