天天看點

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('Enter鍵退出!')