Python作业之工资管理
作业之工资管理
工资管理实现要求:
工资管理系统
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作业之工资管理的更多相关文章
- Python作业之用户管理
作业 流程图没有画,懒,不想画 readme没有写,懒,不想写.看注释吧233333 #! /usr/bin/env python # -*- coding: utf-8 -*- # __author ...
- Python作业-选课系统
目录 Python作业-选课系统 days6作业-选课系统: 1. 程序说明 2. 思路和程序限制 3. 选课系统程序目录结构 4. 测试帐户说明 5. 程序测试过程 title: Python作业- ...
- python作业ATM(第五周)
作业需求: 额度 15000或自定义. 实现购物商城,买东西加入 购物车,调用信用卡接口结账. 可以提现,手续费5%. 支持多账户登录. 支持账户间转账. 记录每月日常消费流水. 提供还款接口. AT ...
- Python黑帽编程1.3 Python运行时与包管理工具
Python黑帽编程1.3 Python运行时与包管理工具 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...
- 【淘淘】Quartz作业存储与管理
一.Quartz作业管理和存储方式简介: 作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数.如果你的作业是30分钟后或每30秒调用,这不是很有用.事实上,作业执行需要非常准确和即时调用在被调 ...
- python with语句上下文管理的两种实现方法
在编程中会经常碰到这种情况:有一个特殊的语句块,在执行这个语句块之前需要先执行一些准备动作:当语句块执行完成后,需要继续执行一些收尾动作.例如,文件读写后需要关闭,数据库读写完毕需要关闭连接,资源的加 ...
- supervisor python开发的进程管理工具
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...
- python操作三大主流数据库(6)python操作mysql⑥新闻管理后台功能的完善(增、ajax异步删除新闻、改、查)
python操作mysql⑥新闻管理后台功能的完善(增.删.改.查)安装表单验证D:\python\python_mysql_redis_mongodb\version02>pip instal ...
- Python作业第一课
零基础开始学习,最近周边的同学们都在学习,我也来试试,嘿嘿,都写下来,下次不记得了还能来看看~~ Python作业第一课1)登陆,三次输入锁定,下次不允许登陆2)设计一个三级菜单,菜单内容可自行定义, ...
随机推荐
- PV & PVC - 每天5分钟玩转 Docker 容器技术(150)
Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足. 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volume 来自 AWS EB ...
- Mongodb 3 查询优化(语句优化、建索引)
一.explain(),语句分析工具 MongoDB 3.0之后,explain的返回与使用方法与之前版本有了很大的变化,介于3.0之后的优秀特色和我们目前所使用给的是3.0.7版本,本文仅针对Mon ...
- WebApi一个控制器中定义多个Get方法。
问题:怎样解决一个ApiController中定义多个Get方法或者Post方法? 答:要想实现一个ApiController中定义多个Get方法或者Post方法,则需要在WebApiConfig类中 ...
- lua保存table到文件并从文件解析成table
require("json") result = { ["ip"]="192.168.0.177", ["date"]= ...
- java中final 关键字的作用
final 关键字的作用 java中的final关键字可以用来声明成员变量.本地变量.类.方法,并且经常和static一起使用声明常量. final关键字的含义: final在Java中是一个保留的关 ...
- Python内置函数(31)——object
英文文档: class objectReturn a new featureless object. object is a base for all classes. It has the meth ...
- Python 爬取淘宝商品信息和相应价格
!只用于学习用途! plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html) :获得商品价格和view_pri ...
- Linux--慕课学习
刚开始接触Linux,很有幸的在慕课网上看到了Peter老师的Linux入门课程,老师讲课真的式行云流水,深入浅出,循循善诱,层层递进. 老师分享的都是自己多年来总结的经验.看完之后也学到了很多东西. ...
- EasyUI DataGrid - 嵌套的DataGrid
实现效果: 一.在页面头部引用视图脚本JS文件 <script src="@Url.Content("~/Resources/EasyUI/plugins/datagrid- ...
- spring3——IOC之基于XML的依赖注入(DI )
我们知道spring容器的作用是负责对象的创建和对象间关系的维护,在上一篇博客中我们讲到spring容器会先调用对象的无参构造方法创建一个空值对象,那么接下来容器就会对对象的属性进行初始化,这个初始化 ...