python的艰难学习之路-综合练习--名片管理系统

2023-11-06

名片管理系统需求:

1.显示欢迎界面,提示操作码,按照操作码执行程序
2.操作码功能包括:查询,查找,新增
3.查询出来后,可继续操作–>修改,删除
4.名片需要记录的信息–>编号,姓名,电话,邮箱,QQ。
5.编号自动生成
6.如果在功能选择界面连续输入三次错误的选项,则强行终止程序

分两部分开发完成,第一部分card_main,存储主要功能
第二部分card_tools 存储所有需要调用的函数:

第一部分:

"""需求总览:
    1.显示欢迎界面,提示操作码,按照操作码执行程序
    2.操作码功能包括:查询,查找,新增
    3.查询出来后,可继续操作-->修改,删除
    4.名片需要记录的信息-->编号,姓名,电话,邮箱,QQ,地址,身份证号等
    5.编号自动生成
    """
import card_tools
code1 = 1
wrong = 0
while code1 == 1:
    card_tools.show_man_menu()
    code = input("请选择操作功能:")
    if code == "0":
        code1 = 0
        print("欢饮再次使用名片管理系统")

    elif code == "1":
        card_tools.card_add()
        card_tools.card_write_to_file()

    elif code == "2":
        card_tools.card_show_all()
        card_tools.card_write_to_file()

    elif code == "3":
        card_tools.card_search()
        card_tools.card_write_to_file()
        card_tools.cards_number_auto_edit()

    else:
        wrong += 1
        if wrong == 3:
            print("您连续输错了三次,程序强制退出了")
            break
        else:
            print("您的操作码选择错误,请重新输入(< _ >)")
            continue




第二部分

# 从文件test.txt读取之前存储的信息到cards列表
cards = []
with open("test.txt") as file_to_read:
    file_1 = file_to_read.readlines()
for i in range(len(file_1)):
    file_1[i] = file_1[i].replace("\n", "")  # 去除文件中的换行符
    file_2 = file_1[i].split()  # 根据空格拆分成几个列表(将来的字典有几个键值对就有几个列表)
    file_dic = {}
    for j in range(len(file_2)):
        file_3 = file_2[j].split(":")  # 根据:把每个元素拆为两个列表
        file_dic[file_3[0]] = file_3[1]  # 把上面两个列表中的元素添加成一个字典的键值对
    cards.append(file_dic)


def cards_number_auto_edit():
    """每次如果有执行删除等会修改编号的操作时,自动重排编号"""
    count = 1
    for auto_dic in cards:
        auto_dic['number'] = count
        count += 1


def card_write_to_file():
    """每次又修改或者其他操作后,把修改完成的列表重新写入到文件中"""
    with open("test.txt", "w") as file_to_edit:
        for info_dic in cards:
            for info_str in info_dic:
                file_to_edit.writelines(info_str)
                file_to_edit.writelines(":")
                file_to_edit.writelines(str(info_dic[info_str]))
                file_to_edit.writelines(" ")
            file_to_edit.writelines("\r")


   
def show_man_menu():
    """显示主菜单"""
    print("*"*40, "\n", "欢迎使用【名片管理系统】v1.0",)
    print("\r")
    print("功能菜单列表")
    print("1. 新建名片", "2. 显示全部", "3. 查询名片", sep='\n')
    print("\r")
    print("0. 退出系统")
    print("*"*40)


def show_head_table():
    """输出表头"""
    print("编号", "姓名", "电话", "邮箱", "QQ号", sep=' '*20)
    print("-"*100)


def card_add():
    """新增名片"""
    num = int(len(cards))
    card_new = {}
    card_new["number"] = num + 1
    name_new = input("请输入姓名:")
    card_new["name"] = name_new
    phone_new = input("请输入电话:")
    card_new["phone"] = phone_new
    mail_new = input("请输入邮箱:")
    card_new["mail"] = mail_new
    qq_new = input("请输入QQ号:")
    card_new["QQ"] = qq_new
    cards.append(card_new)
    print("添加成功")
    print("以下是你添加的详细信息")
    card_write_to_file()
    show_head_table()
    if card_new["number"] < 10:
        print(card_new["number"], end=' '*23)
    elif card_new["number"] < 100:
        print(card_new["number"], end=' '*22)
    else:
        print(card_new["number"], end=' ' * 21)
    print(card_new["name"], end=' '*(24 - len(card_new["name"])))
    print(card_new["phone"], end=' '*(24 - len(card_new["phone"])))
    print(card_new["mail"], end=' '*(24 - len(card_new["mail"])))
    print(card_new["QQ"], end=' '*(24 - len(card_new["QQ"])))
    print('\n')


def card_show_all():
    """显示所有名片"""
    show_head_table()
    for card_dic in cards:
        if int(card_dic["number"]) < 10:
            print(card_dic["number"], end=' ' * 23)
        else:
            print(card_dic["number"], end=' ' * 22)
        print(card_dic["name"], end=' ' * (24 - len(card_dic["name"])))
        print(card_dic["phone"], end=' ' * (24 - len(card_dic["phone"])))
        print(card_dic["mail"], end=' ' * (24 - len(card_dic["mail"])))
        print(card_dic["QQ"], end=' ' * (24 - len(card_dic["QQ"])))
        print('\r')
    print("\r")


def card_search():
    """查询名片,修改名片,删除名片"""
    code2 = 0
    while code2 == 0:
        search_name = input("请输入你要查询的姓名:")
        for cards_dic in cards:
            if cards_dic["name"] == search_name:
                list_index = cards.index(cards_dic)
                print("以下是您查询出来的信息:")
                show_head_table()
                if int(cards_dic["number"]) < 10:
                    print(cards_dic["number"], end=' ' * 23)
                else:
                    print(cards_dic["number"], end=' ' * 22)
                print(cards_dic["name"], end=' ' * (24 - len(cards_dic["name"])))
                print(cards_dic["phone"], end=' ' * (24 - len(cards_dic["phone"])))
                print(cards_dic["mail"], end=' ' * (24 - len(cards_dic["mail"])))
                print(cards_dic["QQ"], end=' ' * (24 - len(cards_dic["QQ"])))
                print('\r')
                print("-"*100)

                # 对名片的操作
                operate = input("请选择您要对改名片进行的操作:1-->修改|2-->删除|3-->只是看看,不做操作:")
                if operate == "3":
                    code2 += 1
                    break
                # 修改
                elif operate == "1":
                    edit_name = input("请输入新的姓名(直接回车不做修改):")
                    edit_phone = input("请输入新的电话(直接回车不做修改):")
                    edit_mail = input("请输入新的邮箱(直接回车不做修改):")
                    edit_qq = input("请输入新的QQ号码(直接回车不做修改):")
                    if edit_name == '':
                        pass
                    else:
                        cards_dic["name"] = edit_name
                    if edit_phone == '':
                        pass
                    else:
                        cards_dic["phone"] = edit_phone
                    if edit_mail == '':
                        pass
                    else:
                        cards_dic["mail"] = edit_mail
                    if edit_qq == '':
                        pass
                    else:
                        cards_dic["QQ"] = edit_qq
                    print("修改完成!!!")
                    print("以下是您修改完成的信息:")
                    card_write_to_file()
                    show_head_table()
                    if int(cards_dic["number"]) < 10:
                        print(cards_dic["number"], end=' ' * 23)
                    else:
                        print(cards_dic["number"], end=' ' * 22)
                    print(cards_dic["name"], end=' ' * (24 - len(cards_dic["name"])))
                    print(cards_dic["phone"], end=' ' * (24 - len(cards_dic["phone"])))
                    print(cards_dic["mail"], end=' ' * (24 - len(cards_dic["mail"])))
                    print(cards_dic["QQ"], end=' ' * (24 - len(cards_dic["QQ"])))
                    print('\r')
                    print("-" * 100)
                    code2 += 1
                    break
                # 删除
                elif operate == "2":
                    your_choice1 = input("请确认是否删除该条记录!(回车确认,输入任何字符表示不删除:)")
                    if your_choice1 == '':
                        print("删除成功!!!")
                        card_write_to_file()
                        cards.pop(list_index)
                        code2 += 1
                    else:
                        code2 += 1
                    break
        else:
            your_choice = input("没找到你要查询的信息,请确定是否要继续查找:y-->继续查找、n-->不了")
            if your_choice == "n":
                code2 += 1


部分执行结果显示:

1.新增名片

在这里插入图片描述

2.显示全部

在这里插入图片描述

我们假设删除了第二条记录,则第三条记录的编号会自动变成2

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python的艰难学习之路-综合练习--名片管理系统 的相关文章

随机推荐

  • React(三)自定义render处理map的虚拟节点和diff算法

    React 一 JSX概念和实例 Zoie ting的博客 CSDN博客 React 二 实现自定义createElement和render Zoie ting的博客 CSDN博客 一 map的渲染 根据前两篇的实践 基本把JSX渲染出来了
  • jsp调整字体大小font_jsp中CSS如何设置字体大小、斜体及颜色

    我想在自己的网站中应用这个菜单 但是菜单的字体是固定的 应该怎样改变字体的大小 这个字体太小了 中文显示很难看 先解这个问题 修改这两个CSS即可 style1 font size 30px style4 font size 24px fo
  • 使用HTML和CSS完成网页导航模块的制作步骤和方法

    小编本人从事IT培训教育行业多年 在教授学生网页设计课程的时候 尤其是到CSS部分的时候 学生总是很难理解 大部分学生上手慢 针对这个问题 小编本人在教学的时候 将网页设计分模块进行讲解 今天就来给大家分享一下如何使用HTML和CSS完成网
  • 时间序列预测——双向LSTM(Bi-LSTM)

    本文展示了使用双向LSTM Bi LSTM 进行时间序列预测的全过程 包含详细的注释 整个过程主要包括 数据导入 数据清洗 结构转化 建立Bi LSTM模型 训练模型 包括动态调整学习率和earlystopping的设置 预测 结果展示 误
  • ipcfg报错_编译出错信息解析

    1 SRC WEB WEBPOST C 599 warning C280 ipcfg unreferenced local variable 定义了 但是没有使用 就会有这个警告 一般来说 出现这种情况则表示可以删除警告中所指的变量 2 S
  • redis学习:BitMap

    使用位存储 信息状态只有 0 和 1 这个适合哪种记录某些状态只有两种状态的 比如说成绩及没及格 是男是女 不考虑跨性别的 上班迟没迟到 是或者不是这种 Bitmap是一串连续的2进制数字 0或1 每一位所在的位置为偏移 offset 在b
  • java.lang.IllegalStateException: Failed to convert message:‘‘ to outbound message.

    java lang IllegalStateException Failed to convert message GenericMessage payload 4a76a1ea 9bab 4305 a7f9 26b63e113a19 he
  • jmeter 聚合数据_性能测试连载 (37)性能测试数据错误率分析

    概述 性能测试脚本跑完了之后 我们除了要收集瓶颈数据 还有分析错误数据 通常一套脚本跑完 错误类型不止一种 但是jmeter只会在聚合报告里面给出一个总体的错误率 错误率 jmeter里的错误率是如何统计的 在返回的数据里面 只要succe
  • 2022上半年

    2022上半年 b a c b 找不同 a 串联公式 并联公式 c b d c 在本地安装的沙都软件和网页被篡改没有之间的联系 a 对于SNAT 是由内网去访问外网的时候进行的地址转换 d b c b c c d b c d b a
  • 实现微信小程序web-view内嵌H5中的下载功能(大文件切片下载)

    实现微信小程序内嵌H5中的下载功能 一 项目场景 难点 解决方案 1 H5微信小程序 a 首先必不可少的是安装jweixin module模块 b 在main js中将依赖绑定 c H5对应页面点击下载时代码为 2 uni app的小程序
  • python+selenium+unittest自动化测试

    python selenium unittest自动化测试详解 Base 基类层 最基础类 供其他文件调用 封装浏览器方法 以方便后面代码的调用 可以二次封装自带的方法 方便调用 其他地方调用基础类的方法 如果需要修改调用地方的方法 只需要
  • 为什么我们要用Spring?

    在之前的文章说说java反射 2 反射的价值我们对java反射的内容有了一定的了解 并且通过反射机制做了一个简单的框架 也算是对于Spring框架的铺垫 接下来了解一下我们使用Spring框架的意义 Spring是一个解决了许多在J2EE开
  • 始料未及的COVID-19、延期的考试、又可以瞎倒腾的喜悦

    Hmmm 真的本来下定决心不要东摸西摸专心功课 但是确实发生了本次人类历史上的大事件 当然可能在以后的日子里这个也就是洒洒水水平 导致了考试的延期 我又再一次的东张西望起来 hmmm 好吧为了庆祝又可以自由活动 特此献上抄来的小程序一篇 以
  • 解决Rosbridge自定义action信息问题

    前言 利用rosbridge开发一个网页版的action客户端 一 rosbridge原理 rosbridge协议 该协议的基本思想是将节点间的分布式通信 改成 client节点 与一个代理节点进行C S通信 然后代理节点再将请求转发给se
  • 多服务环境下定时任务重复执行问题解决方案

    当一个服务部署在多台服务器上时 定时任务可能出现多次执行的情况 就是每个服务上执行一次 有以下两种思路 一是固定死只有某服务器执行定时任务 二是随机暂停几秒 某一服务执行了 其他就不再执行 1 固定某一个服务器作为执行定时任务的机器 通过配
  • 基于混沌映射与差分进化的自适应教与学优化算法

    文章目录 一 理论基础 1 标准TLBO算法 2 混沌映射与差分进化的自适应TLBO算法 1 改进的Logistic混沌映射 2 惯性权重自适应调节函数 3 教改阶段 二 仿真实验与分析 三 参考文献 一 理论基础 1 标准TLBO算法 请
  • 在Power BI中用DAX新建列的方式进行累计求和

    在Power BI中用DAX新建列的方式进行累计求和 DAX 新建列来累计求和 累计求和 DAX 新建列 DAX函数 Filter DAX函数 EARLIER DAX函数 SUMX DAX 新建列来累计求和 Power BI有两种方式进行累
  • 没有node-sass Windows 64-bit with Node.js 16.x

    throw new Error errors missingBinary OS X 64 bit with Node js 16 x Windows 64 bit with Node js 16 x 1 下载node sass 对应的版本
  • 数据分析理论【5】之 下采样策略和上采样策略

    合辑传送门 gt gt 数据分析 合辑 在分类问题的数据中 很容易出现正反数据集数量存在极大的差距 这类数据直接用于训练不利于模型的构架 所以我们需要对数据进行些许处理 很容易想到 合理的数据集应该是正反数据集数量应接近 那就存在两种策略
  • python的艰难学习之路-综合练习--名片管理系统

    名片管理系统需求 1 显示欢迎界面 提示操作码 按照操作码执行程序 2 操作码功能包括 查询 查找 新增 3 查询出来后 可继续操作 gt 修改 删除 4 名片需要记录的信息 gt 编号 姓名 电话 邮箱 QQ 5 编号自动生成 6 如果在