作业之工资管理

工资管理实现要求:

工资管理系统

Alex 100000

Rain 80000

Egon 50000

Yuan 30000

-----以上是info.txt文件-----

实现效果:

从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件。

效果演示:

1. 查询员工工资

2. 修改员工工资

3. 增加新员工记录

4. 退出

>>:1

请输入要查询的员工姓名(例如:Alex):Alex

Alex的工资是:100000。

1. 查询员工工资

2. 修改员工工资

3. 增加新员工记录

4. 退出

>>:2

请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):Alex 10

修改成功!

1. 查询员工工资

2. 修改员工工资

3. 增加新员工记录

4. 退出

>>:3

请输入要增加的员工姓名和工资,共空格分割(例如:Eric 100000):Eric 100000

增加成功!

1. 查询员工工资

2. 修改员工工资

3. 增加新员工记录

4. 退出

>>:4

再见!

具体代码如下:

方法1:

import os
if not os.path.exists('d:\\users\\info.txt'):
f = open('d:\\users\\info.txt','w')
f.write('工资管理系统\nAlex 100000\nRain 80000\nEgon 50000\nYuan 30000\n')
f.close()
menu = ['查询员工工资','修改员工工资','增加新员工记录','退出']
while True:
print('欢迎来到工资管理系统!'.center(30,'*'))
for index,option in enumerate(menu,1):#枚举并遍历菜单
print(index,option)
choice = input('请选择:').strip()
if choice == str(1):
name_c = input('请输入要查询的员工姓名(例如:Alex):').strip()
f = open('d:\\users\\info.txt')
f.readline()#先读取第一行内容(标题中间无空格,因此先读取标题)
names = []#声明一个存储用户名的空列表
salary = []#声明一个存储工资的空列表
for line in f:#遍历文件内容
names.append(line.strip().split()[0])#把文件中每行内容空格前面的内容添加到列表中
salary.append(line.strip().split()[1])#把文件中每行内容空格后面的内容添加到列表中
if name_c in names:
print('%s的工资为:%s'%(name_c,salary[names.index(name_c)]))
f.close()
if choice == str(2):
name_m = input('请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):')
f = open('d:\\users\\info.txt')
f.readline()
if name_m.strip().split()[0] in [name.strip().split()[0] for name in f]:#判断输入的用户名是否存在于文件中
modify = []#声明一个列表存储文件每行内容
f.seek(0)#由于上述判断读取了文件,因此需要把指针跳指开始
for line in f:
if name_m.strip().split()[0] == line.strip().split()[0]:#判断输入的用户名是否存在该行内容中
line = name_m.strip()+'\n'
modify.append(line)
f.close()#关闭只读模式的文件
print(modify)
f = open('d:\\users\\info.txt','w')#再次打开文件,只写模式
for m_line in modify:#编历列表,把每行内容写入到文件中
f.write(m_line)
f.close()
if choice == str(3):
name_a = input('请输入要增加的员工姓名和工资,用空格分隔(例如:Mary 10):')
f = open('d:\\users\\info.txt','a')
f.write(name_a.strip()+'\n')
f.close()
print('增加成功!')
if choice == str(4):
print('再见!')
break

注:该代码在修改用户工资时只使用原文件,需要把文件内容先保存到内存中,如果文件比较大,速度会比较慢,不推荐使用!

方法2:

import os
if not os.path.exists('d:\\users\\info.txt'):
f = open('d:\\users\\info.txt','w')
f.write('工资管理系统\nAlex 100000\nRain 80000\nEgon 50000\nYuan 30000\n')
f.close()
menu = ['查询员工工资','修改员工工资','增加新员工记录','退出']
while True:
print('欢迎来到工资管理系统!'.center(30,'*'))
for index,option in enumerate(menu,1):#枚举并遍历菜单
print(index,option)
choice = input('请选择:').strip()
if choice == str(1):
name_c = input('请输入要查询的员工姓名(例如:Alex):').strip()
f = open('d:\\users\\info.txt')
f.readline()#先读取第一行内容(标题中间无空格,因此先读取标题)
names = []#声明一个存储用户名的空列表
salary = []#声明一个存储工资的空列表
for line in f:#遍历文件内容
names.append(line.strip().split()[0])#把文件中每行内容空格前面的内容添加到列表中
salary.append(line.strip().split()[1])#把文件中每行内容空格后面的内容添加到列表中
if name_c in names:
print('%s的工资为:%s'%(name_c,salary[names.index(name_c)]))
f.close()
if choice == str(2):
name_m = input('请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):')
f1 = open('d:\\users\\info.txt')
f2 = open('d:\\users\\info2.txt','w')
if name_m.strip().split()[0] in [i.strip().split()[0] for i in f1]:#判断输入的用户名是否存在于文件中
f1.seek(0)#由于上述判断读取了文件,因此需要把指针跳指开始
for line in f1:
if name_m.strip().split()[0] == line.strip().split()[0]:#判断输入的用户名是否存在该行内容中
line = name_m.strip()
f2.write(line+'\n')
print('修改成功!')
f1.close()
f2.close()
f1 = open('d:\\users\\info.txt','w')
f2 = open('d:\\users\\info2.txt')
for line in f2:#遍历文件把f2文件中的内容覆盖性地写入到f1文件中
f1.write(line)
f1.close()
f2.close()
if choice == str(3):
name_a = input('请输入要增加的员工姓名和工资,用空格分隔(例如:Mary 10):')
f = open('d:\\users\\info.txt','a')
f.write(name_a.strip()+'\n')
f.close()
print('增加成功!')
if choice == str(4):
print('再见!')
break

注:该代码在修改用户工资时使用到两个文件,然后把新创建的文件内容覆盖性写入到原文件,当文件比较大时,该方法比方法1速度要快。

Python作业之工资管理的更多相关文章

  1. Python作业之用户管理

    作业 流程图没有画,懒,不想画 readme没有写,懒,不想写.看注释吧233333 #! /usr/bin/env python # -*- coding: utf-8 -*- # __author ...

  2. Python作业-选课系统

    目录 Python作业-选课系统 days6作业-选课系统: 1. 程序说明 2. 思路和程序限制 3. 选课系统程序目录结构 4. 测试帐户说明 5. 程序测试过程 title: Python作业- ...

  3. python作业ATM(第五周)

    作业需求: 额度 15000或自定义. 实现购物商城,买东西加入 购物车,调用信用卡接口结账. 可以提现,手续费5%. 支持多账户登录. 支持账户间转账. 记录每月日常消费流水. 提供还款接口. AT ...

  4. Python黑帽编程1.3 Python运行时与包管理工具

    Python黑帽编程1.3  Python运行时与包管理工具 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...

  5. 【淘淘】Quartz作业存储与管理

    一.Quartz作业管理和存储方式简介: 作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数.如果你的作业是30分钟后或每30秒调用,这不是很有用.事实上,作业执行需要非常准确和即时调用在被调 ...

  6. python with语句上下文管理的两种实现方法

    在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后,需要继续执行一些收尾动作.例如,文件读写后需要关闭,数据库读写完毕需要关闭连接,资源的加 ...

  7. supervisor python开发的进程管理工具

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...

  8. python操作三大主流数据库(6)python操作mysql⑥新闻管理后台功能的完善(增、ajax异步删除新闻、改、查)

    python操作mysql⑥新闻管理后台功能的完善(增.删.改.查)安装表单验证D:\python\python_mysql_redis_mongodb\version02>pip instal ...

  9. Python作业第一课

    零基础开始学习,最近周边的同学们都在学习,我也来试试,嘿嘿,都写下来,下次不记得了还能来看看~~ Python作业第一课1)登陆,三次输入锁定,下次不允许登陆2)设计一个三级菜单,菜单内容可自行定义, ...

随机推荐

  1. 11-TypeScript中的名称空间

    在后端开发语言中,比如C#中,可以将不同源代码文件中的代码通过名称空间组合到一起.一般一个类定义在一个源代码文件中,在功能上属于一个上下文的源代码文件通过名称空间进行组织. 在TypeScript中, ...

  2. 根据抽象工厂实现的DBHelpers类

    public abstract class DBHelper { public static SqlConnection conn = new SqlConnection("server=l ...

  3. R语言-离职率分析

    案例:员工流失是困扰企业的关键因素之一,在这次的分析中我将分析以下内容: 对一些重要变量进行可视化及探索分析,收入,晋升,满意度,绩效,是否加班等方面进行单变量分析 分析员工流失的因素,探索各个变量的 ...

  4. 算法题丨4Sum

    描述 Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ...

  5. javascript实现浏览器窗口大小被改变时触发事件的方法

    转载 当浏览器的窗口大小被改变时触发的事件window.onresize 为事件指定代码: 复制代码代码如下: window.onresize = function(){ } 例如: 浏览器可见区域信 ...

  6. vue项目中的常见问题

    总结了几个vue项目开发过程中遇到的常见问题,希望大家注意. 注:文末有福利! 一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader -- ...

  7. Spring Security 入门(3-11)Spring Security 的使用-自定义登录验证和回调地址

    配置文件 security-ns.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...

  8. GNU/Linux需要特别注意的目录

    /bin         存放大多数系统命令,如cat.mkdir.mv.cp.tar.chmod等 /boot       存放开机所需要的文件,开机时载入开机管理程序(bootloader),并映 ...

  9. CWMP开源代码研究——cwmp移植

    原创作品,转载请注明出处,严禁非法转载.如有错误,请留言! email:40879506@qq.com 声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的. 如有任何问题,欢迎和我交流.(企鹅 ...

  10. XPath 轴

    XML 实例文档 我们将在下面的例子中使用此 XML 文档: <?xml version="1.0" encoding="ISO-8859-1"?> ...