python实现简易工资管理系统(Salary Manage)源码

一、需求:

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

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

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

4.实现退出功能

二、思路

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

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

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

三、实现(源码)

 

 
  1 #!/user/bin/env python
  2 #-*-coding:utf-8 -*-
  3 #Author: qinjiaxi
  4 import sys,os,re
  5 operation_list = """
  6 1.增加新员工薪资信息
  7 2.删除已有员工薪资信息
  8 3.修改已有员工薪资信息
  9 4.查询已有员工薪资信息
 10 5.退出操作
 11 """
 12 user_dict = {}#空字典用来存储员工薪资信息
 13 def user_info():
 14     '''定义员工薪资信息函数'''
 15     with open('info.txt','r') as f:
 16         for i in f:
 17             i = i.strip()#去掉每行字符串前后空格和换行以及缩进
 18             user_dict[i.split()[0]] = i.split()[1]#将员工信息以键值对key(员工姓名)--->value(员工薪资)的方式存储在字典中
 19             print('当前员工的姓名:', i.split()[0])
 20 
 21 def user_choice():
 22     '''用户输入选择'''
 23     while True:
 24         print(operation_list)
 25         user_choice = input('请选择操作编号:')
 26         if user_choice.isdigit():
 27             user_choice = int(user_choice)
 28             if user_choice > 5:
 29                 print('\033[31;1m请输入正确的操作编号\033[0m')
 30             if user_choice == 1:
 31                 user_info_add()
 32             if user_choice == 2:
 33                 user_info_del()
 34             if user_choice == 3:
 35                 user_info_modify()
 36             if user_choice == 4:
 37                 user_info_search()
 38             if user_choice == 5:
 39                 sys.exit('退出程序')
 40         else:
 41             print('\033[31;1m请输入正确的操作编号\033[0m')
 42 
 43 def user_info_add():
 44     '''定义增加新员工薪资信息函数'''
 45     while True:
 46         user_info()
 47         add_user = input('请输入要增加员工的姓名和薪资,并以空格隔开(例如: Qinjiaxi 10000)')
 48         add_user_info = add_user.strip().split()#去掉用户输入前后的空格换行以及缩进,并将姓名和工资以列表形式打印
 49         if len(add_user_info) < 2:
 50             print('\033[31;1m请输入正确的格式\033[0m')
 51         elif not add_user_info[1].isdigit():
 52             print('\033[31;1m请输入正确的数字\033[0m')
 53         else:
 54             name = add_user_info[0].capitalize()#把用户名的第一个字母变成大写
 55             salary = add_user_info[1]
 56             if name in user_dict:#判断姓名是否在字典中
 57                 print("\033[31;1m您输入的名字已存在\033[0m")
 58             elif not name.isalpha():#判断姓名是否是全英文
 59                 print('\033[31;1m请输入正确的姓名')
 60             else:
 61                 with open('info.txt','a') as f:
 62                     f.write(name + ' ')
 63                     f.write(salary + '\n')
 64                 print('已将\033[31;1m%s\033[0m用户信息添加成功' % name)
 65                 break
 66 
 67 def user_info_del():
 68     '''定义删除员工薪资信息函数'''
 69     while True:
 70         user_info()
 71         del_user = input('请输入要删除员工的姓名,例如(Qinjiaxi)')
 72         del_user_info = del_user.capitalize()#把首个字母改成大写,方便用户输入
 73         if del_user_info in user_dict:
 74             confirm = input('请确认是否删除\033[32;1m %s\033[0m用户信息--->按\033[32;1mN\033[0m退出,按任意键确认'% del_user_info)
 75             if confirm.capitalize() != 'N':
 76                 list = []#定义一个空列表用于存储不需要删除的员工信息
 77                 with open('info.txt', 'r') as f:
 78                     lines = f.readlines()
 79                     for line in lines:
 80                         if not re.search(del_user_info, line):#判断哪些员工不需要删除
 81                             list.append(line)
 82                 with open('info.txt', 'w') as f:
 83                     f.writelines(list)
 84                 print('\033[32;1m%s\033[0m已经删除' % del_user_info)
 85                 break
 86             else:
 87                 print('\033[32;1m%已取消删除\033[0m')
 88         else:
 89             print('\033[32;1m该用户不存在\033[0m')
 90 
 91 def user_info_modify():
 92     '''定义修改员工薪资信息函数'''
 93     while True:
 94         user_info()
 95         modify_user = input('请输入要修改员工的姓名和薪资,并以空格隔开(例如:Qinjiaxi 10000)')
 96         modify_user_info = modify_user.strip().split()
 97         if len(modify_user_info) < 2:
 98             print('\033[32;1m请输入正确的格式\033[0m')
 99         elif not modify_user_info[1].isdigit():
100             print('\033[32;1m请输入正确的数字\033[0m')
101         else:
102             name = modify_user_info[0].capitalize()#姓名
103             salary = modify_user_info[1]#薪资
104             if name in user_dict:
105                 with open('info.txt', 'r') as f:
106                     lines = f.readlines()
107                 with open('info.txt', 'w') as f_w:
108                     for line in lines:
109                         if name in line:
110                             line = line.replace(user_dict[name], salary)#替换薪资
111                         f_w.write(line)
112                 print('已将\033[32;1m%s\033[0m的工资修改为\033[32;1m%s\033[0m元'%(name, salary))
113                 break
114             else:
115                 print('\033[32m;1m您输入的用户不存在\033[0m')
116 
117 def user_info_search():
118     '''定义查询员工薪资信息函数'''
119     while True:
120         user_info()
121         search_user = input('请输入要查询的员工姓名(例如:Qinjiaxi)')
122         search_user_info = search_user.capitalize()
123         if search_user_info in user_dict:
124             print('\033[32;1m%s\033[0m工资为\033[32;1m%s\033[0m元' % (search_user_info, user_dict[search_user_info]))
125             break
126         else:
127             print('\033[32;1m您输入的用户不存在\033[0m')
128 
129 user_choice()
 

 

 

转载于:https://www.cnblogs.com/qinlangsky/p/9487406.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 的作用

print正常是要输出到屏幕上&#xff0c;如果你希望输出到其他地方比如文件&#xff0c;就需要使用>>来把输出导向到文件。空格的目的是要区分关键词&#xff0c;如果你输入的是print>>&#xff0c;电脑会把它当成一个单词&#xff0c;而无法知道是print函数。

操作系统内存管理

参考文献&#xff1a; 20 张图揭开内存管理的迷雾 感谢三太子敖丙分享&#xff01;

hexo github搭建博客常用的命令

这些命令你都用过吗&#xff1f; npm install hexo -g #安装 npm update hexo -g #升级 hexo init #初始化 hexo new "postName" #新建文章 hexo new page "pageName" #新建页面 hexo generate #生成静态页面至public目录 hexo server #开启预览访问端口&a…

写博客的好处,专家告诉你

把自己平时在做项目时和自己学习时的一些经验和心得记录下来。那样&#xff0c;首先可以增强自己对知识点的理解&#xff1b;其次&#xff0c;以后再用到的话&#xff0c;可以很方便的查询&#xff1b;最后&#xff0c;才是分享给大家&#xff0c;可以在用到这方面的知识的时候…

解决报错:java.util.UnknownFormatConversionException: Conversion = ‘p‘

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. ssm框架下 报错如题 2. 错误原因&#xff1a;我的情况是&#xff0c;代码中实体属性映射书写和数据库字段名字不一致。 选中位置数据…

JVM和JMM的区别

参考文献&#xff1a; java中JVM和JMM之间的区别 感谢作者分享&#xff01;

[Java][网络编程]服务端向客户端发送信息

/*前置知识&#xff08;服务端&#xff09;1.首先要常见一个ServerSocket对象 服务端套接字&#xff0c;并且在服务端套接字里面确定需要使用的端口2.然后要创建一个Socket对象来接收ServerSocket的返回值。通常一个Socket对象对应一个客户端/涉及到多个客户端需要通过线程来解…

【Python】如何判断一个字符串为空

#方法一 if oneString: print "not empty" else: print "empty" #方法二 if oneString "": print "empty" else: print "not empty"

LRU 实现缓存

LRU:Least Recently used 最近最少使用 1.使用LinkedHashMap实现 inheritance实现方式 继承map类 可以使用Collections.synchronizedMap方式实现线程安全的操作 public class LruCache<K,V> extends LinkedHashMap<K,V> {private final int MAX_CACHE_SIZE;public …

使用vsftp作为集群的yum仓库

地址规划&#xff1a;vsftp服务器的地址为172.16.1.61使用的环境&#xff1a;[rootnfs01 scripts]# uname -a Linux nfs01 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux首先在yum服务器上挂载本地光盘mkdir /media/cdrom ;mount…

纯做技术是自娱自乐 抛开技术做技术才是出路

短短一生不过数十载&#xff0c;对于很多人而言&#xff0c;作IT、作技术只是生命中的某一段&#xff0c;并非所有。而无论是换工作还是换行业&#xff0c;只是一种形式而已&#xff0c;最终我们追求的是成功、是荣誉、是收获。于是在年轻的这几年里&#xff0c;作为技术人员理…

TOAD连接Oracle数据库失败:OCI_INVALID_HANDLE解决

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. toad 连接Oracle数据库连接失败如图&#xff1a; 2. 导致这个情况的前因&#xff1a;toad运行情况下&#xff0c;突然断电。 3. 解决…

多线程三大特性:原子性、有序性、可见性

参考文献&#xff1a;三大性质总结&#xff1a;原子性&#xff0c;有序性&#xff0c;可见性 感谢作者分享&#xff01;

git checkout 和 git reset

git checkout 主要有三个作用&#xff1a; 第一个就是切换分支。例如你从远程仓库clone下来所有的源代码&#xff0c;你git branch一下会看到你通常是在master&#xff0c;如果你想切换到某一个分支上呢&#xff1f;git checkout <branchname>第二个就是放弃对某个文件的…

python-访问者模式

源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明&#xff1a; 访问者模式的基本想法是&#xff0c;软件系统中拥有一个由许多对象构成的、比较稳定的对象结构&#xff0c;这些对象的类都拥有一个 accept 方法用来接受访问者对象的访问。访问者是一个接口&am…

面试题:Fibonacci数列

题目描述&#xff1a;大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&#xff0c;请你输出斐波那契数列的第n项&#xff08;从0开始&#xff0c;第0项为0&#xff09;。 方法1&#xff1a;递归 public class Solution {public int Fibonacci(int n) {if (n 0){retu…

“行到水穷处,坐看云起时.“

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 自由自在&#xff0c;随意而行&#xff0c; 只沿着流水向上&#xff0c;不知不觉的就走到了泉眼尽头&#xff0c; 无路可走的时候 &…

git commit -m和git commit -am

字面解释的话&#xff0c;git commit -m用于提交暂存区的文件&#xff1b;git commit -am用于提交跟踪过的文件 要理解它们的区别&#xff0c;首先要明白git的文件状态变化周期&#xff0c;如下图所示 工作目录下面的所有文件都不外乎这两种状态&#xff1a;已跟踪或未跟踪。已…

磁盘结构简介

这里讲的主要是网上所谓的老式磁盘&#xff0c;它是由一个个盘片组成的&#xff0c;我们先从个盘片结构讲起。如图1所示&#xff0c;图中的一圈圈灰色同心圆为一条条磁道&#xff0c;从圆心向外画直线&#xff0c;可以将磁道划分为若干个弧段&#xff0c;每个磁道上一个弧段被称…

java中的对象监视器

参考文章&#xff1a;监视器–JAVA同步基本概念 感谢作者分享&#xff01;