PHP前端开发

实现员工信息表展示功能

百变鹏仔 3小时前 #Python
文章标签 员工

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(''))        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('[31;1mplease select `staff_table`...[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' % (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(''))        cmd_list = re.split(r'[ ,;]+', cmd)if cmd_list[1] != 'staff_table':print('[31;1mplease update `staff_table`...[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 = '''[33;1m-- staff_table --[0m[29;1mS. 查询   h. 帮助A. 新增   q. 退出E. 修改D. 删除[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('[31;1madd failed...[0m')continueelse:                    with open(staff_table, 'w') as f:                        f.writelines(result)elif choice == 'e':  # updateresult = update(staff, field)if not result:print('[31;1mupdate failed...[0m')continueelse:                    with open(staff_table, 'w') as f:for line in result:                            f.write(line + '')elif choice == 'd':  # deleteresult = delete(staff)if not result:print('[31;1mdelete failed...[0m')continueelse:                    with open(staff_table, 'w') as f:                        f.writelines(result)else:continueexcept:print("[31;1minput error...[0m")continueif __name__ == '__main__':    main()

View Code