Python实现通讯录管理系统:基于文件存储的增删改查完整代码

小石头
小石头
发布时间:2026-10-16 | 6人浏览过
原创

本文介绍使用Python实现通讯录管理系统的完整方案。系统通过自定义函数封装添加、删除、修改、查询、显示及保存功能,利用列表存储数据并持久化至文本文件。文章详细解析了manage.py与main.py的模块调用结构,提供了包含完整注释的代码示例及测试说明,适用于Python初学者理解文件IO与列表操作。

本文分享了一套使用Python编写的通讯录管理系统完整代码,供读者参考学习。

题目

期末项目

一、项目要求

本系统需利用函数实现通讯录管理,存储信息包括姓名、联系方式、微信号及电子邮箱等,其中姓名和联系方式为必填项。系统需具备信息的添加、删除、修改、查询、显示及保存到文件的功能。

二、项目步骤

1. 使用自定义函数实现各项功能

(1)功能菜单:展示系统可用的操作选项。 (2)添加:接收用户输入的新联系人信息。 (3)删除:根据输入的姓名查找并删除该联系人的所有记录。 (4)修改:根据输入的姓名查找并更新其信息。 (5)查询:根据输入的姓名遍历列表,返回对应的联系人信息。 (6)显示:输出当前系统中所有联系人的完整信息。 (7)保存:将内存中的数据写入文件进行持久化存储。 (8)主函数:首先显示功能菜单,提示用户输入操作代码,并调用对应的处理函数。

2. 数据同步机制:在添加、删除或修改信息后,必须立即将最新数据同步保存到文件中。

采用全局列表存储通讯录数据,当列表内容发生任何变化时,自动调用保存函数以更新文件。

3. 模块化测试:编写独立模块,在主函数中调用该模块以测试各项功能。遵循“完成一个模块,测试一个模块”的原则,确保所有功能正常运行,且数据能正确存储于文本文件中。

4. 数据结构选择:可使用列表、元组或字典存储信息。本例中,若仅存储姓名和手机号,选择使用字典存储单个联系人,并将字典转换为元组后放入列表中保存。

5. 初始化设置:程序启动时,先创建一个文本文件(文件名基于学生姓名设定),并将内存中的列表初始化为空列表[]。

三、项目代码要求

1. 代码需包含必要的注释,清晰说明各部分功能。 2. 需提供每个模块的测试结果。 3. 若涉及截图,需确保图像清晰可辨。

代码

1. 代码说明

根据题目要求,函数需从模块中调用,因此需在相同目录下创建两个Python文件:manage.py和main.py。其中,manage.py负责定义具体功能函数,main.py负责调用manage.py中的函数并实现交互逻辑。

2. manage.py

'''
注意:
1.要求输入的姓名默认全部为合理输入,并未对输入内容进行判断和过滤
2.默认打开的文件已经存在,并没对文件状态进行判断,而是以列表信息中是否存在该学生为依据
3.没有使用字典的任何操作
4.如果希望将所有学生信息保存在同一个txt文件中,只需将每个函数中file_name重新命名的部分注释掉
5.修改信息采用的方法是:将原内容删除,并重新写入新内容,这么做的原因是电脑要没电了,这个可以作为自己的测试板块,重新设计编写
6.实验步骤的最后一步 不知道是什么目的,并所以没有这样做
7.因为都是采用列表来判断学生内容,所以文件保存成功后重新运行程序列表清空,即不可再查询到信息
8.打印所有信息可以采取文件夹下多文件读取的方法,遍历该目录下的所有txt文件,读出内容并打印,请自行编写

2021/6/16

新增注意:
1.修改文件内容时,如果将姓名一同修改,则会出现文件名与文件内容中的姓名不同的情况
2.修改文件内容时,如果将该姓名修改为另一个已经出现过的姓名,在列表中将会出现重名情况
3.先没有处理重名情况的操作
4.同名情况下,如果修改该名字的信息,则将修改第一次出现该名称的位置的信息
5.因此,如果错误1和错误2同时发生,文件就会,嗯...串了,就乱套了

'''


#d = {}  #字典储存信息

Student = []
path = "D:\\"  #文件保存路径 默认为空即保存在当前文件夹下 建议新建文件夹并修改路径
file_name = path + "student.txt" #文件默认保存位置

#显示命令
def print_message():
    print("**************************************")
    print("     **1.添加学生信息")
    print("     **2.删除学生信息")
    print("     **3.修改学生信息")
    print("     **4.查找学生信息")
    print("     **5.查看所有信息")
    print("     **6.查看操作菜单")


#添加信息
def add():
        print("请输入需要添加到姓名、手机号,以空格隔开:")
        #列表
        A = input().split(" ")
        temp_str = ""
        for i in A:
            temp_str += i+"  "
        if temp_str != '/n': #防止错误输入
             Student.append(A)  #加入列表
             file_name = path+A[0] +".txt"
             print(temp_str, file=open(file_name, 'w'))  #创建文件,并写入文件  如果存在同名文件,则原内容会被覆盖
        #字典
        # A = input().split(" ")
        # Name.append(A[0])
        # d[A[0]] = A[1]
        # print("添加成功")
        # save(A[0])  # 更新学生信息

#删除信息
def delete():
    print("请输入需要删除的姓名:")
    name = input()
    #字典删除
    # del d[name]
    # Name.remove(name)
    #从文件中删除学生信息
    exist = 0
    for i in range(len(Student)):
        #存在该学生
        if Student[i].count(name) > 0:
            if name == Student[i][0]:
                file_name = path + name + ".txt"
                #删除列表中的信息
                Student.pop(i)
                #删除文件中的信息
                lines = [l for l in open(file_name, "r") if l.find(name, 0, len(name)) != 0] #暂时的删除方式
                fd = open(file_name, "w")                                                    #如: 要删除'张三‘,但‘张三四'也会被删除
                fd.writelines(lines)
                fd.close()
                print("删除成功")
                exist = 1  #判断学生是否存在的标签
                break
        else :
            exist = 0
    if exist == 0:
         print("未找到该学生的信息!")


def delete_2(name,f_n):
      # 从列表里删除该学生
        for i in range(len(Student)):
            # 存在该学生
            if Student[i].count(name) > 0:
                if name == Student[i][0]:
                    del Student[i]
                    break

        #从文件中删除学生信息
        lines = [l for l in open(f_n, "r") if l.find(name, 0, len(name)) != 0]
        fd = open(f_n, "w")
        fd.writelines(lines)
        fd.close()


#查询信息
def search():
    print("请输入需要查询的姓名:")
    name  = input()
    #字典查询
    #print("查询结果:",name,d[name])
    exist = 0
    for i in range(len(Student)):
        #存在该学生 这一步判断有点多余 但是为了简化打印未找到的结果还是这样做了
        if Student[i].count(name) > 0:
            if name == Student[i][0]:
                print("查询结果: ")
                for temp in Student[i]:
                    print(temp,end=" ")
                print()
                exist = 1  # 判断学生是否存在的标签
                break
        else:
                exist = 0
    if exist == 0:
                print("未找到该学生的信息!")

#更改文件信息
def change_file():
    print("输入需要修改信息的学生姓名:")
    name = input()
    exist = 0
    for i in range(len(Student)):
        #存在该学生
        if Student[i].count(name) > 0:
            if name == Student[i][0]:
                # 找到了该学生
                # 下面进行修改信息的操作
                file_name = path + name + ".txt"
                print("输入修改后该学生的所有信息:")
                A = input().split(" ")
                temp_str = ""
                for i in A:
                    temp_str += i + "  "
                if temp_str != '/n':  # 防止错误输入
                    Student.append(A)  # 加入列表
                    delete_2(name,file_name) # 先删除该信息

                    print(temp_str, file=open(file_name, 'a'))  # 创建文件,并重新写入文件
                print("修改成功")
                exist = 1  # 判断学生是否存在的标签
                break
        else:
                exist = 0
    if exist == 0:
                print("未找到该学生的信息!")


#显示信息
def printf():
    print("所有信息如下:")
    for i in Student:
        for j in i:
            print(j,end=" ")
        print()

3. main.py

import manage

print("**************************************")
print("    欢迎来到学生信息管理系统")
manage.print_message() #打印命令指令
print("**************************************")
while(True):

    print("请输入需要执行的操作(输入'q‘退出程序):")
    choice = input()
    if choice == '1':
        manage.add()   #增
    if choice == '2':
       manage.delete() #删
    if choice == '3':
       manage.change_file()  #改
    if choice == '4':
       manage.search()  #查
    if choice == '5':
       manage.printf()  #打印
    if choice == '6':
        manage.print_message()  # 打印命令指令
    if choice == 'q':
        print("退出!")
        break

以上就是本文的全部内容,希望对读者的学习有所帮助,也欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表