一、需求:

1.导入文件读取员工的信息和工资信息,最后将增加、删除或修改的员工工资信息写入原来的文件中

2.能够实现员工工资信息的增删改查

3.当增加和修改员工信息时用户用空格分隔员工姓名和薪资

4.实现退出功能

二、思路

1.首先需要将包含有员工薪资信息的文件读出来存储到一个容器里,因为员工姓名和薪资一一对应,因此想到字典的key--->value机制,将员工薪资信息存储到字典中。

2.写一个函数让用户选择该如何操作----->add、delete、modify、search(增删改查)以及退出操作

3.定义四个函数----- >user_add()、user_delete()、user_modify()、user_seach()

三、实现(源码)


 #!/user/bin/env python
#-*-coding:utf-8 -*-
#Author: qinjiaxi
import sys,os,re
operation_list = """
1.增加新员工薪资信息
2.删除已有员工薪资信息
3.修改已有员工薪资信息
4.查询已有员工薪资信息
5.退出操作
"""
user_dict = {}#空字典用来存储员工薪资信息
def user_info():
'''定义员工薪资信息函数'''
with open('info.txt','r') as f:
for i in f:
i = i.strip()#去掉每行字符串前后空格和换行以及缩进
user_dict[i.split()[0]] = i.split()[1]#将员工信息以键值对key(员工姓名)--->value(员工薪资)的方式存储在字典中
print('当前员工的姓名:', i.split()[0]) def user_choice():
'''用户输入选择'''
while True:
print(operation_list)
user_choice = input('请选择操作编号:')
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice > 5:
print('\033[31;1m请输入正确的操作编号\033[0m')
if user_choice == 1:
user_info_add()
if user_choice == 2:
user_info_del()
if user_choice == 3:
user_info_modify()
if user_choice == 4:
user_info_search()
if user_choice == 5:
sys.exit('退出程序')
else:
print('\033[31;1m请输入正确的操作编号\033[0m') def user_info_add():
'''定义增加新员工薪资信息函数'''
while True:
user_info()
add_user = input('请输入要增加员工的姓名和薪资,并以空格隔开(例如: Qinjiaxi 10000)')
add_user_info = add_user.strip().split()#去掉用户输入前后的空格换行以及缩进,并将姓名和工资以列表形式打印
if len(add_user_info) < 2:
print('\033[31;1m请输入正确的格式\033[0m')
elif not add_user_info[1].isdigit():
print('\033[31;1m请输入正确的数字\033[0m')
else:
name = add_user_info[0].capitalize()#把用户名的第一个字母变成大写
salary = add_user_info[1]
if name in user_dict:#判断姓名是否在字典中
print("\033[31;1m您输入的名字已存在\033[0m")
elif not name.isalpha():#判断姓名是否是全英文
print('\033[31;1m请输入正确的姓名')
else:
with open('info.txt','a') as f:
f.write(name + ' ')
f.write(salary + '\n')
print('已将\033[31;1m%s\033[0m用户信息添加成功' % name)
break def user_info_del():
'''定义删除员工薪资信息函数'''
while True:
user_info()
del_user = input('请输入要删除员工的姓名,例如(Qinjiaxi)')
del_user_info = del_user.capitalize()#把首个字母改成大写,方便用户输入
if del_user_info in user_dict:
confirm = input('请确认是否删除\033[32;1m %s\033[0m用户信息--->按\033[32;1mN\033[0m退出,按任意键确认'% del_user_info)
if confirm.capitalize() != 'N':
list = []#定义一个空列表用于存储不需要删除的员工信息
with open('info.txt', 'r') as f:
lines = f.readlines()
for line in lines:
if not re.search(del_user_info, line):#判断哪些员工不需要删除
list.append(line)
with open('info.txt', 'w') as f:
f.writelines(list)
print('\033[32;1m%s\033[0m已经删除' % del_user_info)
break
else:
print('\033[32;1m%已取消删除\033[0m')
else:
print('\033[32;1m该用户不存在\033[0m') def user_info_modify():
'''定义修改员工薪资信息函数'''
while True:
user_info()
modify_user = input('请输入要修改员工的姓名和薪资,并以空格隔开(例如:Qinjiaxi 10000)')
modify_user_info = modify_user.strip().split()
if len(modify_user_info) < 2:
print('\033[32;1m请输入正确的格式\033[0m')
elif not modify_user_info[1].isdigit():
print('\033[32;1m请输入正确的数字\033[0m')
else:
name = modify_user_info[0].capitalize()#姓名
salary = modify_user_info[1]#薪资
if name in user_dict:
with open('info.txt', 'r') as f:
lines = f.readlines()
with open('info.txt', 'w') as f_w:
for line in lines:
if name in line:
line = line.replace(user_dict[name], salary)#替换薪资
f_w.write(line)
print('已将\033[32;1m%s\033[0m的工资修改为\033[32;1m%s\033[0m元'%(name, salary))
break
else:
print('\033[32m;1m您输入的用户不存在\033[0m') def user_info_search():
'''定义查询员工薪资信息函数'''
while True:
user_info()
search_user = input('请输入要查询的员工姓名(例如:Qinjiaxi)')
search_user_info = search_user.capitalize()
if search_user_info in user_dict:
print('\033[32;1m%s\033[0m工资为\033[32;1m%s\033[0m元' % (search_user_info, user_dict[search_user_info]))
break
else:
print('\033[32;1m您输入的用户不存在\033[0m') user_choice()


python实现简易工资管理系统(Salary Manage)源码的更多相关文章

  1. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  2. python附录-builtins.py模块str类源码(含str官方文档链接)

    python附录-builtins.py模块str类源码 str官方文档链接:https://docs.python.org/3/library/stdtypes.html#text-sequence ...

  3. Python机器学习经典实例电子版和附带源码

    Python机器学习经典实例电子版和附带源码 下载:https://pan.baidu.com/s/1m6ODNJk--PWHW8Vdsdjs-g 提取码:nyc0 分享更多python数据分析相关电 ...

  4. ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍

    一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...

  5. Python框架之Tornado(四)源码之褪去模板外衣

    上一篇介绍了客户端请求在tornado框架中的生命周期,其本质就是利用epoll和socket来获取并处理请求.在上一篇的内容中,我们只是给客户端返回了简单的字符串,如:“Hello World”,而 ...

  6. 学生信息管理系统应用ios源码iPad版

    学生信息管理系统应用iPad版,该应用源码比较完整的,而且也很详细,这也是一款学校用的学生和老师管理系统,里面涉及到了很多ipad常用的控件,操作和数据存储. <ignore_js_op> ...

  7. Python开发技术详解(视频+源码+文档)

    Python, 是一种面向对象.直译式计算机程序设计语言.Python语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结 ...

  8. 简易富文本编辑器bootstrap-wysiwyg源码注释

    好久没写随笔了,因为最近比较忙,小公司基本都是一个前端干所有属于和部分不属于前端的事情,所以就没空弄了,即使想分享,也因为没有时间和精力就搁置了. 这周周六日休息,正好时间比较充裕(ps:目前处在单休 ...

  9. Python:游戏:扫雷(附源码)

    这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...

随机推荐

  1. pytorch seq2seq闲聊机器人加入attention机制

    attention.py """ 实现attention """ import torch import torch.nn as nn im ...

  2. MySQL之唯一索引、外键的变种、SQL语句数据行操作补充

    0.唯一索引 unique对num进行唯一限制,表示num是独一无二的,uql是唯一索引名称 上面为联合索引:num和xx不能完全一样  1.外键的变种 a. 用户表和部门表 用户: 1 alex 1 ...

  3. Apache漏洞利用与安全加固实例分析

    Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以,研究Apache的漏洞与安全性非常有意义.本文将结合实例来谈谈针对Apache的漏洞利用和安 ...

  4. zookeeper笔记(二)

    title: zookeeper笔记(二) zookeeper ALC权限控制 getAcl path 可以查看某个node的权限 设置权限: 2. world方式 setAcl <path&g ...

  5. Scala教程之:可变和不变集合

    文章目录 mutable HashMap immutable HashMap 集合在程序中是非常有用的,只有用好集合才能真正感受到该语言的魅力.在scala中集合主要在三个包里面:scala.coll ...

  6. linux系统的简单配置

    配置网卡:vim /etc/sysconfig/network-scripts/网卡名称 ifcfg-xxxx  ##文件名称 DEVICE=xxx  ##设备名称 BOOTPROTO=dhcp|st ...

  7. 【小技巧】【App store切换为中文】

    为什么80%的码农都做不了架构师?>>>   贡献作者 -[XJDomain]博客XJ:  https://my.oschina.net/shengbingli/blogGitHub ...

  8. 如何将Superset嵌入后台系统之实践

    1. 前言 此次实践过程全属个人学习,我选择了在window下安装Superset,并进行嵌入后台系统实践.对此进行实践过程总结,实践成果分享给大家,供大家参考,如果你有更好的想法,欢迎留言交流. 2 ...

  9. ZLEXCOUNT key min max

    1 简介 ZLEXCOUNT 命令用于计算有序集合中指定成员之间的成员数量. 2 语法 2.1 完整示例 zlexcount zset [member1 [member5 2.2 说明 指令 是否必须 ...

  10. 顺序表的C语言实现

    在现实应用中,有两种实现线性表数据元素存储功能的方法,分别是顺序存储结构和链式存储结构.顺序表操作是最简单的操作线性表的方法.下面的代码实现了顺序表的几种简单的操作.代码如下 //start from ...