Загрузка данных
# ============================================================================
# ОСНОВНАЯ ПРОГРАММА
# ПРОГРАММА РАСЧЁТА ЗАРАБОТНОЙ ПЛАТЫ
# ============================================================================
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()