一、项目说明

  本项目分享一个简单的名片管理系统,主要是通过实现简单的功能,来学习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. DB2添加联合主键

    CREATE TABLE EQUIPMENT_DAILY_CAL( EQU_DATE TIME NOT NULL ,/*日期*/ SEQ_ID INTEGER NOT NULL,/*序号 */ FAU ...

  2. Python之Matplot——01.堆叠柱状图的绘制

    1.Matplotlib是python的一个绘图库,可以方便的绘制各种图标,是数据可视化的利器. 2.本文我就给大家介绍一下条形图或者说柱状图的绘制 3.代码如下: <1>首先导入模块 1 ...

  3. shell 之 -f -z -e -o -a -d

    # -f 文件存在 if[ -f /etc/sysconfig/network ]; then ./etc/sysconfig/network fi # -z 字串为空/ -o or / -a and ...

  4. 聊一聊无锁队列rte_ring

    之前用基于dpdk 实现小包快速转发的时候有用到无锁队列!今天就来看看吧!(后续完成了去dpdk化,直接在内核完成快速转发功能) dpdk的无锁队列ring是借鉴了linux内核kfifo无锁队列.r ...

  5. Selective Acknowledgment 选项 浅析 2

    来自:http://abcdxyzk.github.io/blog/2013/09/06/kernel-net-sack/ static int tcp_sacktag_write_queue(str ...

  6. cephonebox发布

    前言 现在已经是2016年收官的一个月了,之前一直想做一个calamari的集成版本,之所以有这个想法,是因为,即使在已经打好包的情况下,因为各种软件版本的原因,造成很多人无法配置成功,calamar ...

  7. fastapi+vue搭建免费代理IP网站部署至heroku

    说明 最近需要用到一些HTTP的代理,用于爬虫去爬取信息,搜索了一些网站,貌似现在这类提供免费代理IP的网站很多,刚好最近看了点vue的视频,弄个网站练练. 部署到heroku,预览地址:点击这里 F ...

  8. 好学易懂 从零开始的插头DP(一)

    好学易懂 从零开始的插头DP(一) 写在前面 这是一篇,以蒟蒻视角展开的梳理总结.更改了一些顺序,变化了一些细节.方便蒟蒻学习理解(起码本蒟蒻是这样).大佬们可以直接看其它大佬的博客,可以学的更快. ...

  9. div定时放大缩小

    <!DOCTYPE html> <html> <head> <style> .anim{ width: 100px; height: 100px; ba ...

  10. CorelDRAW复制及镜面反转对象

    复制的设计都是由简单的图案和基础的操作堆砌而成的,如何恰当地使用这些基础操作,就是各位新学者要格外注意的地方. 这次我们介绍CorelDRAW中的复制和镜面操作. 一.复制 1.复制单个对象 使用Co ...