python-作业:员工信息表

python-作业:员工信息表 标签:items display isp exce http la

python-作业:员工信息表

标签:itemsdisplayispexcehttplast帮助tafexit

程序可实现以下功能:1、查询,输入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、创建,输入insert Mickle,22,13651054608,IT,2013-04-01,加信息加入的员工信息表中。3、删除,输入delect id,将指定的id号员工信息删除。4、修改,输入update staff_table set dept = \”Market\” where dept = \”IT\”,将要修改的内容修改。

程序还提供help功能,为用户输入正确的sql语句格式提供帮助。

import os #导入os模块,方便文件的删除和改名

def info_display(): #打印程序启动信息
print(\”-\”.center(60, \”-\”))
print(\”欢迎来到员工管理系统\”.center(50,\” \”))
print(\”【输入help显示帮助信息】\”.center(50, \” \”))
print(\”-\”.center(60, \”-\”))
sql = input(\”请输入\\033[1;31msql\\033[0m信息>>>>\”).strip(\”\”)
if sql == \”q\” or sql == \”quit\”: #用户如果输入q,程序退出
exit(\” Bye Bye \”.center(60, \”-\”))
elif sql == \”help\”: #用户输入help,打印help信息,help信息为打印的格式
print(\”\\033[1;35m 查询 输入格式:\\n\\tselect name,age from staff_table where age > 22\\033[0m\”)
print(\”\\033[1;35m 创建 输入格式:\\n\\tinsert Mickle,22,13651054608,IT,2013-04-01\\033[0m\”)
print(\”\\033[1;35m 修改 输入格式:\\n\\tupdate staff_table set dept = \\\”Market\\\” where dept = \\\”IT\\\”\\033[0m\”)
print(\”\\033[1;35m 删除 输入格式:\\n\\tdelete 5\\033[0m\”)
else:
sql_parse(sql) #用户输入正确的sql语法,调用sql解析函数

def sql_parse(sql): #对用户输入的sql语句进行解析,根据sql语句调用不同的函数
func_choice = {\”insert\”: insert, \”delete\”: delete, \”update\”: update, \”select\”: select}
sql_list = sql.replace(\”,\”, \” \”).split() # 将sql解析成列表形式
if sql_list[0] == \”select\”: #如果用户输入的sql语句是查询
sql_dict = {\”from\”: [], \”where\”: [], \”limit\”: []}
tag = False
for item in sql_list: #根据sql解析出sql_dict
if tag and item in sql_dict:
tag = False
if not tag and item in sql_dict:
tag = True
key = item
continue
if tag:
sql_dict[key].append(item.strip(‘\\\”‘))
func_choice.get(sql_list[0])(sql_dict) #解析出sql_dict后,传入查询函数,并调用查询函数
elif sql_list[0] == \”insert\”: #如果用户输入的sql语句是创建
sql_dict = {}
sql_list.remove(\”insert\”)
sql_dict.setdefault(\”values\”,sql_list) #解析出sql_dict,传入创建函数
insert(sql_dict) #调用创建函数
elif sql_list[0] == \”delete\”: #解析出sql_dict后,传入删除函数,并调用查询函数
delete_id = int(sql_list[1]) #获取用户要删除的id
delete(delete_id) #调用删除函数
elif sql_list[0] == \”update\”: #如果用户输入的sql语句是修改
sql_dict = {\”set\”:[],\”where\”:[],\”update\”:[]}
tag = False
for items in sql_list: #根据用户的sql,解析出sql_dict字典
if tag and items in sql_dict:
tag = False
if not tag and items in sql_dict:
tag = True
key = items
continue
if tag:
sql_dict[key].append(items.strip(‘\\\”‘))
update(sql_dict) #传入修改函数,并调用修改函数
return sql_list

def insert(sql_dict): #创建信息函数
with open(\”staff_table\”,\”ab+\”) as f:
offs = -100
while True:
f.seek(offs,2)
lines = f.readlines()
if len(lines) > 1:
last = lines[-1]
break
offs *= 2
last = last.decode(encoding=\”utf-8\”)
last_id = int(last.split(\”,\”)[0])
new_id = last_id + 1
record = sql_dict.get(\”values\”)
record.insert(0,str(new_id))
record_str = \”,\”.join(record)+\”\\n\”
f.write(bytes(record_str,encoding=\”utf-8\”))
f.flush()
print(\”\\033[1;31m创建成功 \\033[0m\”)

def delete(delete_id): #删除函数
with open(\”staff_table\”,\”r\”,encoding=\”utf-8\”) as f1,open(\”staff_table_bak\”,\”w\”,encoding=‘utf-8‘) as f2:
del_count = 1
for line in f1:
if del_count != delete_id:
f2.write(line)
elif del_count == delete_id:
pass
del_count += 1
print(\”\\033[1;31m删除成功 \\033[0m\”)
os.remove(\”staff_table\”) #删除原员工信息文件
os.rename(\”staff_table_bak\”,\”staff_table\”) #修改新员工信息文件名

def update(sql_dict): #修改函数
set_list = sql_dict.get(\”set\”) #获取要修改的内容
set_key = set_list[0]
where_list = sql_dict.get(\”where\”) #获取要修改的文件内容
with open(\”staff_table\”, \”r\”, encoding=\”utf-8\”) as f1, open(\”staff_table_bak\”, \”w\”, encoding=‘utf-8‘) as f2:
for line in f1:
title = \”id,name,age,phone,dept,enroll_date\”
dic = dict(zip(title.split(\”,\”),line.split(\”,\”))) #将文件每一行打包成字典的形式
if logic_action(dic,where_list): # 逻辑判断,调用逻辑判断函数
line = line.replace(dic[set_key],set_list[2]) #修改需要修改的那一行内容
f2.write(line) #将原文件写进新文件
print(\”\\033[1;31m修改成功 \\033[0m\”)
os.remove(\”staff_table\”)
os.rename(\”staff_table_bak\”, \”staff_table\”)

def select(sql_dict): #查询函数
title = \”id,name,age,phone,dept,enroll_date\”
f = open(\”staff_table\”, \”r\”, encoding=\”utf-8\”) # 1、找到数据库
res = []
for line in f:
dict1 = dict(zip(title.split(\”,\”), line.strip().split(\”,\”)))
where_list = sql_dict.get(\”where\”)
if len(where_list) != 0:
if logic_action(dict1, where_list): # 逻辑判断,调用逻辑判断函数
res.append(line.strip())
else:
res = f.readlines()
print(\”查询到的信息有 \\033[1;35m %s \\033[0m 条\”%len(res))
for i in res:
print(\”分别是\\033[1;35m [%s]\\033[0m \”%i)
return res

def logic_action(dict1, where_list): #逻辑判断函数,如果文件的信息符合要求,就返回True
tag = False
if where_list[1] == \”<\”:
if dict1[where_list[0]] < where_list[2]:
tag = True
elif where_list[1] == \”=\”:
if dict1[where_list[0]] == where_list[2]:
tag = True
else:pass
elif where_list[1] == \”>\”:
if dict1[where_list[0]] > where_list[2]:
tag = True
else:pass
elif where_list[1] == \”like\”:
if where_list[2] in dict1[where_list[0]]:
tag = True
return tag

while True:
try:
info_display()
except IndexError as e:
print(\”【%s】,请输入正确的格式\”%e) #如果用户输入的格式不正确,就打印提示

作者: 老毛桃

为您推荐

返回顶部