python课程设计 好友通讯录(包含写入文件操作)
目录
python课程设计 好友通讯录(包含写入文件操作)
主要功能:
1 添加好友
2 按姓名查询某个好友
3 按电话号码查询某个好友
4 删除好友
5 修改好友信息
6 显示所有好友信息
7 对好友进行按组别排序
0 退出系统
完整代码如下:
主要功能:
1 添加好友
添加好友时,姓名和电话号码为必须项,其余项不进行输入时,存储内容为空。
先将学生信息保存在字典中,然后将字典添加到friend_list列表中,save函数是对传入的列表进行写入文件操作。
def insert():
friend_list = []
flag =False
while True:
name = input('请输入姓名:')
if not name:
break
phone = input('请输入电话号码:')
if not phone:
break
if len(phone)!=11:
print('输入不符合要求')
break
address = input('请输入归属地:')
department = input('请输入单位(按enter键不进行输入):')
group= input('请输入分组(按enter键不进行输入):')
remark = input('请输入备注(按enter键不进行输入):')
# 将录入的学生信息保存到字典中
student = {'name': name, 'phone': phone, 'address': address, 'department': department, 'group': group,'remark':remark}
# 将学生信息添加到列表中
friend_list.append(student)
flag=True
answer = input('是否继续添加?y/n\n')
if answer == 'y' or answer == 'Y':
continue
else:
break
# 保存学生信息到文件中
if flag:
save(friend_list)
print('好友信息录入完毕!!!')
2 按姓名查询某个好友
从文件中读取数据,讲读取的数据转换成字典类型再进行查询,将查询到的结果增添到一个空列表中,show_friend函数对列表传来的列表进行输出。
def search_name():
while True:
fri_query = []
name = ''
# 判断文件是否存在
if os.path.exists(fileName):
# 输入查询标号
name = input('请输入要查找好友的姓名:')
# 如果文件存在,并且用户输入了正确的查询标号,则打开文件
with open(fileName, 'r', encoding='utf-8') as rfile:
friend = rfile.readlines()
# 将读取到的信息转换为字典类型
for item in friend:
d = dict(eval(item))
if name != '':
if name == d['name']:
fri_query.append(d)
# 显示查询结果
show_friend(fri_query)
# 是否查询其他学生信息
answer = input('还要查询其他好友吗?y/n\n')
if answer == 'y' or answer == 'y':
continue
else:
break
else:
print('好友信息文件不存在!')
return
3 按电话号码查询某个好友
4 删除好友
5 修改好友信息
6 显示所有好友信息
7 对好友进行按组别排序
0 退出系统
完整代码如下:
import os
fileName = 'friend.txt'
def main():
while True:
menu()
choice = int(input('请输入您的选择序号:'))
if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
if choice == 0:
print("您确定要退出吗?y/n:")
answer = input()
if answer == 'y' or answer == 'Y':
print('谢谢您的使用!!!')
break
else:
continue
elif choice == 1:
insert()
elif choice == 2:
search_name()
elif choice == 3:
search_phone()
elif choice == 4:
delete()
elif choice == 5:
modify()
elif choice == 6:
show()
elif choice ==7:
sort()
else:
print('输入的序号不在范围内,请重新输入!!!')
def menu():
print('==============================学生信息管理系统==============================')
print('---------------------------------功能菜单----------------------------------')
print('\t\t\t\t\t\t1. 添加好友')
print('\t\t\t\t\t\t2. 按姓名查询某个好友')
print('\t\t\t\t\t\t3. 按电话号码查询某个好友')
print('\t\t\t\t\t\t4. 删除好友')
print('\t\t\t\t\t\t5. 修改好友信息')
print('\t\t\t\t\t\t6. 显示所有好友信息')
print('\t\t\t\t\t\t7. 对好友进行按组别排序')
print('\t\t\t\t\t\t0. 退出系统')
print('--------------------------------------------------------------------------')
def save(list):
try:
fri_txt=open(fileName, 'a', encoding='utf-8')
except:
fri_txt = open(fileName, 'w', encoding='utf-8')
for item in list:
fri_txt.write(str(item)+'\n')
fri_txt.close()
def insert():
friend_list = []
flag =False
while True:
name = input('请输入姓名:')
if not name:
break
phone = input('请输入电话号码:')
if not phone:
break
if len(phone)!=11:
print('输入不符合要求')
break
address = input('请输入归属地:')
department = input('请输入单位(按enter键不进行输入):')
group= input('请输入分组(按enter键不进行输入):')
remark = input('请输入备注(按enter键不进行输入):')
# 将录入的学生信息保存到字典中
student = {'name': name, 'phone': phone, 'address': address, 'department': department, 'group': group,'remark':remark}
# 将学生信息添加到列表中
friend_list.append(student)
flag=True
answer = input('是否继续添加?y/n\n')
if answer == 'y' or answer == 'Y':
continue
else:
break
# 保存学生信息到文件中
if flag:
save(friend_list)
print('好友信息录入完毕!!!')
def show_friend(list):
# 传过来空列表
if len(list) == 0:
print('没有查找到该好友的信息!')
return
# 定义标题显示格式
format_title = '{:^6}\t{:^8}\t{:^8}\t{:^8}\t{:^8}\t{:^16}\t'
print(format_title.format('姓名', '电话号码', '归属地', '单位', '分组', '备注'))
# 定义内容的显示格式
format_data = '{:^6}\t{:^8}\t{:^8}\t{:^8}\t{:^8}\t{:^18}\t'
for item in list:
print(format_data.format(item['name'], item['phone'],item['address'], item['department'], item['group'],item['remark']))
def search_name():
while True:
fri_query = []
name = ''
# 判断文件是否存在
if os.path.exists(fileName):
# 输入查询标号
name = input('请输入要查找好友的姓名:')
# 如果文件存在,并且用户输入了正确的查询标号,则打开文件
with open(fileName, 'r', encoding='utf-8') as rfile:
friend = rfile.readlines()
# 将读取到的信息转换为字典类型
for item in friend:
d = dict(eval(item))
if name != '':
if name == d['name']:
fri_query.append(d)
# 显示查询结果
show_friend(fri_query)
# 是否查询其他学生信息
answer = input('还要查询其他好友吗?y/n\n')
if answer == 'y' or answer == 'y':
continue
else:
break
else:
print('好友信息文件不存在!')
return
def search_phone():
while True:
fri_query = []
phone = ''
# 判断文件是否存在
if os.path.exists(fileName):
# 输入查询标号
phone = input('请输入要查找好友的电话号码:')
# 如果文件存在,并且用户输入了正确的查询标号,则打开文件
with open(fileName, 'r', encoding='utf-8') as rfile:
friend = rfile.readlines()
# 将读取到的信息转换为字典类型
for item in friend:
d = dict(eval(item))
if phone != '':
if phone == d['phone']:
fri_query.append(d)
# 显示查询结果
show_friend(fri_query)
# 是否查询其他学生信息
answer = input('还要查询其他好友吗?y/n\n')
if answer == 'y' or answer == 'y':
continue
else:
break
else:
print('好友信息文件不存在!')
return
def delete():
while True:
friend_name = input('请输入要删除好友的姓名:')
if friend_name != '':
if os.path.exists(fileName):
with open(fileName, 'r', encoding='utf-8') as file:
friend_old = file.readlines()
else:
friend_old = []
flag = False # 标记是否删除
if friend_old:
with open(fileName, 'w', encoding='utf-8') as wfile:
d = {}
for item in friend_old:
d = dict(eval(item)) # 将字符串转换为字典
if d['name'] != friend_name:
wfile.write(str(d) + '\n')
else:
flag = True
if flag:
print(f'姓名为{friend_name}的好友信息已经删除')
else:
print(f'学生表中没有找到姓名为{friend_name}的学生')
else:
print('好友列表中无好友')
break
show() # 重新显示所有学生信息
answer = input('是否继续删除?y/n\n')
if answer == 'y' or answer == 'Y':
continue
else:
break
def modify():
while True:
show()
# 如果原文件存在,打开原文件,读出所有信息
if os.path.exists(fileName):
with open(fileName, 'r', encoding='utf-8') as rfile:
friend_old = rfile.readlines()
else:
print('好友文件信息不存在!')
return
# 创建一个新的文件,读取之前文件中的每一个学生信息
student_name = input('请输入要修改的好友姓名:')
flag = False # 标记是否在学生信息表中找到要修改的学生信息
with open(fileName, 'w', encoding='utf-8') as wfile:
for item in friend_old:
d = dict(eval(item))
# 如果在原文件的某一行找到要修改的学生id,则对其进行修改
if d['name'] == student_name:
print('找到好友信息,可以修改该好友的相关信息')
while True:
try:
d['name'] = input('请输入姓名:')
d['phone'] = input('请输入电话号码:')
d['address'] = input('请输入归属地:')
d['department'] = input('请输入单位:')
d['group'] = input('请输入分组:')
d['remark'] = input('请输入备注:')
break
except:
print('您的输入有误,请重新输入!!!')
wfile.write(str(d) + '\n')
flag = True
else:
wfile.write(str(d) + '\n')
if flag:
print('修改成功!!!')
else:
print('没有找到要修改好友的姓名!!!')
# 询问是否要接着修改
answer = input('是否修改其他好友信息?y/n\n')
if answer == 'y' or answer == 'Y':
continue
else:
break
def sort():
show()
# 判断文件是否存在,如果存在则打开文件,读取信息
if os.path.exists(fileName):
with open(fileName, 'r', encoding='utf-8') as rfile:
friend_list = rfile.readlines()
friends_new = []
# 判断读取到的学生信息是否为空
if friend_list:
# 将所有的item加入到students_new中
for item in friend_list:
d = dict(eval(item))
friends_new.append(d)
# 选择升序or降序
asc_or_desc = input('请选择(0为升序,1为降序):')
if asc_or_desc == '0':
asc_or_desc_bool = False
elif asc_or_desc == '1':
asc_or_desc_bool = True
else:
print('您的输入有误,请重新输入')
sort()
friends_new.sort(key=lambda x: x['group'], reverse=asc_or_desc_bool)
show_friend(friends_new)
else:
print('好友文件还没有好友信息!')
else:
print('好友文件不存在!')
return
def show():
friend_list = []
# 判断文件是否存在,如果存在则打开文件,读取信息
if os.path.exists(fileName):
with open(fileName, 'r', encoding='utf-8') as rfile:
friends = rfile.readlines()
# 判断读取到的学生信息是否为空
if friends:
for item in friends:
friend_list.append(eval(item))
# 展示学生信息
show_friend(friend_list)
else:
print('好友列表里还没录入好友信息!')
else:
print('好友文件不存在!')
return
if __name__ == '__main__':
main()
效果展示: