该项目是针对python入门的项目,此项目是python所有基础知识的整合,内容可能有些繁琐,讲的比较细,希望能认真看完,然后再自己敲一遍来巩固基础
由于该系统功能比较多,用一个文件显示出来会比较难看,这里我们用多个文件来展示,并用调用文件的方法来实现系统功能。这里我创建了两个python文件,一个是cards_main.py 主要作为显示系统和功能的文件,另一个是cards_tool.py 来作为主文件的工具文件
开发此项目时,我们第一件要做的事就是编写程序的框架,构建框架之后才能为我们后面开发功能做好准备。首先我们先确定名片管理系统的功能:
当我们进入系统后,系统会让我们输入想执行的操作,这里我们用数字代替:
输入1的时候,系统会让我们新增名片;
输入2的时候,系统会显示全部名片;
输入3的时候,系统会显示查询名片;
输入0的时候,系统会退出系统。
执行完后系统又会返回主界面,让用户重新输入,后续我们会添加名片删除,名片修改等功能。
这里我们先看一下名片管理系统的大致框架:
下图是cards_main.py的文件
# cards_main.py
# 导入cards_tool文件
import cards_tool
# while True 会不停循环,除非输入0,break退出循环
while True:
# 导入cards_tool.py 文件里的show_menu功能
cards_tool.show_menu()
action_str = input('请选择希望执行的操作:')
print("您选择的操作是【%s】" % action_str)
# 如果在开发程序时,不希望立刻编写内部分支结构的代码,可以用pass
# 1,2,3 争对名片的操作
if action_str in ['1', '2', '3']:
# 新增名片
if action_str == '1':
cards_tool.new_card()
# 显示全部名片
elif action_str == '2':
cards_tool.show_all()
# 查询名片
elif action_str == '3':
cards_tool.search_card()
# 0 退出系统
elif action_str == '0':
print('欢迎再次使用【名片管理系统】')
break
# 其他内容输入错误,提示用户
else:
print("您输入的不正确,请重新选择")
这里我们既然想要系统在我们每次执行完之后放回主界面,我们就要用到while循环,while True 会一直循环,除非我们输入break退出循环,这正是我们想要的效果,确定循环之后,我们再来用 if 和 elif的嵌套来完成后续输入的数字和功能相匹配。
下图是cards_tool.py的文件内容
创建一个显示主页面的函数show_menu()
创建一个新增名片的函数new_card()
创建一个显示全部名片的函数show_all()
创建一个搜索名片的函数search_card()
# cards_tool.py
# 主要作为显示系统主页面的功能
def show_menu():
"""显示菜单"""
print('*' * 50)
print('欢迎使用【名片管理系统】')
print("")
print("1. 新增名片")
print("2. 显示全部")
print("3. 搜索名片")
print("")
print("0. 退出系统")
print('*' * 50)
# 新增名片
def new_card():
"""新增名片"""
print('-' * 50)
print("新增名片")
# 显示所有名片
def show_all():
"""显示所有名片"""
print('-' * 50)
print("显示所有名片")
# 搜索名片
def search_card():
"""搜索名片"""
print('-' * 50)
print("搜索名片")
系统框架到这就开发的差不多了,后面就主要集中在功能的开发上,也就是主要在cards_tool.py 文件里做文章,把每个功能文件完善。
注意:
1.这里我用导入cards_tool.py文件里的show_menu()的方法来实现显示主菜单的功能。
2. 导入文件里面函数的方法就是直接文件名.函数就可以了,例:cards_tool.new_card()
保存名片数据我们可以用一个列表来保存名片,名片的内容的我们可以用字典来保存,后面我们就可以直接用card_list 来执行所有操作
下图是cards_tool.
# cards_tool.py
# 记录所有名片字典
card_list = []
注意:card_list[] 一定要定义在文件的顶部,因为python是解释性语言,会从上向下解释代码。
下图是cards_tool.py文件里的new_card()函数
# 新增名片功能
def new_card():
"""新增名片"""
print('-' * 50)
print("新增名片")
# 1. 提示用户输入名片的详细信息
name_str = input('请输入姓名:')
phone_str = input('请输入电话:')
QQ_str = input('请输入QQ号码:')
email_str = input('请输入邮箱地址')
# 2.使用用户输入的信息建立一个名片字典
card_dict = {"name": name_str,
"phone": phone_str,
"QQ": QQ_str,
"email": email_str}
# 3.将名片字典添加到列表中
card_list.append(card_dict)
print(card_list)
# 4.提示用户添加成功
print("添加 %s 的名片成功!" % name_str)
看完全部代码我们再来分布解读一下代码所对应的功能:
1.首先存储用户信息,我们要想到字典存储,然后再用列表存储字典,为此我们建立了一个card_list 和card_dict
2.提示用户输入名片的详细信息,用input()来解决
3.使用用户输入的信息建立一个名片字典
4.将名片字典添加到列表中
5.最后直接输出列表就可以看见刚才输入的信息了
下图是cards_tool.py文件里的show_all()函数
# 显示所有名片功能
def show_all():
"""显示所有名片"""
print('-' * 50)
print("显示所有名片")
# 判断是否存在名片记录,如果没有,提示用户并返回
if len(card_list) == 0:
print("当前没有任何的名片记录,请使用新增功能添加名片!")
# return下方的代码不会被执行
# 如果return 后面没有任何内容,就会返回到调用函数的位置
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
# 让输出更美观可以用类似表格的形式输出,用end="" 使name输出后不换行
# \t的作用是为了让表头之间增加两个制表符的距离,更美观
print(name, end="\t\t")
# 这个print是作为换行的作用,换行后输出结果
print('')
# 打印分割线
print("=" * 70)
该功能比较复杂,我们一步一步来解读:
1.当名片列表里没有任何数据时,输出 “当前没有任何的名片记录,请使用新增功能添加名片!” ,并且不会输出后面的打印表头的内容,这时候就要用到return ,return不仅可以作为返回值,如果没有返回值的时候会直接跳到定义函数的位置,最最最重要的:python不会执行return后面的代码。
2.为了使输出名片更美观,可以将输出结果的形式转换为表格的格式,end=""的作用是为了让姓名,电话,QQ,邮箱这四个表头不换行,保持一条直线,\t 是一个制表符的距离,可以用两个制表符距离,这样更美观。
3.print(“”)是为了换行,使输出结果在表头的下面。
下图是cards_tool.py文件里的show_all()函数
# 搜索名片功能
def search_card():
"""搜索名片"""
print('-' * 50)
print("搜索名片")
# 1.提示用户输入要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2.遍历名片列表,查询要搜索的姓名,如果没有找到,需要提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t电话\t\tQQ\t\t邮箱")
print('=' * 60)
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["QQ"],
card_dict["email"]))
break
else:
print("抱歉,没有找到 %s" % find_name)
搜索名片比较简单,就是搜索的姓名有就输出找到了,并把信息输出,输出格式可以参考显示全部名片功能,没有就输出没有找到
到这里基本名片的管理系统就到此为止了,下面主要就是对系统的完善,添加修改和删除功能
# 删除和修改名片
def deal_card(find_dict):
print(find_dict)
action_str = input("请选择要执行的操作 [1]:修改, [2]:删除, [0]:返回上级")
if action_str == '1':
find_dict["name"] = input_card_info(find_dict["name"], "姓名:")
find_dict["phone"] = input_card_info(find_dict["phone"], "电话:")
find_dict["QQ"] = input_card_info(find_dict["QQ"], "QQ:")
find_dict["email"] = input_card_info(find_dict["email"], "邮箱:")
print("修改名片成功")
elif action_str == '2':
card_list.remove(find_dict)
print("删除名片成功")
def input_card_info(dict_value, tip_message):
# 1.提示用户输入内容
result_str = input(tip_message)
# 2.针对用户的输入内容进行判断,如果用户输入了内容,直接返回结果
if len(result_str) > 0:
return result_str
# 3.如果用户没有输入内容,返回字典中原有的值
else:
return dict_value
删除和修改名片,我是基于查询名片里的,首先我们先确定修改和删除名片的详细功能:
1.当我们查询名片之后可以删除整个名片
2.查询玩名片后我们可以针对想修改的值进行修改,不想修改的直接取原来的值
确定完功能之后我们现在来完成上述功能
1.由于是基于查询功能,所以我们在查询功能里插入一个函数,再对函数进行定义
注意:这里可以先在一个函数里面使用再在此函数的外面定义
在这里我们先传给函数一个想修改或删除的字典,然后再到deal_card()函数里面接受和修改
2.我们先进行删除功能的执行,删除比较简单,如果我们选择删除,直接用remove()函数进行删除就可以
3.对于修改功能,我们描述的是可以针对想修改的值进行修改,不想修改的直接取原来的值
所以肯定不能直接用input()来输入,这样就会导致不想修改的内容也必须重新给它赋一便值。所以现在我们应该要想到:如果我不输入,它就直接接受原来字典里的值,如果输入就会接受输入的值
再这里我们再创建一个新函数input_card_info()主要来判断我们有没有输入值它里面的两个形参,一个是dict_value,主要是当我们没有输入内容返回原来的值,另一个tip_message,主要是提示我们当前输入的东西,比如姓名,QQ。最后我们直接把input_card_info()这个函数带入deal_card()函数里进行判断即可。
cards_main.py文件
# cards_main.py
# 导入cards_tool文件
import cards_tool
# while True 会不停循环,除非输入0,break退出循环
while True:
# 导入cards_tool.py 文件里的show_menu功能
cards_tool.show_menu()
action_str = input('请选择希望执行的操作:')
print("您选择的操作是【%s】" % action_str)
# 如果在开发程序时,不希望立刻编写内部分支结构的代码,可以用pass
# 1,2,3 争对名片的操作
if action_str in ['1', '2', '3']:
# 新增名片
if action_str == '1':
cards_tool.new_card()
# 显示全部名片
elif action_str == '2':
cards_tool.show_all()
# 查询名片
elif action_str == '3':
cards_tool.search_card()
# 0 退出系统
elif action_str == '0':
print('欢迎再次使用【名片管理系统】')
break
# 其他内容输入错误,提示用户
else:
print("您输入的不正确,请重新选择")
cards_tool.py文件
# cards_tool.py
# 记录所有名片字典
card_list = []
# 主要作为显示系统主页面的功能
def show_menu():
"""显示菜单"""
print('*' * 50)
print('欢迎使用【名片管理系统】')
print("")
print("1. 新增名片")
print("2. 显示全部")
print("3. 搜索名片")
print("")
print("0. 退出系统")
print('*' * 50)
# 新增名片功能
def new_card():
"""新增名片"""
print('-' * 50)
print("新增名片")
# 1. 提示用户输入名片的详细信息
name_str = input('请输入姓名:')
phone_str = input('请输入电话:')
QQ_str = input('请输入QQ号码:')
email_str = input('请输入邮箱地址')
# 2.使用用户输入的信息建立一个名片字典
card_dict = {"name": name_str,
"phone": phone_str,
"QQ": QQ_str,
"email": email_str}
# 3.将名片字典添加到列表中
card_list.append(card_dict)
print(card_list)
# 4.提示用户添加成功
print("添加 %s 的名片成功!" % name_str)
# 显示所有名片功能
def show_all():
"""显示所有名片"""
print('-' * 50)
print("显示所有名片")
# 判断是否存在名片记录,如果没有,提示用户并返回
if len(card_list) == 0:
print("当前没有任何的名片记录,请使用新增功能添加名片!")
# return下方的代码不会被执行
# 如果return 后面没有任何内容,就会返回到调用函数的位置
return
# 打印表头
for name in ["姓名", "电话", "QQ", "邮箱"]:
# 让输出更美观可以用类似表格的形式输出,用end="" 使name输出后不换行
# \t的作用是为了让表头之间增加两个制表符的距离,更美观
print(name, end="\t\t")
# 这个print是作为换行的作用,换行后输出结果
print('')
# 打印分割线
print("=" * 70)
# 遍历名片列表依次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["QQ"],
card_dict["email"]))
# 搜索名片功能
def search_card():
"""搜索名片"""
print('-' * 50)
print("搜索名片")
# 1.提示用户输入要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2.遍历名片列表,查询要搜索的姓名,如果没有找到,需要提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t电话\t\tQQ\t\t邮箱")
print('=' * 60)
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["QQ"],
card_dict["email"]))
deal_card(card_dict)
break
else:
print("抱歉,没有找到 %s" % find_name)
# 删除和修改名片
def deal_card(find_dict):
print(find_dict)
action_str = input("请选择要执行的操作 [1]:修改, [2]:删除, [0]:返回上级")
if action_str == '1':
find_dict["name"] = input_card_info(find_dict["name"], "姓名:")
find_dict["phone"] = input_card_info(find_dict["phone"], "电话:")
find_dict["QQ"] = input_card_info(find_dict["QQ"], "QQ:")
find_dict["email"] = input_card_info(find_dict["email"], "邮箱:")
print("修改名片成功")
elif action_str == '2':
card_list.remove(find_dict)
print("删除名片成功")
def input_card_info(dict_value, tip_message):
# 1.提示用户输入内容
result_str = input(tip_message)
# 2.针对用户的输入内容进行判断,如果用户输入了内容,直接返回结果
if len(result_str) > 0:
return result_str
# 3.如果用户没有输入内容,返回字典中原有的值
else:
return dict_value
名片管理系统到这就差不多完成了,这些功能可能还不是很完善,可能也会存在一些bug,希望在你们一点一点敲的时候能理解这些函数和变量的意思,理解他们的功能,完全掌握后,能给它增加新的功能。