使用python实现管理系统的增删改查

使用python实现管理系统的增删改查

使用python实现管理系统的增删改查

最近公司实习培训中,老师布置了一个pycharm作业
依据b站教程以及csdn手打,自己进行了一些更改。主要功能包括:增加、删除、修改、查询员工信息。有简单的防止id重复(插入的时候),没有设计界面,使用的是pycharm。可以通过编译运行,但可能存在bug,仅作个人记录使用

前置条件

读取文件,需要引入包。

import os.path
filename='wok_inf.txt'

主函数定义

def main():
    while True:
        menu()
        choice=int(input('选择:'))
        if choice in [0,1,2,3,4,5,6]:
            if choice==0:
                answer=input('确定退出管理系统? y | n ')
                if answer=='y':
                    print('退出成功!')
                    break
                else:
                    continue
#每个方法都在调用完之后回到menu(),显示菜单
            elif choice==1:
                insert1()
            elif choice==2:
                search()
            elif choice==3:
                modify()
            elif choice==4:
                delete()
            elif choice==5:
                show()
        else:
            print('输入不合法!')

这里调用的insert1(),是有简单的防止重复插入功能的函数。但是有一个问题在于如果在连续插入的时候输入了相同的id还是能成功插入,这地方不知道有没有办法解决(除了一次只能插入一个)

menu菜单展示

def menu():
    print('--------欢迎使用员工管理系统--------')
    print('--------主菜单--------')
    print('1 录入职工信息')
    print('2 查询职工信息')
    print('3 修改职工信息')
    print('4 删除职工信息')
    print('5 所有职工信息')
    print('0 退出管理系统')
    print('---------------------')

插入员工信息

def insert1():
    wok_list=[]
    flag=False
    id= input('插入ID:')
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as rfile:
            wok_old=rfile.readlines()
            for item in wok_old:
                d=dict(eval(item))
                if d['工号']==id:
                    flag=True
                    print('员工已存在,不能插入!请重新输入')
                    break
    if flag==False:
        name=input('姓名:')
        salary=int(input('工资:'))
        woker = {'工号': id, '姓名': name, '工资': salary}  # 字典
        # 向列表末尾添加元素
        wok_list.append(woker)  # append:用以在列表末尾添加新的对象

        answer = input('是否继续添加? y | n ')
        if answer == 'y':
            insert1()
        save(wok_list)  # 自定义函数将列表保存到文件中
        print('录入完毕')
#如果连续输入两个一样的id就不行

#将列表保存到文件中
def save(lst):
    try:#存在就追加方式打开
        wok_txt=open(filename,'a',encoding='Utf-8')
    #追加:存在则继续写入,不存在则创建新文件
    except:#不存在就写入方式打开
        wok_txt = open(filename,'w', encoding='Utf-8')
    for item in lst:#每一项数据遍历、转换为字符串类型,写一行之后换行
        wok_txt.write(str(item)+'\n') #file.write(str):将字符串写入文件
    wok_txt.close()

删除员工信息

def delete():
    while True:
        wok_id = input('输入删除员工的工号:')
        if wok_id != ' ':
            if os.path.exists(filename):  # 判断文件是否存在
                with open(filename, 'r', encoding='utf-8')as file: #存在则以读打开
                    wok_old = file.readlines()  #读取旧表信息到列表
            else:                         #文件不存在,使列表为空
                wok_old=[]
            flag=False #标记是否删除,默认不删除
            if wok_old: #判断列表,空列表布尔值为false
                #不为空将修改后的信息写入文件
                with open(filename,'w',encoding='utf-8') as wfile:
                    s={}
                    for item in wok_old:
                        s=dict(eval(item)) #字符串转成字典
                        if s['工号']!=wok_id: #ID不等,不是要删除的条
                            wfile.write(str(s)+'\n') #写入字符串
                        else:
                            flag=True
                    if flag:
                        print('员工信息已删除')
                    else:
                        print('没有找到员工')
            else: #判断列表为空(false)
                print('无员工信息')
                break
            show()
            answer = input('是否继续删除? Y | N \n')
            if answer == 'y':
                continue
            else:
                break

修改员工信息

def modify():
    show()
    while True:
        if os.path.exists(filename): #存在
            with open(filename,'r',encoding='utf-8')as rfile:
                wok_old=rfile.readlines()
                #信息读取完毕
        else:
            print('员工信息文件不存在')
            return
        id = input('请输入要修改的员工工号:')
        with open(filename,'w',encoding='utf-8')as wfile:
            for item in wok_old:
                s=dict(eval(item))
                if s['工号']==id:
                    print('请进行修改:')
                    s['姓名'] = input('请输入新的姓名:')
                    s['工资'] = input('请输入新的工资:')
                    wfile.write(str(s)+'\n')
                    print('修改成功')
                else:
                    wfile.write(str(s)+'\n')
            answer=input('是否继续修改?y | n ')
            if answer=='y':
                continue
            else:
                break

查询员工信息

def search():
    wok_query=[] #定义列表,存放查找到的员工信息,可能有重名信息
    while True:
        id=''
        name=''
        if os.path.exists(filename): #员工信息文件是否存在
            mode=input('按id查找请输入1,按姓名查找输入2:')
            if mode=='1':  #字符串类型
                id=input('请输入员工工号:')
            elif mode=='2':
                name = input('请输入员工姓名:')
            else:
                print('输入有误,请重新输入')
                continue #有更改 search()
            with open(filename,'r',encoding='utf-8')as rfile:
                wok=rfile.readlines()
                for item in wok:  #和删除那部分的代码比较
                    d=dict(eval(item)) #字符串转成字典
                    if id!='':
                        if d['工号']==id:
                            wok_query.append(d)
                    elif name!='':
                        if d['姓名']==name:
                            wok_query.append(d)
            '''找到的信息放到wok_query中'''
            print('查询结果:')
            show_wok(wok_query)
            wok_query.clear()
            answer=input('是否继续查询?y | n ')
            if answer=='y':
                continue
            else:
                break
        else:
            print('没有员工信息文件!')
            return
def show_wok(lst):
    if len(lst)==0:
        print('没查到')
        return
    #?????
    format_title='{:^6}\t{:^12}\t{:^8}'
    print(format_title.format('工号', '姓名', '工资'))

    format_data='{:^6}\t{:^12}\t{:^8}'
    for item in lst:
        print( format_data.format(item.get('工号'),item.get('姓名'),item.get('工资')) )

def show():
    wok_list=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as rfile:
            woker=rfile.readlines()
        for item in woker:
            wok_list.append(eval(item))
        if wok_list:
            show_wok(wok_list)
    else:
        print('暂未保存信息')
if __name__=='__main__':
    main()
#代码入口

启动
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值