1. 作业需求:
当然此表你在文件存储时可以这样表示
1,Alex Li,22,13651054608,IT,2013-04-01
现需要对这个员工信息文件,实现增删改查操作
可进行模糊查询,语法至少支持下面3种:
select name,age from staff_table where age > 22
select * from staff_table where dept = "IT"
select * from staff_table where enroll_date like "2013"
查到的信息,打印后,最后面还要显示查到的条数
可创建新员工纪录,以phone做唯一键,staff_id需自增
可删除指定员工信息纪录,输入员工id,即可删除
可修改员工信息,语法如下:
UPDATE staff_table SET dept="Market" WHERE where dept = "IT"
注意:以上需求,要充分使用函数,请尽你的最大限度来减少重复代码!
2. 需求分析:
#查询
def select_table():
example='''
select name,age from staff_table where age > 22
select * from staff_table where dept = "IT"
select * from staff_table where enroll_date like "2013"
'''
line = input('请输入查询语句:%s
'%example)
# line = 'select * from staff_table where enroll_date like "2016"'
res=re.search(r'select (.*) from staff_table where (staff_id|name|age|phone|dept|enroll_date) (.*) (.*)',line,re.M|re.I)
keys = ['staff_id','name','age','phone','dept','enroll_date']
if res:
print(' '+line)
re_1=res.group(1) #输出标签
re_2=res.group(2) #判断关键字
re_3=res.group(3) #判断符Operator
re_4=res.group(4).strip('"') #判断参数
if re_1 == "*":
if re_3 == "like":
word=re_4
likes = re.search(r'(d.*%s.*
)' % word, fileinfo(), re.I)
if likes:
printf_table(likes.group().strip('
'))
else:
print("not exsit")
elif re_3 == "=":
work = re_4
works = re.search(r'(d.*%s.*
)' % work, fileinfo(), re.I)
if works:
printf_table(works.group().strip('
'))
else:
print("not exsit")
else:
if re_2 in keys:
key = keys.index(re_2)
mesg = fileinfo().strip('
').split('
')
for i in mesg:
if eval("%s %s %s" % (i.split(',')[key], re_3, re_4)) is True:
printf_table(i)
else:
exit("%s 的参数不存在!"%re_2)
else:
if re_3 == "like":
data = re_1.split(',')
print('{0:15s}{1:15s}'.format(data[0].center(15), data[1].center(15)))
x = keys.index(data[0])
y = keys.index(data[1])
work = re_4
mesg = fileinfo().strip('
').split('
')
for i in mesg:
works = re.search(r'(d.*%s.*
)' % work, fileinfo(), re.I)
if works.group().strip('
') in i:
print("{0:15s}{1:15s}".format(i.split(',')[x].center(15), i.split(',')[y].center(15)))
else:
pass
elif re_3 == "=":
data = re_1.split(',')
print('{0:15s}{1:15s}'.format(data[0].center(15), data[1].center(15)))
x = keys.index(data[0])
y = keys.index(data[1])
work = re_4
mesg = fileinfo().strip('
').split('
')
for i in mesg:
works = re.search(r'(d.*%s.*
)' % work, fileinfo(), re.I)
if works.group().strip('
') in i:
print("{0:15s}{1:15s}".format(i.split(',')[x].center(15), i.split(',')[y].center(15)))
else:
pass
else:
data = re_1.split(',')
print('{0:15s}{1:15s}'.format(data[0].center(15), data[1].center(15)))
x = keys.index(data[0])
y = keys.index(data[1])
mesg = fileinfo().strip('
').split('
')
for i in mesg:
if eval("%s %s %s" % (i.split(',')[2], re_3, re_4)) is True:
print("{0:15s}{1:15s}".format(i.split(',')[x].center(15),i.split(',')[y].center(15)))
else:
print("输入有误")
#添加
def insert_m():
#获取行数
count=len(open("workerinfo", "rU").readlines())
while True:
name=input("请输入姓名")
if name:
break
else:
print("姓名不能为空")
continue
while True:
age=input("请输入年龄")
if age:
if 0<int(age)<150:
break
else:
print("超出真实年龄范围")
continue
else:
print("年龄不能为空")
continue
while True:
phone=input("请输入联系电话")
if phone:
try:
re_phone=re.compile(r'd{11}').search(phone).group()
except AttributeError:
print("输入联系电话有误")
continue
else:
if re_phone == phone :
if search(phone):
print("号码已存在")
continue
else:
break
else:
print("目前只支持大陆11位数字号码")
continue
else:
print("联系电话不能为空")
continue
while True:
dept=input("请输入岗位")
if dept:
break
else:
dept="待定"
break
while True:
enroll_date=input("请输入入职日期[格式:2009-01-01,默认为当前日期]")
if enroll_date:
try:
re_date=re.compile(r'^[12]d{3}-[0-9]{2}-[0-9]{2}').search(enroll_date).group()
except AttributeError:
print("输入日期格式有误")
continue
else:
if enroll_date == re_date and 0<int(enroll_date.split('-')[1])<13 and 0<int(enroll_date.split('-')[2])<32:
break
else:
print("入职日期输入有误")
continue
else:
enroll_date = datetime.date.fromtimestamp(time.time())
break
with open("workerinfo",'a+',encoding='utf-8') as f:
f.write("%d,%s,%s,%s,%s,%s
"%(count+1,name,age,phone,dept,enroll_date))
f.close()
#删除
def del_m(arg):
while arg:
ms = search(arg)
newmsg = fileinfo().replace(ms, '')
writef(newmsg)
if arg in newmsg:
return "失败,%s 仍然存在于staff_table." % arg
else:
return "成功!"
else:
print("你想删除的%s不在staff_table中."%arg)
return False
#修改
def update_f():
example='UPDATE staff_table SET dept="Market" WHERE where dept = "IT"'
while True:
line=input("请输入要查询语句:%s
"%example)
res = re.search(r'UPDATE staff_table SET (.*) = (.*) WHERE where (.*) = (.*)', line,re.M | re.I)
keys = ['staff_id', 'name', 'age', 'phone', 'dept', 'enroll_date']
if res:
re_1=res.group(1)
re_2=res.group(2).strip('"')
re_3=res.group(3)
re_4=res.group(4).strip('"')
if re_1 == re_3:
if re_2 in keys:
ms1=search(re_2)
ms2=search(re_2).replace(re_2, re_4)
newmsg = fileinfo().replace(ms1, ms2)
writef(newmsg)
return ("修改成功!")
else:
print("%s 不存在!"%re_2)
continue
else:
print("输入有误!")
continue
else:
print("输入有误!")
continue
3. 测试:
员工信息表:
-------------------------------------staff_table-------------------------------------
staff_id name age phone dept enroll_date
1 Alex Li 22 13651054608 IT 2013-04-01
2 Jack Wang 30 13304320533 HR 2015-05-03
3 Rain Liu 25 13835235322 Saies 2016-04-22
4 Make Cao 40 13561453433 HR 2009-03-01
5 mologa 27 13423643567 ops 2017-07-04
-----------------------------------------功能栏-----------------------------------------
1.查询 2.添加 3.修改 4.删除 5.退出
请输入需要操作的功能选项:1
请输入查询语句:
select name,age from staff_table where age > 22
select * from staff_table where dept = "IT"
select * from staff_table where enroll_date like "2013"
select name,age from staff_table where age > 22
select name,age from staff_table where age > 22
name age
Jack Wang 30
Rain Liu 25
Make Cao 40
mologa 27
-----------------------------------------功能栏-----------------------------------------
1.查询 2.添加 3.修改 4.删除 5.退出
请输入需要操作的功能选项:1
请输入查询语句:
select name,age from staff_table where age > 22
select * from staff_table where dept = "IT"
select * from staff_table where enroll_date like "2013"
select name,age from staff_table where age = 30
select name,age from staff_table where age = 30
name age
Jack Wang 30
-----------------------------------------功能栏-----------------------------------------
1.查询 2.添加 3.修改 4.删除 5.退出
请输入需要操作的功能选项:1
请输入查询语句:
select name,age from staff_table where age > 22
select * from staff_table where dept = "IT"
select * from staff_table where enroll_date like "2013"
select * from staff_table where age > 22
select * from staff_table where age > 22
2 Jack Wang 30 13304320533 HR 2015-05-03
3 Rain Liu 25 13835235322 Saies 2016-04-22
4 Make Cao 40 13561453433 HR 2009-03-01
5 mologa 27 13423643567 ops 2017-07-04
-----------------------------------------功能栏-----------------------------------------
1.查询 2.添加 3.修改 4.删除 5.退出
请输入需要操作的功能选项:5
退出员工信息!