EMS 练习
# 定义一个字典
emps = {
'孙悟空': {
"name": '孙悟空',
"age": 18,
"gender": '男',
"address": '火锅山'
},
'猪八戒': {
"name": '猪八戒',
"age": 28,
"gender": '男',
"address": '高老庄'
}
}
# 定义几个函数,来完成对员工信息的增删改查的操作
# ① 根据员工的姓名,获取员工信息
# get_emp_by_name(字典,姓名) 返回 员工信息
def get_emp_by_name(emps, name):
'''
该方法用于从字典中根据员工的姓名获取员工信息
参数:
emps 要获取员工信息的字典
name 要获取的员工的名字
返回值:
返回一个保存员工信息的字典
如果员工不存在返回None
'''
return emps.get(name)
# ② 根据序号来获取员工的信息
# get_emp_by_index(字典,索引) 返回 员工信息
# print(list(emps.items()))
def get_emp_by_index(emps, index):
emp_list = list(emps.items())
if index < len(emp_list):
return list(emps.items())[index][1]
# print(get_emp_by_index(emps,1))
# ③ 向字典中添加员工
# add_emp(字典,name,age,gender,address) 返回 是否添加成功
# add_emp(emps,'沙和尚',18,'男','流沙河')
# print(emps)
# ④ 根据姓名/序号删除员工
# del_emp_by_index(字典,序号) 返回 是否删除成功
# del_emp_by_name(字典,姓名) 返回 是否删除成功
def del_emp_by_name(emps, name):
return emps.pop(name, None)
def del_emp_by_index(emps, index):
emp_list = list(emps.items())
# 获取要删除的员工的key
if index < len(emp_list):
del_key = list(emps.items())[index][0]
return emps.pop(del_key, None)
# result = del_emp_by_index(emps,0)
# result = del_emp_by_index(emps,0)
# ⑤ 修改员工信息
# update_emp(字典,姓名,新员工信息) 返回 是否修改成功
def update_emp(emps, name, age, gender, address):
'''
修改员工的信息,如果员工不存在则添加,存在则替换
'''
# 创建员工信息的字典
emp = dict(name=name, age=age, gender=gender, address=address)
# 将emp添加到emps中
emps[name] = emp
def show_line():
print('-' * 62)
# 显示选择菜单的函数
def show_menu():
# 输出一条分割线
show_line()
# 查询所有
# 根据姓名查
# 根据序号查
# 添加
# 修改
# 删除(姓名、序号)
# 显示菜单
# ① 菜单需要根据参数创建 [] {"a":'',"b":''}
# ② 检查用户输入的是否合法,不合法重新输入
# ③ 是否检查
print('请选择要做的操作:')
print('\t1、查询员工')
print('\t2、查询员工[姓名]')
print('\t3、添加员工')
print('\t4、修改员工')
print('\t0、退出系统')
# 获取用户的输入
user_choose = input('请选择[0-n]:')
# 输出一条分割线
show_line()
return user_choose
# 显示员工列表的函数
def show_emps(emps):
if not emps:
# print('\t用户信息不存在,请检查你的输入!')
return
# 对emps进行遍历
# 显示表头
print('\t序号\t姓名\t性别\t年龄\t住址')
# 创建一个变量,表示员工序号
num = 1
# 这里为了应对单个对象的打印,这里我们需要对单一对象进行转换
# {'name':'沙和尚',"age":18,"gender":'男',"address":'流沙河'} => {'沙和尚':{'name':'沙和尚',"age":18,"gender":'男',"address":'流沙河'}}
if 'name' in emps:
emps = {emps['name']: emps}
# 遍历列表
for emp in emps.values():
print(f'\t{num}\t{emp["name"]}\t{emp["gender"]}\t{emp["age"]}\t{emp["address"]}')
num += 1
# emp = {'name':'沙和尚',"age":18,"gender":'男',"address":'流沙河'}
# show_emps({emp['name']:emp})
# show_emps(emp)
# 定义一个表示主程序的函数
def main_loop():
# 显示欢迎信息
print('-' * 20, '欢迎使用员工管理系统', '-' * 20)
# 创建主循环
while 1:
# 显示主菜单,获取用户的选择
user_choose = show_menu()
# 判断用户的选择
if user_choose == '1':
# 显示所有员工
show_emps(emps)
elif user_choose == '2':
# 获取用户要查询的员工的姓名
emp_name = input('请输入要查询的员工的姓名:')
show_line()
# 根据姓名去查询员工信息
emp = get_emp_by_name(emps, emp_name)
if emp:
# 显示
show_emps(emp)
else:
print('\t用户信息不存在,请检查你的输入!')
elif user_choose == '3':
# 获取员工信息
name = input('请输入员工的姓名:')
age = input('请输入员工的年龄:')
gender = input('请输入员工的性别:')
address = input('请输入员工的地址:')
show_line()
# 将数据保存为字典
emp = dict(name=name, age=age, gender=gender, address=address)
# 按名字查询员工
old_emp = get_emp_by_name(emps, name)
# 检查员工是否存在
if name in emps:
# 有重名的员工
# 显示提示
print(f'系统已存在 {name} 信息如下:')
# 显示信息
show_emps(old_emp)
show_line()
# 显示提示
print('请选择要做的操作:')
print('\t1、修改信息')
print('\t2、覆盖已有数据')
print('\t3、取消')
user_choose = input('请选择[1-3]:')
show_line()
# 检查用户的选择
if user_choose == '1':
# 请重新输入姓名
name = input('请输入一个新的名字:')
while name in emps:
name = input('名字已存在,请重新输入:')
emp['name'] = name
elif user_choose == '2':
print(f'{name} 将被替换!')
else:
# 取消
print('操作已取消!')
continue
# 确认是否添加员工
# 确认操作
print('以下员工将被添加到系统中:')
show_emps(emp)
user_choose = input('是否确认[y/n]:')
print('-' * 62)
# 检查是否添加
if user_choose == 'y':
# 将员工信息添加到字典中
update_emp(emps, **emp)
print('操作完成!')
else:
print('操作已取消!')
elif user_choose == '4':
# 修改
# 确认要修改员工
# 显示员工列表
show_emps(emps)
# 选择要修改员工
num = int(input('请选择要修改的员工的序号:'))
# 根据序号来获取员工信息
emp = get_emp_by_index(emps, num - 1)
if not emp:
print('员工不存在!')
continue
# 员工存在,获取新的信息
name = input(f'请输入员工的姓名 ({emp["name"]}):') or emp["name"]
age = input(f'请输入员工的年龄 ({emp["age"]}):') or emp["age"]
gender = input(f'请输入员工的性别 ({emp["gender"]}):') or emp["gender"]
address = input(f'请输入员工的地址 ({emp["address"]}):') or emp["address"]
# 将信息保存到一个字典中
new_emp = dict(name=name, age=age, gender=gender, address=address)
# 确认是否添加员工
# 确认操作
print('以下员工将被修改:')
show_emps(emp)
print('将被修改为如下状态')
show_emps(new_emp)
user_choose = input('是否确认[y/n]:')
show_line()
# 检查是否添加
if user_choose == 'y':
# 将员工信息添加到字典中
if emp['name'] != new_emp['name']:
emps.pop(emp['name'])
update_emp(emps, **new_emp)
print('操作完成!')
else:
print('操作已取消!')
elif user_choose == '0':
# 退出系统
print('谢谢使用,再见!')
break
else:
# 输入有误
print('输入有误,请重新输入!')
main_loop()
show_line()
input('回车键退出!')