Python实现基于Excel的通讯录管理系统

Nora
Nora
发布时间:2026-10-15 | 5人浏览过
原创

本文介绍使用Python和openpyxl库实现的一个简单通讯录管理系统。系统支持添加、修改、删除、查询及排序功能,数据以Excel文件形式持久化存储。代码包含手机号格式校验逻辑,并通过循环菜单实现交互操作,适合Python初学者参考学习文件读写与基础逻辑控制。

Python通讯录管理系统概述

本文分享了一个使用Python编写的通讯录管理系统的具体实现代码,供读者参考学习。

系统启动后显示主菜单,包含以下功能选项: 1. 添加 2. 修改 3. 删除 4. 查询 5. 排序 6. 退出

系统菜单与交互逻辑

用户需根据提示输入对应的序号以执行相应操作。

数据存储规范

数据存储要求:通讯录数据需以文件形式保存在硬盘指定路径(例如D:\tongxunlu)。每条联系人数据(姓名和手机号码)独占一行。若一个联系人拥有多个手机号,所有号码均存储在同一行内,确保每条记录占一行。

系统运行时的初始菜单如上所示,程序将根据用户选择的序号执行对应的功能模块。

功能模块详解

各功能具体要求如下: - 添加功能:提示用户输入姓名和手机号码,并对手机号格式进行合法性检查。若格式合法,则将姓名和号码插入到通讯录文件的最后一行。 - 修改功能:根据用户指定的联系人姓名,修改其对应的手机号码,并在操作完成后保存文件。 - 删除功能:根据用户输入的姓名,删除该联系人的完整记录。 - 查询功能:支持两种查询方式,一是通过联系人姓名查询其手机号,二是通过手机号查询联系人姓名。 - 排序功能:允许用户选择按联系人姓名进行升序或降序排列,并对通讯录数据进行相应排序。 - 退出功能:结束程序的运行。 注意:仅当用户选择序号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("输入的序号不在范围内!")

以上就是本文的全部内容,希望对大家的学习有所帮助,也欢迎大家继续支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表