• python实战演练(四)工资管理系统


    一 实现功能:

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

    2、能增查改员工工资

    3、增、改员工工资用空格分隔

    4、实现退出功能

    二 流程图

    三 代码

    #-*- Coding:utf-8 -*-
    # Author: kking
    '''
    实现功能
    1、从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件。
    2、能增查改员工工资
    3、增、改员工工资用空格分隔
    4、实现退出功能
    '''
    import sys,os,re
    
    operation_lists = '''1.查询工资
    2.修改工资
    3.增加新员工记录
    4.删除员工信息
    5.退出'''
    user_dict = {}                  #定义一个存储员工姓名及工资的空字典
    def user_information():
        '''定义一个员工信息函数'''
        with open('info','r') as f:
            for i in f:
                i = i.strip()           #剔除字符串中的前后空格和换行
                user_dict[i.split()[0]] = i.split()[1]  #将员工姓名及工资存储到user_dict字典中,i.split()[0]=员工姓名 作为键
                                                        #i.split()[1]=员工工资  作为值
                print('当前员工姓名:',i.split()[0])
    
    def user_operations():
        '''定义一个用户操作的函数'''
        while True:
            print(operation_lists)
            user_operation = input('请选择操作编号>>>:')
            if user_operation.isdigit():
                user_operation = int(user_operation)
                if user_operation > 5:
                    print('33[31;1m请输入有效操作编号33[0m')
                if user_operation == 1:
                    user_enquiries()
                if user_operation == 2:
                    salary_change()
                if user_operation == 3:
                    add_users()
                if user_operation == 4:
                    del_users()
                if user_operation == 5:
                    sys.exit('程序退出')
            else:
                print('33[31;1m请输入有效操作编号33[0m')
    
    def user_enquiries():
        '''定义一个用户查询的函数'''
        while True:
            user_information()
            enquirie_name = input('请输入要查询的员工姓名(例如:Alex):')
            if enquirie_name.capitalize() in user_dict:     #将输入的员工姓名首字母变大写,方便用户输入
                print('33[32;1m%s33[0m 工资为: 33[32;1m%s33[0m元'
                      %(enquirie_name.capitalize(),user_dict[enquirie_name.capitalize()]))
                break
            else:
                print('33[31;1m请输入有效用户名33[0m')
    
    def salary_change():
        '''定义一个修改工资函数'''
        while True:
            user_information()
            change_salary = input('请输入要修改的员工姓名和工资,用空格分隔(例如:Alex 10):')
            salary_lists = change_salary.split()   #将用户输入的姓名和工资以列表形式打印
            if len(salary_lists) < 2:               #判断输入内容格式是否正确 姓名 工资
                print('33[31;1m请输入正确格式内容33[0m')
            elif not salary_lists[1].isdigit():     #判断输入的工资是否是数字
                print('33[31;1m请输入有效工资金额33[0m')
            else:
                _name = salary_lists[0].capitalize()        #定义_name变量存储 用户输入的姓名
                _salary = salary_lists[1]                   #定义_salary变量存储 用户输入的工资
                if _name in user_dict:
                    with open('info','r') as f:
                        lines = f.readlines()
    
                    with open('info','w') as f_w:
                        for line in lines:
                            if _name in line:
                                line = line.replace(user_dict[_name],_salary)   #将源文件中的工资金额替换为修改后的工资金额
                            f_w.write(line)
    
                    print('已将 33[32;1m%s33[0m 的工资修改为 33[32;1m%s33[0m元'%(_name,_salary))
                    break
                else:
                    print('33[31;1m该用户不存在33[0m')
    
    def add_users():
        '''定义一个增加员工函数'''
        while True:
            user_information()
            add_user = input('请输入要增加员工姓名和工资,用空格分隔(例如:Eric 100000):')
            add_lists = add_user.split()
            if len(add_lists) < 2:               #判断输入内容格式是否正确 姓名 工资
                print('33[31;1m请输入正确格式内容33[0m')
            elif not add_lists[1].isdigit():     #判断输入的工资是否是数字
                print('33[31;1m请输入有效工资金额33[0m')
            else:
                _name = add_lists[0].capitalize()  # 定义_name变量存储 用户输入的姓名
                _salary = add_lists[1]  # 定义_salary变量存储 用户输入的工资
                if _name in user_dict:  #判断输入的姓名是否已存在
                    print('33[31;1m该用户已存在33[0m')
                elif not _name.isalpha():       #判断输入的姓名是否是纯英文
                    print('33[31;1m请输入正确姓名33[0m')
                else:
                    with open('info','a') as f:
                        f.write(_name+' ')
                        f.write(_salary+'
    ')
                    print('已将 33[32;1m%s33[0m 的信息添加成功' % _name)
                    break
    
    def del_users():
        '''定义一个删除员工函数'''
        while True:
            user_information()
            del_user = input('请输入要删除的员工姓名(例如:Alex):')
            del_name = del_user.capitalize()
            if del_name in user_dict:     #将输入的员工姓名首字母变大写,方便用户输入
                confirm_del = input('是否确认删除33[32;1m%s33[0m员工信息>>>任意键确认删除、按N不删除:'
                                    %del_user.capitalize())
                if confirm_del.capitalize() != 'N':         #判断用户选择确认删除
                    list = []                               #定义一个空列表存储不需要删除员工信息
                    with open('info','r') as f:
                        lines = f.readlines()
                        for line in lines:
                            if not re.search(del_name,line):   #判断哪些员工不需要删除   del_name为确认删除的员工
                                list.append(line)
    
                    with open('info','w') as f:
                        f.writelines(list)                      #将不需要删除员工的信息列表重新写入 info文本中
                    print('33[32;1m%s33[0m的员工信息已删除'%del_user.capitalize())
                    break
                else:
                    print('33[31;1m已取消删除33[0m')
            else:
                print('33[31;1m该用户不存在33[0m')
    
    
    user_operations()
  • 相关阅读:
    JavaSE-28 hashCode()方法、equals()方法和==相关概念
    设计模式:命令模式(Command Pattern)
    Spring-02 Java配置实现IOC
    Spring-01 注解实现IOC
    [功能帮助类] 最新的Functions 类 (转载)
    C# DbHelperSQL,操作不同的数据库帮助类 (转载)
    C# DbHelperSQLP,操作不同的数据库帮助类 (转载)
    C# DbHelperSQLite,SQLite数据库帮助类 (转载)
    C#DbHelperOra,Oracle数据库帮助类 (转载)
    C#DbHelperOleDb,Access数据库帮助类 (转载)
  • 原文地址:https://www.cnblogs.com/kking-lh/p/10018861.html
Copyright © 2020-2023  润新知