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()

效果展示:

好友通讯录Python 好友通讯录设计_打开文件