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