Программа для записи санации объекта

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

Мой код длинноват, поэтому я решил поместите это в онлайн-компилятор так что вы, ребята, можете это ясно видеть, мне также немного жаль, что я задаю этот нелепый вопрос, но я действительно хотел знать, как я могу уменьшить количество строк и использование памяти в моей программе, я очень плохо в этом разбираюсь ..

Следующий фрагмент кода — это, по сути, программа, которая фиксирует запись о дезинфекции места проведения; данные будут записаны в двоичный файл.

Проверка уровня заражения

Эта функция в основном предназначена для запроса пользователя и сбора ответа от пользователя. Он предназначен для отслеживания уровня заражения на основе их реакции. Я разрешаю пользователю отвечать только «да» или «нет», что, на мой взгляд, является методом проверки.

Верхний / нижний колонтитул таблицы

Это просто для печати заголовка и нижнего колонтитула таблицы, которые будут использоваться в большинстве функций. Я решил сделать это функцией, чтобы уменьшить дублирование.

Очистить меню

Это в основном главное меню этой программы.

Это позволяет пользователю перейти к любой другой функции, которую он или она желает использовать.

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

Добавить запись

Это в основном для добавления новой записи о дезинфекции. Он запрашивает и запрашивает у пользователя несколько вещей, и все данные будут записаны в вызове двоичного файла. Sanitization Record.dat. Я проверил дату и время, но мне кажется, что это слишком долго. Интересно, можно ли уменьшить количество строк для проверки?

Искать запись

Это просто меню для поиска записи по ее идентификатору, названию компании и т. Д. Да, я использовал вложенный while зацикливайтесь здесь для выполнения проверки, что, как мне кажется, определенно не является правильным способом. Может быть, вы, ребята, дадите мне какие-нибудь предложения по этому поводу?

Остальная часть функции поиска

Все они одинаковы, только метод поиска отличается. Если это строка, я буду использовать strcmpа то просто сравню с нормальным if условие. Как только запись будет найдена в двоичном файле, он распечатает ее, чтобы пользователь мог ее увидеть.

Изменить функцию

Это позволяет пользователю изменять все внутри двоичного файла, кроме идентификатора места проведения. Он предложит пользователю ввести идентификатор места проведения, который он хочет изменить, распечатает соответствующую информацию для этого идентификатора места и попросит подтверждения. Если пользователь ответит «Д», это позволит ему изменить эти записи. После изменения все записи будут перезаписаны в двоичный файл.

Удалить функцию

Это позволяет пользователю удалить любую запись внутри двоичного файла. Сначала он прочитает двоичный файл и захватит все данные в структуру массива, а затем попросит пользователя ввести идентификатор места для удаления записи. Если запись найдена, появится запрос с вопросом, хочет ли пользователь удалить; если пользователь ответит «Y», запись будет удалена методом сдвига массива. Затем все будет переписано в двоичный файл.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#pragma warning (disable:4996)
#define MAX 20
typedef struct {
    char companyName[41], personInCharge[41], gender, contactNum[13];
    float temperature;
    int infectionLevel;
}Company;

typedef struct {
    int hours, minute;
}Time;

typedef struct {
    int day, month, year;
}Date;

struct SanitizeData {
    char venueID[10];
    Company Details;
    Time Start;
    Time End;
    Date sanitizeDate;
};

// Function Prototype Declaration
int infectionLevelCheck();
void tableHeader();
void tableFooter(int, int);
void sanitizeMenu();
void addRecord();
void searchRecord();
void searchVenueID();
void searchDate();
void searchCompany();
void searchName();
void searchContactNumber();
void searchGender();
void searchTemperature();
void modifyRecord();
void displayRecord();
void deleteRecord();

int infectionLevelCheck() {
    char userResponse;
    int infectionLevel;
    int invalidCounter;

    do {
        invalidCounter = 0;
        infectionLevel = 0;
        printf("nnRisk Of Infection Check: n");
        printf("-----------------------n");
        printf("Are you having the 2 or more of the following symptoms listed?n");
        printf("- Fevern");
        printf("- Sore Throatn");
        printf("- Runny Nosen");
        printf("- Diarrhean");
        printf("- Headachen");
        printf("- Body Achen");
        printf("(Y = Yes, N = No): ");
        scanf("%c", &userResponse);
        rewind(stdin);

        if (toupper(userResponse) != 'Y' && toupper(userResponse) != 'N') {
            invalidCounter++;
        }
        else if (toupper(userResponse) == 'Y') {
            infectionLevel++;
        }

        printf("nnBesides the Symptoms listed above, are you having the following symptoms: n");
        printf("- Coughn");
        printf("- Difficulty breathingn");
        printf("- Loss of smelln");
        printf("- Loss of tasten");
        printf("(Y = Yes, N = No): ");
        scanf("%c", &userResponse);
        rewind(stdin);

        if (toupper(userResponse) != 'Y' && toupper(userResponse) != 'N') {
            invalidCounter++;
        }
        else if (toupper(userResponse) == 'Y') {
            infectionLevel += 4;
        }

        printf("nnHave you travelled to any country outside Malaysianwithin the past 14 days?n");
        printf("(Y = Yes, N = No): ");
        scanf("%c", &userResponse);
        rewind(stdin);

        if (toupper(userResponse) != 'Y' && toupper(userResponse) != 'N') {
            invalidCounter++;
        }

        else if (toupper(userResponse) == 'Y') {
            infectionLevel += 2;
        }

        printf("nnHave you had closed contact with anyone who nconfirmed or suspected case of COVID 19 within the 14 days?");
        printf("(Y = Yes, N = No): ");
        scanf("%c", &userResponse);
        rewind(stdin);

        if (toupper(userResponse) != 'Y' && toupper(userResponse) != 'N') {
            invalidCounter++;
        }

        else if (toupper(userResponse) == 'Y') {
            infectionLevel += 4;
        }

        if (invalidCounter > 0) {
            printf("n- Error Found: Invalid Response Entered - nn");
        }

    } while (invalidCounter != 0);
    return infectionLevel;
}

void tableHeader() {
    printf("------------------------------------------------------------------------------------------------------------------------n");
    printf("| Venue |   Sanitization   |  Ending  |    Company    |    Person   | Gender |    Contact   | Temperature | Infection  |n");
    printf("|  ID   |       Time       |   Time   |   In-Charge   |  In-Charge  |        |              |             |   Risk     |n");
    printf("|-------|------------------|----------|---------------|-------------|--------|--------------|-------------|------------|n");
}

void tableFooter(int i, int emptyRecord) {
    printf("------------------------------------------------------------------------------------------------------------------------n");
    if (emptyRecord == MAX) {
        printf("No Such Record Foundn");
    }
    else {
        printf("%d Record Foundn", i);
    }
}

void addRecord() {
    struct SanitizeData newData;
    FILE* addPtr;
    char userResponse;
    int validate, invalidCounter, counter = 0, infectionlevel = 0;

    addPtr = fopen("Sanitization Record.dat", "ab");
    if (addPtr == NULL) {
        printf("Unable to open Sanitization Record.datn");
        exit(-1);
    }
    else {

        do {
            system("cls");
            do {
                invalidCounter = 0;
                printf("Add Sanitization Recordn");
                printf("-----------------------n");
                printf("Enter Venue ID: ");
                scanf("%s", &newData.venueID);
                rewind(stdin);

                printf("Enter Sanitized Date in [DD/MM/YYYY Format Eg: 19/02/2021] : ");
                validate = scanf("%d/%d/%d", &newData.sanitizeDate.day, &newData.sanitizeDate.month, &newData.sanitizeDate.year);
                rewind(stdin);

                printf("Enter Sanitized Time in [HH:MM Format Eg: 12:51] - n");
                printf("Starting: ");
                validate = scanf("%d:%d", &newData.Start.hours, &newData.Start.minute);
                rewind(stdin);

                printf("Ending: ");
                validate = scanf("%d:%d", &newData.End.hours, &newData.End.minute);
                rewind(stdin);

                printf("Enter Santizie Handling Company Details: n");
                printf("Company Name: ");
                scanf("%[^n]", &newData.Details.companyName);
                rewind(stdin);

                printf("Person In-Charge Name:  ");
                scanf("%[^n]", &newData.Details.personInCharge);
                rewind(stdin);

                printf("Person In-Charge Gender: ");
                scanf("%c", &newData.Details.gender);
                rewind(stdin);

                printf("Person In-Charge Contact Numer: ");
                scanf("%s", &newData.Details.contactNum);
                rewind(stdin);

                printf("Person In-Charge Temperature: ");
                validate = scanf("%f", &newData.Details.temperature);
                rewind(stdin);

                newData.Details.infectionLevel = infectionLevelCheck();

                if (newData.Details.temperature > 37.8) newData.Details.infectionLevel++;


                if (validate == 0
                    || newData.sanitizeDate.day < 1 || newData.sanitizeDate.day > 31
                    || newData.sanitizeDate.month > 12 || newData.sanitizeDate.month < 1
                    || newData.Start.hours > 24 || newData.Start.hours < 1
                    || newData.Start.minute > 60 || newData.Start.minute < 1
                    || newData.End.hours > 24 || newData.End.hours < 1
                    || newData.End.minute > 60 || newData.End.minute < 1
                    || toupper(newData.Details.gender) != 'M' && toupper(newData.Details.gender) != 'F')
                {
                    if (newData.sanitizeDate.day < 1 || newData.sanitizeDate.day > 31 || newData.sanitizeDate.month > 12 || newData.sanitizeDate.month < 1) {
                        printf("- Error Found: Invalid Month or Days Entered. -n");
                    }
                    if (newData.Start.hours > 24 || newData.Start.hours < 1 || newData.Start.minute > 60 || newData.Start.minute < 1) {
                        printf("- Error Found: Invalid Starting Hours or Minutes Entered. - n");
                    }

                    if (newData.End.hours > 24 || newData.End.hours < 1 || newData.End.minute > 60 || newData.End.minute < 1) {
                        printf("- Error Found: Invalid Ending Hours or Minutes Entered. - n");
                    }

                    if (toupper(newData.Details.gender) != 'M' || toupper(newData.Details.gender) != 'F') {
                        printf("- Error Found: Invalid Gender Entered. -n");
                    }

                    if (validate == 0) {
                        printf("- Error Found: Kindly Enter Valid Input Only. - n");
                    }

                    invalidCounter++;
                    system("pause");
                    system("cls");
                }
                else {
                    fwrite(&newData, sizeof(newData), 1, addPtr);
                    counter++;
                }
            } while (invalidCounter != 0);

            printf("Add Another Record? (N = No): ");
            scanf("%c", &userResponse);
            rewind(stdin);
        } while (toupper(userResponse) != 'N');
        printf("%d Record Added.....n", counter);
        fclose(addPtr);
    }
}

void searchVenueID() {
    struct SanitizeData data[20];
    FILE* searchPtr;
    int i = 0, emptyRecord = 0;
    int counter = 0;
    char venueID[10];

    searchPtr = fopen("Sanitization Record.dat", "rb");
    if (searchPtr == NULL) {
        printf("Unable to open Santization Record.datn");
        exit(-1);
    }

    while (fread(&data[i], sizeof(data), 1, searchPtr) != 0) {
        i++;
    }

    printf("Enter Venue ID to Search: ");
    scanf("%s", &venueID);

    tableHeader();
    for (int i = 0; i < 20; i++) {
        if (strcmp(venueID, data[i].venueID) == 0) {
            counter++;
            printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data[i].venueID, data[i].sanitizeDate.day, data[i].sanitizeDate.month, data[i].sanitizeDate.year,
                data[i].Start.hours, data[i].Start.minute, data[i].End.hours, data[i].End.minute, data[i].Details.companyName,
                data[i].Details.personInCharge);

            switch (toupper(data[i].Details.gender)) {
            case 'F':
                printf("Female ");
                break;
            case 'M':
                printf(" Male  ");
                break;
            }

            printf("| %-12s |    %.2f    | ", data[i].Details.contactNum, data[i].Details.temperature);

            if (data[i].Details.infectionLevel <= 1) {
                printf(" Low Risk  |n");
            }
            else if (data[i].Details.infectionLevel <= 3) {
                printf(" Mid Risk  |n");
            }
            else if (data[i].Details.infectionLevel >= 4) {
                printf(" High Risk |n");
            }
        }
        else {
            emptyRecord++;
        }
    }
    tableFooter(counter, emptyRecord);
    fclose(searchPtr);
}

void searchDate() {
    struct SanitizeData data[20];
    FILE* searchPtr;
    int i = 0, emptyRecord = 0;
    int counter = 0;
    int day, month, year;
    searchPtr = fopen("Sanitization Record.dat", "rb");
    if (searchPtr == NULL) {
        printf("Unable to open Santization Record.datn");
        exit(-1);
    }

    while (fread(&data[i], sizeof(data), 1, searchPtr) != 0) {
        i++;
    }

    printf("Enter Date to Search [Format: 19/02/2021] : ");
    scanf("%d/%d/%d", &day, &month, &year);

    tableHeader();
    for (i = 0; i < 20; i++) {
        if (day == data[i].sanitizeDate.day && month == data[i].sanitizeDate.month && year == data[i].sanitizeDate.year) {
            counter++;
            printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data[i].venueID, data[i].sanitizeDate.day, data[i].sanitizeDate.month, data[i].sanitizeDate.year,
                data[i].Start.hours, data[i].Start.minute, data[i].End.hours, data[i].End.minute, data[i].Details.companyName,
                data[i].Details.personInCharge);

            switch (toupper(data[i].Details.gender)) {
            case 'F':
                printf("Female ");
                break;
            case 'M':
                printf(" Male  ");
                break;
            }

            printf("| %-12s |    %.2f    | ", data[i].Details.contactNum, data[i].Details.temperature);

            if (data[i].Details.infectionLevel <= 1) {
                printf(" Low Risk  |n");
            }
            else if (data[i].Details.infectionLevel <= 3) {
                printf(" Mid Risk  |n");
            }
            else if (data[i].Details.infectionLevel >= 4) {
                printf(" High Risk |n");
            }
        }
        else {
            emptyRecord++;
        }
    }
    tableFooter(counter, emptyRecord);
    fclose(searchPtr);
}

void searchCompany() {
    struct SanitizeData data[20];
    FILE* searchPtr;
    int i = 0, emptyRecord = 0;
    char companyName[41];
    int counter = 0;
    searchPtr = fopen("Sanitization Record.dat", "rb");
    if (searchPtr == NULL) {
        printf("Unable to open Santization Record.datn");
        exit(-1);
    }

    while (fread(&data[i], sizeof(data), 1, searchPtr) != 0) {
        i++;
    }

    printf("Enter Company Name to Search: ");
    scanf("%[^n]", &companyName);

    tableHeader();
    for (i = 0; i < 20; i++) {
        if (strcmp(companyName, data[i].Details.companyName) == 0) {
            counter++;
            printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data[i].venueID, data[i].sanitizeDate.day, data[i].sanitizeDate.month, data[i].sanitizeDate.year,
                data[i].Start.hours, data[i].Start.minute, data[i].End.hours, data[i].End.minute, data[i].Details.companyName,
                data[i].Details.personInCharge);

            switch (toupper(data[i].Details.gender)) {
            case 'F':
                printf("Female ");
                break;
            case 'M':
                printf(" Male  ");
                break;
            }

            printf("| %-12s |    %.2f    | ", data[i].Details.contactNum, data[i].Details.temperature);

            if (data[i].Details.infectionLevel <= 1) {
                printf(" Low Risk  |n");
            }
            else if (data[i].Details.infectionLevel <= 3) {
                printf(" Mid Risk  |n");
            }
            else if (data[i].Details.infectionLevel >= 4) {
                printf(" High Risk |n");
            }
        }
        else {
            emptyRecord++;
        }
    }
    tableFooter(counter, emptyRecord);
    fclose(searchPtr);
}

void searchName() {
    struct SanitizeData data[20];
    FILE* searchPtr;
    int i = 0, emptyRecord = 0;
    char personInCharge[41];
    int counter = 0;
    searchPtr = fopen("Sanitization Record.dat", "rb");
    if (searchPtr == NULL) {
        printf("Unable to open Santization Record.datn");
        exit(-1);
    }

    while (fread(&data[i], sizeof(data), 1, searchPtr) != 0) {
        i++;
    }

    printf("Enter Person In-Charge Name to Search: ");
    scanf("%[^n]", &personInCharge);

    tableHeader();
    for (i = 0; i < 20; i++) {
        if (strcmp(personInCharge, data[i].Details.personInCharge) == 0) {
            counter++;
            printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data[i].venueID, data[i].sanitizeDate.day, data[i].sanitizeDate.month, data[i].sanitizeDate.year,
                data[i].Start.hours, data[i].Start.minute, data[i].End.hours, data[i].End.minute, data[i].Details.companyName,
                data[i].Details.personInCharge);

            switch (toupper(data[i].Details.gender)) {
            case 'F':
                printf("Female ");
                break;
            case 'M':
                printf(" Male  ");
                break;
            }

            printf("| %-12s |    %.2f    | ", data[i].Details.contactNum, data[i].Details.temperature);

            if (data[i].Details.infectionLevel <= 1) {
                printf(" Low Risk  |n");
            }
            else if (data[i].Details.infectionLevel <= 3) {
                printf(" Mid Risk  |n");
            }
            else if (data[i].Details.infectionLevel >= 4) {
                printf(" High Risk |n");
            }
        }
        else {
            emptyRecord++;
        }
    }
    tableFooter(counter, emptyRecord);
    fclose(searchPtr);
}

void searchContactNumber() {
    struct SanitizeData data[20];
    FILE* searchPtr;
    int i = 0, emptyRecord = 0;
    char contactNum[13];
    int counter = 0;
    searchPtr = fopen("Sanitization Record.dat", "rb");
    if (searchPtr == NULL) {
        printf("Unable to open Santization Record.datn");
        exit(-1);
    }

    while (fread(&data[i], sizeof(data), 1, searchPtr) != 0) {
        i++;
    }

    printf("Enter Contact Number to Search [Format: 010-2012687]: ");
    scanf("%s", &contactNum);

    tableHeader();
    for (i = 0; i < 20; i++) {
        if (strcmp(contactNum, data[i].Details.contactNum) == 0) {
            counter++;
            printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data[i].venueID, data[i].sanitizeDate.day, data[i].sanitizeDate.month, data[i].sanitizeDate.year,
                data[i].Start.hours, data[i].Start.minute, data[i].End.hours, data[i].End.minute, data[i].Details.companyName,
                data[i].Details.personInCharge);

            switch (toupper(data[i].Details.gender)) {
            case 'F':
                printf("Female ");
                break;
            case 'M':
                printf(" Male  ");
                break;
            }

            printf("| %-12s |    %.2f    | ", data[i].Details.contactNum, data[i].Details.temperature);

            if (data[i].Details.infectionLevel <= 1) {
                printf(" Low Risk  |n");
            }
            else if (data[i].Details.infectionLevel <= 3) {
                printf(" Mid Risk  |n");
            }
            else if (data[i].Details.infectionLevel >= 4) {
                printf(" High Risk |n");
            }
        }
        else {
            emptyRecord++;
        }
    }
    tableFooter(counter, emptyRecord);
    fclose(searchPtr);
}

void searchGender() {
    struct SanitizeData data[20];
    FILE* searchPtr;
    int i = 0, emptyRecord = 0;
    char gender;
    int counter = 0;
    searchPtr = fopen("Sanitization Record.dat", "rb");
    if (searchPtr == NULL) {
        printf("Unable to open Santization Record.datn");
        exit(-1);
    }

    while (fread(&data[i], sizeof(data), 1, searchPtr) != 0) {
        i++;
    }

    printf("Enter Person In-Charge Gender to Search [F = Female, M = Male]: ");
    scanf("%c", &gender);

    tableHeader();
    for (i = 0; i < 20; i++) {
        if (gender == data[i].Details.gender) {
            counter++;
            printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data[i].venueID, data[i].sanitizeDate.day, data[i].sanitizeDate.month, data[i].sanitizeDate.year,
                data[i].Start.hours, data[i].Start.minute, data[i].End.hours, data[i].End.minute, data[i].Details.companyName,
                data[i].Details.personInCharge);

            switch (toupper(data[i].Details.gender)) {
            case 'F':
                printf("Female ");
                break;
            case 'M':
                printf(" Male  ");
                break;
            }

            printf("| %-12s |    %.2f    | ", data[i].Details.contactNum, data[i].Details.temperature);

            if (data[i].Details.infectionLevel <= 1) {
                printf(" Low Risk  |n");
            }
            else if (data[i].Details.infectionLevel <= 3) {
                printf(" Mid Risk  |n");
            }
            else if (data[i].Details.infectionLevel >= 4) {
                printf(" High Risk |n");
            }
        }
        else {
            emptyRecord++;
        }
    }
    tableFooter(counter, emptyRecord);
    fclose(searchPtr);
}

void searchTemperature() {
    struct SanitizeData data[20];
    FILE* searchPtr;
    int i = 0, emptyRecord = 0;
    float temperature;
    int counter = 0;
    searchPtr = fopen("Sanitization Record.dat", "rb");
    if (searchPtr == NULL) {
        printf("Unable to open Santization Record.datn");
        exit(-1);
    }

    while (fread(&data[i], sizeof(data), 1, searchPtr) != 0) {
        i++;
    }

    printf("Enter Temperature To Search [Eg: 36.6]: ");
    scanf("%f", &temperature);

    tableHeader();
    for (i = 0; i < 20; i++) {
        if (temperature == data[i].Details.temperature) {
            counter++;
            printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data[i].venueID, data[i].sanitizeDate.day, data[i].sanitizeDate.month, data[i].sanitizeDate.year,
                data[i].Start.hours, data[i].Start.minute, data[i].End.hours, data[i].End.minute, data[i].Details.companyName,
                data[i].Details.personInCharge);

            switch (toupper(data[i].Details.gender)) {
            case 'F':
                printf("Female ");
                break;
            case 'M':
                printf(" Male  ");
                break;
            }

            printf("| %-12s |    %.2f    | ", data[i].Details.contactNum, data[i].Details.temperature);

            if (data[i].Details.infectionLevel <= 1) {
                printf(" Low Risk  |n");
            }
            else if (data[i].Details.infectionLevel <= 3) {
                printf(" Mid Risk  |n");
            }
            else if (data[i].Details.infectionLevel >= 4) {
                printf(" High Risk |n");
            }
        }
        else {
            emptyRecord++;
        }
    }
    tableFooter(counter, emptyRecord);
    fclose(searchPtr);
}

void searchRecord() {
    int selection, invalidCounter;
    char userResponse;
    do {
        system("cls");
        do {
            invalidCounter = 0;
            printf("Search Record Based On Following Criteria: n");
            printf("1. Venue IDn");
            printf("2. Sanitization Daten");
            printf("3. Company Namen");
            printf("4. Person In-Chargen");
            printf("5. Contact Numbern");
            printf("6. Gendern");
            printf("7. Temperaturen");
            printf("8. Back to Sanitize Menun");
            printf("Enter Your Choice > ");
            scanf("%d", &selection);
            if (selection < 1 || selection > 8) {
                invalidCounter++;
                printf("- Error Found: Enter 1 - 8 ONLY - n");
                system("pause");
                system("cls");
            }
        } while (invalidCounter != 0);
        switch (selection) {
        case 1:
            searchVenueID();
            break;
        case 2:
            searchDate();
            break;
        case 3:
            searchCompany();
            break;
        case 4:
            searchName();
            break;
        case 5:
            searchContactNumber();
            break;
        case 6:
            searchGender();
            break;
        case 7:
            searchTemperature();
        case 8:
            sanitizeMenu();
            break;
        }
        printf("Anymore to Search? (N = No): ");
        scanf("%c", &userResponse);
        rewind(stdin);

    } while (toupper(userResponse) != 'N');
}

void modifyRecord() {
    struct SanitizeData data;
    struct SanitizeData modify[20];
    FILE* modifyPtr;
    int i = 0, counter = 0, validate, invalidCounter, emptyRecord = 0, modifyCounter = 0;
    char venueID[10], userResponse;
    modifyPtr = fopen("Sanitization Record.dat", "rb");
    if (modifyPtr == NULL) {
        printf("Unable to open Sanitization Record.datn");
        exit(-1);
    }

    while (fread(&data, sizeof(data), 1, modifyPtr) != 0) {
        modify[modifyCounter] = data;
        modifyCounter++;
    }

    modifyPtr = fopen("Sanitization Record.dat", "wb");
    if (modifyPtr == NULL) {
        printf("Unable to open Sanitization Record.datn");
        exit(-1);
    }
    do {
        system("cls");
        printf("Modify Sanitize Recordn");
        printf("----------------------nn");
        printf("Enter Venue ID To Modify: ");
        scanf("%s", &venueID);
        rewind(stdin);
        for (i = 0; i < modifyCounter; i++) {
            if (strcmp(venueID, modify[i].venueID) == 0) {

                printf("Venue ID                       : %sn", modify[i].venueID);
                printf("Sanitization Date              : %02d-%02d-%4dn", modify[i].sanitizeDate.day, modify[i].sanitizeDate.month, modify[i].sanitizeDate.year);
                printf("Starting Time                  : %02d:%02dn", modify[i].Start.hours, modify[i].Start.minute);
                printf("Ending Time                    : %02d:%02dn", modify[i].End.hours, modify[i].End.minute);
                printf("Sanitized Company Name         : %sn", modify[i].Details.companyName);
                printf("Person In-Charge  Name         : %sn", modify[i].Details.personInCharge);
                printf("Person In-Charge Gender        : %cn", modify[i].Details.gender);
                printf("Person In-Charge Contact Number: %sn", modify[i].Details.contactNum);
                printf("Person In-Charge Temperature   : %.2fnn", modify[i].Details.temperature);
                printf("Sure to Modify? (Y = Yes): ");
                scanf("%c", &userResponse);
                if (toupper(userResponse) == 'Y') {
                    counter++;
                    do {
                        invalidCounter = 0;

                        printf("Enter Sanitized Date in [DD/MM/YYYY Format Eg: 19/02/2021] : ");
                        validate = scanf("%d/%d/%d", &modify[i].sanitizeDate.day, &modify[i].sanitizeDate.month, &modify[i].sanitizeDate.year);
                        rewind(stdin);

                        printf("Enter Sanitized Time in [HH:MM Format Eg: 12:51] - n");
                        printf("Starting: ");
                        validate = scanf("%d:%d", &modify[i].Start.hours, &modify[i].Start.minute);
                        rewind(stdin);

                        printf("Ending: ");
                        validate = scanf("%d:%d", &modify[i].End.hours, &modify[i].End.minute);
                        rewind(stdin);

                        printf("Enter Santizie Handling Company Details: n");
                        printf("Company Name: ");
                        scanf("%[^n]", &modify[i].Details.companyName);
                        rewind(stdin);

                        printf("Person In-Charge Name:  ");
                        scanf("%[^n]", &modify[i].Details.personInCharge);
                        rewind(stdin);

                        printf("Person In-Charge Gender: ");
                        scanf("%c", &modify[i].Details.gender);
                        rewind(stdin);

                        printf("Person In-Charge Contact Numer: ");
                        scanf("%s", &modify[i].Details.contactNum);
                        rewind(stdin);

                        printf("Person In-Charge Temperature: ");
                        validate = scanf("%f", &modify[i].Details.temperature);
                        rewind(stdin);

                        modify[i].Details.infectionLevel = infectionLevelCheck();

                        if (modify[i].Details.temperature > 37.8) modify[i].Details.infectionLevel++;


                        if (validate == 0
                            || modify[i].sanitizeDate.day < 1 || modify[i].sanitizeDate.day > 31
                            || modify[i].sanitizeDate.month > 12 || modify[i].sanitizeDate.month < 1
                            || modify[i].Start.hours > 24 || modify[i].Start.hours < 1
                            || modify[i].Start.minute > 60 || modify[i].Start.minute < 1
                            || modify[i].End.hours > 24 || modify[i].End.hours < 1
                            || modify[i].End.minute > 60 || modify[i].End.minute < 1
                            || toupper(modify[i].Details.gender) != 'M' && toupper(modify[i].Details.gender) != 'F')
                        {
                            if (modify[i].sanitizeDate.day < 1 || modify[i].sanitizeDate.day > 31 || modify[i].sanitizeDate.month > 12 || modify[i].sanitizeDate.month < 1) {
                                printf("- Error Found: Invalid Month or Days Entered. -n");
                            }
                            if (modify[i].Start.hours > 24 || modify[i].Start.hours < 1 || modify[i].Start.minute > 60 || modify[i].Start.minute < 1) {
                                printf("- Error Found: Invalid Starting Hours or Minutes Entered. - n");
                            }

                            if (modify[i].End.hours > 24 || modify[i].End.hours < 1 || modify[i].End.minute > 60 || modify[i].End.minute < 1) {
                                printf("- Error Found: Invalid Ending Hours or Minutes Entered. - n");
                            }

                            if (toupper(modify[i].Details.gender) != 'M' || toupper(modify[i].Details.gender) != 'F') {
                                printf("- Error Found: Invalid Gender Entered. -n");
                            }

                            if (validate == 0) {
                                printf("- Error Found: Kindly Enter Valid Input Only. - n");
                            }

                            invalidCounter++;
                            system("pause");
                            system("cls");
                        }

                    } while (invalidCounter != 0);

                }
                else {
                    break;
                }
                fwrite(&modify[i], sizeof(data), 1, modifyPtr);
            }
            else {
                emptyRecord++;
            }
        }
        if (emptyRecord == 20) {
            printf("No Record Foundn");
        }
        printf("Continue Modify Record? (N = No): ");
        scanf("%c", &userResponse);
    } while (userResponse != 'N');
    printf("%d Record Modifiedn", counter);
    fclose(modifyPtr);
}

void displayRecord() {
    struct SanitizeData data;
    FILE* displayPtr;
    int i = 0;
    displayPtr = fopen("Sanitization Record.dat", "rb");

    if (displayPtr == NULL) {
        printf("Unable to open Sanitization Record.datn");
        exit(-1);
    }

    system("cls");

    printf("Display All Sanitization Recordn");
    printf("-------------------------------n");
    tableHeader();
    while (fread(&data, sizeof(data), 1, displayPtr) != 0) {
        printf("| %-5s | %02d-%02d-%4d %02d:%02d |   %02d:%02d  | %-13s | %-11s | ", data.venueID, data.sanitizeDate.day, data.sanitizeDate.month, data.sanitizeDate.year,
            data.Start.hours, data.Start.minute, data.End.hours, data.End.minute, data.Details.companyName,
            data.Details.personInCharge);

        switch (toupper(data.Details.gender)) {
        case 'F':
            printf("Female ");
            break;
        case 'M':
            printf(" Male  ");
            break;
        }
        printf("| %-12s |    %.2f    | ", data.Details.contactNum, data.Details.temperature);
        if (data.Details.infectionLevel <= 1) {
            printf(" Low Risk  |n");
        }
        else if (data.Details.infectionLevel <= 3) {
            printf(" Mid Risk  |n");
        }
        else if (data.Details.infectionLevel >= 4) {
            printf(" High Risk |n");
        }
        i++;
    }
    printf("------------------------------------------------------------------------------------------------------------------------n");
    printf("%d Record Foundn", i);
    fclose(displayPtr);
}

void deleteRecord() {
    struct SanitizeData data;
    struct SanitizeData delData[20];
    FILE* deletePtr;

    int i = 0, delCount = 0, position, emptyRecord = 0;
    char userResponse;
    char venueID[10];

    deletePtr = fopen("Sanitization Record.dat", "rb");
    if (deletePtr == NULL) {
        printf("Unable to open Sanitization.datn");
        exit(-1);
    }
    else {
        while (fread(&data, sizeof(data), 1, deletePtr) != 0) {
            delData[i] = data;
            i++;
            delCount++;
        }
    }
    fclose(deletePtr);

    deletePtr = fopen("Sanitization Record.dat", "wb");
    if(deletePtr == NULL) {
        printf("Unable to open Sanitization.datn");
        exit(-1);
    }
    else {

        do {
            printf("Delete Record Based On: ");
            printf("1. Venue IDn");
            printf("Enter Venue ID: ");
            scanf("%s", venueID);
            rewind(stdin);

            for (i = 0; i < delCount; i++) {
                if (strcmp(venueID, delData[i].venueID) == 0) {
                    printf("Venue ID                       : %sn", delData[i].venueID);
                    printf("Sanitization Date              : %02d-%02d-%4dn", delData[i].sanitizeDate.day, delData[i].sanitizeDate.month, delData[i].sanitizeDate.year);
                    printf("Starting Time                  : %02d:%02dn", delData[i].Start.hours, delData[i].Start.minute);
                    printf("Ending Time                    : %02d:%02dn", delData[i].End.hours, delData[i].End.minute);
                    printf("Sanitized Company Name         : %sn", delData[i].Details.companyName);
                    printf("Person In-Charge  Name         : %sn", delData[i].Details.personInCharge);
                    printf("Person In-Charge Gender        : %cn", delData[i].Details.gender);
                    printf("Person In-Charge Contact Number: %sn", delData[i].Details.contactNum);
                    printf("Person In-Charge Temperature   : %.2fnn", delData[i].Details.temperature);
                    position = i;
                    printf("Confirm to Delete? (Y = Yes): ");
                    scanf("%c", &userResponse);
                    rewind(stdin);
                    if (toupper(userResponse) == 'Y') {
                        for (i = position; i < delCount; i++) {
                            delData[i] = delData[i + 1];
                        }
                    }
                }
                else {
                    emptyRecord++;
                }
            }

            if (emptyRecord == 20) {
                printf("-Error Found: No Record - n");
            }

            printf("Anymore to Delete? (Y = Yes): ");
            scanf("%c", &userResponse);
            rewind(stdin);

            if (toupper(userResponse) == 'N') {
                for (int i = 0; i < delCount--; i++) {
                    fwrite(&delData[i], sizeof(delData[i]), 1, deletePtr);
                }
            }

        } while (toupper(userResponse) != 'N');
    }
    fclose(deletePtr);
}

void sanitizeMenu() {
    int validate, invalidCounter, selection;
    char userResponse;
    do {
        system("cls");
        do {
            invalidCounter = 0;
            printf("     Sanitization Record Modulen");
            printf("-------------------------------------n");
            printf("            MENUn");
            printf("[1] - Add Sanitization Recordn");
            printf("[2] - Search Sanitization Recordn");
            printf("[3] - Modify Sanitization Recordn");
            printf("[4] - Display Sanitization Recordn");
            printf("[5] - Delete Sanitization Recordn");
            printf("[6] - Record n");
            printf("[7] - Quit This Menun");
            printf("[8] - Exit The Programnn");
            printf("Enter Your Selection: ");
            validate = scanf("%d", &selection);
            rewind(stdin);
            if (selection < 1 || selection > 8 || validate == 0) {
                invalidCounter++;
                printf("- Error Found: Please Enter 1 - 7 Only -n");
                system("pause");
                system("cls");
            }

        } while (invalidCounter != 0);

        switch (selection) {
        case 1:
            addRecord();
            break;
        case 2:
            searchRecord();
            break;
        case 3:
            modifyRecord();
            break;
        case 4:
            displayRecord();
            break;
        case 5:
            deleteRecord();
            break;
        case 6:
            menu();
            break;
        case 7:
            footer();
            exit(0);
        }

        printf("Back to Sanitize Menu? (N = No): ");
        rewind(stdin);
        scanf("%c", &userResponse);
        rewind(stdin);
    } while (toupper(userResponse) != 'N');
}

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *