一,作者介绍
吴海东
二,程序说明
1. 查询员工信息
2. 创建新员工信息
3. 修改员工信息
4. 退出
三,程序前准备
创建一个存放员工信息的文件staff.txt
四,程序脚本
# -*- coding: UTF-8 -*
import re
import os
BASE_DIR = (os.path.dirname(os.path.abspath(__file__)))
#print("##%s"%BASE_DIR)
def staff_file(filename):
"""
读取员工信息文件
:return: 返回读取结果
"""
with open(filename, 'r', encoding="utf-8") as f:
f = list(f) # 将结果转换成列表
return f # 返回结果
def file_exist_check(file_name):
if not os.path.exists(file_name):
print("Error: file %s is not exist!!!" % file_name)
exit(2)
def server_options1():
"""
打印一个服务项
:return:返回用户输入的选项
"""
for staff_tabe in range(1):
print("1.查询员工信息\n2.增加员工信息\n3.修改员工信息\n4.退出") # 循环打印选项
serial_number = input("请选择你的服务:") # 获取用户输入的选项
if serial_number.isdigit(): # 判断是否是数字
serial_number = int(serial_number) # 转成数字类型
return serial_number # 返回选项结果
else:
print("请输入规范的服务编号")
continue
def query_function():
"""
员工模糊查询功能选项
:return: 返回最终的查询结果
"""
file_name = (BASE_DIR+"\staff.txt") # 获取员工信息文件
file_exist_check(file_name) # 检查文件是否存在
file = staff_file(file_name)
for fm in range(1):
print("1.员工年龄\n2.员工职业\n3.员工登记日期") # 循环打印选项
fm_server = input("请选择你要查询的服务:") # 获取用户输入的选项
if fm_server.isdigit(): # 判断是否是数字
fm_server = int(fm_server) # 转成数字类型
if fm_server <= 3 and fm_server >= 0: # 判断是否有不规则的选项
if fm_server == 1:
staff_age = input("请输入员工年龄:") # 获取用户输入的年龄数
# 判断员工信息表里是否有用户输入的年龄数
while True:
loginSucces = False
flag = 0 # 记录查询到的信息数
for staff_fm in file:
tmp_file = (staff_fm.strip('\n').split(','))
# 如果有这个年龄数的就打印输出列表
if staff_age in tmp_file[2]:
print(tmp_file)
flag += 1
else:
continue # 递归查询列表
loginSucces = True # 如果查询到了列表就定义为True
if loginSucces == True:print("查询到%s条您要的员工信息\n"%flag) # 打印输出查询到的信息数
if loginSucces == True:break
else: # 如果没有查询到列表就打印此输出,并退出查询
print("\033[31;1m没有此年龄段的用户!\033[0m\n")
break
elif fm_server == 2:
staff_work = input("请输入员工职业:") # 获取用户输入的职业名
# 判断员工信息表里是否有用户输入的职业名
while True:
loginSucces = False
flag = 0 # 记录查询到的信息数
for staff_fm in file:
tmp_file = (staff_fm.strip('\n').split(','))
if staff_work in tmp_file[4]: # 如果有这个职业名的就打印输出列表
print(tmp_file)
flag += 1
else:
continue # 递归查询列表
loginSucces = True # 如果查询到了列表就定义为True
if loginSucces == True:print("查询到%s条您要的员工信息\n"%flag) # 打印输出查询到的信息数
if loginSucces == True:break
else: # 如果没有查询到列表就打印此输出,并退出查询
print("\033[31;1m没有此职业的用户!\033[0m\n")
break
elif fm_server == 3:
staff_Date_Fegistration = input("请输入员工登记日:") # 获取用户输入的登记日
# 判断员工信息表里是否有用户输入的登记日
while True:
loginSucces = False
flag = 0 # 记录查询到的信息数
for staff_fm in file:
tmp_file = str(staff_fm.strip('\n').split(','))
# 如果有这个登记日,并且符合规范的就打印输出列表,例如2018-03-14
if staff_Date_Fegistration in tmp_file[5]:
filter_files = re.search(
'(.*\d+-\d+-\d+).*', tmp_file)
print(filter_files.group())
flag += 1
else:
continue # 递归查询列表
loginSucces = True # 如果查询到了列表就定义为True
if loginSucces == True:print("查询到%s条您要的员工信息\n"%flag) # 打印输出查询到的信息数
if loginSucces == True:break
else: # 如果没有查询到列表就打印此输出,并退出查询
print("\033[31;1m没有此登记日的用户!\033[0m\n")
break
def list_number(file_name):
"""
获取文件的总行数
:return: 返回一个总行数
"""
with open(file_name, 'r', encoding="utf-8") as f:
text = f.read()
length = len(text.splitlines())
return length
def add_function():
"""
创建一条新的员工数据项,把新的数据项写入原文件
:return:
"""
file_name = (BASE_DIR + "\staff.txt") # 获取员工信息文件
file_exist_check(file_name) # 检查文件是否存在
while True:
flag = list_number(file_name) # 获取员工信息列表的总行数
try:
staff_name, staff_age, staff_phone, staff_work, staff_date = input(
'请输入新员工详细信息:').strip().split() # 获取用户输入的各项新员工详细信息
except ValueError:
print('信息不符合规范!请规范填写以空格隔开,例如:姓名 年龄 电话号码 职业 入职日期')
else:
staff_phone = str(staff_phone) # 用户输入的新员工电话号要做特殊处理
if re.search('(\d{11})', staff_phone): # 判断是否是11位的电话号
file_tmp = staff_file(file_name) # 读取员工信息列表
for staff_fm in file_tmp:
staff_number = staff_fm.strip('\n').split(',')
staff_number = staff_number[3] # 截取列表每行的电话号码
if staff_phone in staff_number: # 判断用户输入的新员工电话号是否有在列表里
print('%s\n这个号码已经存在!' % staff_number)
else:
continue # 递归查询列表
else:
# 判断用户输入的除电话号意外的所有信息数据类型是否符合规范
if staff_name.isalpha() and staff_age.isdigit() and staff_work.isalpha()\
and re.search('(\d{4}-\d{2}-\d{2})', staff_date):
with open('staff.txt', 'a+', encoding='utf-8') as f_c:
flag += 1 # 行数自加
# 把规范的新员工信息写入员工信息表
f_c.write(
"\n%s,%s,%s,%s,%s,%s" %
(flag, staff_name, staff_age, staff_phone, staff_work, staff_date))
print('添加成功')
break
else: # 如果有不符合规范的数据类型就打印此输出
print('输入的信息有不规范的类型,请重新输入!')
continue #重新输入新员工信息
else: # 如果有不符合规范的电话号就打印此输出
print('请输入规范的11位数的电话号码!')
def file_tmp1(file_tmp):
"""
:param file_tmp:
:return:
"""
for line_tmp in file_tmp:
line_tmp = line_tmp.strip('\n').split(',')
print(line_tmp)
return file_tmp
def update_function():
file_name = (BASE_DIR + "\staff.txt") # 获取员工信息文件
file_exist_check(file_name) # 检查文件是否存在
while True:
flag = list_number(file_name) # 获取员工信息文件的行数
file_tmp1(staff_file(file_name)) # 循环打印出整个员工信息列表
staff_id = input('请输入要修改的员工ID号:').strip() # 获取用户输入的员工ID号
if re.match('\d', str(staff_id)): # 判断用户输入的ID号是否是数据类型
# 判断用户输入的ID号数是否等于列表的行数并且不等于0
if int(staff_id) == int(flag) and int(staff_id) > 0:
with open('staff.txt', 'r', encoding='utf-8')as f:
lines = f.readlines() # 读取整个员工信息列表
with open('staff.txt', 'w', encoding='utf-8')as f_up: # 写入员工列表
for line in lines: # 循环已逗号分割员工列表
single_list = line.strip('\n').split(',')
# 判断用户输入的ID号是否有在员工列表里,有就打印出这个列表
if str(staff_id) in single_list:
print(single_list)
# 获取用户要修改这个列表的具体数据项
staff_info = input('请输入要修改的员工信息:').strip()
# 获取用户输入的新数据项
new_staff_info = input('请输入要修改的新员工信息:').strip()
# 判断用户输入的要修改项是否在这个列表里
if staff_info in single_list:
# 如果有这个选项就把旧的数据替换成新的数据
single_list[single_list.index(staff_info)] = new_staff_info
# 把这个列表以逗号重新责成一个新列表
new_single_list = ','.join(single_list)
# 把之前匹配到的列表替换成新的列表
line = line.replace(line, new_single_list)
else:
print("没有此信息的用户")
# 如果用户输入的ID不在这个员工列表里,把这个列表直接写入文件
f_up.write("%s\n" % line.strip())
break
else:
print("没有这个员工ID号!")
else:
print("请输入规范的员工ID号")
while True:
serial_number = server_options1()
if serial_number <= 4 and serial_number >= 0:
if serial_number == 1: # 选项1进入查询员工服务
query_function()
elif serial_number == 2: # 选项2进入创建员工服务
add_function()
elif serial_number == 3: # 选项3进入修改员工服务
update_function()
elif serial_number == 4: # 退出员工管理系统
exit("谢谢使用,再见!")
else:
print("请输入规范的服务编号!\n")
continue