Python:简易名片管理系统

本文介绍了如何使用Python构建一个名片管理系统,包括名片列表的规范输出、名片修改功能的完善以及名片序号动态调整的解决方案。通过引入PrettyTable库,使得名片信息以表格形式展示,同时修复了用户输入验证和静态序号的问题。系统目前存在的不足是数据未持久化,每次运行只能保存当次操作的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------------4.14更新------------

反复运行程序后发现了几点不足之处,修改如下

名片列表输出

名片列表输出不规范,加入了python的PrettyTable库,使列表以表格形式输出
PrettyTable库安装方法
使用 Win+R 键打开命令行
输入以下代码并回车即可安装

pip install prettytable

请注意!!! 这里还没结束!
如果你的编辑器是Pycharm,需要进一步在Pycharm中安装插件
安装方法:

File  --->  Settings  --->  Python Interpreter ---> +号

最后在搜索框输入 prettytable 并安装就可以啦
一定要记得点OK !!!

好吧看起来有点像流水账
PrettyTable库使用方法
一定要在程序开始前 导入模块(导入模块有多种方法,后续会单独写一篇)

import prettytable as pt

具体代码会更新在后面

修改名片

之前的修改名片,没有对用户的输入做相关限制
算是一个漏洞吧
解决方案:
addinfo函数中,获取用户输入的方法(getname(),getphone(),getqq())剪出来放在addinfo函数外部,在修改名片时进行调用即可

名片序号

上一个版本,名片序号是在添加名片时进行设置,这就导致序号是静态的,不会根据数据的变动而修改
举例:列表中有3个名片,删除序号为2的名片后,原来的第3个名片,序号还是为3,这就使数据看起来不整齐
解决方案:
添加名片时,不再设置名片序号;
而是在每一次获取名片列表时,重新获取名片序号,再进行打印

**难熬的日子总会过去,不信你回头看看,你已经在不知不觉中,熬过了很多苦难,余生很长,不必慌张。❤

-------------这是分割线---------------

——————————————————————————

功能需求

  • 用户输入数字选择要进行的操作
  • 添加名片
  • 删除名片
  • 修改名片
  • 查询名片
  • 显示所有名片
  • 退出系统

缺点(待改进)

数据未保存到后台,添加的数据仅限当次运行程序时使用

代码如下!!!

主程序

# coding=utf8
from method import *
# 导入定时器是为了方便观察每次操作的结果
from time import sleep

cards = []
# 让这个程序无限循环,直到用户想要其终止
while True:
    sleep(1)
    menu()
    ope_num = input('请输入要进行的操作(1-6): ')
    if ope_num == '1':
        addinfo(cards)
    elif ope_num == '2':
        delinfo(cards)
    elif ope_num == '3':
        updateinfo(cards)
    elif ope_num == '4':
        searchinfo(cards)
    elif ope_num == '5':
        showinfo(cards)
    elif ope_num == '6':
        sure = input('你确定要退出系统吗(输入YES确认退出)')
        if sure.upper() == 'YES':
            break
    else:
        print('输入错误,请重新输入!!!(数字1-6)')

函数文件

版本1


# 定义一个menu方法
def menu():
    print('------------------\n'
          '\t名片管理系统\n'
          '1:添加名片\n'
          '2:删除名片\n'
          '3:修改名片\n'
          '4:查询名片\n'
          '5:显示所有名片\n'
          '6:退出系统\n'
          '------------------')

# 添加名片
def addinfo(lists):
    # 定义一个字典,存放这个名片的信息
    info = {}

    # 获取姓名
    def getname():
        name = input('请输入姓名: ')

        # 判断姓名是否由 数字、字母、数字和字母 组成,即:不能包含标点符号和空格,不能为空
        # 如果不符合要求,提示检查,并重新输入
        # 一直提示用户输入,直到符合要求
        while name.isalnum() != True:
            print('请检查输入!!! (不能包含标点符号和空格,不能为空) ')
            name = input('请输入姓名: ')

        return name

    # 获取手机号
    def getphone():
        phone = input('请输入手机号: ')

        # 判断手机号是否由 11位数字 组成
        # 如果不符合要求,提示检查,并重新输入
        while (len(phone) != 11) or (phone.isdigit() != True):
            print('请检查输入!!! (由11位纯数字组成,不能为空) ')
            phone = input('请输入手机号: ')

        return phone

    # 获取QQ号
    def getqq():
        qq = input('请输入QQ号: ')

        # 判断QQ号是否由 5-10位数字 组成
        # 如果不符合要求,提示检查,并重新输入
        while ((len(qq) < 5) or (len(qq) > 10)) or (qq.isdigit() != True):
            print('请检查输入!!! (由5-10位纯数字组成,不能为空) ')
            qq = input('请输入QQ号: ')

        return qq

    # 如果该名片的序号为,列表长度+1
    info['num'] = len(lists) + 1

    # 通过调用其他函数获取对应信息
    info['name'] = getname()
    info['phone'] = getphone()
    info['qq'] = getqq()

    # 将该字典存入名片列表中
    lists.append(info)

    print('添加成功!')
    showinfo(lists)

# 输出所有名片列表
def showinfo(lists):
    print('序号\t姓名\t\t手机号\t\tQQ号'.ljust(30))
    for lis in lists:
        for value in lis.values():
            print(value, end='\t')

        print('\n')

# 删除名片
def delinfo(lists):
    del_name = input('请输入您需要删除名片的姓名: ')
    flag = True
    for lis in lists:
        if lis['name'] == del_name:
            lists.remove(lis)
            print('删除成功!')
            showinfo(lists)
            flag = False
            break

    if flag == True:
        print('名片不存在!!!')

# 修改名片
def updateinfo(lists):
    upd_name = input('请输入您需要修改名片的姓名: ')
    flag = True
    for lis in lists:
        if lis['name'] == upd_name:
            lis['name']=input('请输入新姓名: ')
            lis['phone']=input('请输入新手机号: ')
            lis['qq']=input('请输入新QQ号: ')
            print('修改成功!')
            showinfo(lists)
            flag = False
            break

    if flag == True:
        print('名片不存在!!!')

# 查询名片
def searchinfo(lists):
    se_name = input('请输入您需要查询的姓名: ')
    flag = True
    for lis in lists:
        if lis['name'] == se_name:
            print('序号\t姓名\t\t手机号\t\tQQ号'.ljust(30))
            for value in lis.values():
                print(value, end='\t')

            print('\n')
            flag = False
            break

    if flag == True:
        print('名片不存在!!!')

版本2

import prettytable as pt


def menu():
    '''
    系统菜单
    :return:
    '''
    print('------------------\n'
          '\t名片管理系统\n'
          '1:添加名片\n'
          '2:删除名片\n'
          '3:修改名片\n'
          '4:查询名片\n'
          '5:显示所有名片\n'
          '6:退出系统\n'
          '------------------')


def getname():
    '''
    获取名片姓名,判断姓名是否由 数字、字母、数字和字母 组成,并且长度在3-6位
    :return: 返回一个符合要求的姓名
    '''
    while True:
        name = input('请输入姓名: ')
        if (len(name) < 3) or (len(name) > 6) or (name.isalnum() != True):
            print('请检查输入!!! (3-6位,不能包含标点符号和空格,不能为空) ')
        else:
            return name


def getphone():
    '''
    获取手机号,判断手机号是否由 11位数字 组成
    :return: 返回一个符合要求的手机号
    '''
    while True:
        phone = input('请输入手机号: ')
        if (len(phone) != 11) or (phone.isdigit() != True):
            print('请检查输入!!! (由11位纯数字组成,不能为空) ')
        else:
            return phone


def getqq():
    '''
    获取QQ号,判断QQ号是否由 5-10位数字 组成
    :return: 返回一个符合要求的QQ号
    '''
    while True:
        qq = input('请输入QQ号: ')
        if ((len(qq) < 5) or (len(qq) > 10)) or (qq.isdigit() != True):
            print('请检查输入!!! (由5-10位纯数字组成,不能为空) ')
        else:
            return qq


def addinfo(lists):
    '''
    添加名片功能
    :param lists: 这个参数是存放名片的列表
    :return: 返回一个新增了一条数据的名片列表
    '''
    # 定义一个字典,存放这个名片的信息
    info = {}

    # 该名片的序号为列表长度+1
    # info['num'] = len(lists) + 1

    # 通过调用其他函数获取对应信息
    info['name'] = getname()
    info['phone'] = getphone()
    info['qq'] = getqq()

    # 将该字典存入名片列表中
    lists.append(info)

    print('添加成功!')
    showinfo(lists)


def showinfo(lists):
    '''
    输出所有名片列表的功能
    :param lists: 参数为存放名片数据的列表
    :return:
    '''
    # 在这里定义一个表,并调用prettytable库中的PrettyTable方法,设置表头
    table = pt.PrettyTable(['序 号', '姓 名', '手  机  号', 'QQ 号'])
    i = 0
    for lis in lists:
        info = []
        for value in lis.values():
            info.append(value)
        # 每循环一条名片信息,此前的序号+1,并将新的值添加到该名片的列表中
        i += 1
        info.insert(0, i)
        # 每循环一条名片信息,将该条名片的信息列表传给table表的一行
        table.add_row(info)
        # 这个是修改 绘制水平竖直交汇点的字符 默认为“+”
        table.junction_char = '*'
    # 所有循环结束后,打印表
    print(table)


def delinfo(lists):
    '''
    删除名片的功能
    :param lists: 参数为存放名片数据的列表
    :return:
    '''
    del_name = input('请输入您需要删除名片的姓名: ')
    flag = True
    for lis in lists:
        if lis['name'] == del_name:
            lists.remove(lis)
            print('删除成功!')
            showinfo(lists)
            flag = False
            break

    if flag == True:
        print('名片不存在!!!')


def updateinfo(lists):
    '''
    修改名片的功能
    :param lists: 参数为存放名片数据的列表
    :return:
    '''
    upd_name = input('请输入您需要修改名片的姓名: ')
    flag = True
    for lis in lists:
        if lis['name'] == upd_name:
            print('请在以下输入新的信息')
            lis['name'] = getname()
            lis['phone'] = getphone()
            lis['qq'] = getqq()
            print('修改成功!')
            showinfo(lists)
            flag = False
            break

    if flag == True:
        print('名片不存在!!!')


def searchinfo(lists):
    '''
    查询名片
    :param lists: 参数为存放名片数据的列表
    :return:
    '''
    se_name = input('请输入您需要查询的姓名: ')
    flag = True
    table = pt.PrettyTable(['姓 名', '手  机  号', 'QQ 号'])
    for lis in lists:
        info = []
        if lis['name'] == se_name:
            for value in lis.values():
                info.append(value)
            table.add_row(info)
            flag = False
            break
    if flag == True:
        print('名片不存在!!!')
    else:
        print(table)



执行结果(篇幅有限,这里只放最新版本的执行结果)

------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 1
请输入姓名: lisi
请输入手机号: 12345667323
请输入QQ号: 23232
添加成功!
*-------*-------*-------------*-------*
| 序 号 | 姓 名 |  手  机  号 | QQ 号 |
*-------*-------*-------------*-------*
|   1   |  lisi | 12345667323 | 23232 |
*-------*-------*-------------*-------*
------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 1
请输入姓名: 3e
请检查输入!!! (3-6位,不能包含标点符号和空格,不能为空)
请输入姓名: wangwu
请输入手机号: 232
请检查输入!!! (由11位纯数字组成,不能为空)
请输入手机号: 11122223333
请输入QQ号: 2
请检查输入!!! (由5-10位纯数字组成,不能为空)
请输入QQ号: 12122
添加成功!
*-------*--------*-------------*-------*
| 序 号 | 姓 名  |  手  机  号 | QQ 号 |
*-------*--------*-------------*-------*
|   1   |  lisi  | 12345667323 | 23232 |
|   2   | wangwu | 11122223333 | 12122 |
*-------*--------*-------------*-------*
------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 4
请输入您需要查询的姓名: lisi
+-------+-------------+-------+
| 姓 名 |  手  机  号 | QQ 号 |
+-------+-------------+-------+
|  lisi | 12345667323 | 23232 |
+-------+-------------+-------+
------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 3
请输入您需要修改名片的姓名: lisi
请在以下输入新的信息
请输入姓名: zhsan
请输入手机号: 12222223333
请输入QQ号: 12121
修改成功!
*-------*--------*-------------*-------*
| 序 号 | 姓 名  |  手  机  号 | QQ 号 |
*-------*--------*-------------*-------*
|   1   | zhsan  | 12222223333 | 12121 |
|   2   | wangwu | 11122223333 | 12122 |
*-------*--------*-------------*-------*
------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 5
*-------*--------*-------------*-------*
| 序 号 | 姓 名  |  手  机  号 | QQ 号 |
*-------*--------*-------------*-------*
|   1   | zhsan  | 12222223333 | 12121 |
|   2   | wangwu | 11122223333 | 12122 |
*-------*--------*-------------*-------*
------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 4
请输入您需要查询的姓名: de
名片不存在!!!
------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 2
请输入您需要删除名片的姓名: zhsan
删除成功!
*-------*--------*-------------*-------*
| 序 号 | 姓 名  |  手  机  号 | QQ 号 |
*-------*--------*-------------*-------*
|   1   | wangwu | 11122223333 | 12122 |
*-------*--------*-------------*-------*
------------------
        名片管理系统
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
------------------
请输入要进行的操作(1-6): 6
你确定要退出系统吗(输入YES确认退出)yes

如有不足之处,还请各位大佬多多指点~

⋆⋆躲起来的星星也在努力发光 你也要加油!!!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值