名片管理系统
前言
我们之前已经学习了变量、流程控制、函数、模块等内容,接下来我们利用它们来搭建一个名片管理系统
需求
1.样式如下
**************************************************
欢迎使用【名片管理系统】V1.0
1. 新建名片
2. 显示全部
3. 查询名片
0. 退出系统
**************************************************
2.用户可以用数字选择不同功能
3.用户名片需要记录用户的 姓名、电话、QQ、邮件
4.如果查询到指定的名片,用户可以选择 修改 或者 删除 名片
步骤
1.框架搭建
2.新增名片
3.显示所有名片
4.查询名片
5.查询成功后修改、删除名片
6.让 Python 程序能够直接运行
01-框架搭建
我们在编写程序的时候,为了方便使用,应该有一个主程序和一个工具包,使得代码整洁,在这里主程序我命名为cards_main,工具包为cards_tools
这样可以使得每一次启动都从cards_main这个程序进入,而在cards_tools包里保存所有名片功能函数,如名片的 新增、查询、修改、删除 等功能
1.1 编写主循环
在cards_main中添加一个无限循环,使得每次用户在进行退出操作时才退出
while True:
# TODO 显示功能菜单
action_str = input("请选择希望执行的操作:")
print("您选择的操作是:[%s]" % action_str)
# 1,2,3针对名片的操作
if action_str in ["1", "2", "3"]:
# TODO 新增名片
if action_str == "1":
pass
# TODO 显示全部
elif action_str == "2":
pass
# TODO 查询名片
elif action_str == "3":
pass
elif action_str == "0":
print("欢迎再次使用【名片管理系统】")
break
else:
print("您输入的不正确,请重新输入")
字符串的判断
if action in ["1", "2", "3"]:
if action == "1" or action == "2" or action == "3":
1.使用 in 针对 列表 判断,避免使用 or 拼接复杂的逻辑条件
2.没有使用 int 转换用户输入,可以避免 一旦用户输入的不是数字,导致程序运行出错
pass
pass 就是一个空语句,不做任何事情,一般用做占位语句,目的是为了保持程序结构的完整性
无限循环
为了不希望程序执行后 立即退出,使用while True之类的无限循环,由用户来决定退出程序的时机
TODO 注释
在 # 后跟上 TODO ,用于标记需要去做的工作
# TODO(作者/邮件) 要做的事
1.2 在cards_tools中新增四个函数
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
def show_all():
"""显示所有名片"""
print("-" * 50)
print("显示所有名片")
def search_card():
"""搜索名片"""
print("-" * 50)
print("搜索名片")
1.3 导入模块
import cards_tools
while True:
# 显示功能菜单
action_str = input("请选择希望执行的操作:")
print("您选择的操作是:[%s]" % action_str)
# 1,2,3针对名片的操作
if action_str in ["1", "2", "3"]:
# 新增名片
if action_str == "1":
cards_tools.new_card()
# 显示全部
elif action_str == "2":
cards_tools.show_all()
# 查询名片
elif action_str == "3":
cards_tools.search_card()
elif action_str == "0":
print("欢迎再次使用【名片管理系统】")
break
else:
print("您输入的不正确,请重新输入")
至此,主程序cards_main已经编写完毕,剩下的功能实现全部在cards_tools中编写
1.4 完成show_menu函数
def show_menu():
"""显示菜单"""
print("*" * 50)
print("欢迎使用【名片管理系统】 V 1.0")
print()
print("1. 新增名片")
print("2. 显示全部")
print("3. 查询名片")
print()
print("0. 退出系统")
print("*" * 50)
02-确定保存名片数据的结构
首先,在写程序前,先明白用什么才存储数据,众所周知, 程序就是用来处理数据的,而变量就是用来存储数据的,所以确定使用的变量很重要
我们可以使用字典来保存每一张名片的详细信息,并用列表统一所有的名片字典
我们打开程序的时候,是没有数据的,所以应该定义一个全局列表,置空列表,方便以后使用
添加列表变量
card_list = []
03-功能实现
3.1 新增名片
def new_card():
"""新增名片"""
print("-" * 50)
print("新增名片")
name_str = input("请输入姓名:")
phone_str = input("请输入电话:")
qq_str = input("请输入QQ:")
email_str = input("请输入邮箱:")
card_dict = {"name": name_str,
"phone": phone_str,
"QQ": qq_str,
"email": email_str}
card_list.append(card_dict)
print("添加用户 %s 成功!" % name_str)
技巧:在 PyCharm 中,可以使用 SHIFT + F6 统一修改变量名
3.2 显示所有名片
1.基础代码
def show_all():
"""显示全部"""
print("-" * 50)
print("功能:显示全部")
for card_dict in card_list:
print(card_dict)
# 整个字典都被输出了,效果不好
2.添加标题并利用 \t 进行排版
def show_all():
"""显示所有名片"""
print("-" * 50)
print("显示所有名片")
# 打印表头
for table_head in ["姓名", "电话", "QQ", "邮箱"]:
print(table_head, end="\t\t\t")
print()
# 打印分隔线
print("=" * 50)
for card_dict in card_list:
print("%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t" %
(card_dict["name"],
card_dict["phone"],
card_dict["QQ"],
card_dict["email"]))
3.增加没有名片纪录判断
def show_all():
"""显示所有名片"""
print("-" * 50)
print("显示所有名片")
# 判断是否有名片纪录,如果没有则返回
if len(card_list) == 0:
print("当前没有任何的名片纪录,请使用新增功能添加名片")
return
注意:return可以返回一个函数的执行结果(若后面没有任何内容,则不返回任何结果),且return后面的代码不再执行,同时返回到调用函数位置的代码,去执行调用函数下面的代码
3.3 查询名片
1.基本代码
def search_card():
"""搜索名片"""
print("-" * 50)
print("搜索名片")
find_name = input("请输入要查询的姓名:")
for card_dict in card_list:
if card_dict["name"] == find_name:
print("姓名\t\t\t电话\t\t\tQQ\t\t\t邮箱")
print("=" * 50)
print("%s\t\t\t%s\t\t\t%s\t\t\t%s" %
(card_dict["name"],
card_dict["phone"],
card_dict["QQ"],
card_dict["email"]))
break
else:
print("没有找到 %s" % find_name)
2.添加操作函数(修改/删除)的框架
def deal_card(find_dict):
"""操作搜索到的名片字典
:param find_dict:找到的名片字典
"""
action_str = input("请选择要执行的操作 "
"[1] 修改 [2] 删除 [0] 返回上级菜单")
if action == "1":
print("修改")
elif action == "2":
print("删除")
3.添加删除操作
由于找到的字典记录已经在card_list列表中保存,而要删除名片记录,只需要把列表中对应的字典删除即可
elif action_str == "2":
card_list.remove(find_dict)
print("删除成功!")
4.添加修改操作
由于找到的字典记录已经在列表中保存,要修改名片记录,只需要把列表中对应的字典中每一个键值对的数据修改即可
if action_str == "1":
find_dict["name"] = input("姓名:")
find_dict["phone"] = input("电话:")
find_dict["qq"] = input("QQ:")
find_dict["email"] = input("邮箱:")
print("修改成功!")
5.修改操作细化
为了方便用户在使用时,对名片内容不修改,则新定义一个input_card_info函数对input函数进行拓展
def input_card_info(dict_value, tip_message):
"""输入名片信息
:param dict_value: 字典原有值
:param tip_message: 输入提示信息
:return: 如果输入,返回输入内容,否则返回字典原有值
"""
# 1. 提示用户输入内容
result_str = input(tip_message)
# 2. 针对用户的输入进行判断,如果用户输入了内容,直接返回结果
if len(result_str) > 0:
return result_str
# 3. 如果用户没有输入内容,返回 `字典中原有的值`
else:
return dict_value
修改原代码
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("修改成功!")
03-Linux上的S'he'bang符号(#!)
指明执行这个脚本文件的解释程序
1. 使用 which 查询 python3 解释器所在路径
which python3
2.在主python文件第一行添加内容
#! /usr/bin/python3
3.修改 主python 文件的文件权限,增加执行权限
chmod +x cards_main.py
4.在需要时执行程序
./cards_main.py
本文来自博客园,作者:icui4cu,转载请注明原文链接:https://www.cnblogs.com/icui4cu/p/15214690.html