增删查改员工信息表

import os
count=0
path=r'E:\PYTHON学习\excises\day10\infomation.txt'
def make_dic():
    '''将文件转化为列表套字典'''
    with open(path,'r',encoding='utf-8') as f:
        l1=[{'staff_id': i.split(',')[0],
             'name': i.split(',')[1],'age': i.split(',')[2],
             'phone':i.split(',')[3],'dept':i.split(',')[4],
             'enroll_date':i.split(',')[5]} for i in f]
        return l1
command=input('please input your command>>:')   #输入命令
def deco_delete_add(func):
    '''实现删除和添加新用户功能'''
    def wrapper(*args,**kwargs):
        cmd=args[0]
        if cmd.isdigit():   #判断输入的命令是查询命令还是员工ID,如果是ID删除用户
            for dic in staff_table:
                if cmd.strip() == dic['staff_id']:
                    staff_table.remove(dic)
                    with open(path,'r',encoding='utf-8') as f:
                        for line in f:
                            ls_line=line.split(',')
                            if cmd.strip() == ls_line[0]:  #查找文件中与输入的ID相符的那一行
                                pass
                            else:        # 不是ID的那些行写入一个新文件里。
                                with open(r'E:\PYTHON学习\excises\day10\infomation_copy.txt','a',encoding='utf-8') as f2:
                                    f2.write(line)
                    os.remove(path) #将旧文件删除,并将新建的文件覆盖旧文件,实现文件修改
                    os.rename('infomation_copy.txt',path)
        elif 'select' in cmd:        #不是ID,执行主函数的查询功能
            s=func(*args,**kwargs)
            return s
        elif 'UPDATE' in cmd:
            up_user(cmd)
        else:      #添加用户信息Yang Gao,25,13811223348,Student,2017-06-08
            add_user(cmd)
    return wrapper
def sl_where(cmd_x):
    global count
    l_cmd = cmd_x.strip().split('where')
    cmd_where=l_cmd[1].strip().split(maxsplit=2) #吧where后面的语句分割为3段
    cmd_where[-1]=remove_symbol(cmd_where[-1])
    for dic in staff_table:           #将列表循环,遍历每一个字典
        if cmd_where[1].strip() == '>':
            if int(dic[cmd_where[0]]) > int(cmd_where[-1]):
                count+=1
                yield(dic)
        elif cmd_where[1].strip() == '=':
            if dic[cmd_where[0]] == cmd_where[-1]:
                count+=1
                yield(dic)
        elif cmd_where[1].strip() == 'like':
            if cmd_where[-1] in dic[cmd_where[0]]:
                count += 1
                yield (dic)
def add_user(cmd_add):
        flag = 1
        cmd_phone = cmd_add.strip().split(',')[2].strip()  # 将命令中的phone提取出来
        for dic in staff_table:
            if cmd_phone == dic['phone']:
                flag = 0
                print('当前phone已存在')
        if flag:
            n = len(staff_table) + 1  # 计算要插入信息的序号
            with open(path, 'a', encoding='utf-8') as f3:
                cmd_add_write = '\n' + str(n) + ',' + cmd_add
                f3.write(cmd_add_write)
                print('add user successful')
def up_user(cmd_up):
    g2=sl_where(cmd_up)
    s = cmd_up.split('SET')[-1].split('WHERE')
    s = s[0].split(maxsplit=2) #列表['dept','=','"market"']
    s[-1]=s[-1].strip()
    s[-1]=remove_symbol(s[-1])
    for dic in g2:
        dic[s[0]]=s[-1]
    with open('copy_2.txt','w',encoding='utf-8') as f:
        for dic in staff_table:
            line='%s,%s,%s,%s,%s,%s'%(dic['staff_id'],dic['name'],dic['age'],dic['phone'],dic['dept'],dic['enroll_date'])
            f.write(line)
    os.remove(path)  # 将旧文件删除,并将新建的文件覆盖旧文件,实现文件修改
    os.rename('copy_2.txt', path)
def remove_symbol(smb):
    if '\'' in smb:
        smb1 = smb.strip('\'')
        return smb1
    elif '\"' in smb:
        smb1 = smb.strip('\"')
        return smb1
    else:
        return smb
@deco_delete_add#main=deco_delete_add(main)
def main(cmd):
    '''实现模糊查询功能'''
    sl_where(cmd)
    def sl_from(g1):
        l_cmd = cmd.strip().split('where')
        cmd_from = l_cmd[0].strip().split('from')[0]
        cmd_from=cmd_from.strip().split('select')[1].strip()  # '*' or 'name,age'
        for i in g1:
            for key in i:
                if key in cmd_from.split(',') or cmd_from == '*':
                    print(i[key], end=' ')
            print()
    g1=sl_where(cmd)
    sl_from(g1)
    print('查询到的记录为%d条' %count)
staff_table=make_dic()
main(command)
1,Alex lin,30,13651054608,market,2013-04-01
2,Jack Wang,22,13304320533,HR,2015-05-03
3,Rain Liu,25,1383235322,Sales,2016-04-22
4,Mack Cao,40,1356145343,HR,2009-03-01
5,Yu Yang,25,13811223344,Student,2017-06-16
6,Liu Yang,25,13811223345,Student,2017-06-20
7,Yang Yang,25,13811223346,Student,2017-06-20
8,Yang Yang,25,13811223347,Student,2017-06-08
9,Yang Gao,25,13811223348,Student,2017-06-08
10,Yang Gao,25,13811223350,Student,2017-06-08
11,Yang Gao,25,13811223351,Student,2017-06-08
12,Yang Gao,25,13811223352,Student,2017-06-08

 

转载于:https://www.cnblogs.com/yuyang26/p/7041867.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本题且课程将一步步帮你完成基于ASP.NET固定资产管理系统设计开发实战的全过程。 本课程完整记录基于ASP.NET固定资产管理毕业设计的制作过程,帮助大学生学习毕业设计系统的实现过程。本课程为ASP.NET毕业设计的设计全过程录像辅导,固定资产管理系统毕业设计基于ASP.NET,开发环境为Visual Studio 2015和SQL Server 2014设计完成,系统主能够实现用户权限的动态分配,系统主要包括部门管理、用户管理、固定资产管理、固定资产折旧管理、固定资产借出管理、固定资产报修管理、固定资产统计管理和固定资产报废管理八个模块ASP.NET固定资产管理系统源码在课程的最后章节中 如没有或需要最新源码请联系讲师该课程为成品讲解,不提供免费讲解、答疑和功能完善等,需要可付费。基于ASP.NET固定资产管理系统毕业设计的主要优势有以下几个方面:1、学习难度低,满足大多数应届毕业生和对编程了解程度较低人群的学习要求。2、界面友好性强,使用最新前端模板进行后台管理员界面设计。3、系统功能和工作量大,满足大多数院校的毕业设计要求4、实现固定资产业务和流程的管理5、实现多图统计。6、全设计过程录像 本套课程售价为399元  不需要源码的同学可享受活动价格优惠学习视频教程, 如需获取源码,当所有活动折扣/会员满减等最终售价低于课程价格时,请额外补足差价
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值