python实现名片管理系统项目


Posted in Python onApril 26, 2019

名片管理系统,供大家参考,具体内容如下

环境要求:linux系统、python2.x或python3.x
资源地址:GitHub地址

写在前面的话:笔者之前在初学C/C++时,都曾写过类似的管理系统。这次使用Python来书写这个管理系统,深刻地感受到python对程序员的友好。如果使用C来实现,必然需要手写一下链表;而使用C++,显然需要使用STL中的vector或array以及map,语法都稍稍有些复杂。

基础功能

1.循环显示主菜单,显示命令提示。

python实现名片管理系统项目

2.可以通过输入命令来选择新建名片、显示所有名片、搜索名片。当搜索到名片时,可以对其进行删改。

3.附加功能。对数据进行序列化,并且写入文件。

代码分析

一.程序入口cards_main.py

#! /usr/bin/python
import cards_tools
 
while True:
  cards_tools.show_menu()
  action_str = input("请下指令,主人\n")
  print("你的选项是 [%s]" % action_str)
  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("寨见了哟~主人sama")
    break
  else:
    print("还不会鸭,请多调教")

1.这段代码开头shebang(#!)后标注了解释器,可以通过./cards_main.py来执行本段代码。如果执行ln -s  cards_main.py /usr/bin/cards, 就可以在终端中用“cards”命令呼出这个简易的名片存储系统。
2.这个程序使用死循环的方式维持主程序的运行,日后如果想增加上传数据等功能时,可以使用多线程、协程等来增加一个并发,来实现。
3.通过判断用户输入,分别调用不同的函数。实现了解耦合。

二.命令提示、新增名片、显示名片

这部分代码没什么好说的,就不多赘述。需要注意的时,在文件开头,定义了个card_list的全局空列表。

card_list = []
 
 
def show_menu():
  print("*" * 50)
  print("主人,让我做点什么鸭:")
  print("1.新建名片")
  print("2.显示全部")
  print("3.搜索名片")
  print("")
  print("0.退出系统")
  print("*" * 50)
 
 
def new_card():
  print("新建名片")
  print("-" * 50)
  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)
 
 
def show_all():
  if card_list == []:
    print("还没有名片哟,告诉我几个叭~")
    return
  else:
    print("显示全部名片")
    print("-" * 50)
    for name in ["姓名", "电话", "QQ", "邮箱"]:
      print(name, end="\t\t")
    print("")
    print("=" * 50)
    for card_dict in card_list:
      print("%s\t\t%s\t\t%s\t\t%s\t\t" %
         (card_dict["name"],
          card_dict["phone"],
          card_dict["qq"],
          card_dict["email"]))

三、搜索名片

先贴代码

def search_card():
  print("找寻名片")
  print("-" * 50)
  search_name = input("查谁咧?")
  for card_dict in card_list:
    if card_dict["name"] == search_name:
      for name in ["姓名", "电话", "QQ", "邮箱"]:
        print(name, end="\t\t")
      print("")
      print("=" * 50)
      print("%s\t\t%s\t\t%s\t\t%s\t\t" %
         (card_dict["name"],
          card_dict["phone"],
          card_dict["qq"],
          card_dict["email"]))
      deal_card(card_dict)
      break
  else:
    print("母鸡呀!")
 
 
def deal_card(found_dict):
  """
  处理查找到的名片
  :param found_dict:传递找到的字典
  :return:
  """
  action_str = input("我做啥咧 "
            "[1]修改 [2]删除 [0]返回")
  if action_str == "1":
    found_dict["name"] = input_card_info(found_dict["name"], "姓名[回车不修改]:")
    found_dict["phone"] = input_card_info(found_dict["phone"], "手机号[回车不修改]:")
    found_dict["qq"] = input_card_info(found_dict["qq"], "QQ[回车不修改]:")
    found_dict["email"] = input_card_info(found_dict["email"], "邮箱[回车不修改]:")
    print("修改完成")
  elif action_str == "2":
    card_list.remove(found_dict)
    print("吼,木有了")
  else:
    return
 
 
def input_card_info(dict_value, tip_message):
  """
  输入名片信息
  :param dict_value:字典原有值 
  :param tip_message: 输入提示文字
  :return: 如果用户输入了内容,则返回内容;否则返回原有值
  """
  result_str = input(tip_message)
  if len(result_str) > 0:
    return result_str
  else:
    return dict_value

1.传递存储搜索到的字典,对列表进行修改。

2.为了让用户可以选择用回车,避免需要重新输入不需先修该的键值对儿,对内置函数input进行了封装。

代码不足

这段个玩具项目存在严重问题,其一数据都活在内存之中,完全可以通过序列化的方式将字典存储在文件中,甚至可以使用md5对数据进行加密。

使用for循环使得效率低下、功能单一,完全可以使用多线程来增添新功能,不过鉴于本代码只是个玩具,就不实现了。

可选手段

使用最基本的python列表真的时最好的方式吗?列表的数据结构实际上是队列,由于名片对于顺序要求不大,大可以使用C++的STL中unorder_map之类数据结构来存储数据信息。

另外使用字典并非唯一手段,C/C++、Go中的结构体,或是使用类来封装数据,无疑都是可行的。在类中可以添加诸如打印函数等,简化程序,在C++中可以重载流运算符<<。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中取整的几种方法小结
Jan 06 Python
Python探索之实现一个简单的HTTP服务器
Oct 28 Python
Python递归实现汉诺塔算法示例
Mar 19 Python
详解如何管理多个Python版本和虚拟环境
May 10 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
Python 函数list&amp;read&amp;seek详解
Aug 28 Python
基于pytorch 预训练的词向量用法详解
Jan 06 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
keras中的History对象用法
Jun 19 Python
Python3如何使用多线程升程序运行速度
Aug 11 Python
java字符串格式化输出实例讲解
Jan 06 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 Python
python面向对象实现名片管理系统文件版
Apr 26 #Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 #Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 #Python
浅谈python新式类和旧式类区别
Apr 26 #Python
Python静态类型检查新工具之pyright 使用指南
Apr 26 #Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 #Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 #Python
You might like
php抓即时股票信息
2006/10/09 PHP
CI框架实现优化文件上传及多文件上传的方法
2017/01/04 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
Javascript中Eval函数的使用说明
2008/10/11 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
javascript数据类型示例分享
2015/01/19 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
JavaScript的ExtJS框架中表格的编写教程
2016/05/21 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
利用css+原生js制作简单的钟表
2020/04/07 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
JS代码实现百度地图 画圆 删除标注
2016/10/12 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
antd多选下拉框一行展示的实现方式
2020/10/31 Javascript
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
python 回调函数和回调方法的实现分析
2016/03/23 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
Python-OpenCV基本操作方法详解
2018/04/02 Python
Python流程控制 if else实现解析
2019/09/02 Python
python线程join方法原理解析
2020/02/11 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
人事部主管岗位职责
2013/12/26 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
党校个人总结
2015/03/04 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
MySQL 原理与优化之原数据锁的应用
2022/08/14 MySQL