python小项目--信息管理系统---新手实践

这是一个使用Python和easygui模块实现的简易信息管理程序,具备新建、查看、修改、删除和导出为Excel表格等功能。代码简洁,适合初学者练习基本语法。程序将数据存储在json文件中,并提供了一个导出到Excel的选项,方便数据管理和分享。
摘要由CSDN通过智能技术生成

一,功能简介

python笔记自提:链接:https://pan.baidu.com/s/10FSkKkAkQNnnua-eQUIjpA
提取码:7koj
除最基本的增,删,改,查,多加了一个导出为excel表格的功能。比较适合刚学完python练习基本语言用。代码中大部分都是使用基本语法来处理数据。
在这里插入图片描述
新建和查看
在这里插入图片描述

在这里插入图片描述
搜索时,界面确实不怎么美观,家庭住址这一栏也直接到了下一行,时间原因,也懒得修改了。
在这里插入图片描述
修改:
先选择要修改的信息
在这里插入图片描述
改动:
在这里插入图片描述
信息覆盖:
在这里插入图片描述
删除和修改的界面几乎一样一个多选的对话框,这里不展示了。
导出表格:其中C:/Users/acer/Desktop/信息.xlsx为默认路径,选择导出功能时会自动填入
在这里插入图片描述

在这里插入图片描述

二,代码

个人小白,python学的比较浅,GUI也是用的自带模块easygui
运行时会生成名为employee_date.json的文件来存储信息
main.py:

import easygui
import function as fun
while True:
    main_menu = easygui.buttonbox('\t\t\t\t菜单界面', title='信息管理系统',
                                  choices=['新建信息', '查看所有信息',
                                           '搜索信息', '修改信息', '删除信息',
                                           '导出为excel表格'])
    if main_menu == '新建信息':
        try:
            fun.new_employee()
        except FileNotFoundError:
            fun.new_filename()
    elif main_menu == '查看所有信息':
        try:
            fun.data_all()
        except FileNotFoundError:
            fun.tip_not_found_file()
    elif main_menu == '修改信息':
        try:
            fun.modify_employee()
        except FileNotFoundError:
            fun.tip_not_found_file()
    elif main_menu == '删除信息':
        try:
            fun.del_data()
        except ValueError:
            fun.del_data2()
        except FileNotFoundError:
            fun.tip_not_found_file()
    elif main_menu == '搜索信息':
        try:
            fun.search_data()
        except FileNotFoundError:
            fun.tip_not_found_file()
    elif main_menu == '导出为excel表格':
        try:
            fun.export_to_excel()
        except FileNotFoundError:
            fun.tip_not_found_file()
    elif main_menu == None:
        break

function.py:

import json
import openpyxl
import easygui
import os
list_employee = []
filename = 'employee_date.json'


def new_filename():
    employee = new_tools1()
    if employee == None:
        return
    tem_list = []
    tem_list.append(employee)
    with open(filename, 'w') as f:
        json.dump(tem_list, f, indent=4)
        f.close()
    easygui.msgbox(msg='Add success', title='tip', ok_button='返回')


def new_employee():
    with open(filename) as f:
        list_employee = json.load(f)
        f.close()
    employee = new_tools1()
    if employee == None:
        return
    with open(filename) as f:
        list_employee = json.load(f)
        list_employee.append(employee)
        f.close()
    with open(filename, 'w') as f:
        json.dump(list_employee, f, indent=4)
        f.close()
    easygui.msgbox(msg='Add success', title='tip', ok_button='返回')


def new_tools1():
    menu1 = easygui.multenterbox('新建信息', '新建信息功能',
                                 ['姓名', '性别(男/女)', '联系方式', '家庭住址'])
    if menu1 == None:
        return menu1
    while len(menu1[1]) != 1 or len(menu1[2]) != 11 or not menu1[2].isdigit():
        menu1 = easygui.multenterbox('格式有误!重新输入', '新建信息功能',
                                     ['姓名', '性别(男/女)', '联系方式', '家庭住址'])
        if menu1 == None:
            return menu1
    employee = {
        'name': menu1[0],
        'gender': menu1[1],
        'phone': menu1[2],
        'address': menu1[3]
    }
    return employee


def data_all(w=True):
    with open(filename) as f:
        data = json.load(f)
        f.close()
    if len(data) == 0:
        easygui.msgbox('NOT FOUND MESSAGES!')
        return 1
    value = ['姓名', '性别', '联系方式', '家庭住址']
    i = 0
    while i < len(data):
        for v in data[i].values():
            value.append(v)
        i = i+1
    val_p = ''
    for a in range(len(value)):
        val_p += str(value[a])+'\t\t'
        if a % 4 == 3:
            val_p += '\n'
    if w == False:
        return val_p
    easygui.msgbox(val_p, title='全部信息')


def export_to_excel():
    # 定义要写入的行和列的值
    with open(filename) as f:
        list_employee = json.load(f)
            # 定义excel的sheet_name  "xlsx格式测试表 "
        f.close()
    workbook = openpyxl.Workbook()
    sheet = workbook.active
    sheet_name = "xlsx格式表"
    sheet.title = sheet_name
    path = 'C:/Users/acer/Desktop/信息.xlsx'
    path = easygui.enterbox('导出路径', title='选择路径', default=path)
    if path == None:
        return
    temporary_val_k = ['姓名', '性别', '联系方式', '家庭住址']
    for a in range(0, len(temporary_val_k)):
        sheet.cell(row=1, column=a+1, value=temporary_val_k[a])     #打印表头
    i = 0
    while i < len(list_employee):    #0~len(list)   i:0~4
        temporary_val = []
        for val in list_employee[i].values():     #list_employee is a list ,每个值为字典
            temporary_val.append(val)   #此时temporary_val 是列表,有四个值
        for j in range(len(temporary_val)):
            sheet.cell(i+2, j+1, temporary_val[j])
        i = i+1
    workbook.save(path)
    easygui.msgbox(msg='导出成功', title='tip')


def search_data():
    val_p = data_all(w=False)
    if val_p == 1:
        return
    find_data = easygui.enterbox(val_p,
                                 title='信息搜索')
    if find_data == None:
        return
    with open(filename) as f:
        list_employee = json.load(f)
        f.close()
    value = ['姓名', '性别', '联系方式', '家庭住址']
    i = len(value)
    s = ''
    for category in ['name', 'gender', 'phone', 'address']:
        for dict_employee in list_employee:
            if find_data in dict_employee[category]:
                for element in dict_employee.values():
                    value.append(element)
    if len(value) == 4:
        value.append('NOT FOUND!!')
    for a in range(len(value)):
        s += value[a]+'\t\t'
        if a%i == 3:
            s += '\n'
    easygui.msgbox(msg=s, title='信息检索', ok_button='返回')


def del_data():
    tem = del_mod(m='选择要删除的信息', t='选择删除信息')
    if tem == None:
        return
    for t in range(len(tem)):
        num = ''.join([x for x in tem[t] if x.isdigit()])
        with open(filename) as f:
            list_employee = json.load(f)
            for employee in list_employee:
                if employee['phone'] == num:
                    list_employee.remove(employee)
            f.close()
        with open(filename, 'w') as f:
            json.dump(list_employee, f, indent=4)
            f.close()
    message = '成功删除:\n'
    for a in range(len(tem)):
        message += tem[a]+'\n'
    easygui.msgbox(message, title='tip')


def del_data2():    #解决只有一个信息时的删除错误
    with open(filename) as f:
        list_employee = json.load(f)
        f.close()
    a = '成功删除:\n'
    for a_p in list_employee[0].values():
        a += a_p
    os.remove(filename)
    easygui.msgbox(a, title='tip')


def modify_employee():
    with open(filename) as f:
        list_employee = json.load(f)
        f.close()
    list_tem = []
    value = ['姓名', '性别', '联系方式', '家庭住址']
    tem = del_mod(m='选择要修改的信息', t='修改信息')  #tem is a list
    if tem == None:
        return
    for d in tem:
        for n in range(len(d)):
            t = d[n]
            if t == '男' or t == '女':    #别问为什么要用中间变量t,直接用d[n]不是更简单吗?直接用d[n]不行,不是预期结果
                list_tem.append(d[:n].strip())
                list_tem.append(d[n])
                list_tem.append(d[n+3:n+14])
                list_tem.append(d[n+14:].strip())
    num_list = get_subscript(list_tem)     #若选择要修改的人员信息有两个,此时list_tem == 8,num_list存储要修改信息的下标
    list_tem_a = []
    record = 0
    for a in range(len(list_tem)):  #run twice
        list_tem_a.append(list_tem[a])  #给list_tem_a添加list_tem,当加入四个时说明为一个人的信息
        if a % len(value) == len(value)-1:  #if a%4 == 3
            ret = easygui.multenterbox('', '信息修改', value, list_tem_a)
            if ret == None:
                return
            while len(ret[1]) != 1 or len(ret[2]) != 11 or not ret[2].isdigit():
                ret = easygui.multenterbox('格式有误', '信息修改', value, list_tem_a)   #ret 返回修改过的信息
                if ret == None:
                    return
            list_employee[num_list[record]]['name'] = ret[0]
            list_employee[num_list[record]]['gender'] = ret[1]
            list_employee[num_list[record]]['phone'] = ret[2]
            list_employee[num_list[record]]['address'] = ret[3]
            record = record + 1
            list_tem_a = []
    with open(filename, 'w') as f:
        json.dump(list_employee, f, indent=4)
        f.close()
    easygui.msgbox('修改成功', title='tip')


def get_subscript(list_tem):
    num_list = []
    with open(filename) as f:
        list_employee = json.load(f)
        f.close()
    for n in range(len(list_tem)):
        if n%4 == 2:
            #list_tem[n] == phone
            for num in range(len(list_employee)):
                if list_employee[num]['phone'] == list_tem[n]:
                    num_list.append(num)
    return num_list


def del_mod(m, t):
    i = 0
    s = ''
    val_p = []
    value = []
    with open(filename) as f:
        data = json.load(f)
        f.close()
    a = data
    if len(data) == 0:
        easygui.msgbox('NOT FOUND MESSAGES!')
        return
    while i < len(data):
        for v in data[i].values():
            value.append(str(v) + '  ')
        i = i + 1
    for i in range(len(value)):
        s += value[i]
        if i % 4 == 3:
            val_p.append(s)
            s = ''
    if len(a) == 1:
        return val_p
    tem = easygui.multchoicebox(msg=m, title=t,
                                choices=val_p)
    return tem      #返回要修改的原值


def tip_not_found_file():
    easygui.msgbox('NOT FOUND MESSAGES!', 'tip')

仅供学习交流!

三,一些废话

总共不到300行,python的确是一门简洁的语言,用c的话估计冲着五六百行就去了,后来也想到了很多优化的方法,比如用类创建人员,数据采用pandas,查找用where等等,时间原因不改了。

主要参考资料:
1,《Python编程从入门到实践》,人民邮电出版社
2,python简单图形界面GUI入门——easygui
https://blog.csdn.net/mingqi1996/article/details/81272621

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JiYH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值