python之通讯录系统—利用Excle存储数据

python之通讯录系统—利用Excle存储数据,第1张

利用pandas库读取Excle文件中的信息:

import pandas as pd  # 使用pandas类库,没有需要pip install pandas

除了pandas库之外,还需要一个openpyxl库,没有这个库程序也运行不了

直接上代码

#自定义输出函数
def print_all(dict):
    """
    打印输出全部员工通讯录信息
    dict:存放员工通讯录的字典
    :return :None
    """
    for i in dict.keys():
        i_value=dict[i]
        value_list = i_value.split('*')         #添加在字典中的数据以*分隔,如:张三*13456789098*九江
        name = value_list[0]
        tel = value_list[1]
        city = value_list[2]
        print("工号:{}  姓名:{}  电话:{}  地址:{}".format(i,name,tel,city))


# 自定义查找函数
def find_by_id(dict, id):
    """
    功能:查找指定工号的员工通讯录信息
    :param dict: 员工通讯录的字典
    :param id: 需要查找的工号
    :return: 成功 True;失败 False
    """
    flig = 'False'
    li = []
    count = 0
    for i in dict.keys():         #如果id在字典中,则改变标志位,把对应信息添加到元组中
        if i==id:
            i_value = dict[id]
            value_list = i_value.split('*')
            name = value_list[0]
            tel = value_list[1]
            city = value_list[2]
            flig = 'True'
            return (flig,name,tel,city,count)
        count+=1

    else:
        return (flig)

#菜单函数
def menu():
    print("----------------------------")  # 人性化界面
    print("欢迎使用通讯录管理系用")
    print("[1]显示通讯录信息")
    print("[2]增加员工信息")
    print("[3]删除员工信息")
    print("[4]修改员工信息")
    print("[5]查找员工信息")
    print("按任意键退出系统")
    print("请输入你的 *** 作")
    print("----------------------------")

#开始写主函数,在主函数中进行增删改的工作

def main ():
    """
    主函数:通过调用函数,实现整个通讯录的功能

    """
    while True:
        openfile = 'E:\python\通讯录管理系统\员工信息.xlsx'  # 这是我自己的文件路径,请运行前修改成你的路径
        table = pd.read_excel(openfile, keep_default_na=False)
        # 注意  keep_default_na=False 表示读入空数据为'',而不是nan
        row = len(table)  # 获取表格的行数,“不带标题(表头)”  或者 table.shape[0]
        col = table.shape[1]  # 获取表格的列数

        addressbook = dict()  # 创建字典保存读取的表格信息
        for i in range(row):  # 把table中的员工信息添加到字典中
            addressbook[table.iloc[i, 0]] = str(table.iloc[i, 1]) + '*' + str(table.iloc[i, 2]) + '*' + str(
                table.iloc[i, 3])  # 用*把姓名,电话,地址分隔开。


        menu()                  #输出菜单界面
        n = input("您选择的 *** 作是:")
        if n=='1':

            """
            显示员工信息功能
            通过调用查找函数和显示员工信息函数完成信息的显示
            """

            print("您可以输出单个员工信息or全部员工信息")
            print("[1]输出单个员工信息,任意按键输出全部员工信息")
            munt = input("请输入你的选择:")
            if munt == '1':
                id = int(input("请输入想要输出的信息的员工编号"))
                ars = find_by_id(addressbook, id)
                if ars[0] == 'True':
                    print("已查找到该员工,该员工信息:")
                    munt = list(ars[1:-1])
                    print("工号:{}  姓名:{}  电话:{}  地址:{}".format(id,munt[0],munt[1],munt[2]))
                else:
                    print('没有找到该员工信息')
            else:
                print_all(addressbook)

        elif n=='2':

            """
            添加功能
            默认添加到通讯录末尾
            """
            id = int(input("请输入需添加的员工编号:"))  # 员工编号是唯一的,需要判断改编号是否已经存在
            while id in addressbook.keys():
                print("该编号已存在,请重新输入!")
                id = int(input("请重新输入需添加的员工编号:"))
            name = input("请输入需添加的员工姓名:")
            tel = input("请输入需添加的员工电话:")

            city = input("请输入员工的分公司地址:")
            print("您添加的信息为:工号:{}  姓名:{}  电话:{}  地址:{} ".format(id, name, tel, city))
            m = input("按y/Y确认添加,按任意键返回:")
            if m == 'y' or m == 'Y':
                table.loc[row + 1] = [id, name, tel, city]  # 添加到通讯录结尾
                table.to_excel(openfile, sheet_name='Sheet1', index=False, header=True)  # 保存修改结果
                print("添加完成!")
            else:
                print("您的添加已取消,请继续您的 *** 作。")

        elif n=='3':
            """
            删除功能
            通过对员工的工号的搜索,实现对员工信息的删除
            """

            id = int(input("请输入要删除的员工的工号"))
            ars = find_by_id(addressbook, id)
            if ars[0] == 'True':
                print("已查找到该员工,是否删除该员工信息")
                munt = list(ars[1:-1])
                print("工号:{}  姓名:{}  电话:{}  地址:{}".format(id, munt[0], munt[1], munt[2]))
                ans = input("请输入Y/y确认删除")
                if ans == 'Y' or ans == 'y':
                    table = table.drop(ars[-1], axis=0)
                    table.to_excel(openfile, sheet_name='Sheet1', index=False, header=True)  # 保存修改结果
                    print("删除成功!!请继续 *** 作")
                else:
                    print("您已取消删除 *** 作,请继续 *** 作。")
            else:
                print("您输入的员工工号不存在,无需删除!")

        elif n=='4':

            """
            修改信息功能
            先搜索到员工信息,然后对其进行修改
            """
            id = int(input("请输入要修改的员工工号"))
            ars = find_by_id(addressbook, id)
            if ars[0] == 'True':
                print("已查找到该员工,是否修改该员工信息")
                munt = list(ars[1:-1])
                print("工号:{}  姓名:{}  电话:{}  地址:{}".format(id, munt[0], munt[1], munt[2]))
                ans = input("请输入要修改的选项,1修改电话,2修改地址")
                if ans == '1':
                    tel = input("请输入修改后的内容:")
                    n = input("真的要修改该信息吗?按y/Y确定。")
                    if n == 'y' or n == 'Y':
                        table.iloc[ars[-1], 2] = tel
                        table.to_excel(openfile, sheet_name='Sheet1', index=False, header=True)  # 保存修改结果
                        print("修改成功!")
                elif ans == '2':
                    city = input("请输入修改后的内容:")
                    n = input("真的要修改该信息吗?按y/Y确定。")
                    if n == 'y' or n == 'Y':
                        table.iloc[ars[-1], 3] = city
                        table.to_excel(openfile, sheet_name='Sheet1', index=False, header=True)  # 保存修改结果
                        print("修改成功!")
                else:
                    print("您输入的选项不真确,已返回主菜单!")
            else:
                print('没有找到该员工信息')

        elif n=='5':
            """
            查找功能
            """
            print("请选择您的查找方式:")
            xuan = input("[1]:精确查找,[2]:模糊查找")
            if xuan == "1":
                print("按员工编号查找")
                id = int(input("请输入要查找的员工编号:"))
                ars = find_by_id(addressbook, id)
                if ars[0] == 'True':
                    print("已查找到该员工,该员工信息为:")
                    munt = list(ars[1:-1])
                    print("工号:{}  姓名:{}  电话:{}  地址:{}".format(id, munt[0], munt[1], munt[2]))
                else:
                    print('没有找到该员工信息')
        else:

            break

    print("已退出系统,欢迎再次使用使用!")

#开始运行主函数

if __name__=='__main__':
    main()

###

pd.read_excle()读取excle文件中的信息

创一个字典保存读取出的信息,用id作为字典的键,姓名,电话,地址等信息作为字典的值;

修改是利用pandas库中的 iloc[i,j]函数,其中的参数:i为pandas读取出来的表格的第i行,j为读取出来的第j列,通过找到要修改的元素在表格中的行,列位置,然后对其重新赋值,即完成了修改

增加,table.loc[row+1]在读取出来的table数据最后一行添加信息,注意:添加的信息的个数要与表格中上一行的数据个数相等,即上一行有多少个数据,最后一行也要添加相应的数据

删除,table.droop(i,axis=0)  axis为1表示删除列,0表示删除行,我们是需要删除第i行的数据,所以axis=0。

把读取到table中的数据输出

print(table)

Excle表格中的数据:

 

把table中的数据转为字典中:

addressbook = dict()  # 创建字典保存读取的表格信息
for i in range(row):  # 把table中的员工信息添加到字典中
    addressbook[table.iloc[i, 0]] = str(table.iloc[i, 1]) + '*' + str(table.iloc[i, 2]) + '*' + str(
        table.iloc[i, 3])  # 用*把姓名,电话,地址分隔开。

print(addressbook)

然后通过字典对数据进行查找处理。还可以自己再添加其他的内容进行完善。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/731957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存