一、项目说明

  本项目分享一个简单的名片管理系统,主要是通过实现简单的功能,来学习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里运行就可以玩了

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

初识python-名片管理系统v1.0的更多相关文章

  1. AEAI EM费用管理系统V1.0.2版本开源发布

    本次开源发布是AEAI EM费用管理系统 V1.0.2版,该版本是此产品的首个版本,产品现已开源并上传至开源社区http://www.oschina.net/p/aeai-em. 产品说明: AEAI ...

  2. <每日一题>题目7:简单的学生管理系统V1.0

    ''' # 学生管理系统v1.0 # 添加学生的信息 # 删除学生的信息 # 修改学生的信息 # 查看学生的信息 #遍历学生的信息 #退出系统 ''' import json #1 显示操作功能 de ...

  3. 名片管理系统v1.1(main)

    # version: 1.1# author: Mark import cords_tools while True: # 显示界面    cords_tools.show_cords() cords ...

  4. python名片管理系统V2

    主程序: #! /usr/bin env python3 # -*- coding: utf-8 -*- # 项目三: # 1.要求:编写一个名片管理系统,功能如下: # 用户输入相对应的指令,实现对 ...

  5. python名片管理系统

    1.代码: (1)主程序 #!/usr/bin/env python # -*- coding: UTF-8 -*- import cards_tools # 无限循环,由用户主动决定什么时候退出循环 ...

  6. 名片管理系统v1.1(tools)

    cords_list = []def show_cords(): print("*"*80) print("欢迎使用[名片管理系统]v.1.1") print( ...

  7. 学生信息管理系统v1.0

    昨天一个教师朋友找到我,告诉我现在学期末他工作比较忙.需要统计处理很多学生信息,想让我帮他做一个管理系统.实现的功能就是把WPS表格转化成Word文档,将每一个学生的信息都能够分开,并且要根据名字找到 ...

  8. 考勤管理系统V1.0.3

    1.0.3:添加了缺勤名单统计.导出功能: 原本的设想是直接上手Node.js 连接MySQL,写一个能增删改查数据的功能,很遗憾小林属实弟弟,但这个“系统”我会一点点完善的,这一次的代码比之前好看了 ...

  9. 面向对象案例 - 学生信息管理系统V1.0

    学生管理系统项目[所有知识点整合] 1. 学生管理系统项目 尝试完成以下功能 实体类: 学生类: id, 姓名,年龄,性别,成绩 需要使用数组保存学生信息 Student[] allStu 需要完成的 ...

随机推荐

  1. innodb为什么需要doublewrite(转)

    InnoDB的page size默认是16KB,而操作系统的一个block size是4KB,磁盘io block则更小.那么InnoDB的page刷到磁盘上要写4个操作系统block,在极端情况下( ...

  2. TCP粘包问题的解决方案02——利用readline函数解决粘包问题

      主要内容: 1.read,write 与 recv,send函数. recv函数只能用于套接口IO ssize_t recv(int sockfd,void * buff,size_t len,i ...

  3. JsonPath在接口自动化中的应用

    我理解jsonpath于json而言,就像是xpath在XML中的作用.用来确定json中某部分数据的语言.我更喜欢叫jsonpath表达式,因为这样好像是数学问题. 以前和小伙伴一起写接口自动化的时 ...

  4. spring boot 视频截图

  5. linux之DHCP服务

    1.DHCP介绍(动态主机配置协议)  DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议, 主要用途:给内部网络或网络服务供应 ...

  6. Ceph S3 基于NGINX的集群复制方案

    前言 ceph的s3数据的同步可以通过radosgw-agent进行同步,同region可以同步data和metadata,不同region只能同步metadata,这个地方可以参考下秦牧羊梳理的 c ...

  7. 企业级工作流解决方案(九)--微服务Tcp消息传输模型之客户端处理

    客户端启动 客户端启动主要做三件事情,1. 从配置文件读取服务调用配置,存储到全局对象中.2. 指定客户端编解码器工厂.3. 预连接,即预先建立与服务端的通信Chanel. [DependsOn(ty ...

  8. 如何将多个网页合并成一个PDF文件

    pdfFactory是一款PDF虚拟打印软件,但与其他虚拟打印机软件不同的是,它使用起来更加简单高效.由于无需Acrobat就能生成Adobe PDF文件,它可以帮助用户在系统没有连接打印机的情况下, ...

  9. 解决Redis中数据不一致问题

    redis系列之数据库与缓存数据一致性解决方案 数据库与缓存读写模式策略写完数据库后是否需要马上更新缓存还是直接删除缓存? (1).如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以马 ...

  10. spring bean注册和实例化

    1.左边3个接口定义了基本的Ioc容器的2.HierarchicalBeanFactory增加了getParentBeanFactory()具备了双亲Ioc的管理能力3.ConfigurableBea ...