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:utf8 import sys import re def 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') break if '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) # 条件判断 >, <, =, like if 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: pass def add(staff): staff.sort() num = int(re.split(r',', staff[-1])[0]) + 1 phone = input("phone:").strip() for line in staff: if phone == line[3]: print("already exists...") return False if 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 False else: staff.append('%s,%s,%s,%s,%s,%s\n' % (num, name, age, phone, dept, enroll_date)) return staff def 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') break set_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_value print(','.join(info_list)) up_list.append(','.join(info_list)) else: return up_list def 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 staff else: return False def 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': # help print(menu) elif choice == 'q': break elif choice == 's': # search select(staff, field) elif choice == 'a': # add result = add(staff) if not result: print('\033[31;1madd failed...\033[0m') continue else: with open(staff_table, 'w') as f: f.writelines(result) elif choice == 'e': # update result = update(staff, field) if not result: print('\033[31;1mupdate failed...\033[0m') continue else: with open(staff_table, 'w') as f: for line in result: f.write(line + '\n') elif choice == 'd': # delete result = delete(staff) if not result: print('\033[31;1mdelete failed...\033[0m') continue else: with open(staff_table, 'w') as f: f.writelines(result) else: continue except: print("\033[31;1minput error...\033[0m") continue if __name__ == '__main__': main()