现要求你写⼀个简单的员⼯信息增删改查程序
作业需求: 作业需求:
对⽤户输⼊的字符串进⾏解析,从⽂件中筛选出相应符合条件的结果集。

1 查⽂件 查⽂件((find))
find name,age from staff_table where age > 22
find * from staff_table where dept = “IT”
find * from staff_table where enroll_data like “2013”
demo 1
find name,age from staff_table where age > 22(提示:name和age之间
只有⼀个逗号没有空格)
要求:从staff_table⽂件中,找出员⼯年龄在22岁以上的员⼯,将这些员⼯的姓
名,员⼯的年龄打印出来
find name,age from staff_table where age > 22
对⽤户输⼊字符串的解析流程:
1 读⽂件
2 将每⼀个员⼯的年龄与22进⾏⽐较
3 获取到员⼯年龄⼤于22的员⼯信息
4 从符合条件的员⼯信息中筛选出员⼯的姓名、年龄
demo 2:
find * from staff_table where dept = “IT”
需求:从staff_table ⽂件中找到IT部⻔的员⼯,并打印员⼯的所有信息
demo 3:
find * from staff_table where enroll_data like “2013”
需求:从staff_table⽂件中找到员⼯的⼊职时间是2013年的员⼯,并打印员⼯所
有的信息

2 添加员⼯信息(⽤户的⼿机号不允许重复) 添加员⼯信息(⽤户的⼿机号不允许重复)
add staff_table Mosson,18,13678789527,IT,2018-12-11
需求:
添加员⼯信息时,必须有员⼯名称(Mosson)、员⼯年龄(18)、员⼯⼿
机号(13678789527)、员⼯部⻔(IT)、员⼯⼊职时间(2018-12-11)
将这些信息追加到staff_table⽂件新的⼀⾏中,并插⼊这⼀⾏的id
注意:添加员⼯的时候不考虑异常情况即添加的时候按照姓名,年龄,⼿机号,
部分,⼊职时间 且每⼀条数据都包含员⼯的完整数据(姓名、年龄、⼿机号、部
⻔、⼊职时间)

3 删除员⼯信息(根据序号删除相应员⼯的信息) 删除员⼯信息(根据序号删除相应员⼯的信息)
del from staff_table where id = 10
需求:从staff_table中删除序号id为10的这⼀条员⼯的信息

4 修改员⼯信息(可以根据特殊条件修改员⼯信息) 修改员⼯信息(可以根据特殊条件修改员⼯信息)
demo 1
update staff_table set dept=“Market” where dept = “IT”
需求:将staff_table中dept为IT的修改成dept为Market
demo 2
update staff_table set age=25 where name = “Alex Li”
需求:将staff_table中⽤户名为Alex Li的⽤户的年龄改成25

import os
DB_FILE = "staff.db"
COLUMNS = ['id','name','age','phone','dept','enroll_data']
#文件转换成字典
def db_load(db_file):data = {}for col in COLUMNS:data[col] = []# print(data)with open(db_file,'r',encoding="utf-8") as f:for line in f:id, name, age, phone, dept, enroll_data = line.split(',')data['id'].append(id)data['name'].append(name)data['age'].append(age)data['phone'].append(phone)data['dept'].append(dept)data['enroll_data'].append(enroll_data)return data
#字典保存成文件
def save_db():f = open("%s.new" %DB_FILE,"w",encoding="utf-8")for index,calse in enumerate(STAFF_DATA["id"]):row = []for col in COLUMNS:row.append(STAFF_DATA[col][index])f.write(",".join(row))f.close()os.replace("%s.new" %DB_FILE,DB_FILE)
STAFF_DATA = db_load(DB_FILE)
#查
def syntax_find(data_set,query_clause):filter_clause_tmp = query_clause.split("from")[0][4:].split(",")filter_clause = [i.strip() for i in filter_clause_tmp]if "*" in filter_clause[0]:print(data_set)else:data_record = []for res in data_set:record = []for clause in filter_clause:index = COLUMNS.index(clause)record.append(res[index])data_record.append(record)print(data_record)print(f"匹配了{len(data_set)}条结果")
#增
def syntax_add(data_set,query_clause):formulate_row_tmp = query_clause.split('staff_table')[1].strip()# print(formulate_row.split(","))new_id = str(len(STAFF_DATA["id"]) + 1)formulate_row = new_id + "," + formulate_row_tmpadd_list = formulate_row.split(",")# print(add_list)for index,col in enumerate(COLUMNS):STAFF_DATA[col].append(add_list[index])print(STAFF_DATA)print(f"成功添加{add_list}")
#删
def syntax_del(data_set,clase):tmp_condition,tmp_val = clase.split("=")condition = tmp_condition.strip()val = tmp_val.strip()staff_id = data_set[0][0]index = STAFF_DATA["id"].index(staff_id)# print(index)for value in STAFF_DATA.values():value.pop(index)print(STAFF_DATA)print(f"成功删除{condition}={val}的一条数据")
#改
def syntax_update(data_set,query_clause):formulate_row = query_clause.split('set')[1].strip()if len(formulate_row)>1:clo_name,new_val = formulate_row.split('=')for match_row in data_set:staff_id = match_row[0]staff_id_index = STAFF_DATA["id"].index(staff_id)STAFF_DATA[clo_name][staff_id_index] = new_valprint(STAFF_DATA)print(f"更新了{len(data_set)}条记录")else:print("语法错误")
#>
def op_gt(conditon,value):record_data = []for index,val in enumerate(STAFF_DATA[conditon]):if float(val) > float(value):record = []for col in COLUMNS:record.append(STAFF_DATA[col][index])record_data.append(record)print(record_data)return record_data
#<
def op_lt(conditon,value):record_data = []for index, val in enumerate(STAFF_DATA[conditon]):if float(val) < float(value):record = []for col in COLUMNS:record.append(STAFF_DATA[col][index])record_data.append(record)return record_data
#=
def op_eq(conditon,value):record_data = []# print(conditon,value)for index, val in enumerate(STAFF_DATA[conditon]):# print(val)if val == value.strip('"'):record = []for col in COLUMNS:record.append(STAFF_DATA[col][index])record_data.append(record)return record_data
#like
def op_like(conditon,value):record_data = []for index, val in enumerate(STAFF_DATA[conditon]):if value.strip('"') in val:# print(value)record = []for col in COLUMNS:record.append(STAFF_DATA[col][index])record_data.append(record)return record_data
#解析where
def syntax_where_parser(clase):operators = {">":op_gt,"<":op_lt,"=":op_eq,"like":op_like}for op_key,op_func in operators.items():if op_key in clase:column,val = clase.split(op_key)# print(column,val)matched_data = op_func(column.strip(),val.strip())return matched_dataelse:print("语法错误")
#解析cmd
def syntax_parser(cmd):syntax_list = {"add":syntax_add,"update":syntax_update,"del":syntax_del,"find":syntax_find,}cmd_action = cmd.split()[0]if cmd_action in ("find","add","update","del"):if "where" in cmd:query_clase,where_clase = cmd.strip().split("where")matched_records = syntax_where_parser(where_clase)if cmd_action == "del":syntax_list[cmd_action](matched_records, where_clase.strip())else:syntax_list[cmd_action](matched_records, query_clase)else:matched_records = []for index,stadd_id in enumerate(STAFF_DATA["id"]):record = []for col in COLUMNS:record.append(STAFF_DATA[col][index])matched_records.append(record)query_clase = cmd# if cmd_action in syntax_list:syntax_list[cmd_action](matched_records,query_clase)
#主函数
def main():while True:cmd = input("[staff_data]:").strip()if not cmd:continuesyntax_parser(cmd)main()

第二模块-作业:员工查询程序相关推荐

  1. python炒股软件开发_Python之路day03-习题+作业-股票查询程序开发

    女神博客链接:https://www.cnblogs.com/Eva-J/articles/11214642.html#_label16 练习题 1.任一个英文的纯文本文件,统计其中的每个单词出现的个 ...

  2. 面试官:编写一个 SQL 查询,找出每个部门工资第二高的员工

    今天我们来看看大数据开发中row_number函数. 作为一名程序员,求职面试时时常会遇到需要编写一些基础的sql,编写sql这样做的目的主要是考验求职者的逻辑思维及编写sql基础能力.而row_nu ...

  3. 2022春哈工大计算机系统大作业——hello的程序人生

    计算机系统 大作业 题     目 程序人生-Hello's P2P 专       业 计算学部 学   号 班   级 学       生 指 导 教 师 计算机科学与技术学院 2021年5月 摘 ...

  4. OO第二次作业电梯总结

    这三次作业,发现自己无论采取怎样的架构,最后自己写的类都只有两个(除了给出的TestMain demo类). 在类图中,都是只有三小块....架构复杂性完全没有变? 第一次作业: 类图: 设计模式: ...

  5. 20189317 《网络攻防技术》 第二周作业

    一.黑客信息 (1)国外黑客 1971年,卡普尔从耶鲁大学毕业.在校期间,他专修心理学.语言学以及计算机学科.也就是在这时他开始对计算机萌生兴趣.他继续到研究生院深造.20世纪60年代,退学是许多人的 ...

  6. 2020年人工神经网络第二次作业-参考答案第三题

    如下是 2020年人工神经网络第二次作业 中第三题的参考答案. ➤01 第三题参考答案 1.题目分析 本题实际上是课件中例题的重现问题. 对于7个字符(三种字体),21个训练样本,它们分别属于7大类. ...

  7. 面向对象课程第二单元作业总结

    面向对象课程第二单元作业总结 前言 电梯系列作业分为三个阶段,逐步深入实现越来越复杂的电梯运行状态模拟. 第一阶段实现单部多线程傻瓜调度(FAFS)电梯的模拟: 第二阶段实现单部多线程可捎带调度(AL ...

  8. 2017软件工程实践第二次作业(数独)

    我的Github项目地址,使用工具VS2017社区版 / DevC++5.11,开发语言为C语言 基础题要求如下,附加题不会做就不贴出来了...: 项目需求 利用程序随机构造出 N 个已解答的数独棋盘 ...

  9. 第二周作业-影评、靶机和攻击机的安装与配置、kali的配置、DNS解析

    教材作业 第一章作业一 <黑客军团>第2季第1集影评 本文只分析与黑客攻击有关的情节,不谈其他. 开头,男主通过ssh以root身份远程连接到了一台服务器,并在其上执行了名为fuxsocy ...

最新文章

  1. Android View关系图
  2. Java常用类之【日期相关类】
  3. codeforces CF438D The Child and Sequence 线段树
  4. 快速幂、矩阵快速幂、快速乘法
  5. mysql 和区块链的差别_论区块链是什么数据库——正名篇
  6. centos普通用户修改文件权限_Linux实战014:Centos创建用户并添加root授权
  7. hdoj 1015 Safecracker
  8. web.xml mysql_JSP登录验证脚本失败(mysql后端)web.xml servlet映射?
  9. 005 - react
  10. 武侠人士的10大绝招
  11. 【工具使用系列】关于 MATLAB 神经网络故障诊断,你需要知道的事
  12. 大数据技术在网络安全分析的作用
  13. 声音就是你的武器!这样的攻防大赛你一定没有见过!
  14. SAP-MM-代码大全
  15. 阿里巴巴编码规范认证考试总结
  16. html返回的状态值,iradon函数返回的是什么值
  17. 全国电话区号->地址映射表
  18. android的shape(四周边框为灰色)
  19. 作为零基础的新手,如何自学Java和JavaEE开发技术?
  20. html5页面和app的区别,H5页面与APP区别何在

热门文章

  1. 朱小丹调研广东工业机器人产业有何深意?
  2. 【Android】Android Window
  3. 磁链转种子,种子转磁链
  4. Pycharm远程服务器无法显示图片
  5. 三年白干!程序员因违反《竞业协议》赔偿腾讯 97.6 万元,返还 15.8 万元
  6. C#多线程顺序依赖执行控制
  7. 成功将TTF字体从18M裁剪到1.8M
  8. 找个对象,找个男朋友
  9. 爬虫爬取二次元网站美女图片
  10. 洛蒂(Lottie)