函数式编程(练习题)

作业

现要求你写一个简单的员工信息增删改查程序,需求如下:

当然此表你在文件存储时可以这样表示

1,Alex Li,22,13651054608,IT,2013-04-01
2,Jack Wang,28,13451024608,HR,2015-01-07
3,Rain Wang,21,13451054608,IT,2017-04-01
4,Mack Qiao,44,15653354208,Sales,2016-02-01
5,Rachel Chen,23,13351024606,IT,2013-03-16
6,Eric Liu,19,18531054602,Marketing,2012-12-01
7,Chao Zhang,21,13235324334,Administration,2011-08-08
8,Kevin Chen,22,13151054603,Sales,2013-04-01
9,Shit Wen,20,13351024602,IT,2017-07-03
10,Shanshan Du,26,13698424612,Operation,2017-07-02

1.可进行模糊查询,语法至少支持下面3种查询语法:

find name,age from staff_table where age > 22

find * from staff_table where dept = "IT"

find * from staff_table where enroll_date like "2013"

2.可创建新员工纪录,以phone做唯一键(即不允许表里有手机号重复的情况),staff_id需自增

语法: add staff_table Alex Li,25,134435344,IT,2015-10-29

3.可删除指定员工信息纪录,输入员工id,即可删除

语法: del from staff where  id=3

4.可修改员工信息,语法如下:

UPDATE staff_table SET dept="Market" WHERE  dept = "IT" 把所有dept=IT的纪录的dept改成Market
UPDATE staff_table SET age=25 WHERE  name = "Alex Li"  把name=Alex Li的纪录的年龄改成25

5.以上每条语名执行完毕后,要显示这条语句影响了多少条纪录。 比如查询语句 就显示 查询出了多少条、修改语句就显示修改了多少条等。

注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码

 

 

import os
import re
FILE = 'staff_table.txt'
PROJECT = ['staff_id','name','age','phone','dept','enroll_date']
def date():
    date_dic ={
        'staff_id':[],
        'name':[],
        'age':[],
        'phone':[],
        'dept':[],
        'enroll_date':[]
    }
    with open(FILE,'r',encoding='utf-8') as f:
        for line in f.readlines():
            line = line.split(',')
            date_dic['staff_id'].append(line[0])
            date_dic['name'].append(line[1])
            date_dic['age'].append(line[2])
            date_dic['phone'].append(line[3])
            date_dic['dept'].append(line[4])
            date_dic['enroll_date'].append(line[5].strip())
        return date_dic
def save_date(STAFF_DB):
    with open('new.%s'%FILE,'w',encoding='utf-8')as  f_new:
        line =[]
        num =len(STAFF_DB.get('staff_id'))
        (STAFF_DB).get('staff_id')[num-1] =  str((STAFF_DB).get('staff_id')[num-1])
        for n in range(num):
            rew = STAFF_DB['staff_id'][n]+','+STAFF_DB['name'][n]+','+STAFF_DB['age'][n]+','+STAFF_DB['phone'][n]+','+STAFF_DB['dept'][n]+','+STAFF_DB['enroll_date'][n]
            line.append(rew)
            for v in line:
                pass
            f_new.write(v+'\n')
        f_new.close()
        os.replace('new.%s'%FILE,FILE)

def add(cmd):
    for index,k in enumerate(cmd):
        s = cmd[3]
    s = str(s).split(',')
    cmd_2 = []
    name_1 = cmd[2]+s[0]
    cmd_2.append(name_1)
    cmd_2.append(s[1])
    if s[2] not in STAFF_DB['phone']:
        cmd_2.append(s[2])
        cmd_2.append(s[3])
        cmd_2.append(s[4])
    else:
        print('手机号已存在')
        exit(1)

    STAFF_DB['staff_id'].append((len(date()['staff_id'])+1))
    STAFF_DB['name'].append(name_1)
    STAFF_DB['age'].append(cmd_2[1])
    STAFF_DB['phone'].append(cmd_2[2])
    STAFF_DB['dept'].append(cmd_2[3])
    STAFF_DB['enroll_date'].append(cmd_2[4])
    save_date(STAFF_DB)
    print('添加成功')
def find(cmd):
    if cmd[1] == 'name'or'age':
        for index,k in enumerate(STAFF_DB['age']):
            if '<' in cmd:
                if k < cmd[7]:
                    print(STAFF_DB['name'][index],k)
            elif '>' in cmd:
                if k> cmd[7]:
                    print(STAFF_DB['name'][index],k)
            elif '=' in cmd:
                if k == cmd[7]:
                    print(STAFF_DB['name'][index],k)
    else:
        pass

def where(cmd):
    choice = cmd[5]
    result = cmd[7]
    if  '=' in cmd:
        for index,k in enumerate(STAFF_DB[choice]):
            if result in '"'+k+'"':
                print(STAFF_DB['staff_id'][index],STAFF_DB['name'][index],STAFF_DB['age'][index],STAFF_DB['phone'][index],STAFF_DB['enroll_date'][index],k)
    elif 'like' in cmd:
        for index, k in enumerate(STAFF_DB[choice]):
            if result in '"'+k[:4]+'"':
                print(STAFF_DB['staff_id'][index],STAFF_DB['name'][index],STAFF_DB['age'][index],STAFF_DB['phone'][index],STAFF_DB['enroll_date'][index])

def delete(cmd):
    #del from staff where  id=3
    cmd_del = cmd[4]
    cmd_del_2 = str(cmd_del).split('=')[1]
    cmd_del = int(str(cmd_del).split('=')[1])
    print(cmd_del_2)
    line = []
    line = STAFF_DB.get('staff_id')
    index = line.index(cmd_del_2)
    print(index)

    if STAFF_DB.get('staff_id')[index]== cmd_del_2:
        print('oooooooooo')
        del (STAFF_DB.get('staff_id')[index])
        del (STAFF_DB.get('name')[index])
        del (STAFF_DB.get('age')[index])
        del (STAFF_DB.get('phone')[index])
        del (STAFF_DB.get('dept')[index])
        del (STAFF_DB.get('enroll_date')[index])

    save_date(STAFF_DB)
def analysis(cmd):
    '''解析语句'''
    cmd_list = cmd.split(re.match(*' ',cmd))
    cmd = cmd_list
    if cmd [1] == '*':
        return where(cmd)
    elif cmd [0] == 'find':
        return  find(cmd)
    elif cmd[0] == 'add':
        return  add(cmd)
    elif cmd[0] == 'del':
        return delete(cmd)

def mian():
    '''程序入口'''
    while True:
        cmd =input('输入sql语句:  ').strip()
        if not cmd:continue
        analysis(cmd)
STAFF_DB = date()
mian()


未完待续请大家批评 谢谢

 

posted @ 2018-03-26 23:17  SmallNine  阅读(341)  评论(0编辑  收藏  举报