nkcs通讯录管理系统Python

视频:

时间正确!允许启动——Python通讯录管理系统

📝 实验内容

实现通讯录管理系统(增、删、改、查功能)

实现功能:

  1. 开始菜单

  • 敲击键盘的a, d, c, f ,s 可对应执行相关操作(如下图所示):

  1. 子功能

  • 增、删、改、查功能分别使用函数封装

  • 通讯录数据存储在list数据结构中

  • 用列表中的对应方法对数据进行增、删、改、查操作

参考方法:Python 列表(List) | 菜鸟教程

  1. 增加数据子界面

  • 输入数据包括姓名、QQ号码、电话号码、邮箱

  • 输入成功后,提示添加成功,并返回添加的数据

  • 格式检测不做要求,附加项目

  1. 删除数据子界面

  • 通过输入序号进行删除

  • 若序号不存在,则给出提示

  • 删除后,提示删除成功

  1. 修改数据子界面

  • 输入待修改的序号,若序号不存在,给出提示

  • 若序号存在,则进入下一级页面选择需要修改的子项

  • 若不需要修改,可以输入空格后回车取消修改

  • 输入成功后,提示修改成功,并返回修改的数据

  1. 查找记录子界面

  • 输入序号进行查找

  • 若不存在,给出提示

  1. 展示数据子界面

  • 输入s查看通讯录中所有的数据

注:此处的按q返回功能可以写也可以不写,大家自己判断用户体验哪种比较好。只要确保用户可以返回主菜单即可。

注2:此处展示的格式不同仅仅是因为来自两份代码,大家自己的代码统一格式即可。

  1. 容错要求

  • 在各个界面,如果输入的值不符合要求,需要进行提示,并且要求重新输入。上面只展示了部分情况,请同学们自行完善

  • 输入的异常值的检测功能,如果大家有能力也可以尽量完善。例如电话号码,邮件格式的检查。【如果完成此项功能请在作业提交系统的备注注明】

🔗 提交内容

本次实验需要以录屏形式提交,请勿仅提交截图

  1. 作业代码

  2. 运行视频

    1. 需涵盖所有的功能部分

    2. 如果做出额外的功能也请进行展示

    3. 如需要录屏软件(windows) Bandicam v4.6.1.1688.7z

import shutil
import re
terminal_width = shutil.get_terminal_size().columns
text = "x : 一二三四"
spaces = (terminal_width - len(text)) // 2
uidList = ["No."]
nameList = ['Name']
qqList = ['QQ']
teleList = ['Phone']
mailList = ['E-mail']

yy = 0
def fanglao6():
    global yy
    yy += 1

def tobecontinue():
    print("请按任意键继续···")
    input()

def show_menu():
    menuList = ['a : 增加记录', 'd : 删除记录', 'c : 修改记录', 'f : 查找记录', 's : 显示记录', '0 : 退出程序']
    for i in menuList:
        print(" " * spaces + i)
    choice = input("请输入功能对应的代号:")
    return choice

def validate_phone(phone):
    pattern = r"^1[3-9]\d{9}$"
    match = re.match(pattern, phone)
    if match:
        return False
    else:
        return True


def validate_email(email):
    pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
    match = re.match(pattern, email)
    if match:
        return False
    else:
        return True

def showoneTele(i):
    print("=" * terminal_width)
    print(uidList[0].ljust(5), nameList[0].ljust(15), qqList[0].ljust(18), teleList[0].ljust(20), mailList[0].ljust(30))
    print(uidList[i].ljust(5), nameList[i].ljust(15), qqList[i].ljust(18), teleList[i].ljust(20), mailList[i].ljust(30))
    print("=" * terminal_width)
    tobecontinue()
def showTele():
    print("=" * terminal_width)
    for i1, i2, i3, i4, i5 in zip(uidList, nameList, qqList, teleList, mailList):
        print(i1.ljust(5), i2.ljust(15), i3.ljust(18), i4.ljust(20), i5.ljust(30))
    print("=" * terminal_width)
    tobecontinue()

def addTele():
    m_name = input("请输入姓名:")
    m_qq = input("请输入QQ:")
    m_tele = input("请输入电话:")
    while validate_phone(m_tele):
        a5 = input("电话号码不正确,请重新输入(输入\"0\"跳过本次检验):")
        if a5 == "0":
            break
        else:
            m_tele = a5
    m_mail = input("请输入邮箱:")
    while validate_email(m_mail):
        a5 = input("邮箱地址不正确,请重新输入(输入\"0\"跳过本次检验):")
        if a5 == "0":
            break
        else:
            m_tele = a5

    lens = len(uidList)
    if lens == 1:
        uidList.append("1")
    else:
        uidList.append(str(int(uidList[lens-1]) + 1 ))
    nameList.append(m_name)
    qqList.append(m_qq)
    teleList.append(m_tele)
    mailList.append(m_mail)


    print("插入成功!此时表为")
    showTele()
    return 0

def delTele_1(i):
    del uidList[i]
    del nameList[i]
    del qqList[i]
    del teleList[i]
    del mailList[i]
    print("删除成功,最新的列表为")
    showTele()
    return 0

def delTele_2():
    if yy == 0:
        print("你小子……")
    elif yy == 1:
        print("还来是吧?你个老6")
    elif yy == 6:
        print("6……不出来了……")
    else:
        print("没闲心写更多的了,我要下班,后面的都一样了")
    fanglao6()

def delTele():
    while True:
        del_cho = input("请选择你要删除记录的方式(输入数字即可):\n" +
                        " " * spaces + "1 :通过序号删除\n" +
                        " " * spaces + "2 :通过姓名删除\n" +
                        " " * spaces + "3 :通过QQ删除\n" +
                        " " * spaces + "4 :通过电话删除\n" +
                        " " * spaces + "5 :通过邮箱删除\n" +
                        " " * spaces + "6 :清空通讯列表\n" +
                        " " * spaces + "0 :取消删除任务\n"
                        )
        if del_cho == '1':
            a1 = input("请输入要删除的记录序号:")
            if a1 == "No.":
                delTele_2()
                return 0
            while True:
                for i, item in enumerate(uidList):
                    if item == a1:
                        delTele_1(i)
                        return 0
                print("输入的序号不存在,请重新输入")
                a1 = input("请输入要删除的记录序号(输入\"0\"返回主界面):")
                if a1 == "0":
                    return 0
        elif del_cho == '2':
            a1 = input("请输入要删除的姓名:")
            if a1 == "Name":
                delTele_2()
                return 0
            while True:
                for i, item in enumerate(nameList):
                    if item == a1:
                        delTele_1(i)
                        return 0
                print("输入的姓名不存在,请重新输入")
                a1 = input("请输入要删除的姓名(输入\"0\"返回主界面):")
                if a1 == "0":
                    return 0
        elif del_cho == '3':
            a1 = input("请输入要删除的QQ:")
            if a1 == "QQ":
                delTele_2()
                return 0
            while True:
                for i, item in enumerate(qqList):
                    if item == a1:
                        delTele_1(i)
                        return 0
                print("输入的QQ不存在,请重新输入")
                a1 = input("请输入要删除的QQ(输入\"0\"返回主界面):")
                if a1 == "0":
                    return 0
        elif del_cho == '4':
            a1 = input("请输入要删除的电话:")
            if a1 == "Phone":
                delTele_2()
                return 0
            while True:
                for i, item in enumerate(teleList):
                    if item == a1:
                        delTele_1(i)
                        return 0
                print("输入的电话不存在,请重新输入")
                a1 = input("请输入要删除的电话(输入\"0\"返回主界面):")
                if a1 == "0":
                    return 0
        elif del_cho == '5':
            a1 = input("请输入要删除的邮箱:")
            if a1 == "E-mail":
                delTele_2()
                return 0
            while True:
                for i, item in enumerate(mailList):
                    if item == a1:
                        delTele_1(i)
                        return 0
                print("输入的邮箱不存在,请重新输入")
                a1 = input("请输入要删除的邮箱(输入\"0\"返回主界面):")
                if a1 == "0":
                    return 0
        elif del_cho == '6':
            a1 = input("请再次确认是否全部清空!(y/n):")
            if a1 == "y":
                uidList.clear()
                uidList.append("No.")
                nameList.clear()
                nameList.append("Name")
                teleList.clear()
                teleList.append("Phone")
                mailList.clear()
                mailList.append("E-mail")
                qqList.clear()
                qqList.append("QQ")
                print("通讯录已清空,请按任意键继续···")
                input()
                return 0
        elif del_cho == '0':
            return
        else:
            print("输入有误,请重新输入···")

def findTele():
    fin_cho = input("请选择你要查找记录的方式(输入数字即可):\n" +
                    " " * spaces + "1 :通过序号查找\n" +
                    " " * spaces + "2 :通过姓名查找\n" +
                    " " * spaces + "3 :通过QQ查找\n" +
                    " " * spaces + "4 :通过电话查找\n" +
                    " " * spaces + "5 :通过邮箱查找\n" +
                    " " * spaces + "0 :取消查找任务\n"
                    )
    if fin_cho == '1':
        a1 = input("请输入要查找的记录序号:")
        if a1 == "No.":
            delTele_2()
            return 0
        while True:
            for i, item in enumerate(uidList):
                if item == a1:
                    print("查找成功,结果为:")
                    showoneTele(i)
                    return 0
            print("输入的序号不存在,请重新输入")
            a1 = input("请输入要查找的记录序号(输入\"0\"返回主界面):")
            if a1 == "0":
                return 0
    elif fin_cho == '2':
        a1 = input("请输入姓名进行查找:")
        if a1 == "Name":
            delTele_2()
            return 0
        while True:
            for i, item in enumerate(nameList):
                if item == a1:
                    print("查找成功,结果为:")
                    showoneTele(i)
                    return 0
            print("输入的姓名不存在,请重新输入")
            a1 = input("请输入姓名进行查找(输入\"0\"返回主界面):")
            if a1 == "0":
                return 0
    elif fin_cho == '3':
        a1 = input("请输入QQ进行查找:")
        if a1 == "QQ":
            delTele_2()
            return 0
        while True:
            for i, item in enumerate(qqList):
                if item == a1:
                    print("查找成功,结果为:")
                    showoneTele(i)
                    return 0
            print("输入的QQ不存在,请重新输入")
            a1 = input("请输入QQ姓名进行查找(输入\"0\"返回主界面):")
            if a1 == "0":
                return 0
    elif fin_cho == '4':
        a1 = input("请输入电话进行查找:")
        if a1 == "Phone":
            delTele_2()
            return 0
        while True:
            for i, item in enumerate(teleList):
                if item == a1:
                    print("查找成功,结果为:")
                    showoneTele(i)
                    return 0
            print("输入的电话不存在,请重新输入")
            a1 = input("请输入电话进行查找(输入\"0\"返回主界面):")
            if a1 == "0":
                return 0
    elif fin_cho == '5':
        a1 = input("请输入邮箱进行查找:")
        if a1 == "E-mail":
            delTele_2()
            return 0
        while True:
            for i, item in enumerate(mailList):
                if item == a1:
                    print("查找成功,结果为:")
                    showoneTele(i)
                    return 0
            print("输入的邮箱不存在,请重新输入")
            a1 = input("请输入邮箱进行查找(输入\"0\"返回主界面):")
            if a1 == "0":
                return 0
    elif fin_cho == '0':
        return 0
    else:
        print("输入有误,请重新输入···")
def chanTele():
    while True:
        a2 = input("请输入要修改的记录序号(如需展示当前通讯录情况,请输入\"s\",退出请输入\"0\"):")
        if a2 == "s":
            showTele()
        elif a2 == "0":
            return 0
        elif a2 == "No.":
            delTele_2()
            return 0
        else:
            for i, item in enumerate(uidList):
                if item == a2:
                    print("已找到序号为" + a2 + "的记录,该信息为:")
                    showoneTele(i)
                    a3 = input("确认要修改这条记录吗?(y/n):")
                    if a3 == "y":
                        while True:
                            cha_cho = input("请输入要修改的子项:\n" +
                                            " " * spaces + "n :修改姓名\n" +
                                            " " * spaces + "q :修改QQ\n" +
                                            " " * spaces + "p :修改电话\n" +
                                            " " * spaces + "m :修改邮箱\n" +
                                            " " * spaces + "0 :结束修改\n"
                                            )
                            if cha_cho == "n":
                                a4 = input("请输入新的姓名,若不修改输入空格:")
                                if a4 == " ":
                                    print("不修改")
                                else:
                                    nameList[i] = a4
                                    print("已修改,最新的列表为")
                                    showTele()
                            elif cha_cho == "q":
                                a4 = input("请输入新的QQ,若不修改输入空格:")
                                if a4 == " ":
                                    print("不修改")
                                else:
                                    qqList[i] = a4
                                    print("已修改,最新的列表为")
                                    showTele()
                            elif cha_cho == "p":
                                a4 = input("请输入新的电话,若不修改输入空格:")
                                if a4 == " ":
                                    print("不修改")
                                else:
                                    teleList[i] = a4
                                    print("已修改,最新的列表为")
                                    showTele()
                            elif cha_cho == "m":
                                a4 = input("请输入新的邮箱,若不修改输入空格:")
                                if a4 == " ":
                                    print("不修改")
                                else:
                                    mailList[i] = a4
                                    print("已修改,最新的列表为")
                                    showTele()
                            elif cha_cho == "0":
                                print("已结束修改,当前列表为")
                                showTele()
                                return 0
                            else:
                                print("输入的序号不存在,请重新输入…")
            print("输入的序号不存在,请重新输入……")

while True:
    choice = show_menu()
    if choice == 'a':
        addTele()
    elif choice == 'd':
        delTele()
    elif choice == 'c':
        chanTele()
    elif choice == 'f':
        findTele()
    elif choice == 's':
        print("当前通讯录数据列表为")
        showTele()
    elif choice == '0':
        exit()
    else:
        print("功能暂未开通,请重新输入···")


更新功能:

1. 新增退出功能,可在首页输入“0”退出程序;

2. 插入功能电话和邮箱校验功能,可在校验时输入“0”强行结束本次校验;

3. 新增通过多种方式删除数据,新增一键清空所有记录;

4. 修改记录前可预览数据内容,以确保修改无误,在修改时可以对不同项同时修改;

5. 查找功能实现了通过不同的项目进行查找;

6. 添加了防老6功能以及一些彩蛋

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值