python_EMS练习

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('回车键退出!')

你可能感兴趣的:(python)