Главная страница
Навигация по странице:

  • ПРИЛОЖЕНИЕ A

  • Анализ предметной области БАза данных больница


    Скачать 0.84 Mb.
    НазваниеАнализ предметной области БАза данных больница
    Дата27.02.2023
    Размер0.84 Mb.
    Формат файлаdocx
    Имя файлаV3.docx
    ТипАнализ
    #957560
    страница2 из 2
    1   2

    ЗАКЛЮЧЕНИЕ


    Использование подобной программы с открытым исходным кодом, может позволить сэкономить время, что уделяется бухгалтерами и занимает большое время, с учётом разных специфичностей видов оплаты труда. Она поспособствует ознакомлению с подобными П.О до момента установки более серьёзных программ.

    В результате работы было создано П.О — «Расчёт заработной платы».

    Программа, разработанная в Visual Studio 2022, является 64-х разрядным приложением и работает под управлением О.С Microsoft Windows. Для обеспечения нормальной работы П.О не требуется посторонних программ «Р.З.П» не является требовательным к техническому обеспечению ПК, занимая минимальное количество памяти.

    Программный продукт занимает 96 К.Б дискового пространства и не нуждается в установке, что позволяет переносить его на внешнем накопителе и использовать на любом ПК.

    По окончанию разработки программный продукт прошёл тестирование, на котором было установлено, что П.О «Р.З.П» не имеет программных ошибок, а сам программный продукт готов к использованию.

    Список литературы



    ПРИЛОЖЕНИЕ A
    #define _CRT_SECURE_NO_WARNINGS

    #include /*Стандартная библиотека ввода-вывода */

    #include /*Для локализации приложения*/

    #include /*Для использования system("cls");*/
    /* Структура для хранения информации про одного человека */

    typedef struct tagITEM {

    char Surname[35], Name[30], MiddleName[30], JobTitile[30];

    int Age;

    int MaxWorkDay;

    int WorkHour;

    int PaydayFlag;

    float AvanceFirst;

    float PayDay_Result;

    float GrayPayday_Result;

    float TaxWithheld;

    } ITEM;

    /* Максимум на 100 человек */

    ITEM Men[100];

    /* Количество занятых элементов в массиве */

    int Number;

    /* Процент Аванса*/

    float AvanceProcent = 0.40;

    /* Процент НДФЛ*/

    float Tax = 0.13;

    /* Меню программы*/

    int main()

    {

    SetConsoleCP(1251);

    SetConsoleOutputCP(1251);
    int Choice;

    char Answer = "N";
    SettingAutoLoad();
    while (Answer != "Y")

    {

    system("cls");

    printf(" Курсовая работа по теме \"Расчёт оплаты труда\"\n\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Меню программы |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| 1.) База данных сотрудников |\n");

    printf("| 2.) Расчёт оплаты труда |\n");

    printf("| 3.) Расчёт надбавок труда |\n");

    printf("| 4.) Настройки |\n");

    printf("| |\n");

    printf("| 5.) Выход |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Для выбора введите номер нужного пункта |\n");

    printf("|_______________________________________________|\n\n");

    printf("Ваш выбор: ");

    if (scanf("%d", &Choice) != 1)

    {

    printf("\n\tБыл введен неверные тип данных\n");

    }

    if (Choice <= 0 || Choice > 6)

    {

    printf("\n\tЭлемент не найдем в меню\n");

    }

    else

    {

    if (Choice == 1)

    {

    DataBase();

    }

    if (Choice == 2)

    {

    Payroll_preparation();

    }

    if (Choice == 3)

    {

    SurchargeTipe();

    }

    if (Choice == 4)

    {

    SettingsMenu();

    }

    if (Choice == 5)

    {

    exit(0);

    }

    }

    }

    return 0;

    }

    /*-----------------------Функции для работы с вычислением оплаты труда-----------------------*/

    /* Меню вызова функций для управления базой данными */

    int Payroll_preparation()

    {

    system("cls");

    int Choice = 0;

    int answer = 0;
    do {

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Расчёт оплаты труда |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| 1.) Расчёт оклада сотрудника |\n");

    printf("| 2.) Дневной тариф сотрудника |\n");

    printf("| 3.) Почасовая оплата сотрудника |\n");

    printf("| 4.) Прямая-сдельная оплата сотрудника |\n");

    printf("| 5.) Сдельная-премиальная оплата сотрудника |\n");

    printf("| 6.) Сдельная-прогрессивная оплата сотрудника |\n");

    printf("| |\n");

    printf("| 7.) Возвращение в меню |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Для выбора введите номер нужного пункта |\n");

    printf("|_______________________________________________|\n\n");
    if (scanf("%d", &Choice) != 1) {

    }

    if (Choice == 1)

    {

    Payroll();

    }

    if (Choice == 2)

    {

    DailyRate();

    }

    if (Choice == 3)

    {

    HourlyPayment();

    }

    if (Choice == 4)

    {

    DirectPiecework();

    }

    if (Choice == 5)

    {

    PieceworkPremium();

    }

    if (Choice == 6)

    {

    PieceworkProgressive();

    }

    if (Choice == 7)

    {

    main();

    }

    } while ((answer != 1));

    return 0;

    }

    /* Вычисление оклада сотрудника */

    int Payroll()

    {

    int i;
    float Salary; //Оклад

    int Number_of_days_worked_per_month; //Отработанные дни за месяц

    int Actual_days_worked; //Фактически отработанные дни

    float Avance; //Аванс

    float PayDay; //Зарплата

    float WhitePayday; //Белая оплата

    float TaxWithheld; //Удерживаемая сумма
    Print();

    printf("\nВведите номер сотрудника > ");

    if (scanf("%i", &i) != 1)

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "\nСотрудник с номером %i не существует\n", i);

    Payroll_preparation();

    }
    printf("\nВведите размер оклада: ");

    scanf("%f", &Salary);

    printf("\nКоличество отработанных дней в месяце: ");

    scanf("%d", &Number_of_days_worked_per_month);

    printf("\nФактически отработанные дни: ");

    scanf("%d", &Actual_days_worked);
    PayDay = (Salary / Number_of_days_worked_per_month) * Actual_days_worked;

    TaxWithheld = (PayDay * Tax);

    WhitePayday = (PayDay - TaxWithheld);

    Avance = WhitePayday * AvanceProcent;
    Men[i - 1].MaxWorkDay = Number_of_days_worked_per_month;

    Men[i - 1].PaydayFlag = 1;

    Men[i - 1].PayDay_Result = PayDay;

    Men[i - 1].AvanceFirst = Avance;

    Men[i - 1].PayDay_Result = WhitePayday;

    Men[i - 1].TaxWithheld = TaxWithheld;
    printf("\n\nВыполнен расчёт белого оклада: %.2f", WhitePayday);

    printf("\nУдержано: %.2f\n", TaxWithheld);

    printf("\nАванc: %.2f\n", Avance);
    }

    /* Вычисление дневной ставки сотрудника */

    int DailyRate()

    {

    int i;
    float Salary = 0; //Оклад дневной ставки

    int Actual_days_worked = 0; //Фактически отработанные дни

    float Avance; //Аванс

    float PayDay = 0; //Зарплата

    float WhitePayday; //Белая оплата труда

    float TaxWithheld; //Удерживаемая сумма
    Print();

    printf("\nВведите номер сотрудника > ");

    if (scanf("%i", &i) != 1)

    {
    }

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "Сотрудник с номером %i не существует\n", i);

    }
    printf("\nВведите размер дневной ставки: ");

    if (scanf("%f", &Salary) != 1) {
    }

    else

    {

    printf("\nКоличество отработанных дней по факту: ");

    if (scanf("%d", &Actual_days_worked) != 1) {

    }

    else

    {

    PayDay = Salary * Actual_days_worked;

    TaxWithheld = (PayDay * Tax);

    WhitePayday = (PayDay - TaxWithheld);

    Avance = WhitePayday * AvanceProcent;
    Men[i].MaxWorkDay = Salary;

    Men[i].PaydayFlag = 2;
    Men[i].PayDay_Result = PayDay;

    Men[i].PayDay_Result = WhitePayday;

    Men[i].TaxWithheld = TaxWithheld;

    Men[i].AvanceFirst = Avance;
    printf("\n\nВыполнен расчёт дневной ставки: %.2f", WhitePayday);

    printf("\nУдержано: %.2f\n", TaxWithheld);

    printf("\nnАванc: %.2f\n", Avance);

    }

    }

    }

    /* Вычисление часовой оплаты труда сотрудника */

    int HourlyPayment()

    {

    int i;
    float Salary = 0; //Оклад

    int Actual_days_worked = 0; //Фактически отработанные дни

    int Working_hours = 0; //Рабочие часы

    float Avance; //Аванс

    float PayDay = 0; //Зарплата

    float WhitePayday; //Белая оплата труда

    float TaxWithheld; //Удерживаемая сумма
    Print();

    printf("\nВведите номер сотрудника > ");

    scanf("%i",&i);

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "Сотрудник с номером %i не существует\n", i);

    }
    printf("\nВведите размер почасовой ставки: ");

    if (scanf("%f", &Salary) != 1) {
    }

    else

    {

    printf("\nРабочие часы за день: ");

    if (scanf("%d", &Working_hours) != 1) {

    }

    else

    {

    printf("\nФактически отработанные дни: ");

    if (scanf("%d", &Actual_days_worked) != 1) {

    }

    else

    {

    PayDay = Salary * Working_hours * Actual_days_worked;

    TaxWithheld = (PayDay * Tax);

    WhitePayday = (PayDay - TaxWithheld);

    Avance = WhitePayday * AvanceProcent;
    Men[i].MaxWorkDay = Salary;

    Men[i].WorkHour = Working_hours;

    Men[i].PaydayFlag = 3;
    Men[i].PayDay_Result = PayDay;

    Men[i].AvanceFirst = Avance;

    Men[i].PayDay_Result = WhitePayday;

    Men[i].TaxWithheld = TaxWithheld;
    printf("\n\nВыполнен расчёт часовой ставки: %.2f", WhitePayday);

    printf("\nУдержано: %.2f\n", TaxWithheld);

    printf("\nАванc: %.2f\n", Avance);

    }

    }

    }

    }

    /* Вычисление прямой сдельной оплаты труда сотрудника */

    int DirectPiecework()

    {

    int i;
    int Number_of_units = 0; //Число сделанной продукции

    float unit_cost = 0; //Стоимость детали

    float Assembly_cost = 0; //Стоимость сборки

    float Avance; //Аванс

    float PayDay = 0; //Зарплата

    float WhitePayday; //Белая оплата труда

    float TaxWithheld; //Удерживаемая сумма
    Print();

    printf("\nВведите номер сотрудника > ");

    scanf("%i",&i);

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "Сотрудник с номером %i не существует\n", i);

    }
    printf("\nКоличество продукции: ");

    if (scanf("%d", &Number_of_units) != 1) {
    }

    else

    {

    printf("\nСтоимость обработки продукции: ");

    if (scanf("%f", &unit_cost) != 1) {

    }

    else

    {

    printf("\nСтоимость сборки: ");

    if (scanf("%f", &Assembly_cost) != 1) {

    }

    else

    {

    PayDay = (Number_of_units * unit_cost) + (Number_of_units * Assembly_cost);

    TaxWithheld = (PayDay * Tax);

    WhitePayday = (PayDay - TaxWithheld);

    Avance = WhitePayday * AvanceProcent;
    Men[i].PayDay_Result = PayDay;

    Men[i].AvanceFirst = Avance;

    Men[i].PayDay_Result = WhitePayday;

    Men[i].TaxWithheld = TaxWithheld;
    printf("\n\nВыполнен расчёт прямой-сдельной ставки: %.2f", WhitePayday);

    printf("\nУдержано: %.2f\n", TaxWithheld);

    printf("\nАванc: %.2f\n", Avance);

    }

    }

    }

    }

    /* Вычисление премиально-сдельной оплаты труда сотрудника */

    int PieceworkPremium()

    {

    int i;
    int Number_of_units = 0; //Число сделанной продукции

    float unit_cost = 0; //Стоимость детали

    float Assembly_cost = 0; //Стоимость сборки

    float Prize = 0; //Премия

    float Avance; //Аванс

    float PayDay = 0; //Зарплата

    float WhitePayday; //Белая оплата труда

    float TaxWithheld; //Удерживаемая сумма
    Print();

    printf("\nВведите номер сотрудника > ");

    scanf("%i",&i);

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "Сотрудник с номером %i не существует\n", i);

    }
    printf("\nКоличество продукции: ");

    if (scanf("%d", &Number_of_units) != 1) {
    }

    else

    {

    printf("\nСтоимость обработки продукции: ");

    if (scanf("%f", &unit_cost) != 1) {

    }

    else

    {

    printf("\nСтоимость сборки: ");

    if (scanf("%f", &Assembly_cost) != 1) {

    }

    else

    {

    PayDay = (Number_of_units * unit_cost) + (Number_of_units * Assembly_cost);

    printf("\nРазмер премии в процентах: ");
    if (scanf("%f", &Prize) != 1) {

    }

    else

    {

    PayDay = PayDay + (PayDay * (Prize / 100));

    TaxWithheld = (PayDay * Tax);

    WhitePayday = (PayDay - TaxWithheld);

    Avance = WhitePayday * AvanceProcent;
    Men[i].PayDay_Result = PayDay;

    Men[i].AvanceFirst = Avance;

    Men[i].PayDay_Result = WhitePayday;

    Men[i].TaxWithheld = TaxWithheld;
    printf("\n\nВыполнен расчёт премиально-сдельной ставки: %.2f", WhitePayday);

    printf("\nУдержано: %.2f\n", TaxWithheld);

    printf("\nАванc: %.2f\n", Avance);

    }

    }

    }

    }

    }

    /* Вычисление премиально-прогрессивной оплаты труда сотрудника */

    int PieceworkProgressive()

    {

    int i;
    int Number_of_products_in_the_normal = 0; //Количество продукции в пределах нормы

    int Number_of_products_in_excess_the_normal = 0; //Количество продукции сверх нормы

    int Assembly_cost = 0; //Стоимость сборки детали

    float unit_cost = 0; //Стоимость детали

    float Increased_unit_cost = 0; //Повышенная стоимость единицы

    float Avance; //Аванс

    float PayDay = 0; //Зарплата

    float WhitePayday; //Белая оплата труда

    float TaxWithheld; //Удерживаемая сумма
    Print();

    printf("\nВведите номер сотрудника > ");

    scanf("%i",&i);

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "Сотрудник с номером %i не существует\n", i);

    }
    printf("\nКоличество продукции в пределах нормы: ");

    if (scanf("%d", &Number_of_products_in_the_normal) != 1) {
    }

    else {

    printf("\nСтоимость единицы продукции: ");

    if (scanf("%f", &unit_cost) != 1) {

    }

    else {

    printf("\nКоличество продукции сверх нормы: ");

    if (scanf("%d", &Number_of_products_in_excess_the_normal) != 1) {

    }

    else {

    printf("\nПовышенная стоимость единицы: ");

    if (scanf("%f", &Increased_unit_cost) != 1) {

    }

    else {

    PayDay = (Number_of_products_in_the_normal * unit_cost)

    + (Number_of_products_in_excess_the_normal * Increased_unit_cost);
    TaxWithheld = (PayDay * Tax);

    WhitePayday = (PayDay - TaxWithheld);

    Avance = WhitePayday * AvanceProcent;
    Men[i].PayDay_Result = PayDay;

    Men[i].AvanceFirst = Avance;

    Men[i].PayDay_Result = WhitePayday;

    Men[i].TaxWithheld = TaxWithheld;
    printf("\n\nВыполнен расчёт прямой-сдельной ставки: %.2f", WhitePayday);

    printf("\nУдержано: %.2f\n", TaxWithheld);

    printf("\nАванc: %.2f\n", Avance);

    }

    }

    }

    }

    }

    //-----------------------Функции для работы с базой данных-----------------------//

    /* Меню вызова функций для управления базой данными */

    int DataBase()

    {

    system("cls");
    int Choice = 0;

    int answer = 0;
    while (answer == 0)

    {

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| База данных сотрудников |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| 1.) Вывод зарплат сотрудников |\n");

    printf("| 2.) Вывод данных о сотрудниках |\n");

    printf("| 3.) Добавление данных о сотрудниках |\n");

    printf("| 4.) Загрузить данные |\n");

    printf("| 5.) Сохранение данных |\n");

    printf("| 6.) Удаление данных |\n");

    printf("| 7.) Сортировка |\n");

    printf("| |\n");

    printf("| 8.) Возвращение в меню |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Для выбора введите номер нужного пункта |\n");

    printf("|_______________________________________________|\n\n");

    if (scanf("%d", &Choice) != 1)

    {

    }

    if (Choice <= 0 || Choice > 9)

    {

    printf("\n\tЭлемент не найдем в меню\n");

    Sleep(650);

    }

    if (Choice == 1) {

    Print();

    }

    if (Choice == 2) {

    PrintMen();

    }

    if (Choice == 3) {

    Add();

    }

    if (Choice == 4) {

    Load();

    }

    if (Choice == 5) {

    Save();

    }

    if (Choice == 6) {

    Del();

    }

    if (Choice == 7) {

    Sort();

    }

    if (Choice == 8) {

    main();

    }

    }

    }

    /* Функция для вывода всех элементов */

    int Print(void)

    {

    int i;

    printf(" N |Фамилия |Имя |Отчество |Возраст |Белая зарплата |Удержанно |Аванс\n");

    for (i = 0; i < Number; i++)

    {

    printf(" %2i. |%-20s |%-20s |%-25s |%-13i |%-16f |%-11f |%f\n",

    i + 1, Men[i].Surname, Men[i].Name, Men[i].MiddleName, Men[i].Age, Men[i].PayDay_Result, Men[i].TaxWithheld, Men[i].AvanceFirst);

    }

    }

    /* Функция для вывода профиля сотрудников */

    int PrintMen(void)

    {

    int i;

    printf(" N |Фамилия |Имя |Отчество |Возраст |Должность\n");

    for (i = 0; i < Number; i++)

    {

    printf(" %2i. |%-20s |%-20s |%-20s |%-13i |%3s\n",

    i + 1, Men[i].Surname,Men[i].Name, Men[i].MiddleName, Men[i].Age, Men[i].JobTitile);

    }

    }

    /* Функция для добавления элемента*/

    int Add(void)

    {

    setlocale(LC_ALL, "Rus");

    if (Number == 99)

    {

    fprintf(stderr, "Невозможно добавить еще один элемент\n");

    return;

    }
    printf("Введите фамилию > ");

    if (scanf("%s", &Men[Number].Surname) != 1)

    {

    printf("\n\tБыл введен неверный тип данных\n");

    }

    else if(Men[Number].Surname == 0 || strlen(Men[Number].Surname) > 35)

    {

    printf("\n\tМаксимальный размер фамилии 35-ть символов\n");

    Number--;

    Number++;

    }

    else if (isdigit(Men[Number].Surname) > 0)

    {

    printf("\n\tВ фамилии не могут содержаться числа\n");

    Number--;

    Number++;

    }

    else

    {

    printf("Введите имя > ");

    if(scanf("%s", &Men[Number].Name) != 1)

    {

    printf("\n\tБыл введен неверный тип данных\n");

    Number--;

    Number++;

    }

    else if(strlen(Men[Number].Name) < 2 )

    {

    printf("\n\tМинимальное количество знаков для имени 2-единицы\n");

    Number--;

    Number++;

    }

    else if (strlen(Men[Number].Name) > 30)

    {

    printf("\n\tМаксимальный количество знаков для имени 35-ть символов\n");

    Number--;

    Number++;

    }

    else if(isdigit(Men[Number].Name) > 0)

    {

    printf("\n\tВ имени не могут содержаться числа\n");

    Number--;

    Number++;

    }

    else

    {

    printf("Введите отчество > ");

    if(scanf("%s", &Men[Number].MiddleName) != 1)

    {

    printf("\n\tБыл введен неверный тип данных\n");

    Number--;

    Number++;

    }

    else if (strlen(Men[Number].MiddleName) < 4)

    {

    printf("\n\tМинимальное количество знаков для имени 2-единицы\n");

    Number--;

    Number++;

    }

    else if (strlen(Men[Number].MiddleName) > 30)

    {

    printf("\n\tМаксимальный количество знаков для имени 35-ть символов\n");

    Number--;

    Number++;

    }

    else if (isdigit(Men[Number].MiddleName) > 0)

    {

    printf("\n\tВ отчестве не могут содержаться числа\n");

    Number--;

    Number++;

    }

    else

    {

    printf("Введите возраст > ");

    if(scanf("%i", &Men[Number].Age) != 1)

    {

    printf("\n\tБыл введен неверный тип данных\n");

    Number--;

    Number++;

    }

    else if (Men[Number].Age < 16)

    {

    printf("Недостаточно лет для работы");

    Number--;

    Number++;

    }

    else if (isalpha(Men[Number].Age) > 0)

    {

    printf("\n\tВведите возраст в виде цифры\n");

    Number--;

    Number++;

    }

    else

    {

    printf("Введите должность > ");

    scanf("%s", &Men[Number].JobTitile);

    Number++;

    }

    }

    }

    }

    }

    /* Функция для чтения массива из файла */

    int Load(void)

    {

    FILE* F;

    int i;
    if ((F = fopen("DataBase.dat", "rt")) == NULL)

    {

    fprintf(stderr, "Невозможно открыть для чтения файл 'DataBase.dat'\n");

    return;

    }
    fscanf(F, "%i",&Number);

    for (i = 0; i < Number; i++)

    fscanf(F, "%s%s%s%s%i%f%f%f%i", Men[i].Surname, Men[i].Name, Men[i].MiddleName, Men[i].JobTitile, &Men[i].Age,

    &Men[i].PayDay_Result, &Men[i].GrayPayday_Result, &Men[i].TaxWithheld, &Men[i].WorkHour);
    fclose(F);

    }

    /* Функция для сохранения массива в файле */

    int Save(void)

    {

    FILE* F;

    int i;
    if ((F = fopen("DataBase.dat", "wt")) == NULL)

    {

    fprintf(stderr, "Невозможно открыть для записи файл 'DataBase.dat'\n");

    return;

    }
    fprintf(F, "%i\n", Number);

    for (i = 0; i < Number; i++)

    fprintf(F, "%s\n%s\n%s\n%s\n%i\n%f\n%f\n%f\n%i\n", Men[i].Surname, Men[i].Name, Men[i].MiddleName, Men[i].JobTitile, Men[i].Age,

    Men[i].PayDay_Result, Men[i].GrayPayday_Result, Men[i].TaxWithheld, Men[i].WorkHour);
    fclose(F);

    }

    /* Функция для удаления элемента */

    int Del(void)

    {

    int i;
    Print();

    printf("\nВведите номер удаляемого элемента > ");

    scanf("%i",&i);

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "Элемент с номером %i не существует\n", i);

    return;

    }
    for (i--; i < Number - 1; i++)

    Men[i] = Men[i + 1];
    Number--;

    }

    /* Функция для упорядочивания массива по фамилии */

    int Sort(void)

    {

    int i, j;

    register ITEM Temp;
    for (j = Number - 1; j > 0; j--)

    for (i = 0; i < j; i++)

    if (strcmp(Men[i].Surname, Men[i + 1].Surname) > 0)

    {

    Temp = Men[i];

    Men[i] = Men[i + 1];

    Men[i + 1] = Temp;

    }

    }

    //-----------------------Функции для работы с настройками программы-----------------------//

    /*Меню настроек*/

    int SettingsMenu()

    {

    int Choice;

    int answer = 0;

    //--------------------------------------------------------------------------

    while (answer == 0)

    {

    system("cls");

    printf(" Курсовая работа по теме \"Расчёт оплаты труда\"\n\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Меню настроек |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| 1.) Процент для вычисления Аванса |\n");

    printf("| 2.) Изменение НДФЛ |\n");

    printf("| |\n");

    printf("| 3.) Сохранение настроек |\n");

    printf("| 4.) Загрузка настроек |\n");

    printf("| |\n");

    printf("| 5.) Выход |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Для выбора введите номер нужного пункта |\n");

    printf("|_______________________________________________|\n\n");

    printf("Ваш выбор: ");

    if (scanf("%d", &Choice) != 1)

    {

    printf("\n\tБыл введен неверные тип данных\n");

    Sleep(650);

    }

    if (Choice <= 0 || Choice > 5)

    {

    printf("\n\tЭлемент не найдем в меню\n");

    Sleep(650);

    }

    else

    {

    if (Choice == 1)

    {

    AvanceProcentSettings();

    }

    if (Choice == 2)

    {

    TaxSettings();

    }

    if (Choice == 3)

    {

    SettingRecord();

    }

    if (Choice == 4)

    {

    SettingAutoLoad();

    }

    if (Choice == 5)

    {

    main();

    }

    }

    }

    }

    // Функция для установки нужного процентного значения для вычисления аванса

    int AvanceProcentSettings()

    {

    float Temp = AvanceProcent;

    printf("|__________________________________________\n");

    printf("|\t\tВНИМАНИЕ\n\tВводите обычное целое число\n\tбез иных знаков\n");

    printf("\nУкажите процент для аванса\n");
    if (scanf("%f", &AvanceProcent) != 1)

    {

    printf("\n\tБыл введён неверный тип данных\n");
    AvanceProcent = Temp;

    }

    }

    // Функция для установки нужного значения налоговой ставки

    int TaxSettings()

    {

    float Temp = Tax;
    printf("\nУкажите % для НДФЛ: ");
    if (scanf("%f", &Tax) != 1)

    {

    printf("\n\tБыл введён неверный тип данных\n");
    Tax = Temp;

    }

    }

    // Запись настроек в файл настроек

    int SettingRecord()

    {

    FILE* F;

    int i;
    if ((F = fopen("Settings.dat", "wt")) == NULL)

    {

    fprintf(stderr, "Невозможно открыть для записи файл 'Settings.dat'\n");

    return;

    }
    fprintf(F, "%f\n%f", AvanceProcent, Tax);
    fclose(F);

    }

    // Автозагрузка сохранённых в файл настроек

    int SettingAutoLoad()

    {

    FILE* F;

    int i;
    if ((F = fopen("Settings.dat", "rt")) == NULL)

    {

    fprintf(stderr, "Невозможно открыть для чтения файл 'Settings.dat'\n");

    return;

    }
    fscanf(F, "%f%f", &AvanceProcent, &Tax);
    fclose(F);

    }

    //-----------------------Функции для работы с выплатами-----------------------//

    /* Выписка надбавки */

    int SurchargeTipe()

    {

    int i;

    int Choice;

    int answer = 0;
    //Доделать работу и проверить на баги

    //--------------------------------------------------------------------------

    while (answer == 0)

    {

    system("cls");

    printf(" _______________________________________________ \n");

    printf("| |\n");

    printf("| Управление выплатами |\n");

    printf("|_______________________________________________|\n");

    printf("| Выписка выплат |\n");

    printf("| |\n");

    printf("| 1.) За работу во вредных и (или) опасных |\n");

    printf("| условиях труда |\n");

    printf("| 2.) За сверхурочную работу |\n");

    printf("| 3.) За работу в ночное время |\n");

    printf("| 4.) За труд в выходные и праздники |\n");

    printf("| |\n");

    printf("| 5.) Выход |\n");

    printf("|_______________________________________________|\n");

    printf("| |\n");

    printf("| Для выбора введите номер нужного пункта |\n");

    printf("|_______________________________________________|\n\n");

    printf("Ваш выбор: ");

    if (scanf("%d", &Choice) != 1)

    {

    printf("\n\tБыл введен неверные тип данных\n");

    Sleep(650);

    }

    if (Choice <= 0 || Choice > 5)

    {

    printf("\n\tЭлемент не найдем в меню\n");

    Sleep(650);

    }

    else

    {

    if (Choice == 1)

    {

    WHC_S();

    }

    if (Choice == 2)

    {

    OverTime_S();

    }

    if (Choice == 3)

    {

    NightWork();

    }

    if (Choice == 4)

    {

    Holiday();

    }

    if (Choice == 5)

    {

    main();

    }

    }

    }

    }

    /* Вычисление надбавки за опасные условия труда */

    int WHC_S()

    {

    int i;

    float WHC = 0;

    float WHCProcent = 0.04;
    Print();

    printf("\nВведите номер сотрудника > ");

    if (scanf("%i", &i) != 1)

    {
    }

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "\nСотрудник с номером %i не существует\n", i);

    SurchargeTipe();

    }
    WHC = Men[i].PayDay_Result * WHCProcent;

    printf("\nВ итоге премия составляет: %f",&WHC);

    Sleep(530);

    }

    /* Вычисление сверхурочных */

    int OverTime_S()

    {

    int i;

    float Overtime = 0;
    float PayDayOneDay = 0;

    float PayDayOneHour = 0;

    float OvertimeProcent = 0.50;

    float OvertimeFirstHour = 0;

    float OvertimeOverHour = 0;

    float OvertimeResult = 0;
    Print();

    printf("\nВведите номер сотрудника > ");

    if (scanf("%i", &i) != 1)

    {
    }

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "\nСотрудник с номером %i не существует\n", i);

    SurchargeTipe();

    }
    printf("Введите количество часов: ");

    scanf("%f",&Overtime);
    if (Men[i].PaydayFlag == 1)

    {

    PayDayOneDay = Men[i].PayDay_Result / Men[i].MaxWorkDay;

    PayDayOneHour = PayDayOneDay / Men[i].WorkHour;
    if (Overtime < 2)

    {

    printf("Сверхурочные не начисляются за один час");

    }

    if (Overtime > 2)

    {

    OvertimeFirstHour = PayDayOneHour * OvertimeProcent;

    OvertimeOverHour = (PayDayOneHour * (Overtime - 2)) * 2;

    OvertimeResult = OvertimeFirstHour + OvertimeOverHour;
    Men[i].PayDay_Result = +OvertimeResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;

    printf("\nВ итоге сверхурочные составляют: %f",&OvertimeResult);

    }

    if (Overtime == 2)

    {

    OvertimeResult = PayDayOneHour * OvertimeProcent;
    Men[i].PayDay_Result = +OvertimeResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;

    printf("\nВ итоге сверхурочные составляют: %f",&OvertimeResult);

    }

    }

    if (Men[i].PaydayFlag == 2)

    {

    PayDayOneHour = (Men[i].MaxWorkDay) / Men[i].WorkHour;

    if (Overtime < 2)

    {

    printf("Сверхурочные не начисляются за один час");

    }

    if (Overtime > 2)

    {

    OvertimeFirstHour = PayDayOneHour * OvertimeProcent;

    OvertimeOverHour = (PayDayOneHour * (Overtime - 2)) * 2;

    OvertimeResult = OvertimeFirstHour + OvertimeOverHour;
    Men[i].PayDay_Result = +OvertimeResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;

    printf("\nВ итоге сверхурочные составляют: %f",&OvertimeResult);

    }

    if (Overtime == 2)

    {

    OvertimeResult = PayDayOneHour * OvertimeProcent;
    Men[i].PayDay_Result = +OvertimeResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;

    printf("\nВ итоге сверхурочные составляют: %f",&OvertimeResult);

    }

    }

    if (Men[i].PaydayFlag == 3)

    {

    PayDayOneHour = Men[i].MaxWorkDay;

    if (Overtime < 2)

    {

    printf("Сверхурочные не начисляются за один час");

    }

    if (Overtime > 2)

    {

    OvertimeFirstHour = PayDayOneHour * OvertimeProcent;

    OvertimeOverHour = (PayDayOneHour * (Overtime - 2)) * 2;

    OvertimeResult = OvertimeFirstHour + OvertimeOverHour;
    Men[i].PayDay_Result = +OvertimeResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;

    printf("\nВ итоге сверхурочные составляют: %f", &OvertimeResult);

    }

    if (Overtime == 2)

    {

    OvertimeResult = PayDayOneHour * OvertimeProcent;
    Men[i].PayDay_Result = +OvertimeResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;

    printf("\nВ итоге сверхурочные составляют: %f", &OvertimeResult);

    }

    }
    }

    /* Вычисление за работу в ночное время */

    int NightWork()

    {

    int i;
    float PayDayOneDay = 0;

    float PayDayOneHour = 0;

    float NightOverHour = 0;

    int NightCounter;

    float NightResult = 0;
    Print();

    printf("\nВведите номер сотрудника > ");

    if (scanf("%i", &i) != 1)

    {
    }

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "\nСотрудник с номером %i не существует\n", i);

    SurchargeTipe();

    }

    if (Men[i].PaydayFlag == 1)

    {

    PayDayOneDay = Men[i].PayDay_Result / Men[i].MaxWorkDay;

    PayDayOneHour = PayDayOneDay / Men[i].WorkHour;
    printf("\nВведите количество отработанных часов: ");

    scanf("%i",&NightCounter);
    for (int counter = 1; counter < NightCounter; counter++)

    {

    NightOverHour = PayDayOneHour * 0.20;

    NightResult = +NightOverHour;

    }
    Men[i].PayDay_Result = +NightResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;
    printf("\nВ итоге плата за ночную смену: %f",&NightResult);

    }

    if (Men[i].PaydayFlag == 2)

    {

    PayDayOneHour = Men[i].MaxWorkDay / Men[i].WorkHour;
    printf("\nВведите количество отработанных часов: ");

    scanf("%i",&NightCounter);
    for (int counter = 1; counter < NightCounter; counter++)

    {

    NightOverHour = PayDayOneHour * 0.20;

    NightResult = +NightOverHour;

    }
    Men[i].PayDay_Result = +NightResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;
    printf("\nВ итоге плата за ночную смену: %f",&NightResult);

    }

    if (Men[i].PaydayFlag == 3)

    {

    PayDayOneHour = Men[i].MaxWorkDay;
    printf("\nВведите количество отработанных часов: ");

    scanf("%i",&NightCounter);
    for (int counter = 1; counter < NightCounter; counter++)

    {

    NightOverHour = PayDayOneHour * 0.20;

    NightResult = +NightOverHour;

    }
    Men[i].PayDay_Result = +NightResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;
    printf("\nВ итоге плата за ночную смену: %f",&NightResult);

    }

    }

    /* Вычисление за работу в выходной день */

    int Holiday()

    {

    int i;
    float PayDayOneDay = 0;

    float HolidayResult = 0;

    int HolidayWorkDay = 0;
    Print();

    printf("\nВведите номер сотрудника > ");

    if (scanf("%i", &i) != 1)

    {
    }

    if (i < 1 || i > Number)

    {

    fprintf(stderr, "\nСотрудник с номером %i не существует\n", i);

    SurchargeTipe();

    }

    if (Men[i].PaydayFlag == 1)

    {

    PayDayOneDay = Men[i].PayDay_Result / Men[i].MaxWorkDay;
    printf("\nУкажите число отработанных дней: ");

    if (scanf("%i", &HolidayWorkDay) != 1)

    {

    }

    HolidayResult = PayDayOneDay * HolidayWorkDay;

    Men[i].PayDay_Result = +HolidayResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;
    printf("\nИтоговый расчёт за работу в выходные дни: %i", HolidayResult);

    }

    if (Men[i].PaydayFlag == 2)

    {

    PayDayOneDay = Men[i].MaxWorkDay;
    printf("\nУкажите число отработанных дней: ");

    if (scanf("%i", &HolidayWorkDay) != 1)

    {

    }

    HolidayResult = PayDayOneDay * HolidayWorkDay;

    Men[i].PayDay_Result = +HolidayResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;
    printf("\nИтоговый расчёт за работу в выходные дни: %i", HolidayResult);

    }

    if (Men[i].PaydayFlag == 3)

    {

    PayDayOneDay = Men[i].MaxWorkDay * Men[i].WorkHour;
    printf("\nУкажите число отработанных дней: ");

    if (scanf("%i", &HolidayWorkDay) != 1)

    {

    }

    HolidayResult = PayDayOneDay * HolidayWorkDay;

    Men[i].PayDay_Result = +HolidayResult;

    Men[i].AvanceFirst = Men[i].PayDay_Result * AvanceProcent;
    printf("\nИтоговый расчёт за работу в выходные дни: %i", HolidayResult);

    }

    }



    ИФСТ.467239.165




    Лист

    Дата

    Подпись

    документа

    Лист

    Изм.


    1   2


    написать администратору сайта