Skip to content
This repository has been archived by the owner on Sep 9, 2021. It is now read-only.

Liubchenkova Anna 203 lab3c #58

Closed

Conversation

Anna-Lyubchenkova
Copy link

Lab3c Система публикации и поиска вакансий

Linux terminal:

gcc -o client -pthread client.c
./client

Задание
Разработать распределенную систему, состоящую из приложений клиента и сервера, для ведения базы вакансий. Подразумевается использование одноуровневой системы вакансий (без сложной вложенной иерархии): имеется набор специальностей, в каждую из них можно подать вакансию. Кроме подачи вакансий должна осуществляться возможность многокритериального поиска по вакансиям. Информационная система должна обеспечивать параллельную работу нескольких клиентов.
Разработать клиент.

Основные возможности

Клиентское приложение должно реализовывать следующие функции:

  1. Возможность параллельной работы нескольких клиентов с одного
    или разных IP-адресов
  2. Установление соединения с сервером
  3. Разрыв соединения
  4. Обработка ситуации отключения сервером
  5. Получение и вывод списка специальностей
  6. Передача команды на добавление специальности
  7. Передача команды на удаление специальности
  8. Передача команды на добавление вакансии
  9. Получение и вывод списка вакансий по условиям поиска (при этом
    необходимо организовать поиск по полному и неполному набору
    критериев)

Реализация

Клиент позволяет работать с сервером биржа вакансий.
Что позволяет клиент:

  1. Запрашивать и выводить все вакансии
  2. Вывод список специальностей
  3. Удалить специальность
  4. Поиск определенной вакансии
  5. Добавить специальность
  6. Добавить вакансию
    Для реализации поиска на стороне клиента есть массив условий который будет считывать запрос пользователя на критерии поиска, а после передавать весь массив серверу, который уже на своей стороне будет это реализовывать.
if(pressButton == '4') {
            //Поиск
            tcsetattr(fileno(stdin), TCSANOW, &initial_settings);
            printf("По какому /каким критериям ищите ? \n");
            printf("-------Список критериев------------\n");
            printf("- Специальность\n");
            printf("- Компания\n");
            printf("- Зарплата\n");
            printf("- Должность\n");
            printf("- Возраст\n");
            printf("-------------------------------------\n");
            char buffer[buffMessage];
            bzero(buffer, buffMessage); 
            printf("Введите название специальности: ");
            fgets(buffer, buffMessage, stdin);
            buffer[strlen(buffer) - 1] = 0;
            findConditon[0] = strdup(buffer);
            bzero(buffer, buffMessage); 
            printf("Введите название компании: ");
            fgets(buffer, buffMessage, stdin);
            buffer[strlen(buffer) - 1] = 0;
            findConditon[1] = strdup(buffer);
            bzero(buffer, buffMessage); 
            printf("Введите зарплату в тысячах р.: ");
            fgets(buffer, buffMessage, stdin);
            buffer[strlen(buffer) - 1] = 0;
            findConditon[2] = strdup(buffer); 
            bzero(buffer, buffMessage); 
            printf("Введите должность: ");
            fgets(buffer, buffMessage, stdin);
            buffer[strlen(buffer) - 1] = 0;
            findConditon[3] = strdup(buffer);
            bzero(buffer, buffMessage); 
            printf("Введите возраст: ");
            fgets(buffer, buffMessage, stdin);
            buffer[strlen(buffer) - 1] = 0;
            findConditon[4] = strdup(buffer);
            int flag = 4;
            sendRequestToServer(sockfd,flag);
            getResponseFromServer(sockfd);
            for(int i = 0; i < maxCond; i++){
                free(findConditon[i]);
            }
            printf("Список вакансий:\n");
            for (int i = 0; i < countOffer; i++){
                printf("-----------ВАКАНСИЯ [%d]----------\n", i);
                printf("[Профессия]: <%s>\n", massOffers[i]->proff);
                printf("[Должность]: <%s>\n", massOffers[i]->positon);
                printf("[Зарплата]: <%d>\n", massOffers[i]->sall); 
                printf("[Возраст]: <%d>\n", massOffers[i]->age); 
                printf("[Компания]: <%s>\n", massOffers[i]->company);
                printf("----------------------------------\n", i);
            }
            for (int i = 0; i < countOffer; i++){
                massOffers[i] = NULL;
            }
            countOffer = 0;
        }

Как видно из фрагмента пользователь вводит условия строго в определенном формате. Если какой-то критерий ему не важен то просто вводит пустую строку.

Формата пакетов клиента серверу:
1.

flag

Flag = 0x00000001 Отправление запроса на список вакансий

flag

Flag = 0x00000002 Отправление запроса на список специальностей

flag ID

Flag = 0x00000003 Отправление запроса на удаление специальности
ID - int (4 байта)

flag length cond

Flag = 0x00000004 Отправление запроса на поиск вакансии по критериям
Length - int (4 байта)
Cond - массив однобайтных символов

flag length Speciality

Flag = 0x00000005 Отправление запроса на добавление новой специальности
Length - int (4 байта)
Cond - массив однобайтных символов

flag lengthS Speciality lengthP Position Salary Age lengthC CompanyName

Flag = 0x00000006 Отправление запроса на добавление новой вакансии
LengthS, LengthP, Position, Age, LengthC - int (4 байта)
Speciality, Position, CompanyName - массив однобайтных символов

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants