import time
'''
主体功能:
功能1:显示主菜单(已完成)
功能2:添加名片(已完成)、修改名片(已完成)、删除名片(已完成)、查询名片(已完成)、显示名片(已完成)、退出系统(已完成)、
'''
#装饰器
def the_ask(fn):
def inner(user_list):
turn = True
while turn:
fn(user_list)
turn = ask()
return inner
def main_menu():
"""
主菜单
:return: None
"""
print("{:^30}".format('名片管理系统1.0'),
'{:^}'.format('1.添加名片'),
'{:^}'.format('2.删除名片'),
'{:^}'.format('3.修改名片'),
'{:^}'.format('4.查询名片'),
'{:^}'.format('5.显示所有名片'),
'{:^}'.format('6.退出系统'),
sep='\n'
)
def comm_inp():
"""
获取用户命令输入
:return: 返回正确的命令
"""
while True:
user_command = input('请输入命令:').strip()
num_is = user_command.isdigit()
the_floag = (num_is) and (1 <= int(user_command) <= 6)
# 判断用户输入是否是 全数字 且在指定的范围内
if not the_floag:
print('抱歉,您的输入有误,请重新输入!')
else:
return int(user_command)
def add_user(user_list):
'''添加名片功能'''
user_dict = {'name': name_inp(),
'phone': other_inp('电话'),
'QQ': other_inp('QQ')}
user_list.append(user_dict)
print('录入完毕!将在两秒钟后返回主菜单....')
time.sleep(2)
@the_ask
def del_user(user_list):
'''
删除名片功能
:param user_list: 名片库
:return: None
'''
value = input('请输入要删除的姓名:')
if user_list == []:
print('列表为空,删除失败!')
for in_dex, user in enumerate(user_list):
if user['name'] == value:
deled = user_list.pop(in_dex)
print('{} 信息已被删除'.format(deled))
else:
print('查无此人,删除失败!')
def change_user(user_list):
'''修改名片功能'''
@the_ask
def index_inp(user_list):
'''判断用户输入序号是否正确,并修改名片库'''
while True:
in_dex = int(input('请输入需要修改的用户序号:'))
if 0 <= in_dex <= len(user_list) - 1:
user_list[in_dex]['name'] = name_inp()
user_list[in_dex]['phone'] = other_inp('电话')
user_list[in_dex]['QQ'] = other_inp('QQ')
return
else:
print('没有该用户序号,请重新输入!')
time.sleep(2)
# 调用list_user函数获取名片库的状态
turn = list_user(user_list)
if turn == 'off':
return
else:
index_inp(user_list)
@the_ask
def select_user(user_list):
"""
按照姓名查询名片库
:param user_list: 名片库
:return:
"""
value = input('请输入要查询的姓名:')
# 打印查询到的内容
for in_dex, user in enumerate(user_list):
if user['name'] == value:
print('{:^3}|{:^6}|{:^13}|{:^13}'.format('序号', '姓名', '电话', 'QQ'))
print('{:^3}|{:^6}|{:^13}|{:^13}'.format(in_dex, user['name'], user['phone'], user['QQ']))
break
else:
print('查无此人')
def list_user(user_list):
'''
显示所有的用户
:param user_list:用户列表
:return:
'''
# 如果名片库没有信息则不输出,并且返回名片库的状态
if user_list == []:
print('目前没有用户信息,请添加!')
return 'off' #
# 打印列标题
print('|{:^3}|{:^6}|{:^13}|{:^13}|'.format('序号', '姓名', '电话', 'QQ'))
# 打印内容
for in_dex, user in enumerate(user_list):
print('|{:^3}|{:^6}|{:^13}|{:^13}|'.format(in_dex, user['name'], user['phone'], user['QQ']))
def ask():
'''
询问用户是否继续
:return: 返回bool
'''
change = input('是否继续当前操作?(y/n)')
if change.upper() == 'Y':
return True
else:
return False
def name_inp():
# 获取姓名合法输入
while True:
key = 'name'
value = input('请输入姓名:')
# 判断用户输入是否合法
if value.isalpha():
pass
else:
print('您输入的姓名不合法,请重新输入!')
continue
# 判断是否已经录入
if list(filter(lambda x: x[key] == value, user_list)) != []:
print("您输入的姓名已在库中,请重新输入姓名!")
else:
return value
def other_inp(str_pq):
# 获取 电话、QQ 的合法输入
while True:
pq_num = input('请输入{}:'.format(str_pq))
if pq_num.isdigit():
return pq_num
else:
print('您输入的{}不合法,请重新输入!'.format(str_pq))
# 名片库
user_list = []
# 主循环
while True:
# 显示主菜单
main_menu()
# 获取指令
user_command = comm_inp()
# 判断指令
if user_command == 1:
add_user(user_list)
elif user_command == 2:
del_user(user_list)
elif user_command == 3:
change_user(user_list)
elif user_command == 4:
select_user(user_list)
elif user_command == 5:
list_user(user_list)
elif user_command == 6:
print('感谢您的使用!')
exit(5201314)
python名片管理系统
最新推荐文章于 2024-07-06 22:31:17 发布