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)设计一个三级菜单,菜单内容可自行定义, ...
随机推荐
- 【ASP.NET Core】依赖注入高级玩法——如何注入多个服务实现类
依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来.服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了依 ...
- Win7下安装composer, 并使用其安装smarty
安装composer需要开启PHP openssl扩展. 1) 先查看PHP是否开启了openssl扩展 键盘win+r 输出cmd, 可以看到Dos窗口, 然后执行php -m (需要添加PHP环境 ...
- 启动eclipse时出现“Failed to load the JNI shared library jvm.dll”错误及解决
昨晚安装另一个版本的eclipse,启动时出现了"Failed to load the JNI shared library jvm.dll"错误: 1.刚开始以为是因为当时没有将 ...
- NATAPP 内网映射,Visual Studio ,C# 实现本地开发微信公众号,本地调试无需服务器
点击软件安装教程,根据安装教程,注册帐号,下载软件,配置软件.配置完后如下图,途中红色位置免费版本是随机的. 红色位置是自己的映射域名. 打开VS,并且打开项目,右键项目,在web 选项中修改项目UR ...
- ORA-12514:TNS:lisntener does not currently know of service requested in connect descriptor
在使用工具连接oracle库的时候出现了异常 根据理解初步估计是服务或者监听器没有启动 于是链接到数据库服务器进行查看 服务都已经开启,重启后链接依旧出现上述问题 使用lsnrctl status ...
- Java 10 的 10 个新特性,将彻底改变你写代码的方式!
Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...
- RxJava系列5(组合操作符)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- ShellCode瘦身的艺术0_HASH
写在前面的话: 前面几篇文章,我们介绍了如何获取kernerl32.dll导出函数地址的方法: 并在此基础上,编写了ShellCode,实现了动态加载DLL以及解析API地址: 但是,似乎还称不上Pe ...
- 初学Java Web(4)——Servlet学习总结
经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...
- SpringMVC(九):SpringMVC 处理输出模型数据之ModelAndView
Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...