# 学生信息管理系统 —— 函数封装
"""
思考:
1、学生信息有哪些?
2、是否区分学生、老师、管理员权限
3、该怎么存储学生信息
4、是否需要登录界面
介绍:
在工作生活中,信息管理很常见、例如:文件归档、账户流水账、登录信息、宿舍管理、购票管理、学生信息管理等。
知识点:
1、自定义函数的使用:函数封装、调用,使用到了默认参数和关键字参数
2、字典的使用:增 删 改 查 遍历
3、循环语句:while、for
4、条件语句:if、elif、else
5、跳转语句:break、continue
6、字符串运算
7、旗帜应用,这个很重要
不足(待改善):
1、在打印学生信息使用到了制表符't',但打印出来的效果并不理想,有哪位高人可以指点一下
2、此程序无太强的可读性,后续可以完善,添加一些条件和提示语
3、字典的特点:无法存储两个姓名一样的学生,体现了字典的不可重复性
4、在新建学生信息时,如果出现重复新建,会覆盖原有的学生信息,等价于修改了学生信息,可以添加遍历判断
5、程序员的愤怒“删除库跑路”,在本程序没有体现,可以利用clear()函数实现
6、最大的通病:没有实际保存,退出程序即恢复出厂设置,有待改善
"""
# 定义一个空字典,用存储学生信息 # 字典的特点:元素不可重复、元素无序
stu_info = dict()
message = '请输入编号:'
# 函数封装 ==========================================================
# 菜单打印
def menu():
print(' ' + '='*5 + '欢迎进入学生管理系统' + '='*5)
print('1.新建学生信息t2.删除学生信息')
print('3.修改学生信息t4.查寻学生信息')
print('5.查看所有学生信息t0.退出')
# 打印标题 ==========================================================
def show_title(num1=0, info='='*10, num=9):
print(' '*num1 + '=' * num + info + '=' * num)
# 输入编号(选择菜单) ==============================================
def input_num(message):
return input(message)
# 1.新建学生信息 ====================================================
def new_stu_info():
show_title(info='新建学生信息') # 打印标题
# 输入学生信息
name = input('请输入学生姓名:')
stu_id = input('请输入学生学号:')
phone_num = input('请输入学生手机号码:')
addr = input('请输入学生家庭地址:')
# 存储学生信息(添加到字典中)
stu_info[name] = [stu_id, phone_num, addr]
# student_info.update(name=[stu_id, phone_num, addr]) # 注意:这里字典添加元素不能用update()
# 2.删除学生信息 ====================================================
def del_stu_info():
show_title(info='删除学生信息') # 打印标题
# 判断字典是否为空
if stu_info == dict():
show_title(info='暂无学生信息') # 打印提示
return
# 输入需要删除的学生姓名
name = input('请输入需要删除的学生姓名:')
flag_del = 0 # 定义删除的旗帜
# 在字典中查找是否存在
for i in stu_info:
if name == i:
print('学生姓名:{}t学号:{}t手机号码:{}t家庭地址:{}'.format(name, stu_info[i][0], stu_info[i][1], stu_info[i][2]))
stu_info.pop(name) # 删除字典元素
show_title(info='已删除成功', num1=1) # 打印删除成功
flag_del = 1 # 删除旗帜赋值
break
# 判断是否删除此学生信息
if flag_del != 1:
show_title(info='无此学生信息') # 打印提示
# 3.修改学生信息 ====================================================
def change_stu_info():
show_title(info='修改学生信息') # 打印标题
# 判断字典是否为空
if stu_info == dict():
show_title(info='暂无学生信息') # 打印提示
return
# 输入需要修改的学生姓名
name = input('请输入需要修改的学生姓名:')
flag_change = 0 # 定义修改的旗帜
# 在字典中查找是否存在
for i in stu_info:
if name == i:
# 输入学生新的信息
new_name = input('请输入学生新的姓名:')
new_stu_id = input('请输入学生学号:')
new_phone_num = input('请输入学生手机号码:')
new_addr = input('请输入学生家庭地址:')
# 判断是否需要删除原来的元素
if new_name != name:
stu_info.pop(name) # 删除原来的元素
# 存储修改后学生信息
stu_info[new_name] = [new_stu_id, new_phone_num, new_addr]
print('学生姓名:{}t学号:{}t手机号码:{}t家庭地址:{}'.format(new_name, new_stu_id, new_phone_num, new_addr))
show_title(info='已修改成功', num1=1) # 打印已修改成功
flag_change = 1 # 修改旗帜赋值
break
# 判断是否修改此学生信息
if flag_change != 1:
show_title(info='无此学生信息') # 打印提示
# 4.查寻学生信息 ====================================================
def find_stu_info():
show_title(info='查寻学生信息') # 打印标题
# 判断字典是否为空
if stu_info == dict():
show_title(info='暂无学生信息') # 打印提示
return
# 输入需要查询的学生姓名
name = input('请输入需要查询的学生姓名:')
flag_find = 0 # 定义查询的旗帜
# 在字典中查找是否存在
for i in stu_info:
if name == i:
print('学生姓名:{}t学号:{}t手机号码:{}t家庭地址:{}'.format(name, stu_info[i][0], stu_info[i][1], stu_info[i][2]))
flag_find = 1 # 查询旗帜赋值
break
# 判断是否查询到此学生信息
if flag_find != 1:
show_title(info='无此学生信息') # 打印提示
# 5.查看所有学生信息 ===============================================
def show_all_stu():
show_title(info='查看所有学生信息', num=7, num1=1) # 打印标题
# 判断字典是否为空
if stu_info == dict():
show_title(info='暂无学生信息') # 打印提示
return
# 遍历打印学生信息
for i in stu_info:
print('学生姓名:{}t学生学号:{}t手机号码:{}t家庭地址:{}' .format(i, stu_info[i][0], stu_info[i][1], stu_info[i][2]))
# 等价于C语言的主函数 ===============================================
while True:
menu() # 打印菜单
num = input_num(message) # 选择菜单
# 1.新建学生信息
if num == '1':
new_stu_info() # 调用函数
# 2.删除学生信息
elif num == '2':
del_stu_info() # 调用函数
# 3.修改学生信息
elif num == '3':
change_stu_info() # 调用函数
# 4.查寻学生信息
elif num == '4':
find_stu_info() # 调用函数
# 5.查看所有学生信息
elif num == '5':
show_all_stu() # 调用函数
# 0.退出
elif num == '0':
show_title(info='已退出', num=11, num1=1) # 装13的打印方式,利用函数封装,然后调用
# print(' '*1 + '='*11 + '已退出' + '='*11) # 有基础的打印方式,利用字符串运算(只能用加法和乘法)
break
# 其他
else:
show_title(info='输入有误!', num=10) # 装13的打印方式,利用函数封装,然后调用
# print('==========输入有误!==========') # 最原始的打印方式,打印什么写什么
message = '请重新输入编号:'
continue
message = '请输入编号:'
运行结果:
创作日期:2022/5/25



