zoukankan      html  css  js  c++  java
  • 员工信息表

    用户输入条件
    条件的解析, 把用户想要的列名 和 条件分开
    处理文件
    逐行读文件, 逐行处理
    1.默写:带参数的装饰器。需要标注代码的执行步骤。
    2.整理作业:函数的知识点以及装饰器相关作业。装饰器作业需要自己写一遍,并给作业加注释。
    3.周末大作业:实现员工信息表
    文件存储格式如下:
    id,name,age,phone,job
    1,Alex,22,13651054608,IT
    2,Egon,23,13304320533,Tearcher
    3,nezha,25,1333235322,IT

    现在需要对这个员工信息文件进行增删改查。

    不允许一次性将文件中的行都读入内存。
    基础必做:
    a.可以进行查询,支持三种语法:
    select 列名1,列名2,… where 列名条件
    支持:大于小于等于,还要支持模糊查找。
    示例:
    select name, age where age>22
    select * where job=IT
    select * where phone like 133

    进阶选做:
    b.可创建新员工记录,id要顺序增加
    c.可删除指定员工记录,直接输入员工id即可
    d.修改员工信息
    语法:set 列名=“新的值” where 条件
    #先用where查找对应人的信息,再使用set来修改列名对应的值为“新的值”

    注意:要想操作员工信息表,必须先登录,登陆认证需要用装饰器完成
    其他需求尽量用函数实现
     1 def filter_handler(operate,con):        # '>','age>22'
     2     '''
     3     进行筛选工作
     4     :param operate: 用户要进行的操作是: > 、< 、= 、like
     5     :param con: 用户输入的where条件
     6     :return: 被选中的所有行组成的列表,其中每一行都是一个列表
     7     '''
     8     selected_lst = []               # 被选中的列表
     9     col,val = con.split(operate)    # ['age','22']
    10     col = col.strip()
    11     val = val.strip()
    12     judge = 'int(line_lst[column_dic[col]]) %s int(val)'%operate if operate == '<' or operate == '>' else 'line_lst[column_dic[col]] %s val'%operate
    13     f = open('员工信息表.txt',encoding='utf-8')
    14     for line in f:
    15         line_lst = line.strip().split(',')      # id name age phone job
    16         if eval(judge):                         # int(line_lst[column_dic[col]])
    17             selected_lst.append(line_lst)
    18     f.close()
    19     return selected_lst
    20 
    21 def get_selected_line(con):             # 'age>22'
    22     '''
    23     获取所有要查找的行,并将每一行作为一个列表项存储在selected_lst中
    24     :param con:
    25     :return: 存储了符合条件的行的列表
    26     '''
    27     if '>' in con:
    28         selected_lst = filter_handler('>',con)
    29     elif '<' in con:
    30         selected_lst = filter_handler('<',con)
    31     elif '=' in con:
    32         selected_lst = filter_handler('==',con.replace('=','=='))
    33     elif 'like' in con:
    34         selected_lst = filter_handler('in',con)
    35     return selected_lst
    36 
    37 def get_show_lst(col_condition):    # 'select name,age,job'
    38     '''
    39     获取要展示的列名
    40     :param col_condition: 用户输入的select条件
    41     :return: 列名组成的字典
    42     '''
    43     col_info_lst = col_condition.strip().split('select')        # ['', 'name,age,job']
    44     col_info_lst = [col_info_item for col_info_item in col_info_lst if col_info_item.strip()]       # 去空
    45     if col_info_lst:        # ['name,age,job']
    46         col_info = col_info_lst[0].strip()      # ['name,age,job']
    47         if '*' == col_info:
    48             return column_dic.keys()            # ['id','name','age','phone','job']
    49         elif col_info:
    50             ret = col_info.split(',')           # ['name','age','job']
    51             return [item.strip() for item in ret]       # 对上述式子去空白
    52         else:print(col_info)
    53 
    54 def show(selected_lst,show_lst):
    55     '''
    56     展示符合条件的内容
    57     :param selected_lst: 符合条件的行的列表
    58     :param show_lst: 所有要提示的字段
    59     :return: None
    60     '''
    61     for selected_item in selected_lst:
    62         for col in show_lst:
    63             print(selected_item[column_dic[col]],end = ' ')
    64         print()
    65 
    66 column_dic = {'id':0,'name':1,'age':2,'phone':3,'job':4}        # 文件中每一列的名字和数字的对应关系
    67 # 1. 接收用户的信息 -- 分析信息
    68 condition = input('>>>')            # 接收用户的指令: select name,age,job where age>22
    69 # condition = 'select name,age,job where age>22'
    70 ret = condition.split('where')              # ['select name,age,job' , 'age>22']
    71 con = ret[1].strip()                # 根据select条件解析用户需要展示的内容: 'age>22'
    72 show_lst = get_show_lst(ret[0])     # 根据where条件解析用户需要展示的内容: 'select name,age,job'
    73 # show_lst = ['name','age','job']
    74 selected_lst = get_selected_line(con)   # selected_lst中存储了所有符合条件的内容
    75 show(selected_lst,show_lst)         # 将符合条件的内容按照用户的需求展示出来
  • 相关阅读:
    使用phpspider抓取网站文章
    laravel5中使用faker生成模拟数据
    记录一次apache服务器启动报错和解决方法
    记录一次手误删除了root用户的家目录
    Python+selenium+PIL截屏后,裁剪图片不准确(Win10)
    Git学习笔记(五)
    Git学习笔记(一)
    Git学习笔记(四)
    Git学习笔记(三)
    Git学习笔记(二)
  • 原文地址:https://www.cnblogs.com/lpgit/p/9382491.html
Copyright © 2011-2022 走看看