一、项目说明

  本项目分享一个简单的名片管理系统,主要是通过实现简单的功能,来学习python基础。

  具体功能有:新建名片、显示全部名片、查询、修改、删除名片

  通过对名片的增删改查,来快速看懂python语法吧!

二、功能梳理

  用户功能抽象如下,见名知其意,这里就不多说啦~

  主要包含两个文件:cardMain.py和cardTool.py。cardMain.py调用cardTool.py中的函数,

  功能虽然简单,但还是分两个文件写,这样代码的可读性和可维护性高!

  (图中涉及的参数,后续看代码)

三、代码

1、cardMain.py

# 导入自定义工具包cardTool
import cardTool while True:
# 使用工具包中的工具,使用方法:模块名.函数名()
cardTool.show_menu() # 获取用户的输入选择
op = input("请输入您的选择:") # 根据用户的输入进行调用不同函数
if op in ["1", "2", "3"]:
if op == "1":
print("用户指令1:新建名片")
cardTool.create_card()
elif op == "2":
print("用户指令2:显示全部")
cardTool.show_all_card()
else:
print("用户指令3:查询名片")
cardTool.search_card()
elif op == "0":
print("即将退出!")
break
else:
print(op, "为非法指令,请重新输入!")
print("")

2、cardTool.py

import re
# 全局变量card_list:列表嵌套字典,有默认五条原始“死”数据
card_list = [
{'name': '张三', 'phone': '12345678901', 'QQ': '10000001', 'email': 'zhangsan@qq.com', },
{'name': '张四', 'phone': '12345678902', 'QQ': '10000002', 'email': 'zhangsi@qq.com', },
{'name': '李四', 'phone': '12345678903', 'QQ': '10000003', 'email': 'lisi@qq.com', },
{'name': '李五', 'phone': '12345678904', 'QQ': '10000004', 'email': 'liwu@qq.com', },
{'name': '王五', 'phone': '12345678905', 'QQ': '10000005', 'email': 'wangwu@qq.com', },
] # 1、显示菜单函数
def show_menu():
"""
当前函数为显示菜单的函数
:return:
"""
print("*" * 50)
print("欢迎使用【名片管理系统】 v1.0")
print("")
print("1. 新建名片")
print("2. 显示全部")
print("3. 查询名片")
print("")
print("0. 退出系统")
print("*" * 50) # 2、新建名片函数
def create_card():
"""
这里是往card_list中插入数据
:return:
"""
print("调用cardTool中的:新建名片")
name = input("请输入姓名:")
phone = input("请输入电话号码:")
qq = input("请输入QQ:")
email = input("请输入email:") temp_dict = {
'name': name,
'phone': phone,
'QQ': qq,
'email': email
} card_list.append(temp_dict)
print(card_list)
pass # pass是占位符,起到完善语法结构的作用,不输出任何内容,但也占用资源 # 3、显示全部名片函数
def show_all_card():
"""
这里展示card_list中的所有数据
:return:
"""
if len(card_list) == 0:
print("当前不存在数据,请先添加数据")
return
print("-" * 50)
print("姓名".ljust(5), "电话".ljust(12), "QQ".ljust(12), "email", sep="\t\t")
for item in card_list:
# todo:排版不好兼容性较差
print(item.get('name').ljust(5), item.get('phone').ljust(12),
item.get('QQ').ljust(12), item.get('email'), sep="\t\t")
print("-" * 50)
pass # pass是占位符,起到完善语法结构的作用,不输出任何内容 # 4、查询名片函数
def search_card():
"""
这里支持简单的姓名模糊匹配查询的操作
:return:
"""
find_name = input("请输入要查询的姓名:")
# 定义正则表达式的匹配模式
pattern = '.*' + find_name + '.*'
temp_list = []
for item in card_list:
# 使用re,需要先导入re包:import re
# 这里根据正则表达式pattern,去匹配用户查询的姓名
obj = re.findall(pattern, item.get('name'))
# 注意:返回的obj的数据类型是字典,而temp_list定义的是列表
# 在将obj插入到temp_list时,应用append方法,而不能用extend方法
if len(obj) > 0:
temp_list.append(item)
if temp_list.__len__() == 0:
print('抱歉,未查询到相关数据,')
else:
print("-" * 50)
print("姓名".ljust(5), "电话".ljust(12), "QQ".ljust(12), "email", sep="\t\t")
for temp_item in temp_list:
print(temp_item.get('name').ljust(5), temp_item.get('phone').ljust(12),
temp_item.get('QQ').ljust(12), temp_item.get('email'), sep="\t\t")
print("-" * 50)
# 当查询结果只有一条时,调用处理名片函数deal_card()
if temp_list.__len__() == 1:
deal_card(temp_list[0])
pass # pass是占位符,起到完善语法结构的作用,不输出任何内容 # 5、处理名片函数,传入的temp_list,是需要修改的数据
def deal_card(temp_list):
"""
这里做简单的修改和删除名片的操作
:return:
"""
while True:
op = input("[1.修改 2.删除 3.返回上一级] 请输入要执行的操作序号:")
if op not in ["1", "2", "3"]:
print("非法序号,请重新输入!")
else:
if op == '1':
print("修改【" + temp_list.get('name') + '】中:')
temp_list['name'] = input_diy(temp_list.get('name'), "请输入修改后的姓名[不修改直接回车]:")
temp_list['phone'] = input_diy(temp_list.get('phone'), "请输入修改后的电话[不修改直接回车]:")
temp_list['QQ'] = input_diy(temp_list.get('QQ'), "请输入修改后的QQ[不修改直接回车]:")
temp_list['email'] = input_diy(temp_list.get('email'), "请输入修改后的email[不修改直接回车]:")
if op == '2':
print("删除【"+temp_list.get('name')+'】成功!')
card_list.remove(temp_list) # 这里删除的是列表card_list中的引用
print(temp_list)
break
if op == '3':
break # 自定义input功能,default_value是默认值,msg是提示信息,提示信息是不同的
def input_diy(default_value, msg):
modify_value = input(msg)
# 当用户直接输入回车时,modify_value的长度为0,这时应返回默认值default_value
if len(modify_value) > 0:
return modify_value
else:
return default_value

四、截图

更多截图,我就不贴了,复制代码去pycharm里运行就可以玩了

若有问题或有指教的地方可以评论或私信我哟~

最新文章

  1. jQuery原生框架-----------------属性操作
  2. MixItUp:超炫!基于 CSS3 & jQuery 的过滤和排序插件
  3. UIKit 力学教程
  4. 面试准备(二) 绘制 Activity 的生命流程图
  5. linux kernel同步机制的思考
  6. ExtJS MVC学习手记 2
  7. Js内置对象的应用
  8. Session的实现与存储
  9. Part 3 ViewData and ViewBag in mvc
  10. 护肤品总结 Skin Care (2)
  11. 当list中有中文,打印的时候显示为字符编码的问题
  12. Oracle包Package调用Package
  13. Tomcat源码学习一
  14. Linux普通文件和设备的异同点
  15. How to Iterate Over a Map in Java?(如何遍历Map)
  16. Java多线程-----volatile关键字详解
  17. android:theme
  18. [javase学习笔记]-6.4 成员变量与局部变量
  19. [codeup] 2046 八皇后
  20. js获得页面鼠标位置

热门文章

  1. 【日拱一卒】链表——如何实现lru
  2. go常见问题
  3. TCC事务原理
  4. 解密Cookie,这一篇就够了
  5. 02Java写一个hello world
  6. [LeetCode题解]86. 分隔链表 | 三指针 + 虚拟头节点
  7. 【C++】sort函数使用方法
  8. Hadoop大数据平台搭建之前期配置(1)
  9. Macos系统上怎么自动下载任务
  10. ABBYY FineReader 15 对比文档功能