Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
11 kB
1
Indexable
Never
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <locale.h>
typedef struct date {
    int nomer, naz, srok;
} date;

typedef struct data {
    char name[50];
    struct date D;
} data;

typedef struct table {
    data Q[50];
    int N;
} table;

void ADD(table* T) //добавление данных
{
    printf("Фамилия ");
    scanf("%s", &T->Q[T->N].name);
    printf("Номер читательского билета ");
    scanf("%d", &T->Q[T->N].D.nomer);
    printf("Название книги ");
    scanf("%d", &T->Q[T->N].D.naz);
    printf("Срок возврата ");
    scanf("%d", &T->Q[T->N].D.srok);
    T->N += 1;
    return;
}

table PRINT(table T) // вывод таблицы
{
    for (int i = 0; i < T.N; i++)
    {
        printf("Фамилия - %s\n", T.Q[i].name);
        printf("Номер читательского билета - %d\n", T.Q[i].D.nomer);
        printf("Название книги - %d\n", T.Q[i].D.naz);
        printf("Срок возврата - %d\n", T.Q[i].D.srok);
    }
    return;
}

void menu() //вывод меню таблицы
{
    printf("1 - Внести данные\n");
    printf("2 - Загрузить таблицу\n");
    printf("3 - Сохранить таблицу\n");
    printf("4 - Просмотр таблицы\n");
    printf("5 - Сортировка таблицы\n");
    printf("6 - Поиск \n");
    printf("7 - Удалить элемент\n");
    printf("8 - Изменить элемент\n");
}
void load(table* T, FILE* test) //загрузка таблицы
{
    if ((test = fopen("test.txt", "r")) == NULL)
    {
        printf("NO\n");
        system("pause");
    }
    else
    {
        T->N = 0;
        while (!feof(test))
        {
            fscanf(test, "%s %d %d %d", &T->Q[T->N].name, &T->Q[T->N].D.naz, &T->Q[T->N].D.nomer, &T->Q[T->N].D.srok);
            T->N++;
        }
        printf("okk");
    }
    fclose(test);
}

void save(table T, FILE* test) // сохранение таблицы 
{
    test = fopen("test.txt", "w"); // открытие файла
    for (int i = 0; i < T.N; i++) 
    {
        if (i < (T.N - 1))
            fprintf(test, "%s %d %d %d\n", T.Q[i].name, T.Q[i].D.nomer, T.Q[i].D.naz, T.Q[i].D.srok); // сканирование данных и сохранение их в таблицу
        else
            fprintf(test, "%s %d %d %d", T.Q[i].name, T.Q[i].D.nomer, T.Q[i].D.naz, T.Q[i].D.srok);
    }
    fclose(test);
}
void delete(table* T, int pos) // удаление данных таблицы
{
    for (int i = pos; i < T->N; i++)
    {
        T->Q[i] = T->Q[i + 1];
        (T->N)--;
    }
}
void sort(table* T) // сортировка таблицы 
{
    printf("Сортировать по :\n");
    printf("1 - По фамилии\n");
    printf("2 - По номеру\n");
    printf("3 - По названию\n");
    printf("4 - По сроку\n");
    int h;

    scanf("%d", &h);
    switch (h) // выбор данных по которым следует сортировать
    {
    case 1: // сортировка по имении 
    {
        for (int i = 0; i < (T->N) - 1; i++)
        {
            for (int j = i + 1; j < T->N; j++)
            {
                if (T->Q[i].D.nomer > T->Q[j].D.nomer)
                {
                    data tmp = T->Q[i];
                    T->Q[i] = T->Q[j];
                    T->Q[j] = tmp;
                }
            }
        }
        PRINT(*T);

        break;
    }
    case 2: // сортировка по номеру 
    {
        for (int i = 0; i < (T->N) - 1; i++)
        {
            for (int j = i + 1; j < T->N; j++)
            {
                if (T->Q[i].D.nomer > T->Q[j].D.nomer)
                {
                    data tmp = T->Q[i];
                    T->Q[i] = T->Q[j];
                    T->Q[j] = tmp;
                }
            }
        }
        PRINT(*T);
        break;
    }
    case 3: // сортировка по названия билета 
    {
        for (int i = 0; i < (T->N) - 1; i++)
        {
            for (int j = i + 1; j < T->N; j++)
            {
                if (T->Q[i].D.naz > T->Q[j].D.naz)
                {
                    data tmp = T->Q[i];
                    T->Q[i] = T->Q[j];
                    T->Q[j] = tmp;
                }
            }
        }
        PRINT(*T);
        break;
    }
    case 4: // сортировка по сроку
    {
        for (int i = 0; i < (T->N) - 1; i++)
        {
            for (int j = i + 1; j < T->N; j++)
            {
                if (T->Q[i].D.srok > T->Q[j].D.srok)
                {
                    data tmp = T->Q[i];
                    T->Q[i] = T->Q[j];
                    T->Q[j] = tmp;
                }
            }
        }
        PRINT(*T);
        break;
    }
    default:
    {
        break;
    }
    }

}
char* find(char* p, char* q) // сравнение строк для поиска данных 
{
    int i;
    for (; *p != '\0'; p++)
    {
        for (i = 0; q[i] != '\0' && q[i] == p[i]; i++);
        if (q[i] == '\0') return p;
    }
    return 0;
}
void search(table* T) // поиск данных таблицы 
{
    printf("Поиск по\n");
    printf("1 - По Фамилии\n");
    printf("2 - По номеру\n");
    printf("3 - По названию\n");
    printf("4 - По сроку\n");
    int p;
    int k;
    int n;
    char poisk[20];

    scanf("%d", &p);
    switch (p) // выбор данных по которым следует искать 
    {
    case 1: // искать по имени 
    {
        printf("Введите назавние\n");
        scanf("%s", &poisk);
        for (int i = 0; i < T->N; i++)
        {
            if (find(T->Q[i].name, poisk)) // вывод найденых данных 
            {
                k = 1;
                printf("Найдено:\n");
                printf("Фамилия - %s \n", T->Q[i].name);
                printf("Номер - %d \n", T->Q[i].D.nomer);
                printf("Название - %d \n", T->Q[i].D.naz);
                printf("Срок - %d \n", T->Q[i].D.srok);

            }
        }
        if (k == 0)
        {
            printf("Ничего не найдено");

        }
        break;
    }
    case 2: // искать по номеру билета 
    {

        printf("Введите номер\n");
        scanf("%d", &n);
        for (int i = 0; i < T->N; i++)
        {
            if (n == T->Q[i].D.nomer) // вывод найденных данных 
            {
                k = 1;
                printf("Фамилия - %s \n", T->Q[i].name);
                printf("Номер - %d \n", T->Q[i].D.nomer);
                printf("Название - %d \n", T->Q[i].D.naz);
                printf("Срок - %d \n", T->Q[i].D.srok);
            }

        }
        if (k == 0)
        {
            printf("Ничего не найдено");

        }
        break;
    }
    case 3: // искать по названию книги 
    {
        printf("Введите название\n");
        scanf("%d", &n);
        for (int i = 0; i < T->N; i++)
        {
            if (n == T->Q[i].D.naz) // вывод найденных данных 
            {
                k = 1;
                printf("Фамилия - %s \n", T->Q[i].name);
                printf("Номер - %d \n", T->Q[i].D.nomer);
                printf("Название - %d \n", T->Q[i].D.naz);
                printf("Срок - %d \n", T->Q[i].D.srok);
            }

        }
        if (k == 0)
        {
            printf("Ничего не найдено");

        }
        break;
    }
    case 4: // искать по сроку 
    {
        printf("Введите срок\n");
        scanf("%d", &n);
        for (int i = 0; i < T->N; i++)
        {
            if (n == T->Q[i].D.srok) // вывод найденных материалов 
            {
                k = 1;
                printf("Фамилия - %s \n", T->Q[i].name);
                printf("Номер - %d \n", T->Q[i].D.nomer);
                printf("Название - %d \n", T->Q[i].D.naz);
                printf("Срок - %d \n", T->Q[i].D.srok);
            }

        }
        if (k == 0)
        {
            printf("Ничего не найдено");

        }
        break;
    }
    default:
    {
        break;
    }

    }



}


int main() // главное составляющее программы 
{
    FILE* test; 
    setlocale(LC_ALL, "Rus"); // Сохранени еданных на русском 
    table T;
    T.N = 0;
    menu(); // вывод меню таблицы 
    int vod, nom, i, n;
    while (1) // вывод нужный данных 
    {
        scanf("%d", &vod); 
        switch (vod)
        {
        case 1: //добавить данные
        {
            ADD(&T);
            break;
        }
        case 2: // загрузка таблицы 
        {
            load(&T, &test);
            printf("sssjjsjsjryrys");
            break;
        }
        case 3: // сохранение таблицы 
        {
            save(T, &test);
            break;
        }

        case 4: // вывести таблицу 
        {
            PRINT(T);
            break;
        }
        case 5: // сортировать таблицу 
        {
            sort(&T);
            break;
        }
        case 6: // поиск по таблице 
        {
            search(&T);
            break;
        }
        case 7: // удаление данных таблицы 
        {
            printf("Какую строку хотите удалить?\n");
            scanf("%d", &nom);
            delete(&T, nom - 1);

            break;
        }
        case 8: // изменение данных таблицы 
        {
            printf("Какую запись изменить\n");
            scanf("%d", &n);
            delete(&T, n - 1);
            ADD(&T);
            break;
        }


        default:
        {
            break;
        }
        }
    }
    system("pause");
}