视频:
时间正确!允许启动——Python通讯录管理系统
📝 实验内容
实现通讯录管理系统(增、删、改、查功能)
实现功能:
-
开始菜单
-
敲击键盘的a, d, c, f ,s 可对应执行相关操作(如下图所示):
-
子功能
-
增、删、改、查功能分别使用函数封装
-
通讯录数据存储在list数据结构中
-
用列表中的对应方法对数据进行增、删、改、查操作
-
增加数据子界面
-
输入数据包括姓名、QQ号码、电话号码、邮箱
-
输入成功后,提示添加成功,并返回添加的数据
-
格式检测不做要求,附加项目
-
删除数据子界面
-
通过输入序号进行删除
-
若序号不存在,则给出提示
-
删除后,提示删除成功
-
修改数据子界面
-
输入待修改的序号,若序号不存在,给出提示
-
若序号存在,则进入下一级页面选择需要修改的子项
-
若不需要修改,可以输入空格后回车取消修改
-
输入成功后,提示修改成功,并返回修改的数据
-
查找记录子界面
-
输入序号进行查找
-
若不存在,给出提示
-
展示数据子界面
-
输入s查看通讯录中所有的数据
注:此处的按q返回功能可以写也可以不写,大家自己判断用户体验哪种比较好。只要确保用户可以返回主菜单即可。
注2:此处展示的格式不同仅仅是因为来自两份代码,大家自己的代码统一格式即可。
-
容错要求
-
在各个界面,如果输入的值不符合要求,需要进行提示,并且要求重新输入。上面只展示了部分情况,请同学们自行完善
-
输入的异常值的检测功能,如果大家有能力也可以尽量完善。例如电话号码,邮件格式的检查。【如果完成此项功能请在作业提交系统的备注注明】
🔗 提交内容
本次实验需要以录屏形式提交,请勿仅提交截图
-
作业代码
-
运行视频
-
需涵盖所有的功能部分
-
如果做出额外的功能也请进行展示
-
如需要录屏软件(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功能以及一些彩蛋