python实现简单通讯录管理系统
作者:Shelumiel 发布时间:2021-05-02 10:41:23
标签:python,通讯录
本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下
=====欢迎使用通讯录管理系统=====
1.添加
2.修改
3.册除
4.查询
5.排序
6.退出
=========================
请选择你要执行的操作的序号,具体要求:
1)通讯录要以文件的形式存储在硬盘上(比如D:\tongxunlu) ,每一条数据(联系人姓名和手机号码)存储一行,如果一个联系人有多个手机号,则都存储在同一行,即通讯录中每个联系入的数据占一行。
2)系统运行时初始菜单如上,根据用户选择的序号执行相应的操作:
添加功能:提醒角户输入姓名和手机号码,同时进行手机号码格式检查,合法则该姓名和手机号码插入到通讯录最后一行。
修改功能:根据用户指定的联系人姓名修改其手机号码,修改后保存文件。 删除功能:根据用户输人的姓名删除该条记录。
查询功能:可以根据联系人姓名查询其手机号,也可以根据手机号查询联系人姓名。 排序功能:要求用户选择按联系人姓名升序或降序,对通讯录进行排序。
退出功能:结束程序的运行。 注意:只有选择序号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("输入的序号不在范围内!")
来源:https://blog.csdn.net/qq_45939329/article/details/118051511
0
投稿
猜你喜欢
- 今天在做一个老项目时,遇到一个需求,在javascript将url中的参数加密解密,从网上找发现了这段有用的代码:<SCRIPT LA
- 大多数网站维护都采用“多人协作,共同管理”方式。某个人负责一个(或者多个)栏目,他只能对他负责的栏目进
- 最基本的MMM安装必须至少需要2个数据库服务器和一个监控服务器下面要配置的MySQL Cluster环境包含四台数据库服务器和一台监控服务器
- 概述传入条件的不同,会执行不同的语句每一个case分支都是唯一的,从上到下逐一测试,直到匹配为止。语法第一种【switch 带上表达式】sw
- 最近打开电脑wifi连接老是出现各种问题,于是突发奇想,我自己能不能做一个wifi连接的小工具岂不是就没有这些麻烦了,居然成功了。为了方便不
- 一个简单的tokenizer分词(tokenization)任务是Python字符串处理中最为常见任务了。我们这里讲解用正则表达式构建简单的
- 网页离不开链接,而默认链接的表现形式总是千篇一律的蓝色文字加底线,每当我们点击它时,周围会出现虚线框,表示该链接是当前的焦点,影
- nonzero函数返回非零元素的目录。返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值。 import
- 这几天一直困惑我的问题,我觉得pycharm应该也是有的啊,偶然间找到了这个。把那个框里的选中,就可以了。ps:我的是 PyCharm 20
- setTimeoutsetTimeout 语法例子用 setTimeout 来执行 function不断重复执行的 setTimeout设定
- 记录了Linux 安装python3.7.0的详细过程,供大家参考,具体内容如下我这里使用的时centos7-mini,centos系统本身
- 今天主要是来说一下怎么可视化来监控你的爬虫的状态。相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询
- Pytorch的核心是两个主要特征:1.一个n维tensor,类似于numpy,但是tensor可以在GPU上运行2.搭建和训练神经网络时的
- sql调优的几种方式:避免使用select *、用union all 代替union、小表驱动大表、批量操作、多用limit、in中值太多、
- 在很多应用程序开发中,需要记录某些数据表的历史记录或修改痕迹,以便日后出现数据错误时进行数据排查。这种业务需求,我们可以通过数据库的触发器来
- 1、XML 是什么?XML仅仅是一种数据存放格式,这种格式是一种文本(虽然XML规范中也提供了存放二进制数据的解决方案)。事实上有很多文本格
- 1)首先注册一个邮箱,这里以163邮箱为例2)注册之后登录,进行如下修改找到设置,设置一个授权码,授权码的目的仅仅是让你有权限发邮件,但是不
- 英文文档:callable(object)Return True if the object argument appears callab
- 思考:测试用例执行后,如何生成一个直观漂亮的测试报告呢?分析:1.unittest单元测试框架本身带有一个textTestRunner类,可
- 数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分 概述:程序访问优化也可以认为是访问SQL语