python人员管理系统_python实例_员工管理系统

#-*- coding: UTF-8 -*

importreimportos

BASE_DIR= (os.path.dirname(os.path.abspath(__file__)))#print("##%s"%BASE_DIR)

defstaff_file(filename):"""读取员工信息文件

:return: 返回读取结果"""with open(filename,'r', encoding="utf-8") as f:

f= list(f) #将结果转换成列表

return f #返回结果

deffile_exist_check(file_name):if notos.path.exists(file_name):print("Error: file %s is not exist!!!" %file_name)

exit(2)defserver_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

defquery_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("请输入员工年龄:") #获取用户输入的年龄数

#判断员工信息表里是否有用户输入的年龄数

whileTrue:

loginSucces=False

flag= 0 #记录查询到的信息数

for staff_fm infile:

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("请输入员工职业:") #获取用户输入的职业名

#判断员工信息表里是否有用户输入的职业名

whileTrue:

loginSucces=False

flag= 0 #记录查询到的信息数

for staff_fm infile:

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("请输入员工登记日:") #获取用户输入的登记日

#判断员工信息表里是否有用户输入的登记日

whileTrue:

loginSucces=False

flag= 0 #记录查询到的信息数

for staff_fm infile:

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

deflist_number(file_name):"""获取文件的总行数

:return: 返回一个总行数"""with open(file_name,'r', encoding="utf-8") as f:

text=f.read()

length=len(text.splitlines())returnlengthdefadd_function():"""创建一条新的员工数据项,把新的数据项写入原文件

:return:"""file_name= (BASE_DIR + "\staff.txt") #获取员工信息文件

file_exist_check(file_name) #检查文件是否存在

whileTrue:

flag= list_number(file_name) #获取员工信息列表的总行数

try:

staff_name, staff_age, staff_phone, staff_work, staff_date=input('请输入新员工详细信息:').strip().split() #获取用户输入的各项新员工详细信息

exceptValueError:print('信息不符合规范!请规范填写以空格隔开,例如:姓名 年龄 电话号码 职业 入职日期')else:

staff_phone= str(staff_phone) #用户输入的新员工电话号要做特殊处理

if re.search('(\d{11})', staff_phone): #判断是否是11位的电话号

file_tmp = staff_file(file_name) #读取员工信息列表

for staff_fm infile_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() andstaff_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位数的电话号码!')deffile_tmp1(file_tmp):""":param file_tmp:

:return:"""

for line_tmp infile_tmp:

line_tmp= line_tmp.strip('\n').split(',')print(line_tmp)returnfile_tmpdefupdate_function():

file_name= (BASE_DIR + "\staff.txt") #获取员工信息文件

file_exist_check(file_name) #检查文件是否存在

whileTrue:

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) insingle_list:print(single_list)#获取用户要修改这个列表的具体数据项

staff_info = input('请输入要修改的员工信息:').strip()#获取用户输入的新数据项

new_staff_info = input('请输入要修改的新员工信息:').strip()#判断用户输入的要修改项是否在这个列表里

if staff_info insingle_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号")whileTrue:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值