实现员工信息表展示功能
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
以上是实现员工信息表展示功能的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Microsoft Word文档在保存时包含一些元数据。这些详细信息用于在文档上识别,例如创建时间、作者是谁、修改日期等。它还具有其他信息,例如字符数,字数,段落数等等。如果您可能想要删除作者或上次修改的信息或任何其他信息,以便其他人不知道这些值,那么有一种方法。在本文中,让我们看看如何删除文档的作者和上次修改的信息。删除微软Word文档中的作者和最后修改的信息步骤 1 –转到

使用系统信息单击“开始”,然后输入“系统信息”。只需单击程序,如下图所示。在这里,您可以找到大多数系统信息,而显卡信息也是您可以找到的一件事。在“系统信息”程序中,展开“组件”,然后单击“显示”。让程序收集所有必要的信息,一旦准备就绪,您就可以在系统上找到特定于显卡的名称和其他信息。即使您有多个显卡,您也可以从这里找到与连接到计算机的专用和集成显卡相关的大多数内容。使用设备管理器Windows11就像大多数其他版本的Windows一样,您也可以从设备管理器中找到计算机上的显卡。单击“开始”,然后

在iOS17中,有一个新的AirDrop功能,让你通过触摸两部iPhone来与某人交换联系信息。它被称为NameDrop,这是它的工作原理。NameDrop允许您简单地将iPhone放在他们的iPhone附近以交换联系方式,而不是输入新人的号码来给他们打电话或发短信,以便他们拥有您的号码。将两个设备放在一起将自动弹出联系人共享界面。点击弹出窗口会显示一个人的联系信息及其联系人海报(您可以自定义和编辑自己的照片,也是iOS17的新功能)。该屏幕还包括“仅接收”或共享您自己的联系信息作为响应的选项。

本站9月2日消息,任天堂官网披露员工数据,新员工留存率(2019年4月入职并于2022年4月继续在公司工作的应届毕业生比例)高达98.8%,其中男性100%、女性96%。这意味着任天堂每聘用100名新员工,约有一人决定辞职,而日本平均新员工留存率为70%。冈本启武,UZUZ株式会社的首席执行官,表示:“大公司通常提供高薪和良好福利,因此员工留存率较高,尤其是任天堂作为日本受欢迎的代表公司。”“去年,任天堂的平均年薪为988万日元(约合49.2万元人民币),虽然游戏行业中有一些公司的年薪比任天堂更

目前图像 3D 重建工作通常采用恒定自然光照条件下从多个视点(multi-view)捕获目标场景的多视图立体重建方法(Multi-view Stereo)。然而,这些方法通常假设朗伯表面,并且难以恢复高频细节。另一种场景重建方法是利用固定视点但不同点光源下捕获的图像。例如光度立体 (Photometric Stereo) 方法就采用这种设置并利用其 shading 信息来重建非朗伯物体的表面细节。然而,现有的单视图方法通常采用法线贴图(normal map)或深度图(depth map)来表征可

在iOS17中,有一项新的AirDrop功能,可让您通过同时触摸两部iPhone来与某人交换联系信息。它被称为NameDrop,这是它的实际工作原理。NameDrop无需输入新人的号码来给他们打电话或发短信,以便他们拥有您的号码,您只需将iPhone靠近他们的iPhone即可交换联系方式。将两台设备放在一起会自动弹出联系人共享界面。点击弹出窗口会显示一个人的联系信息和他们的联系人海报(您可以自定义和编辑的您自己的照片,也是iOS17的新功能)。该屏幕还包括“仅接收”或共享您自己的联系信息作为响应

微信收到信息延迟的原因可能是网络问题、服务器负载、版本问题、设备问题、消息发送问题或其他因素等。详细介绍:1、网络问题,微信收到信息的延迟可能与网络连接有关,如果网络连接不稳定或信号弱,可能导致信息传输延迟,请确保手机已经连接到稳定的网络,并且网络信号强度良好;2、服务器负载,当微信服务器负载较高时,可能会导致信息传输的延迟,特别是在繁忙的时间段或大量用户同时使用微信时等等。

自从ChatGPT掀起浪潮,不少人都在担心AI快要抢人类饭碗了。然鹅,现实可能更残酷QAQ......据就业服务平台Resume Builder调查统计,在1000多家受访美国企业中,用ChatGPT取代部分员工的,比例已达到惊人的48%。在这些企业中,有49%已经启用ChatGPT,还有30%正在赶来的路上。就连央视财经也为此专门发过一个报道:相关话题还曾一度冲上了知乎热榜,众网友表示,不得不承认,现在ChatGPT等AIGC工具已势不可挡——浪潮既来,不进则退。有程序员还指出:用过Copil
