Загрузка данных


# ============================================================================
# ОСНОВНАЯ ПРОГРАММА
# ПРОГРАММА РАСЧЁТА ЗАРАБОТНОЙ ПЛАТЫ
# ============================================================================

import random
import salary_calculator as sal

# ============================================================================
# ГЕНЕРАЦИЯ ИСХОДНЫХ ДАННЫХ (из файла 6.txt)
# ============================================================================

# Списки фамилий и имен (как в 6.txt)
first_names = ["Александр", "Серегов", "Сидоров", "Смирнов", "Кузнецов",
               "Попов", "Осов", "Зайцев", "Пышкин", "Михалыч",
               "Федоров", "Морозов", "Волков", "Алексеев", "Лебедев"]
last_names = ["Жека", "Виктор", "Алексей", "Пломб", "Данил",
              "Мыч", "Катар", "Мирный", "Владислейв", "Павел",
              "Виктор", "Жора", "Серёга", "Владимир", "Антон"]

# Формируем полные ФИО
surnames = []
for i in range(15):
    surname = f"{first_names[i]} {last_names[i][0]}."
    surnames.append(surname)

# Генерируем зарплаты (от 20000 до 40000)
salaries = []
for _ in range(15):
    salary = round(random.uniform(20000, 40000), 2)
    salaries.append(salary)

# Разбиваем на бригады (как в 6.txt)
brigade1_surnames = surnames[0:5]      # индексы 0-4 (рабочие 1-5)
brigade2_surnames = surnames[5:10]     # индексы 5-9 (рабочие 6-10)
brigade3_surnames = surnames[10:15]    # индексы 10-14 (рабочие 11-15)

brigade1_salaries = salaries[0:5]
brigade2_salaries = salaries[5:10]
brigade3_salaries = salaries[10:15]

# ============================================================================
# ФУНКЦИЯ ДЛЯ ТАБЛИЦЫ 1 (Исходные данные - все сотрудники)
# ============================================================================

def show_table1():
    """Таблица 1: Все сотрудники цеха"""
    print("\n" + "=" * 61)
    print("ТАБЛИЦА 1 - ИСХОДНЫЕ ДАННЫЕ ПО ЦЕХУ")
    print("=" * 61)
    print(f"| {'№':3} | {'ФИО':30} | {'Заработная плата, руб':18} |")
    print("=" * 61)
    for i in range(15):
        print(f"| {i+1:3d} | {surnames[i]:30} | {salaries[i]:18.2f} |")
        if i < 14:
            print("|" + "-" * 59 + "|")
    print("=" * 61)

# ============================================================================
# ФУНКЦИИ ДЛЯ ТАБЛИЦЫ 2 (Первая бригада - с подменю)
# ============================================================================

def show_brigade1():
    """Вывод бригады №1"""
    print("\n" + "=" * 50)
    print("БРИГАДА №1 (рабочие 1-5)")
    print("=" * 50)
    print(f"{'№':<4} {'ФИО':<25} {'Зарплата, руб':<15}")
    print("-" * 50)
    for i in range(5):
        print(f"{i+1:<4} {brigade1_surnames[i]:<25} {brigade1_salaries[i]:<15.2f}")
    print("=" * 50)

def show_brigade2():
    """Вывод бригады №2"""
    print("\n" + "=" * 50)
    print("БРИГАДА №2 (рабочие 6-10)")
    print("=" * 50)
    print(f"{'№':<4} {'ФИО':<25} {'Зарплата, руб':<15}")
    print("-" * 50)
    for i in range(5):
        print(f"{i+6:<4} {brigade2_surnames[i]:<25} {brigade2_salaries[i]:<15.2f}")
    print("=" * 50)

def show_brigade3():
    """Вывод бригады №3"""
    print("\n" + "=" * 50)
    print("БРИГАДА №3 (рабочие 11-15)")
    print("=" * 50)
    print(f"{'№':<4} {'ФИО':<25} {'Зарплата, руб':<15}")
    print("-" * 50)
    for i in range(5):
        print(f"{i+11:<4} {brigade3_surnames[i]:<25} {brigade3_salaries[i]:<15.2f}")
    print("=" * 50)

def show_brigade3_without_coefficient():
    """Вывод бригады №3 с зарплатой без коэффициента 5%"""
    print("\n" + "=" * 70)
    print("БРИГАДА №3 - ЗАРПЛАТА БЕЗ КОЭФФИЦИЕНТА ТРУДОВОГО УЧАСТИЯ (5%)")
    print("=" * 70)
    print(f"{'№':<4} {'ФИО':<25} {'Исходная зарплата':<18} {'Зарплата без коэф.':<18}")
    print("-" * 70)
    for i in range(5):
        salary_without_koef = brigade3_salaries[i] * 0.95
        print(f"{i+11:<4} {brigade3_surnames[i]:<25} {brigade3_salaries[i]:<18.2f} {salary_without_koef:<18.2f}")
    print("-" * 70)
    print("\nПримечание: Коэффициенттрудового участия составляет 5%")
    print("Зарплата без коэффициента = исходная зарплата × 0,95")
    print("=" * 70)

def menu_brigade1():
    """Подменю для первой бригады (Таблица 2)"""
    while True:
        print("\n" + "=" * 50)
        print("ВЫБОР БРИГАД И ИХ ВЫВОД")
        print("=" * 50)
        print("1 - Показать бригаду №1")
        print("2 - Показать бригаду №2")
        print("3 - Показать бригаду №3")
        print("4 - Показать бригаду №3 (без коэффициента 5%)")
        print("0 - Вернуться в главное меню")
        print("=" * 50)

        choice = input("\nВыберите пункт: ")

        if choice == '1':
            show_brigade1()
        elif choice == '2':
            show_brigade2()
        elif choice == '3':
            show_brigade3()
        elif choice == '4':
            show_brigade3_without_coefficient()
        elif choice == '0':
            break
        else:
            print("\nОшибка! Выберите пункт от 0 до 4.")

        input("\nНажмите Enter, чтобы продолжить...")

# ============================================================================
# ФУНКЦИИ ДЛЯ ТАБЛИЦЫ 3 (Весь цех - статистика)
# ============================================================================

def show_whole_shop():
    """Таблица 3: Весь цех (статистика)"""
    print("\n" + "=" * 50)
    print("ТАБЛИЦА 3 - СТАТИСТИКА ПО ЦЕХУ")
    print("=" * 50)

    # Средняя зарплата по цеху
    avg_salary = sum(salaries) / len(salaries)
    print(f"Средняя зарплата по цеху: {avg_salary:.2f} руб.")

    # Максимальная и минимальная зарплата
    max_salary = max(salaries)
    max_index = salaries.index(max_salary)
    min_salary = min(salaries)
    min_index = salaries.index(min_salary)

    print(f"Максимальная зарплата: {max_salary:.2f} руб. ({surnames[max_index]})")
    print(f"Минимальная зарплата: {min_salary:.2f} руб. ({surnames[min_index]})")

    # Средняя зарплата по бригадам
    avg_brigade1 = sum(brigade1_salaries) / len(brigade1_salaries)
    avg_brigade2 = sum(brigade2_salaries) / len(brigade2_salaries)
    avg_brigade3 = sum(brigade3_salaries) / len(brigade3_salaries)

    print("\n" + "-" * 50)
    print("СРЕДНЯЯ ЗАРПЛАТА ПО БРИГАДАМ:")
    print(f"Бригада №1: {avg_brigade1:.2f} руб.")
    print(f"Бригада №2: {avg_brigade2:.2f} руб.")
    print(f"Бригада №3: {avg_brigade3:.2f} руб.")

    print(f"\nКоличество рабочих дней в месяце: 25")
    print("=" * 50)

# ============================================================================
# ФУНКЦИИ ДЛЯ ТАБЛИЦЫ 4 (Расчёт НДФЛ и ФОТ)
# ============================================================================

def show_table4():
    """Таблица 4: Расчёт НДФЛ и ФОТ для всех сотрудников"""
    print("\n" + "=" * 90)
    print("ТАБЛИЦА 4 - РАСЧЁТ НДФЛ (13%) И НАЧИСЛЕНИЙ НА ФОТ (30%)")
    print("=" * 90)

    print(f"{'№':<4} {'ФИО':<25} {'Начислено':<15} {'НДФЛ 13%':<15} {'На руки':<15} {'Начисления ФОТ':<15}")
    print("-" * 90)

    total_accrued = 0
    total_net = 0
    total_contributions = 0

    for i in range(15):
        result = sal.calculate_from_accrued(salaries[i])
        tax = salaries[i] - result['net_salary']

        total_accrued += result['accrued_salary']
        total_net += result['net_salary']
        total_contributions += result['payroll_contributions']

        print(f"{i+1:<4} {surnames[i]:<25} {result['accrued_salary']:<15.2f} {tax:<15.2f} {result['net_salary']:<15.2f} {result['payroll_contributions']:<15.2f}")

    print("-" * 90)
    print(f"{'ИТОГО:':<4} {'':<25} {total_accrued:<15.2f} {'':<15} {total_net:<15.2f} {total_contributions:<15.2f}")
    print("=" * 90)

    print(f"\nОбщий размер ФОТ (начислено): {total_accrued:.2f} руб.")
    print(f"Общий размер выплат на руки: {total_net:.2f} руб.")
    print(f"Общий размер начислений на ФОТ: {total_contributions:.2f} руб.")
    print("=" * 90)

# ==============================================
# ГЛАВНОЕ МЕНЮ (как на скриншоте)
# ============================================================================

def main():
    while True:
        print("\n" + "=" * 50)
        print("     ПРОГРАММА РАСЧЁТА ЗАРАБОТНОЙ ПЛАТЫ")
        print("=" * 50)
        print()
        print("1 - Исходные данные (Таблица 1)")
        print("2 - Первая бригада (Таблица 2)")
        print("3 - Весь цех (Таблица 3)")
        print("4 - Расчёт НДФЛ и ФОТ (Таблица 4)")
        print("0 - Выход")
        print("=" * 50)

        choice = input("\nВыберите пункт: ")

        if choice == '1':
            show_table1()
            input("\nНажмите Enter, чтобы продолжить...")

        elif choice == '2':
            menu_brigade1()

        elif choice == '3':
            show_whole_shop()
            input("\nНажмите Enter, чтобы продолжить...")

        elif choice == '4':
            show_table4()
            input("\nНажмите Enter, чтобы продолжить...")

        elif choice == '0':
            print("\n" + "=" * 50)
            print("              ДО СВИДАНИЯ!")
            print("=" * 50)
            break

        else:
            print("\nОшибка! Выберите пункт от 0 до 4.")
            input("\nНажмите Enter, чтобы продолжить...")

# ============================================================================
# ЗАПУСК ПРОГРАММЫ
# ============================================================================

if __name__ == "__main__":
    main()