python通讯录课程设计

2023-10-27

最近自学了python,想到之前学c++的通讯录课程设计,就试着用来检验python的学习成果。

import os
file_name='contact.txt'
def menu():
        print("=====================欢迎使用通讯簿=====================")
        print("*********************菜单*****************************")
        print("*                    1.新建联系人                     *")
        print("*                    2.查找联系人                     *")
        print("*                    3.删除联系人                     *")
        print("*                    4.修改联系人                     *")
        print("*                    5.显示联系人信息                  *")
        print("*                    0.退出                          *")
        print("=====================================================")
def main():
    while True:
        menu()
        choice=int(input("请输入0-5选择"))
        if choice in [0,1,2,3,4,5]:
            if choice==0:
                print("谢谢使用")
                break
            elif choice==1:
                insert()
            elif choice==2:
                search()
            elif choice==3:
                delete()
            elif choice==4:
                modify()
            elif choice==5:
                display()
def insert():
    contact_list=[]
    while True:
        number=input("请输入联系人手机号:")
        if not number:
            break
        name=input("请输入联系人姓名:")
        if not name:
           break
        try:
          sex=input("请输入联系人性别:")
          address=input("请输入联系人籍贯:")
          qq=input("请输入联系人qq号:")
        except:
             print("输入错误,请重新输入")
             continue
        contact={'number':number,'name':name,'sex':sex,'address':address,'qq':qq}
        contact_list.append(contact)
        answer=input('是否继续添加?y/n\n')
        if answer=='y':
            continue
        else:
            break
    save(contact_list)
    print("联系人输入完毕!")
def save(list):
    try:
        cont_txt=open(file_name,'a',encoding='utf-8')
    except:
        cont_txt=open(file_name,'w',encoding='utf-8')
    for item in list:
        cont_txt.write(str(item)+'\n')
    cont_txt.close()
def search():
    contact_query = []
    while True:
        number = ''
        name = ''
        if os.path.exists(file_name):
            mode = input("按手机号查找请输入1,按姓名查找请输入2:")
            if mode == '1':
                number = input("请输入手机号:")
            elif mode == '2':
                name = input("请输入姓名:")
            else:
                print("===========输入错误,请重新输入==========")
                search()
            with open(file_name, 'r', encoding='utf-8') as rfile:
                contact = rfile.readlines()
                for item in contact:
                    d = dict(eval(item))
                    if number != '':
                         if d['number'] == number:
                                contact_query.append(d)
                    elif name != '':
                        if d['name'] == name:
                                contact_query.append(d)
            display_contact(contact_query)
            contact_query.clear()
            answer = input('是否继续查询y/n\n')
            if answer == 'y':
                continue
            else:
                break
        else:
            print("暂未保存联系人信息")
            return
def display_contact(list):
    if len(list)==0:
        print("没有查询到联系人信息,无数据显示!!")
        return
    format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}'
    print(format_title.format('手机号','姓名','性别','籍贯','qq'))
    format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}'
    for item in list:
        print(format_data.format(item.get('number'),item.get('name'),
                                 item.get('sex'),item.get('address'),
                                 item.get('qq')))
def delete():
    while True:
        contact_number = input(("请输入删除联系人的手机号"))
        if contact_number != ' ':
            if os.path.exists(file_name):
                with open(file_name, 'r', encoding='utf-8')as file:
                    contact_old = file.readlines()
            else:
                contact_old = []
            flag = False
            if contact_old:
                with open(file_name, 'w', encoding='utf-8')as wfile:
                    d = {}
                    for item in contact_old:
                        d = dict(eval(item))
                        if d['number'] != contact_number:
                            wfile.write(str(d) + '\n')
                        else:
                            flag = True
                    if flag:
                        print(f'number为{contact_number}的联系人已被删除')
                    else:
                        print(f'没有找到number为{contact_number}的联系人')
            else:
                print('无联系人信息')
                break
            display()
            answer = input('是否继续删除?y/n\n')
            if answer == 'y':
                continue
            else:
                break
def modify():
    display()
    if os.path.exists(file_name):
        with open(file_name,'r',encoding='utf-8') as rfile:
            contact_old=rfile.readlines()
    else:
        return
    contact_number=input("请输入要修改的联系人手机号:")
    with open(file_name,'w',encoding='utf-8')as wfile:
        for item in contact_old:
            d=dict(eval(item))
            if d['number']==contact_number:
                print("找到该联系人")
                while True:
                    try:
                        d['name']=input("请输入姓名:")
                        d['sex']=input("请输入性别:")
                        d['address']=input("请输入籍贯:")
                        d['qq']=input("请输入qq:")
                    except:
                        print("您的输入有误,请重新输入!")
                    else:
                        break
                wfile.write(str(d)+'\n')
                print("修改成功!")
            else:
                wfile.write(str(d)+'\n')
        answer=input('是否继续修改其他联系人信息y/n\n')
        if answer=='y':
            modify()
def display():
    contact_list=[]
    if os.path.exists(file_name):
        with open(file_name,'r',encoding='utf-8') as rfile:
            contacts=rfile.readlines()
            for item in contacts:
                contact_list.append(eval(item))
            if contact_list:
                display_contact(contact_list)
    else:
        print('暂未保存过数据!!!')
main()

生成exe:
cmd:
先安装 输入pip install PyInstaller
再输入
pyinstaller -F D:\pthon\Pythonxuexi\main.py
在这里插入图片描述

**大概就是这样,接下来再学吧~
============更新一下=
=============================**
在这里插入图片描述
在这里插入图片描述

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

python通讯录课程设计 的相关文章

随机推荐

  • c语言中全局变量的初始化

    c语言中局部变量可以用类型相符的任意表达式来初始化 而全局变量只能用常量表达式初始化 尤其对于全局变量来说 不能用一个数学函数或者其他的需要在运行时才能计算出结果的表达式进行初始化 因为程序开始运行时要用适当的值来初始化全局变量 所以初始值
  • PCL 计算点云法向量与表面曲率(C++详细过程版)

    法向量 一 概述 二 代码实现 三 结果展示 四 相关链接 一 概述 计算点云法向量和表面曲率是PCL里的经典算法之一 具体算法原理和实现代码见 PCL 计算点云法向量并显示 为充分了解算法实现的每一个细节和有待改进的地方 使用C 代码对算
  • winserver2019 解决【你的远程桌面许可证出现问题,你的会话将在60分钟后断开连接】

    问题描述 winserver 2019 rdp远程后提示 远程桌面许可证问题 你的远程桌面许可证出现问题 你的会话将在60分钟后断开连接 请与系统管理员联系以解决此问题 如下图 解决方法 主要参考了 解决远程桌面许可证问题 但是这里说的太简
  • centerOS连不上网解决办法

    1 检查路由 route n 如果你缺失第一个路由 是肯定无法ping通外网的 2 添加dns vim etc resolv conf nameserver 8 8 8 8 3 在 etc resolv conf文件添加路由 route a
  • ​草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码

    草莓熊python 绘图 春节版 圣诞倒数雪花版 附源代码 本文目录 一 前言 二 草莓熊python绘图 圣诞倒数雪花版 春节版 效果图 三 源代码保存方法 四 代码命令解释 1 绘图基本代码语法解释 2 7段数码管详解 2 1 7段数码
  • 2000-2018年各省能源消费和碳排放数据数据、1997-2017年各省地级市县区碳排放数、各国二氧化碳排放量(人均公吨数)1960-2014年、二氧化碳排放量、各省市碳排放权额分配实施方案

    1 2000 2018年各省能源消费和碳排放数据数据 1 数据来源 中国能源统计年鉴 2 时间跨度 2000 2018年 3 区域范围 全国各省 4 指标说明 指标来源为中国能源统计年鉴 2018年碳排放和能源数据为插值法推算得到 2 19
  • c语言循环结构程序设计实验报告,c语言循环结构程序设计实验报告

    c语言循环结构程序设计实验报告 云南大学数学与统计学实验教学中心实验报告课程名称 程序设计和算法语言 学期 2012 2013 学年下学期 成绩 指导教师 学生姓名 学生学号实验名称 循环结构程序设计实验编号 四 实验日期 实验学时 3学院
  • 在Pycharm中使用HTMLTestRunner不能生成测试报告

    遇到一个问题 在做自动化测试时 使用的编辑工具是Pycharm 语言是python3 selenium3 代码运行没有问题 但是就是执行完毕后没有在对应目录生成测试报告 因为之前使用的是python2 7 selenium2 程序运行是没有
  • 13.网络爬虫—多进程详讲(实战演示)

    网络爬虫 多进程详讲 一 进程的概念 二 创建多进程 三 进程池 四 线程池 五 多进程和多线程的区别 六 实战演示 北京新发地线程池实战 前言 个人简介 以山河作礼 Python领域新星创作者 CSDN实力新星认证 第一篇文章 1 认识网
  • 2020-09-15

    win10截图 win shift s
  • C++类结构规范定义

    后期私有类肯定还会有很多 为了自己和读者方便阅读 在后面的设计中将严格按照制定格式来定义类的变量和函数 pragma once class CClassxxx public CClassBase DECLARE DYNAMIC CClass
  • Flink SQL中时态表

    前言 Flink 1 12正式发布后 带来了很多新的特性 本文重点学习和总结一下Flink 1 11和 Flink1 12中时态表的使用和自己的一个小总结 文章如有问题 请大家留言交流讨论 我会及时改正 本文主要将在Flink1 12中新的
  • 仿今日头条最强顶部导航指示器,支持6种模式

    项目中经常会用到类似今日头条中顶部的导航指示器 我也经常用一个类似的库PagerSlidingTabStrip 但是有时并不能小伙伴们的所有需求 所以我在这个类的基础上就所有能用到的情况做了一个简单的封装 大家知道做一个功能比较简单 但是封
  • PageHelper 分页排序使用记录

    PageHelper 分页使用 PageHelper startPage pageNum pageSize orderBy 其中最后一个参数是数据库字段名称 按传入的字段进行排序 场景 如果有接口参数中有排序字段 则按参数中的排序字段来排序
  • 用MATLAB修改图像大小

    J1 imread frame 1 png 将图片读进工作区 J2 im2double J1 将默认的uinit数据类型保存为double类型并进行单位化 f imresize J2 2 将J2图片尺寸变为原来的二倍 figure imsh
  • 机器学习——逻辑回归 (Logistic Regression)

    引言 当谈到分类问题时 机器学习中最常用的算法之一就是逻辑回归 Logistic Regression 逻辑回归是一种广义线性模型 用于预测二分类问题 它的优势在于简单易懂 计算效率高 并且通常具有不错的性能 在本文中 我们将介绍逻辑回归的
  • 软件测试面试题:什么是上下文切换?

    1 什么是上下文切换 上下文切换是指CPU从一个任务或线程切换到另一个任务或线程时 保存当前任务的上下文信息并加载新任务的上下文信息的过程 上下文信息包括寄存器状态 程序计数器 堆栈指针等 它们共同组成了一个任务或线程的运行状态 同时 我也
  • 基于深度学习的人脸检测与识别系统设计(python)

    代码在github上 https github com Bluenessdrops face recognition 以上 后续有空了再详细写写过程 有问题请留言
  • vivo手机android耗电快怎么解决,vivo手机耗电严重怎么办 如何解决手机耗电严重的问题...

    相信大家对vivo手机都是不陌生的 他也是我们国产智能手机中的一个品牌 使用的用户也非常的多 并且机型也是一代比一代更好 那么大家平时在使用vivo手机的时候可能都会觉得它的电耗太快了 每天没用多久就需要充电了 所以就有网友问到小编有没有解
  • python通讯录课程设计

    最近自学了python 想到之前学c 的通讯录课程设计 就试着用来检验python的学习成果 import os file name contact txt def menu print 欢迎使用通讯簿 print 菜单 print 1 新