readme:
1. 员工信息表程序,实现增删改查操作:
1).可进行模糊查询,语法至少支持下面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
最后显示有查到的条数
2).可创建新员工纪录,以phone做唯一键,staff_id需自增
3).可删除指定员工信息纪录,输入员工id,即可删除
4).可修改员工信息,语法如下:
update staff_table set dept=market where dept = it
流程图:
代码:
# coding:utf8import sysimport redef select(staff, field):
cmd = input(cmd>).strip()
cmd = cmd.replace('from', 'from')
cmd = cmd.replace('where', 'where')if '*' in cmd:for i in field.keys():
sys.stdout.write(str(i) + ' ')print('')for line in staff:
info_list = re.split(r',+', line.strip('\n'))
cmd_list = re.split(r'[ ,;]+', cmd)
f_index = cmd_list.index('from')
search_field = cmd_list[1:f_index]
from_field = cmd_list[f_index + 1]if from_field != 'staff_table':print('\033[31;1mplease select `staff_table`...\033[0m')breakif 'where' not in cmd_list:# 不存在where条件,显示所有view_list = []for i in range(len(search_field)):if search_field[i] == '*':
view_list = info_list[:]else:
view_list.append(info_list[field.get(search_field[i])])else:print(','.join(view_list))else:# 存在where条件w_index = cmd_list.index('where')
where_str = ''.join(cmd_list[w_index + 1:])if re.search(r'like', where_str):
sizeof = 'like'where_list = re.split(r'like', where_str)else:
sizeof = re.search(r'[=><]+', where_str).group()
where_list = re.split(r'[=><]+', where_str)
where_field = where_list[0]
value = where_list[1]if re.search(r'[\'\"]+', value): # 带'和"的表示字符,处理掉'和"value = value.replace('\"', '')
value = value.replace('\'', '')else:
value = float(value)# print(where_str, where_field, sizeof, value)# 条件判断 >, <, =, likeif sizeof == '>':
v = info_list[field.get(where_field)]if float(v) > value:
view_list = []for i in range(len(search_field)):if search_field[i] == '*':
view_list = info_list[:]else:
view_list.append(info_list[field.get(search_field[i])])else:print(','.join(view_list))elif sizeof == '<':
v = info_list[field.get(where_field)]if float(v) < value:
view_list = []for i in range(len(search_field)):if search_field[i] == '*':
view_list = info_list[:]else:
view_list.append(info_list[field.get(search_field[i])])else:print(','.join(view_list))elif sizeof == '=':
v = info_list[field.get(where_field)]if field.get(where_field) == 2:
v = float(v)if v == value:
view_list = []for i in range(len(search_field)):if search_field[i] == '*':
view_list = info_list[:]else:
view_list.append(info_list[field.get(search_field[i])])else:print(','.join(view_list))elif sizeof == 'like':
v = info_list[field.get(where_field)]if value in v:
view_list = []for i in range(len(search_field)):if search_field[i] == '*':
view_list = info_list[:]else:
view_list.append(info_list[field.get(search_field[i])])else:print(','.join(view_list))else:passdef add(staff):
staff.sort()
num = int(re.split(r',', staff[-1])[0]) + 1phone = input("phone:").strip()for line in staff:if phone == line[3]:print("already exists...")return falseif not re.match(r'^\d+$', phone) or len(phone) < 7:print("format error...")return false
name = input("name:").strip()
age = input("age:").strip()
dept = input("dept:").strip()
enroll_date = input("enroll_date:").strip()for s in (name, age, dept, enroll_date):if not len(s):print("input is null...")return falseelse:
staff.append('%s,%s,%s,%s,%s,%s\n' % (num, name, age, phone, dept, enroll_date))return staffdef update(staff, field):
cmd = input("cmd>).strip()
up_list = []
cmd = cmd.replace('set', 'set')
cmd = cmd.replace('where', 'where')for line in staff:
info_list = re.split(r',+', line.strip('\n'))
cmd_list = re.split(r'[ ,;]+', cmd)if cmd_list[1] != 'staff_table':print('\033[31;1mplease update `staff_table`...\033[0m')breakset_index = cmd_list.index('set')
where_index = cmd_list.index('where')
set_list = re.split(r'=', ''.join(cmd_list[set_index + 1:where_index]))
set_field = set_list[0]
set_value = set_list[1]if re.search(r'[\'\]+', set_value):
set_value = set_value.replace('\'', '')
set_value = set_value.replace('\', '')
where_list = re.split(r'=', ''.join(cmd_list[where_index + 1:]))
where_field = where_list[0]
where_value = where_list[1]if re.search(r'[\'\]+', where_value):
where_value = where_value.replace('\'', '')
where_value = where_value.replace('\', '')if info_list[field.get(where_field)] == where_value:
info_list[field.get(set_field)] = set_valueprint(','.join(info_list))
up_list.append(','.join(info_list))else:return up_listdef delete(staff):
del_id = input(delete id:).strip()for i in range(len(staff)):if re.split(r',', staff[i])[0] == del_id:
staff.pop(i)print(id:%s delete success. % del_id)return staffelse:return falsedef main():
staff_table = 'staff_table.txt'field = {'staff_id': 0,'name': 1,'age': 2,'phone': 3,'dept': 4,'enroll_date': 5}
menu = '''\033[33;1m-- staff_table --\033[0m\033[29;1m
s. 查询 h. 帮助
a. 新增 q. 退出
e. 修改
d. 删除\033[0m'''print(menu)while true:try:
with open(staff_table, 'r') as f:
staff = f.readlines()
choice = input(>>).strip().lower()if choice == 'h': # helpprint(menu)elif choice == 'q':breakelif choice == 's': # search select(staff, field)elif choice == 'a': # addresult = add(staff)if not result:print('\033[31;1madd failed...\033[0m')continueelse:
with open(staff_table, 'w') as f:
f.writelines(result)elif choice == 'e': # updateresult = update(staff, field)if not result:print('\033[31;1mupdate failed...\033[0m')continueelse:
with open(staff_table, 'w') as f:for line in result:
f.write(line + '\n')elif choice == 'd': # deleteresult = delete(staff)if not result:print('\033[31;1mdelete failed...\033[0m')continueelse:
with open(staff_table, 'w') as f:
f.writelines(result)else:continueexcept:print(\033[31;1minput error...\033[0m)continueif __name__ == '__main__':
main()
view code
以上就是实现员工信息表展示功能的详细内容。