作业之工资管理
工资管理实现要求:
工资管理系统
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速度要快。