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中的一些高级编程技巧
Apr 02 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
Python对象属性自动更新操作示例
Jun 15 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
python制作mysql数据迁移脚本
Jan 01 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python tkinter基本属性详解
Sep 16 Python
python实现把二维列表变为一维列表的方法分析
Oct 08 Python
详解Python IO编程
Jul 24 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
解决pytorch 保存模型遇到的问题
Mar 03 Python
解决python存数据库速度太慢的问题
Apr 23 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
无限级别菜单的实现
2006/10/09 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
greybox——不开新窗口看新的网页
2007/02/20 Javascript
关于document.cookie的使用javascript
2008/04/11 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
[02:50]【扭转乾坤,只此一招】DOTA2永雾林渊版本开启新篇章
2020/12/22 DOTA
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
对numpy中的数组条件筛选功能详解
2018/07/02 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
html5适合移动应用开发的12大特性
2014/03/19 HTML / CSS
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
投标保密承诺书
2014/05/19 职场文书
开展党的群众路线教育实践活动情况汇报
2014/11/05 职场文书
优秀团员个人总结
2015/02/26 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
社会实践活动总结格式
2015/05/11 职场文书
Python-OpenCV教程之图像的位运算详解
2021/06/21 Python
Python加密技术之RSA加密解密的实现
2022/04/08 Python