# _*_ coding:utf-8 _*_
import re # 导入正则表达式模块
import os # 导入操作系统模块
filename = "students.txt" # 定义保存联系人信息的文件名
def menu():
# 输出菜单
print('''
╔———————联系人信息管理系统————————╗
│ │
│ =============== 功能菜单 ================= │
│ │
│ 1 录入联系人信息 │
│ 2 查找联系人信息 │
│ 3 删除联系人信息 │
│ 4 修改联系人信息 │
│ 5 排序 │
│ 6 统计联系人总人数 │
│ 7 显示所有联系人信息 │
│ 0 退出系统 │
│ ============================================ │
│ 说明:通过数字或↑↓方向键选择菜单 │
╚————————————————————————╝
''')
def main():
ctrl = True # 标记是否退出系统
while (ctrl):
menu() # 显示菜单
option = input("请选择:") # 选择菜单项
option_str = re.sub("\D", "", option) # 提取数字,去除字符串空格
if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
option_int = int(option_str)
if option_int == 0: # 退出系统
print('您已退出联系人管理系统!')
ctrl = False
elif option_int == 1: # 录入联系人信息
insert()
elif option_int == 2: # 查找联系人信息
search()
elif option_int == 3: # 删除联系人信息
delete()
elif option_int == 4: # 修改联系人信息
modify()
elif option_int == 5: # 排序
sort()
elif option_int == 6: # 统计联系人总数
total()
elif option_int == 7: # 显示所有联系人信息
show()
'''1 录入联系人信息'''
def insert():
stdentList = [] # 保存联系人信息的列表
mark = True # 是否继续添加
while mark:
id = input("请输入ID(如 1001):")
if not id: # ID为空,跳出循环
break
name = input("请输入名字:")
if not name: # 名字为空,跳出循环
break
try:
tel = str(input("请输入联系人手机号:"))
email = str(input("请输联系人邮箱:"))
address = str(input("请输入联系人地址:"))
except:
print("输入无效,不是整型数值....重新录入信息")
continue
stdent = {"id": id, "name": name, "tel": tel, "email": email, "address": address} # 将输入的联系人信息保存到字典
stdentList.append(stdent) # 将联系人字典添加到列表中
inputMark = input("是否继续添加?(y/n):")
if inputMark == "y": # 继续添加
mark = True
else: # 不继续添加
mark = False
save(stdentList) # 将联系人信息保存到文件
print("联系人信息录入完毕!!!")
# 将联系人信息保存到文件
def save(student):
try:
students_txt = open(filename, "a") # 以追加模式打开
except Exception as e:
students_txt = open(filename, "w") # 文件不存在,创建文件并打开
for info in student:
students_txt.write(str(info) + "\n") # 按行存储,添加换行符
students_txt.close() # 关闭文件
'''2 查找联系人成绩信息'''
def search():
mark = True
student_query = [] # 保存查询结果的联系人列表
while mark:
id = ""
name = ""
if os.path.exists(filename): # 判断文件是否存在
mode = input("按ID查输入1;按姓名查输入2:")
if mode == "1":
id = input("请输入联系人ID:")
elif mode == "2":
name = input("请输入联系人姓名:")
else:
print("您的输入有误,请重新输入!")
search() # 重新查询
with open(filename, 'r') as file: # 打开文件
student = file.readlines() # 读取全部内容
for list in student:
d = dict(eval(list)) # 字符串转字典
if id is not "": # 判断是否按ID查
if d['id'] == id:
student_query.append(d) # 将找到的联系人信息保存到列表中
elif name is not "": # 判断是否按姓名查
if d['name'] == name:
student_query.append(d) # 将找到的联系人信息保存到列表中
show_student(student_query) # 显示查询结果
student_query.clear() # 清空列表
inputMark = input("是否继续查询?(y/n):")
if inputMark == "y":
mark = True
else:
mark = False
else:
print("暂未保存数据信息...")
return
'''3 删除联系人成绩信息'''
def delete():
mark = True # 标记是否循环
while mark:
studentId = input("请输入要删除的联系人ID:")
if studentId is not "": # 判断要删除的联系人是否存在
if os.path.exists(filename): # 判断文件是否存在
with open(filename, 'r') as rfile: # 打开文件
student_old = rfile.readlines() # 读取全部内容
else:
student_old = []
ifdel = False # 标记是否删除
if student_old: # 如果存在联系人信息
with open(filename, 'w') as wfile: # 以写方式打开文件
d = {} # 定义空字典
for list in student_old:
d = dict(eval(list)) # 字符串转字典
if d['id'] != studentId:
wfile.write(str(d) + "\n") # 将一条联系人信息写入文件
else:
ifdel = True # 标记已经删除
if ifdel:
print("ID为 %s 的联系人信息已经被删除..." % studentId)
else:
print("没有找到ID为 %s 的联系人信息..." % studentId)
else: # 不存在联系人信息
print("无联系人信息...")
break # 退出循环
show() # 显示全部联系人信息
inputMark = input("是否继续删除?(y/n):")
if inputMark == "y":
mark = True # 继续删除
else:
mark = False # 退出删除联系人信息功能
'''4 修改联系人成绩信息'''
def modify():
show() # 显示全部联系人信息
if os.path.exists(filename): # 判断文件是否存在
with open(filename, 'r') as rfile: # 打开文件
student_old = rfile.readlines() # 读取全部内容
else:
return
studentid = input("请输入要修改的联系人ID:")
with open(filename, "w") as wfile: # 以写模式打开文件
for student in student_old:
d = dict(eval(st