网络编程
位置:首页>> 网络编程>> Python编程>> python实现简单通讯录管理系统

python实现简单通讯录管理系统

作者:Shelumiel  发布时间:2021-05-02 10:41:23 

标签:python,通讯录

本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下

=====欢迎使用通讯录管理系统=====
1.添加
2.修改
3.册除
4.查询
5.排序
6.退出
=========================

请选择你要执行的操作的序号,具体要求:

1)通讯录要以文件的形式存储在硬盘上(比如D:\tongxunlu) ,每一条数据(联系人姓名和手机号码)存储一行,如果一个联系人有多个手机号,则都存储在同一行,即通讯录中每个联系入的数据占一行。

2)系统运行时初始菜单如上,根据用户选择的序号执行相应的操作:

添加功能:提醒角户输入姓名和手机号码,同时进行手机号码格式检查,合法则该姓名和手机号码插入到通讯录最后一行。
修改功能:根据用户指定的联系人姓名修改其手机号码,修改后保存文件。 删除功能:根据用户输人的姓名删除该条记录。
查询功能:可以根据联系人姓名查询其手机号,也可以根据手机号查询联系人姓名。 排序功能:要求用户选择按联系人姓名升序或降序,对通讯录进行排序。
退出功能:结束程序的运行。 注意:只有选择序号6(退出)时,程序的运行才会结束,否则一直循环等待用户进行增删改查操作。

这里我利用openpyxl对Excel操作

源码:

from openpyxl import load_workbook

fn = r'd:\tongxunlu.xlsx'

# 打印操作菜单
def showMenu():
    print("========欢迎使用通讯录管理系统========")
    print("     1.添加")
    print("     2.修改")
    print("     3.删除")
    print("     4.查询")
    print("     5.排序")
    print("     6.退出")
    print("==================================")

# 打开文件
def openFile():
    wb = load_workbook(fn)
    ws = wb.active
    return ws, wb

# 判断手机号是否合法
def isLegal(s):
    if len(s) == 11 and s.isdigit():
        return True
    else:
        return False

# 添加手机号
def addData():
    data = input("输入姓名和号码(空格分开):").split(" ")
    for i in range(len(data), 1, -1):                # 从最后一个手机号开始
        s = isLegal(data[i - 1])
    if not s:
        print("手机号码必须为11位数字!")
        addData()
    else:
        w1, w2 = openFile()
        w1.append(data)
        print("添加成功!")
        w2.save(fn)

# 更改手机号
def changeData():
    flag = False
    data = input("请输入需要修改的姓名和新的手机号码(空格分开):").split(" ")
    if not isLegal(data[1]):
        print("手机号码必须为11位数字!")
        changeData()
    else:
        w1, w2 = openFile()
        for row in w1.rows:
            if row[0].value == data[0]:
                flag = True
                row[1].value = data[1]
        if not flag:
            print("通讯录中没有此人!")
            changeData()
        else:
            print("修改成功!")
            w2.save(fn)

# 删除人
def delete():
    flag = False
    x = 0
    name = input("请输入要删除的姓名:")
    w1, w2 = openFile()
    for row in w1.rows:
        x += 1
        if row[0].value == name:
            flag = True
            w1.delete_rows(x)
    if not flag:
        print("通讯录中没有此人!")
    else:
        print("删除成功!")
        w2.save(fn)

# 查找手机号或者姓名
def search():
    flag = False
    data = input("请输入姓名或手机号码:")
    w1, w2 = openFile()
    for row in w1.rows:
        if row[0].value == data:
            flag = True
            print(row[1].value)
            if row[2].value is not None:
                print(row[2].value)
        elif row[1].value == data or row[2].value == data:
            flag = True
            print(row[0].value)
    if not flag:
        print("通讯录中没有此人或手机号!")
        search()

# 排序
def sort():
    s = input("请输入正序或逆序(正序输入F,逆序输入T):")
    if s == "F":
        flag = False
    elif s == "T":
        flag = True
    data = []
    w1, w2 = openFile()
    for row in w1.rows:
        data1 = []
        for cell in row:
            data1.append(cell.value)
        data.append(data1)
    data.sort(key=lambda x: x[0], reverse=flag)
    w2.remove(w1)
    w1 = w2.create_sheet()
    for i in data:
        w1.append(i)
    w2.save(fn)

# 循环函数
while True:
    showMenu()
    num = int(input("请输入操作序号:"))
    if num == 1:
        addData()
    elif num == 2:
        changeData()
    elif num == 3:
        delete()
    elif num == 4:
        search()
    elif num == 5:
        sort()
    elif num == 6:
        print("再见!")
        break
    else:
        print("输入的序号不在范围内!")

来源:https://blog.csdn.net/qq_45939329/article/details/118051511

0
投稿

猜你喜欢

  • 前端代码要做到简洁易读、高效,还要考虑后端嵌套的方便性。前段时间做了一个导航,把整个制作过程重现,希望对大家有帮助。看到这样的导航,你会怎么
  • 1. 返回列表和标量(Scalar)前面我们注意到Query对象可以返回可迭代的值(iterator value),然后我们可以通过for
  • 使用PHP GD,使用良好,一键剪裁各种尺寸,打包下载。经常换icon的懂的,美工给你一个1024的logo,你得ps出各种尺寸,于是有了这
  • 这段后门代码可以隐藏在asp文件中,大家可以搜索一些特点的关键字,查看文件的修改日期,看看是不是有如下的代码。<%if re
  • PHP页面中如果不希望出现以下情况: 单引号被转义为 \' 双引号被转义为 \" 那么可以进行如下设置以防止: 方法一:在
  • 本文实例为大家分享了Python tkinter实现计算器功能的具体代码,供大家参考,具体内容如下python版本:3.5一.计算器的功能描
  • 外联接。外联接可以是左向外联接、右向外联接或完整外部联接。 在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:LEFT J
  • 1 环境操作系统:Windows 10Python版本:3.9.0Google Chrome  87.0.4280.88
  • 通过本篇内容给大家介绍一下Python实现金融数据可视化中两列数据的提取、分别画、双坐标轴、双图、两种不同的图等代码写法和思路总结。impo
  • 如果你正在运行使用MySQL的Web应用程序,那么你把密码或者其他敏感信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取
  • 字符串索引示意图字符串切片也就是截取字符串,取子串Python中字符串切片方法字符串[开始索引:结束索引:步长]切取字符串为开始索引到结束索
  • 本文实例讲述了PHP查询快递信息的方法。分享给大家供大家参考。具体如下:这里使用快递100物流查询官方文档中只能返回html的接口也可以返回
  • 转:coolcode.cn通常情况下,我们的网页要指定一个编码字符集,如 GB2312、UTF-8、ISO-8859-1 
  • numpy norm()函数求范数函数:norm(x, ord = None, axis = None, keepdims = False)
  • 一个很简单的画像素画的小工具,有意思的地方在于可以把画的图案保存成数组,以方便之后快速还原出原图..<!DOCTYPE html PU
  • 背景:pony是公司的首席体验官、首席产品经理。这次在产品峰会上pony将自己平时经验的积累与大家交流,体验较细。这次分享研发管理部,设计中
  • 我在初学时查阅过大量相关资料,发现其中提供的很多方法实际操作起来并不是那么回事。对于简单的应用,这些资料也许是有帮助的,但仅限于此,因为它们
  • ul设置浮动后不能自适应高度,也就是不能撑开父容器,不能自适应内容的高度。解决方法是在ul结束标签前加个清除浮动。  &
  • 创建一个表T_Employee并插入若干数据  代码如下:create table T_Employee(FNumber VARC
  • 场景:由于自己的电脑A性能不足,需要转移到一台高性能的主机B上运行python程序,但是该主机不能连接互联网。问题:在个人电脑A上建立了一个
手机版 网络编程 asp之家 www.aspxhome.com