1.功能简介
此程序模拟员工信息数据库操作,按照语法输入指令即能实现员工信息的增、删、改、查功能。
2.实现方法
- 架构:
本程序采用python语言编写,关键在于指令的解析和执行:其中指令解析主要运用了正则表达式来高效匹配有效信息;指令执行通过一个commd_exe主执行函数和增、删、改、查4个子执行函数来实现,操作方法主要是运用面向对象方法将员工信息对象化,从而使各项操作都能方便高效实现。程序主要函数如下: (1)command_exe(command)
指令执行主函数,根据指令第一个字段识别何种操作,并分发给相应的处理函数执行。(2)add(command)
增加员工记录函数,指令中需包含新增员工除id号以外的其他所有信息,程序执行后信息写入员工信息表最后一行,id号根据原最后一条记录的id号自增1。 (3)delete(command)
删除员工记录函数,可根据where后的条件检索需删除的记录,并从信息表中删除。 (4)update(command)
修改和更新员工记录函数,根据where后的条件检索需更新的记录,根据set后的等式修改和更新指定的信息。 (5)search(command)
查询员工记录函数,根据where后的条件查询到相应的记录,根据select后的关键字来显示记录的指定信息,如果为*显示记录的所有信息。 (6)verify(staff_temp,condition)
员工信息验证函数,传入一个对象化的员工记录和指令中where后的条件字符串,判断记录是否符合条件,符合在返回True,否则返回False。指令包含where字段的删、改、查操作会调用此函数。 (7)logic_cal(staff_temp,logic_exp)
单个逻辑表达式的运算函数,传入一个对象化的员工记录和从where条件字符串中被and、or、not分割的单个表达式,实现=,>,<,>=,<=,like等确定的一个逻辑表达式的运算,返回结果为True或False。
- 主要操作:
数据记录包含6个关键字:id,name,age,phone,dept,enroll_date
指令可用的逻辑运算符:<,>,=,<=,>=,like,and,or,not
数据库操作:
1.增(add to xxxx values xxxx
)
示例:add to staff_table values Alex Li,22,13651054608,IT,2013-04-01
2.删(delete from xxxx where xxxx
)
示例:delete from staff_table where age<=18 and enroll_date like "2017"
3.改(update xxxx set xxxx where xxxx
)
示例: update staff_table set dept="Market",age=30 where dept="IT" and phone like "189"
4.查(select xxxx from xxxx where xxxx
)
示例1: select * from staff_table where age>=25 and not phone like "136" or name like "李"
示例2: select name,age,dept from db.txt where id<9 and enroll_date like "-05-"
示例3:select * from staff_table where *
#显示所有记录
- 使用文件:
staff_table
存放员工信息表,作为模拟的数据库文件,每条记录包含id,name,age,phone,dept,enroll_date
六项信息,如"1,Alex Li,22,13651054608,IT,2013-04-0"
。
3.流程图
4.代码
1 #!usr/bin/env python3 2 #_*_coding:utf-8_*_ 3 4 'staff infomation management module' 5 __author__='Byron Li' 6 7 '''----------------------------------------------员工信息数据库操作指令语法--------------------------------------------- 8 数据记录包含6个关键字:id,name,age,phone,dept,enroll_date 9 指令可用的逻辑运算符:<,>,=,<=,>=,like,and,or,not 10 1.增(add to xxxx values xxxx) 11 示例:add to staff_table values Alex Li,22,13651054608,IT,2013-04-01 12 2.删(delete from xxxx where xxxx) 13 示例:delete from staff_table where age<=18 and enroll_date like "2017" 14 3.改(update xxxx set xxxx where xxxx) 15 示例:update staff_table set dept="Market",age=30 where dept="IT" and phone like "189" 16 4.查(select xxxx from xxxx where xxxx) 17 示例1:select * from staff_table where age>=25 and not phone like "136" or name like "李" 18 示例2:select name,age,dept from db.txt where id<9 and enroll_date like "-05-" 19 示例3:select * from staff_table where * #显示所有记录 20 ---------------------------------------------------------------------------------------------------------------------''' 21 import re 22 import os 23 class staff(object): #员工类 24 def __init__(self,*args): #员工信息初始化:从字符串列表传参赋值 25 self.id=args[0] 26 self.name=args[1] 27 self.age=args[2] 28 self.phone=args[3] 29 self.dept=args[4] 30 self.enroll_date=args[5] 31 self.allinfo=','.join(args) 32 def update(self,**kwargs): #员工信息更新:从字典传参赋值 33 if 'id' in kwargs: 34 self.id=kwargs['id'] 35 if 'name' in kwargs: 36 self.name=kwargs['name'] 37 if 'age' in kwargs: 38 self.age = kwargs['age'] 39 if 'phone' in kwargs: 40 self.phone=kwargs['phone'] 41 if 'dept' in kwargs: 42 self.dept=kwargs['dept'] 43 if 'enroll_date' in kwargs: 44 self.enroll_date = kwargs['enroll_date'] 45 self.allinfo = ','.join(map(str,[self.id, self.name, self.age, self.phone, self.dept, self.enroll_date])) 46 def print_info(self,info): #员工信息打印显示:传入的参数为"*"或数据记录的若干个关键字 47 if info=='*': 48 print(self.allinfo) 49 else: 50 info=info.split(',') 51 res=[] 52 for i in info: 53 if hasattr(self,i.strip()): 54 res.append(str(getattr(self,i.strip()))) 55 print(','.join(res)) 56 57 def command_exe(command): #指令执行主函数,根据指令第一个字段识别何种操作,并分发给相应的处理函数执行 58 command=command.strip() 59 return { 60 'add':add, 61 'delete':delete, 62 'update':update, 63 'select':search, 64 }.get(command.split()[0],error)(command) 65 66 def error(command): #错误提示函数,指令不合语法调用该函数报错 67 print('