Implémenter la fonction d'affichage du tableau d'informations sur les employés

巴扎黑
Libérer: 2018-05-21 09:14:25
original
3513 Les gens l'ont consulté

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'[=><]+&#39;, where_str).group()
                where_list = re.split(r&#39;[=><]+&#39;, where_str)
            where_field = where_list[0]
            value = where_list[1]if re.search(r&#39;[\&#39;\"]+&#39;, value):  # 带&#39;和"的表示字符,处理掉&#39;和"value = value.replace(&#39;\"&#39;, &#39;&#39;)
                value = value.replace(&#39;\&#39;&#39;, &#39;&#39;)else:
                value = float(value)# print(where_str, where_field, sizeof, value)# 条件判断 >, <, =, likeif sizeof == &#39;>':
                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 == '<&#39;:
                v = info_list[field.get(where_field)]if float(v) < value:
                    view_list = []for i in range(len(search_field)):if search_field[i] == &#39;*&#39;:
                            view_list = info_list[:]else:
                            view_list.append(info_list[field.get(search_field[i])])else:print(&#39;,&#39;.join(view_list))elif sizeof == &#39;=&#39;:
                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] == &#39;*&#39;:
                            view_list = info_list[:]else:
                            view_list.append(info_list[field.get(search_field[i])])else:print(&#39;,&#39;.join(view_list))elif sizeof == &#39;like&#39;:
                v = info_list[field.get(where_field)]if value in v:
                    view_list = []for i in range(len(search_field)):if search_field[i] == &#39;*&#39;:
                            view_list = info_list[:]else:
                            view_list.append(info_list[field.get(search_field[i])])else:print(&#39;,&#39;.join(view_list))else:passdef add(staff):
    staff.sort()
    num = int(re.split(r&#39;,&#39;, staff[-1])[0]) + 1phone = input("phone:").strip()for line in staff:if phone == line[3]:print("already exists...")return Falseif not re.match(r&#39;^\d+$&#39;, 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(&#39;%s,%s,%s,%s,%s,%s\n&#39; % (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()
Copier après la connexion

View Code

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal