實現員工資訊表展示功能

來源:互聯網
上載者:User
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;1mS. 查詢   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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.