import os
import time
def emplog(content): #记录操作的一个函数,在删除,添加,修改都会用到这一操作,
f=open("emp.log",mode="a",encoding="utf-8") #所以就提取出来
f.write(content+"\n")
f.flush()
f.close() def tianjia():
while 1:
id = input("请输入员工编号") #添加之前要判断员工编号是否已经存在
f=open("emp.db",mode="r",encoding="utf-8")
for line in f:
d=eval(line.strip())
if d["id"]==id:
print("编号已存在,请重新输入")
break # 存在就跳出循环
else:
f=open("emp.db",mode="a",encoding="utf-8") #不存在走这边
name=input("请输入员工姓名")
birthday=input("请输入员工生日")
salary=input("请输入员工薪水") #把员工信息整合成一个字典
dic={"id":id,"name":name,"birthday":birthday,"salary":salary}
f.write(str(dic)+"\n") #写入文件
f.flush()
f.close()
print("添加成功") #记录所进行的操作,必须在return之前,要不然不会记录
emplog("管理员在%s添加了一名员工,该员工信息为%s"%(time.strftime("%Y-%m-%d %H:%M:%S"),str(dic )))
return
f.close() def chakan(): #查看看功能
f=open("emp.db",mode="r",encoding="utf-8")
print("员工编号\t员工姓名\t员工生日\t员工薪水")
for line in f:
d=eval(line.strip()) #占位符的格式化输出
print("%s\t%s\t%s\t%s"%(d["id"],d["name"],d["birthday"],d["salary"]))
#print(f"{d['empno']}\t{d['name']}\t{d['salary']}\t{d['birthday']}\t")
#真正的格式化输出
f.close() def shanchu(): #删除员工信息
chakan()
id=input("请输入你要删除的员编号")
with open("emp.db",mode="r",encoding="utf-8") as f1,\
open("emp.db_副本",mode="w",encoding="utf-8") as f2:
for line in f1:
d=eval(line.strip())
if d["id"]==id: #删除要记录,也要在continue之前才会被记录到
emplog("管理员在%s删除了一名员工,该员工信息为%s" % (time.strftime("%Y-%m-%d %H:%M:%S"), str(d)))
continue
f2.write(str(d)+"\n")
os.remove("emp.db")
os.rename("emp.db_副本","emp.db") def xiugai(): #修改用工信息
id=input("请输入你要修改的员工的编号")
f=open("emp.db",mode="r",encoding="utf-8")
for line in f: #修改之前要判断员工是否存在
d = eval(line.strip())
if d["id"] == id:
break #存在就跳出循环,进行修改操作
else :
print("没有此员工")
return
f.close() salary=input("请输入员工新的薪水")
with open("emp.db",mode="r",encoding="utf-8") as f1,\
open("emp.db_副本",mode="w",encoding="utf-8") as f2:
for line in f1:
d = eval(line.strip())
if d["id"] == id:
d["salary"]=salary
emplog("管理员在%s修改了一名员工,该员工信息为%s" % (time.strftime("%Y-%m-%d %H:%M:%S"),str(d)))
f2.write(str(d)+"\n")
os.remove("emp.db")
os.rename("emp.db_副本","emp.db") while 1:
menu=("添加员工信息","查看员工信息","删除员工信息","修改员工信息","退出")
for i,j in enumerate(menu,1):
print(i,j)
option=input("请输入相应的编号进行操作")
if option=="":
tianjia()
elif option=="":
chakan()
elif option=="":
shanchu()
elif option=="":
xiugai()
elif option=="":
print("系统退出")
exit()
else:
print("没有这项操作")

函数之-------------------------HR管理操作的更多相关文章

  1. [图形学] Chp9 三维几何变换--栈处理函数与矩阵管理函数的区别

    矩阵管理函数:glLoadIdentity()是把当前活动矩阵设置为单位矩阵. 栈处理函数:glPushMatrix()是将当前活动的变换矩阵复制一份,压入栈顶:glPopMatrix()是破坏当前活 ...

  2. Go语言 函数,工程管理

    Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...

  3. 解析Linux内核的基本的模块管理与时间管理操作---超时处理【转】

    转自:http://www.jb51.net/article/79960.htm 这篇文章主要介绍了Linux内核的基本的模块管理与时间管理操作,包括模块加载卸载函数的使用和定时器的用法等知识,需要的 ...

  4. LESS是一个CSS预处理器,跨浏览器友好,提供诸如变量,函数, mixins 和操作等功能,可以构建动态CSS

    什么是LESS? LESS是一个CSS预处理器,可以为网站启用可自定义,可管理和可重用的样式表. LESS是一种动态样式表语言,扩展了CSS的功能. LESS也是跨浏览器友好. CSS预处理器是一种脚 ...

  5. C#开发微信门户及应用(6)--微信门户菜单的管理操作

    前面几篇继续了我自己对于C#开发微信门户及应用的技术探索和相关的经验总结,继续探索微信API并分享相关的技术,一方面是为了和大家对这方面进行互动沟通,另一方面也是专心做好微信应用的底层技术开发,把基础 ...

  6. Linux用户和组的管理操作

    用户和组的管理操作 命令中涉及的单词和简写: 用户:user:组:group : 增加:add :  修改:modify  mod ;  删除 : delete  del 增加用户     /etc/ ...

  7. C#-MVC开发微信应用(4)--微信门户菜单的管理操作

    最近对微信接口进行深入的研究,通过把底层接口一步步进行封装后,逐步升级到自动化配置.自动化应答,以及后台处理界面的优化和完善上,力求搭建一个较为完善.适用的微信门户应用管理系统. 在微信门户系统里面, ...

  8. Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作

    使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...

  9. (转)C#开发微信门户及应用(6)--微信门户菜单的管理操作

    http://www.cnblogs.com/wuhuacong/p/3701961.html 前面几篇继续了我自己对于C#开发微信门户及应用的技术探索和相关的经验总结,继续探索微信API并分享相关的 ...

随机推荐

  1. ORACLE体系结构一 (逻辑结构)-表空间、段、区和数据块

    一.Oracle的逻辑结构 Oracle的逻辑结构是一种层次结构.主要由:表空间.段.区和数据块等概念组成.逻辑结构是面向用户的,用户使用Oracle开发应用程序使用的就是逻辑结构.数据库存储层次结构 ...

  2. C语言基础问题总结

    Double 类型用 %f 接受会产生错误,应该用%lf C语言中SIN,COS的参数为弧度,角度应先转换为弧度才能计算,否则出错 三角形的判断条件,任意两边长度和大于第三边 闰年判断条件整百年为40 ...

  3. linux下vtune使用

    安装:http://www.cnblogs.com/jiu0821/p/5943533.html 终端输入amplxe-gui,打开vtune界面. 点击new project,进入project p ...

  4. [poj3348]Cows

    题目大意:求凸包面积. 解题关键:模板题,叉积求面积. 这里的cmp函数需要调试一下,虽然也对,与普通的思考方式不同. #include<cstdio> #include<cstri ...

  5. SQL获取时间戳流水号

    流水号生成规则: 1:流水号总长度为22位数 2:流水号总共分三部分:标头(2位)+ 时间戳(YYYYMMDDHHmmSSsss共17位)+ 随机码(3位) 举例流水号:SN2015081210240 ...

  6. 防恶意解析,禁止用IP访问网站的Apache设置 修改 httpd.conf 实现

    一般来说,网站可以用域名和IP来访问.你的网站可以通过IP直接访问,本来这没什么问题,但是会有些隐患: 由于搜索引擎也会收录你的IP地址的页面,所以同一个页面搜索引擎会重复收录,造成页面的权重不如单个 ...

  7. C++--VECTOR的简单应用

    在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结. 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<in ...

  8. KMS激活工具

    工具介绍 KMS_VL_ALL,国外MDL论坛的一款KMS激活工具,可自动识别需要激活的Windows以及Office的VL版本,无需联网即可全自动检测激活,支持创建自动续期计划,相比于国外的同类工具 ...

  9. [转]关于截取字符串substr和substring两者的区别

    subString(start,stop) substr(start,length) substr和substring两个都是截取字符串的. 两者有相同点,如果只是写一个参数,两者的作用都是一样的:就 ...

  10. Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec: 0x01030200

    Exception in thread "main" brut.androlib.err.UndefinedResObject: resource spec: 0x01030200 ...