函数综合练习_应用学员管理系统
- 应用:学员管理系统
- 递归
- lambda 表达式
- 高阶函数
1 应用:学员管理系统
1.1 系统简介
需求: 进入系统显示系统功能界面,功能如下
- 1、添加学员
- 2、删除学员
- 3、修改学员信息
- 4、查询学员信息
- 5、显示所有学员信息
- 6、退出系统
系统共有 6 个功能,用户根据自己需求选取。
1.2 步骤分析
-
显示功能界面
-
用户输入功能序号
-
根据用户输入的功能序列号,执行不同的功能通过函数实现
3.1 定义函数
3.2 调用函数
1.3 需求实现
1.3.1 框架构建
定义函数print_info
负责显示系统功能。然后再将代码框架搭建出来
工作中,需要根据实际需求调优代码,如下:
- 用户选择系统功能的代码需要循环使用,直到用户主动退出系统
- 如果用户输入 1-6 以外的数字,则需要提示用户
输入功能序号有误,请重新选择!
'''
1.显示功能界面
2.用户输入功能序号
3.按照用户输入的功能序号,执行不同的功能(函数)
'''
# 1.定义功能界面函数
def info_print():
print("请选择功能--------------")
print("1.添加学员")
print("2.删除学员")
print("3.修改学员信息")
print("4.查询学员信息")
print("5.显示所有学员")
print("6.退出系统")
print("-"*30)
# 系统功能需要循环使用,直到用户输入 6 才退出系统
# 通过 while true 实现无限循环
while True:
info_print()
# 2.用户输入功能序号
# 由于 input 会将用户输入的内容转换为 str 类型,所以通过 int 转换数据类型
select_num = int(input("请输入功能序号:"))
# 3.根据用户输入的功能序列号,执行不同的功能通过函数实现
if select_num == 1:
print("添加学员")
elif select_num == 2:
print("删除学员")
elif select_num == 3:
print("修改学员信息")
elif select_num == 4:
print("查询学员信息")
elif select_num == 5:
print("显示所有学员")
elif select_num == 6:
# break 退出循环程序
break
else:
# 因为在功能中只有 1-6 这几个功能,所以当用户输入其他数字的时候就提示功能有误
print("输入功能序号有误,请重新选择!")
1.3.2 定义不同功能的函数
在编写代码之前,我们需要先明确每一个学员信息应该如何存储,比如学员信息都需要包含 学号、姓名、手机号
而对于这种数据类型在 python 中推荐通过字典存储,所以每一位学员信息就是一个字典
由于可能会出现不同的班级,在班级中还有不同的学员信息,所以这个时候就需要通过列表来实现存储,每个列表中存放的就是该班级的每个学员信息也就是所谓的字典
由于需要后期对学员信息做增删改查,而增删改查这么个操作需要对班级的这个列表做操作,所有这个增删改查需要被所有函数能够实现调用,那么他就是一个全局变量
所有功能函数都是操作学员信息,存储所有学员信息应该是一个全局变量,数据类型为列表。
class_info = []
我们都知道不同功能就是不同函数,所以如下步骤:
- 定义函数
- 调用函数
1.3.2.1 添加学员
-
需求分析:
-
接收用户输入学员信息,并保存
-
判断是否添加学员信息(由于 class 是一个列表,则可以通过 append 实现追加数据)
2.1 如果学员名字已经存在,则报错提示
2.2 如果学员名字不存在,则准备空字典,将用户输入的数据追加到字典,在列表中追加字典数据
-
对呀的 if 田间成立的位置调用该函数
-
-
代码实现
# 4.实现添加学员功能函数
def add_student():
"""
注释信息:通过 help 查看
添加学员函数
"""
new_id = input("输入学号:")
new_name = input("输入姓名:")
new_tel = input("输入手机号:")
# 声明 class_info 为全局变量
global class_info
# 遍历取出列表单个数据,应为单个数据为字典,这通过 name key 与 new_name 做判断是否相同
for i in class_info:
if new_name == i["name"]:
print(f"{new_name} 该用户已经存在")
# 退出当前函数
return
# 创建 student_dict 字典来接收不存的新学员信息
student_dict = {}
# 将用户输入的数据追加至 student_dict
student_dict["id"] = new_id
student_dict["name"] = new_name
student_dict["tel"] = new_tel
# 通过 append 将学员信息追加至 class_info
class_info.append(student_dict)
print(class_info)
[13:40:37 root@dev py-demo]#/bin/python3 /root/py-demo/day-1/test.py
请选择功能--------------
1.添加学员
2.删除学员
3.修改学员信息
4.查询学员信息
5.显示所有学员
6.退出系统
------------------------------
请输入功能序号:1
输入学号:1
输入姓名:bb
输入手机号:122
[{'id': '1', 'name': 'bb', 'tel': '122'}]
请选择功能--------------
1.添加学员
2.删除学员
3.修改学员信息
4.查询学员信息
5.显示所有学员
6.退出系统
------------------------------
请输入功能序号:1
输入学号:2
输入姓名:bb
输入手机号:123
bb 该用户已经存在 # 提示 bb 用户已经存在
请选择功能--------------
1.添加学员
2.删除学员
3.修改学员信息
4.查询学员信息
5.显示所有学员
6.退出系统
------------------------------
1.3.2.2 删除学员
需求分析:
按用户输入的学员姓名进行删除
-
用户输入目标学员姓名
-
检查这个学员是否存在
2.1 如果存在,则列表删除这个数据2.2 如果不存在,则提示“该用户不存在’
-
对应的 if 条件成立的位置调用该函数
'''
1. 用户输入要删除的学员的姓名
2. 判断学员是否存在:存在则删除;不存在提示
3. 声明 class_info 是全局变量遍历列表
4. 判断学员是否存在:存在执行删除(列表里面的字典),并 break 这个系统不允许重名
5. 删除了一个后面的不再需要遍历直接退出循环
'''
def del_student():
# 接收用户删除学员名
del_name = input("请输入需要删除的学员名称:")
# 调用全局变量
global class_info
# 通过 for in 循环将每一个字典单独遍历
for i in class_info:
# 判断需要删除的学员是否匹配
if del_name == i["name"]:
# 调用 remove() 函数清空 i 数据
class_info.remove(i)
# 通过 break 退出循环避免用户名重复导致程序崩溃
break
# else 与 for 同级别时,则该循环正常结束都没有遍历到需要删除的学员那么就提示 del_name,"学员未注册"
else:
print(del_name,"学员未注册")
print(class_info)
# 输出所有的 class_info 信息,查看是否删除成功
print(class_info)
print(del_name,"学员删除成功!")
1.3.2.3 修改学员信息
需求分析:
- 用户输入目标学员姓名
- 检查这个学员是否存在
2.1 如果存在,则修改这位学员的信息,例如手机号
2.2 如果不存在,则报错 - 对应的 if 条件成立的位置调用该函数
- 代码实现:
# 修改函数
def modify_student():
"""
注释信息:通过 help 查看
修改学员信息函数
"""
# 查找学员接收用户输入数据
modify_name = input("输入需要修改的学员:")
global class_info
# for 循环判断用户是否存在
for i in class_info:
if modify_name == i["name"]:
# 直接通过 input 获取数据,并赋值
i['tel'] = print("请输入修改手机号:")
# 通过 break 退出循环避免用户名重复导致程序崩溃
break
else:
print("用户名输入有误")
print(class_info)
1.3.2.4 查询学员信息
需求分析:
- 用户输入目标学员姓名
- 检查学员是否存在
2.1 如果存在,则显示这个学员的信息
2.2 如果不存在,则报错提示 - 对应的if条件成立的位置调用该函数
代码实现
# 查询函数
def query_student():
"""
该函数通过输入用户名实现查询
"""
query_name = input("请输入需要查询的姓名")
global class_info
for i in class_info:
if query_name == i["name"]:
print(f"学员查询结果学号:{i['id']},姓名:{i['name']},手机号:{i['tel']}")
# 通过 break 退出循环避免用户名重复导致程序崩溃
break
else:
print("查询用户有误!")
1.3.2.5 显示所有学员信息
def query_all():
"""
查看所有学员信息
"""
print('学员\t姓名\t手机号\t')
for i in class_info:
print(f'{i["id"]}\t{i["name"]}\t{i["tel"]}')
1.3.2.6 退出程序
因为在 while True
死循环中需要通过 break 实现退出循环从而结束程序
elif select_num == 6:
exit_flag = input("是否退出程序:(yes or no)")
if exit_flag == "yes" :
# break 退出循环并实现退出程序
break
2 全部代码
'''
1.显示功能界面
2.用户输入功能序号
3.按照用户输入的功能序号,执行不同的功能(函数)
'''
class_info = []
# 1.定义功能界面函数
def info_print():
"""
功能界面
"""
print("请选择功能--------------")
print("1.添加学员")
print("2.删除学员")
print("3.修改学员信息")
print("4.查询学员信息")
print("5.显示所有学员")
print("6.退出系统")
print("-"*30)
# 4.实现添加学员功能函数
def add_student():
"""
注释信息:通过 help 查看
添加学员函数
"""
new_id = input("输入学号:")
new_name = input("输入姓名:")
new_tel = input("输入手机号:")
# 声明 class_info 为全局变量
global class_info
# 遍历取出列表单个数据,应为单个数据为字典,这通过 name key 与 new_name 做判断是否相同
for i in class_info:
if new_name == i["name"]:
print(f"{new_name}该用户已经存在")
return
# 创建 student_dict 字典来接收不存的新学员信息
student_dict = {}
# 将用户输入的数据追加至 student_dict
student_dict['id'] = new_id
student_dict['name'] = new_name
student_dict['tel'] = new_tel
# 通过 append 将学员信息追加至 class_info
class_info.append(student_dict)
print(class_info)
def del_student():
"""
注释信息:通过 help 查看
删除学员函数
"""
del_name = input("请输入需要删除的学员名称:")
global class_info
for i in class_info:
if del_name == i["name"]:
class_info.remove(i)
print(del_name,"学员删除成功!")
break
else:
print(del_name,"学员未注册")
print(class_info)
print(class_info)
# 修改函数
def modify_student():
"""
注释信息:通过 help 查看
修改学员信息函数
"""
# 查找学员接收用户输入数据
modify_name = input("输入需要修改的学员:")
global class_info
# for 循环判断用户是否存在
for i in class_info:
if modify_name == i["name"]:
# 直接通过 input 获取数据,并赋值
i['tel'] = print("请输入修改手机号:")
# 修改了上述条件之后终止循环
break
else:
print("用户名输入有误")
print(class_info)
# 查询函数
def query_student():
"""
该函数通过输入用户名实现查询
"""
query_name = input("请输入需要查询的姓名:")
global class_info
for i in class_info:
if query_name == i["name"]:
print(f"学员查询结果学号:{i['id']},姓名:{i['name']},手机号:{i['tel']}")
break
else:
print("查询用户有误!")
# 查询所有信息
def query_all():
"""
查看所有学员信息
"""
print('学员\t姓名\t手机号\t')
for i in class_info:
print(f'{i["id"]}\t{i["name"]}\t{i["tel"]}')
# 系统功能需要循环使用,直到用户输入 6 才退出系统
# 通过 while true 实现无限循环
while True:
info_print()
# 2.用户输入功能序号
# 由于 input 会将用户输入的内容转换为 str 类型,所以通过 int 转换数据类型
select_num = int(input("请输入功能序号:"))
# 3.根据用户输入的功能序列号,执行不同的功能通过函数实现
if select_num == 1:
add_student()
elif select_num == 2:
del_student()
elif select_num == 3:
modify_student()
elif select_num == 4:
query_student()
elif select_num == 5:
query_all()
elif select_num == 6:
exit_flag = input("是否退出程序:(yes or no)")
if exit_flag == "yes" :
# break 退出循环并实现退出程序
break
else:
# 因为在功能中只有 1-6 这几个功能,所以当用户输入其他数字的时候就提示功能有误
print("输入功能序号有误,请重新选择!")