找回密码
 会员注册
查看: 24|回复: 0

Python基于列表实现的通讯录管理系统(有完整源码)

[复制链接]

2

主题

0

回帖

7

积分

新手上路

积分
7
发表于 2024-9-7 00:34:04 | 显示全部楼层 |阅读模式
目录通讯录管理系统PersonInformation类ContactList类menu函数main函数程序的运行流程完整代码运行示例通讯录管理系统这是一个基于文本的界面程序,用户可以通过命令行与之交互,它使用了CSV文件来存储和读取联系人信息,这使得数据可以持久化保存。此外,程序还提供了一些基本的输入验证,以确保输入的数据是有效的。它包含了两个类PersonInformation类用于创建和管理个人信息对象,而ContactList类则用于管理这些对象的集合。PersonInformation类这个类用于存储一个人的基本信息,包括姓名、性别、年龄、电话和住址。它有一个__str__方法,用于定义当对象被转换为字符串时的表现形式。classPersonInformation:def__init__(self,name,gender,age,telephone,address):self.name=nameself.gender=genderself.age=ageself.telephone=telephoneself.address=addressdef__str__(self):returnf"名字:{self.name},性别:{self.gender},年龄:{self.age},电话:{self.telephone},住址:{self.address}"'运行运行ContactList类这个类用于管理一个联系人列表。它提供了以下功能:添加联系人(add_contact)删除联系人(remove_contact)查找联系人(find_contact)修改联系人信息(modify_contact)显示所有联系人(show_contacts)保存联系人到CSV文件(save_contacts)从CSV文件加载联系人(load_contacts)classContactList:def__init__(self):self.arr=[]defadd_contact(self,person):self.arr.append(person)self.save_contacts()defis_empty(self):ifnotself.arr:print("当前联系人列表为空!")defremove_contact(self,name):person=self.find_contact(name)ifperson:self.arr.remove(person)self.save_contacts()print("删除成功!")self.is_empty()else:print("此联系人不存在!")defshow_contacts(self):print('通讯录:')forpersoninself.arr:print(person)self.is_empty()deffind_contact(self,name):forpersoninself.arr:ifperson.name==name:returnpersonreturnNonedefmodify_contact(self,old_name,new_info):person=self.find_contact(old_name)ifperson:person.name=new_info.nameperson.gender=new_info.genderperson.age=new_info.ageperson.telephone=new_info.telephoneperson.address=new_info.addressself.save_contacts()print("修改成功!\n",person)else:print("此联系人不存在!")defsave_contacts(self,filename="contacts.csv"):withopen(filename,'w',newline='',encoding='utf-8')asf:writer=csv.writer(f)writer.writerow(['姓名','性别','年龄','电话','住址'])forpersoninself.arr:writer.writerow([person.name,person.gender,person.age,person.telephone,person.address])defload_contacts(self,filename="contacts.csv"):ifnotos.path.isfile(filename):withopen(filename,'w',newline='',encoding='utf-8')asf:writer=csv.writer(f)writer.writerow(['姓名','性别','年龄','电话','住址'])withopen(filename,'r',newline='',encoding='utf-8')asf:reader=csv.reader(f)next(reader)forrowinreader:iflen(row)==5:name,gender,age,telephone,address=rowself.add_contact(PersonInformation(name,gender,age,telephone,address))else:print(f"跳过不完整的联系人记录:{row}")'运行运行menu函数这个函数用于显示程序的菜单选项,让用户可以选择执行不同的操作。main函数这是程序的主入口,它首先创建一个ContactList实例,然后进入一个无限循环,不断显示菜单并根据用户的选择调用相应的方法。当用户选择退出时,程序会结束。程序的运行流程程序启动后,首先加载已有的联系人信息。显示菜单,等待用户输入选择。根据用户的选择执行相应的操作:添加联系人:输入新的联系人信息并添加到列表中。删除联系人:输入要删除的联系人姓名,然后从列表中删除。查找联系人:输入要查找的联系人姓名,并显示其信息。修改联系人:输入要修改的联系人姓名,然后输入新的信息进行修改。显示所有联系人:列出当前所有的联系人信息。退出通讯录:退出程序。完整代码importos,csvclassPersonInformation:def__init__(self,name,gender,age,telephone,address):self.name=nameself.gender=genderself.age=ageself.telephone=telephoneself.address=addressdef__str__(self):returnf"名字:{self.name},性别:{self.gender},年龄:{self.age},电话:{self.telephone},住址:{self.address}"classContactList:def__init__(self):self.arr=[]defadd_contact(self,person):self.arr.append(person)self.save_contacts()defis_empty(self):ifnotself.arr:print("当前联系人列表为空!")defremove_contact(self,name):person=self.find_contact(name)ifperson:self.arr.remove(person)self.save_contacts()print("删除成功!")self.is_empty()else:print("此联系人不存在!")defshow_contacts(self):print('通讯录:')forpersoninself.arr:print(person)self.is_empty()deffind_contact(self,name):forpersoninself.arr:ifperson.name==name:returnpersonreturnNonedefmodify_contact(self,old_name,new_info):person=self.find_contact(old_name)ifperson:person.name=new_info.nameperson.gender=new_info.genderperson.age=new_info.ageperson.telephone=new_info.telephoneperson.address=new_info.addressself.save_contacts()print("修改成功!\n",person)else:print("此联系人不存在!")defsave_contacts(self,filename="contacts.csv"):withopen(filename,'w',newline='',encoding='utf-8')asf:writer=csv.writer(f)writer.writerow(['姓名','性别','年龄','电话','住址'])forpersoninself.arr:writer.writerow([person.name,person.gender,person.age,person.telephone,person.address])defload_contacts(self,filename="contacts.csv"):ifnotos.path.isfile(filename):withopen(filename,'w',newline='',encoding='utf-8')asf:writer=csv.writer(f)writer.writerow(['姓名','性别','年龄','电话','住址'])withopen(filename,'r',newline='',encoding='utf-8')asf:reader=csv.reader(f)next(reader)forrowinreader:iflen(row)==5:name,gender,age,telephone,address=rowself.add_contact(PersonInformation(name,gender,age,telephone,address))else:print(f"跳过不完整的联系人记录:{row}")defmenu(contact_list):print()print("*********************************")print("**1、增加联系人2、删除联系人**")print("**3、查找联系人4、修改联系人**")print("**5、展示联系人0、退出通讯录**")print("*********************************")defmain():contact_list=ContactList()contact_list.load_contacts()whileTrue:menu(contact_list)name,gender,age,telephone,address=[""]*5input_choice=input("请输入您的选择:")ifinput_choice=='1':whilelen(name)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 18:58 , Processed in 0.500943 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表