zoukankan      html  css  js  c++  java
  • 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('工资管理系统
    Alex 100000
    Rain 80000
    Egon 50000
    Yuan 30000
    ')
        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()+'
    '
                    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()+'
    ')
            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('工资管理系统
    Alex 100000
    Rain 80000
    Egon 50000
    Yuan 30000
    ')
        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+'
    ')
                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()+'
    ')
            f.close()
            print('增加成功!')
        if choice == str(4):
            print('再见!')
            break
    

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

  • 相关阅读:
    MySQL-sql语句
    常见IP端口
    Java开发异常
    微信开发-charles抓包
    6、分组查询
    5、关联查询
    4、查询
    3、表的管理
    2、用户管理
    1、oracle基本使用
  • 原文地址:https://www.cnblogs.com/single-boy/p/7536482.html
Copyright © 2011-2022 走看看