1

Тема: Пошук в структурі через фільтри

Доброго дня *DRINK* , працював над структурой, але зупинився на фільтрах, шукав як це можна реалізувати в коді, знайшов, але не розумію як зробити щоб відображалось не точна кількість, а стільки є цих даний при введені в структуру.
Допоможіть будь ласка :[
Сама суть про фільтри

Прихований текст

Фільтри: 1) Фільтри для відображення співробітників окремих посад (На основі запиту "Відділ кадрів").
2) Фільтри для відображення хвороб з однаковими симптомами (На основі запиту "Хвороби").
3) Фільтри для відображення пацієнтів з однаковими хворобами (На основі запиту "Пацієнти").

Повне завдання

Прихований текст

СТРУКТУРИ ПО «Лікарня».
1)    Співробітники (Код співробітника, ПІП, Вік, Пів, Адреса, Телефон, Паспортні дані, Код посади)[10 записів].
2)    Посади (Код посади, Найменування посади, Оклад, Обов'язки, Вимоги)[5 записів].
3)    Хвороби    (Код    хвороби,    Найменування,    Симптоми,    Тривалість, Наслідки, Код ліків 1, Код ліків 2, Код ліків 3)[10 записів].
4)    Пацієнти (ПІП пацієнта, Вік, Пів, Адреса, Телефон, Дата звернення, Код хвороби, Код співробітника, Результат лікування)[10 записів].
Фільтри: 1) Фільтри для відображення співробітників окремих посад (На основі запиту "Відділ кадрів").
2)    Фільтри для відображення хвороб з однаковими симптомами (На основі запиту "Хвороби").
3)    Фільтри для відображення пацієнтів з однаковими хворобами (На основі запиту "Пацієнти").

Мій код

#include "pch.h"
#include <iostream>
#include "stdio.h"
#include "locale"
#include "windows.h"
#include "string.h"
#include "math.h"
#include <cstdio>

using namespace std;

void spivrobit(void);
void posada(void);
void hvoroba(void);
void pacient(void);
void filter1(void);
void filter2(void);
void filter3(void);

struct medic
{
        struct spivrob
        {
            int kod_spiv;
            string PIP_spiv;
            int vik_spiv;
            string sex_spiv;
            string adress_spiv;
            int mobile_number_spiv;
            int id_spaiv;
            int kod_posadi;
        }spiv[10];

        struct posada
        {
            int kod_posadi;
            string nazvposady;
            int oklad;
            string obovyazku;
            string vimogi;
        }pos[5];

        struct hvoroba
        {
            int kod_hvoroby;
            string naum_hvorob;
            string simptomi;
            string trivalist;
            string naslidki;
            int kod_likiv_1;
            int kod_likiv_2;
            int kod_likiv_3;
        }hvor[10];

        struct pacient
        {
            string PIP_pac;
            int vik_pac;
            string sex_pac;
            string adress_pac;
            int mobile_number_pac;
            string data_zvernenna;
            int kod_hvoroby;
            int kod_spiv;
            string rezultat;
        }pac[10];
}med;

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    cout << "\n---Структура Лікарні---\n\n";

    spivrobit();
    posada();
    hvoroba();
    pacient();

    filter1();
    filter2();
    filter3();

    int z;
    cout << "Для завершення роботи програми введіть будь-яке число: "; cin >> z;
    return 0;
}

void spivrobit(void)
{
    int i;
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tСпівробітник\n";
    for (i = 0; i <= 9; i++) {
        cout << "Співобітник №"<<i+1<<"\n";
        cout << "Код співробітника: "; cin >> med.spiv[i].kod_spiv; "\n";
        cout << "ПІП: "; cin >> med.spiv[i].PIP_spiv; "\n";
        cout << "Вік: "; cin >> med.spiv[i].vik_spiv; "\n";
        cout << "Стать: "; cin >> med.spiv[i].sex_spiv; "\n";
        cout << "Адреса: "; cin >> med.spiv[i].adress_spiv; "\n";
        cout << "Номер телефону: "; cin >> med.spiv[i].mobile_number_spiv; "\n";
        cout << "Паспортні дані: "; cin >> med.spiv[i].id_spaiv; "\n";
        cout << "Код посади: "; cin >> med.spiv[i].kod_posadi; "\n";
        system("cls");
    }
    system("cls");
}

void posada(void)
{
    int i;
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tПосада\n";
    for (i = 0; i <= 4; i++) {
        cout << "Посада №" << i + 1 << "\n";
        cout << "Код посади: "; cin >> med.pos[i].kod_posadi; "\n";
        cout << "Найменування посади: "; cin >> med.pos[i].nazvposady; "\n";
        cout << "Оклад: "; cin >> med.pos[i].oklad; "\n";
        cout << "Обов'язки: "; cin >> med.pos[i].obovyazku; "\n";
        cout << "Вимоги: "; cin >> med.pos[i].vimogi; "\n";
        system("cls");
    }
    system("cls");
}

void hvoroba(void)
{
    int i;
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tХвороба\n";
    for (i = 0; i <= 9; i++) {
        cout << "Хвороба №" << i + 1 << "\n";
        cout << "Код хвороби: "; cin >> med.hvor[i].kod_hvoroby; "\n";
        cout << "Найменування: "; cin >> med.hvor[i].naum_hvorob; "\n";
        cout << "Симптоми: "; cin >> med.hvor[i].simptomi; "\n";
        cout << "Тривалість: "; cin >> med.hvor[i].trivalist; "\n";
        cout << "Наслідки:"; cin >> med.hvor[i].naslidki; "\n";
        cout << "Код ліків 1: "; cin >> med.hvor[i].kod_likiv_1; "\n";
        cout << "Код ліків 2: "; cin >> med.hvor[i].kod_likiv_2; "\n";
        cout << "Код ліків 3: "; cin >> med.hvor[i].kod_likiv_3; "\n";
        system("cls");
    }
    system("cls");
}

void pacient(void)
{
    int i;
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tПацієнт\n";
    for (i = 0; i <= 9; i++) {
        cout << "Пацієнт №" << i + 1 << "\n";
        cout << "ПІП: "; cin >> med.pac[i].PIP_pac; "\n";
        cout << "Вік: "; cin >> med.pac[i].vik_pac; "\n";
        cout << "Стать: "; cin >> med.pac[i].sex_pac; "\n";
        cout << "Адреса: "; cin >> med.pac[i].adress_pac; "\n";
        cout << "Телефон: "; cin >> med.pac[i].mobile_number_pac; "\n";
        cout << "Дата звернення: "; cin >> med.pac[i].data_zvernenna; "\n";
        cout << "Код хвороби: "; cin >> med.pac[i].kod_hvoroby; "\n";
        cout << "Код співробітника: "; cin >> med.pac[i].kod_spiv; "\n";
        cout << "Результат лікування: "; cin >> med.pac[i].rezultat; "\n";
        system("cls");
    }
    system("cls");
}

void filter1(void)
{
    int i;
    int type;

    cout << "Відділ кадрів: ", cin >> type;
    for (i = 0; i < /*HZ*/; i++) {
        if (type == med.pos[i].kod_posadi) {

            cout << "Співобітник №" << i + 1 << "\n";
            cout << "Код співробітника: " << med.spiv[i].kod_spiv << "\n";
            cout << "ПІП: " << med.spiv[i].PIP_spiv << "\n";
            cout << "Вік: " << med.spiv[i].vik_spiv << "\n";
            cout << "Стать: " << med.spiv[i].sex_spiv << "\n";
            cout << "Адреса: " << med.spiv[i].adress_spiv << "\n";
            cout << "Номер телефону: " << med.spiv[i].mobile_number_spiv << "\n";
            cout << "Паспортні дані: " << med.spiv[i].id_spaiv << "\n";
            cout << "\n\n";

        }
    }
}

void filter2(void)
{
    int i;
    int type;

    cout << "Хвороби: ", cin >> type;
    for (i = 0; i < /*HZ*/; i++) {
        if (type == med.hvor[i].simptomi) {

            cout << "Хвороба №" << i + 1 << "\n";
            cout << "Код хвороби: " << med.hvor[i].kod_hvoroby; "\n";
            cout << "Найменування: " << med.hvor[i].naum_hvorob; "\n";
            cout << "Тривалість: " << med.hvor[i].trivalist; "\n";
            cout << "Наслідки:" << med.hvor[i].naslidki; "\n";
            cout << "Код ліків 1: " << med.hvor[i].kod_likiv_1; "\n";
            cout << "Код ліків 2: " << med.hvor[i].kod_likiv_2; "\n";
            cout << "Код ліків 3: " << med.hvor[i].kod_likiv_3; "\n";
            cout << "\n\n";

        }
    }
}

void filter3(void)
{
    int i;
    int type;

    cout << "Пацієнти: ", cin >> type;
    for (i = 0; i < /*HZ*/; i++) {
        if (type == med.hvor[i].kod_hvoroby) {

            cout << "Пацієнт №" << i + 1 << "\n";
            cout << "ПІП: " << med.pac[i].PIP_pac; "\n";
            cout << "Вік: " << med.pac[i].vik_pac; "\n";
            cout << "Стать: " << med.pac[i].sex_pac; "\n";
            cout << "Адреса: " << med.pac[i].adress_pac; "\n";
            cout << "Телефон: " << med.pac[i].mobile_number_pac; "\n";
            cout << "Дата звернення: " << med.pac[i].data_zvernenna; "\n";
            cout << "Код співробітника: " << med.pac[i].kod_spiv; "\n";
            cout << "Результат лікування: " << med.pac[i].rezultat; "\n";
            cout << "\n\n";

        }
    }
}

Буду вдячний за допомогу :)

2 Востаннє редагувалося koala (21.04.2019 21:15:32)

Re: Пошук в структурі через фільтри

Дуже раджу:
- розділити проголошення типів та змінних: замість

struct X {
} x;

зробити

struct X{
}:
...
X x;

- назви типів писати з великої і не дописувати в назвах полів назву типу:

        struct Spivrob
        {
            int kod;
            string pip;
            int vik;
...

(краще взагалі англійською і без скорочень, ну то таке)
- додати окремі функції для введення та виведення одного запису кожного типу. Можна навіть як методи.

struct Employee {
  int id;
  string full_name;
  int age;
  string sex;
  string address;
  int phone_number;
  string passport_info;
  int position_id;
  void input(){
        cout << "Код співробітника: "; cin >> id;
        cout << "ПІП: "; cin >> full_name;
...
  }
  void output() {
    cout << "Код співробітника: " << id << "\n";
    cout << "ПІП: " << full_name << "\n";
...
  }
};
struct Hospital
{
  Employee emplyees[10];
};

Hospital hospital;

void init_emplyees()
{
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tСпівробітник\n";
    for (int i = 0; i < 10; i++) {
        cout << "Співобітник №"<<i+1<<"\n";
        hospital.employees[i].input();
        system("cls");
    }
}

Тепер фільтр виглядатиме так:

void filter1(void)
{
    int type;
    int count = 0;
    cout << "Відділ кадрів: ", cin >> type;
    for (int i = 0; i < 10; i++) {
        if (type == hospital.employees[i].position_id) {
            cout << "Співобітник №" << i + 1 << "\n";
            hospital.employees[i].output();
            count++; //враховуємо
        }
    }
    cout << "Всього знайдено : " << count << " записів\n";
}

- викиньте зайві бібліотеки, правильно їх назвіть та поставте правильні лапки (для системних бібліотек - <>, для ваших із поточної папки - "").
- замініть всі "магічні числа", як-от розміри масивів, на константи

#define EMPLOYEES_NUMBER 10
Emplyee emplyees[EMPLOYEES_NUMBER];
for(int i = 0; i <EMPLOYEES_NUMBER; ++i)...

Можна ще багато покращень зробити, але ці, гадаю, в межах ваших знань.

Подякували: fyyrest2

3

Re: Пошук в структурі через фільтри

koala написав:

Дуже раджу:
- розділити проголошення типів та змінних: замість

struct X {
} x;

зробити

struct X{
}:
...
X x;

- назви типів писати з великої і не дописувати в назвах полів назву типу:

        struct Spivrob
        {
            int kod;
            string pip;
            int vik;
...

(краще взагалі англійською і без скорочень, ну то таке)
- додати окремі функції для введення та виведення одного запису кожного типу. Можна навіть як методи.

struct Employee {
  int id;
  string full_name;
  int age;
  string sex;
  string address;
  int phone_number;
  string passport_info;
  int position_id;
  void input(){
        cout << "Код співробітника: "; cin >> id;
        cout << "ПІП: "; cin >> full_name;
...
  }
  void output() {
    cout << "Код співробітника: " << id << "\n";
    cout << "ПІП: " << full_name << "\n";
...
  }
};
struct Hospital
{
  Employee emplyees[10];
};

Hospital hospital;

void init_emplyees()
{
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tСпівробітник\n";
    for (int i = 0; i < 10; i++) {
        cout << "Співобітник №"<<i+1<<"\n";
        hospital.employees[i].input();
        system("cls");
    }
}

Тепер фільтр виглядатиме так:

void filter1(void)
{
    int type;
    int count = 0;
    cout << "Відділ кадрів: ", cin >> type;
    for (int i = 0; i < 10; i++) {
        if (type == hospital.employees[i].position_id) {
            cout << "Співобітник №" << i + 1 << "\n";
            hospital.employees[i].output();
            count++; //враховуємо
        }
    }
    cout << "Всього знайдено : " << count << " записів\n";
}

- викиньте зайві бібліотеки, правильно їх назвіть та поставте правильні лапки (для системних бібліотек - <>, для ваших із поточної папки - "").
- замініть всі "магічні числа", як-от розміри масивів, на константи

#define EMPLOYEES_NUMBER 10
Emplyee emplyees[EMPLOYEES_NUMBER];
for(int i = 0; i <EMPLOYEES_NUMBER; ++i)...

Можна ще багато покращень зробити, але ці, гадаю, в межах ваших знань.

Дуже дякую, але виникла ще одна проблема
https://pp.сайт-злодій/c851024/v851024249/10329a/-nRFS4MCI2Q.jpg
В другому фільтрі

void filter2(void)
{
    int type;
    int count = 0;
    cout << "Хвороби: ", cin >> type;
    for (int i = 0; i < 10; i++) {
        if (type == hospital.diseases[i].symptoms) {
            cout << "Хвороба №" << i + 1 << "\n";
            hospital.diseases[i].output();
            count++; //враховуємо
        }
    }
    cout << "Всього знайдено : " << count << " записів\n";
}

Суть проблеми я розумію, але не знаю як вирішити, потрібно щоб пошук був за симптомами, а не за цифрами. *TIRED*

Новий код

#include "pch.h"
#include <iostream>
#include <stdio.h>
#include <locale>
#include <windows.h>
#include <string.h>
#include <cstdio>

using namespace std;

struct Employee {
    int id;
    string full_name;
    int age;
    string sex;
    string address;
    int phone_number;
    string passport_info;
    int position_id;

    void input() {
        cout << "Код співробітника: "; cin >> id;
        cout << "ПІП: "; cin >> full_name;
        cout << "Вік: "; cin >> age;
        cout << "Стать: "; cin >> sex;
        cout << "Адреса: "; cin >> address;
        cout << "Телефон: "; cin >> phone_number;
        cout << "Паспортні дані: "; cin >> passport_info;
        cout << "Код посади: "; cin >> position_id;
    }
    void output() {
        cout << "Код співробітника: " << id << "\n";
        cout << "ПІП: " << full_name << "\n";
        cout << "Вік: " << age << "\n";
        cout << "Стать: " << sex << "\n";
        cout << "Адреса: " << address << "\n";
        cout << "Телефон: " << phone_number << "\n";
        cout << "Паспортні дані: " << passport_info << "\n";
        cout << "Код посади: " << position_id << "\n";
    }
};

struct Position {
    int position_id;
    string position_name;
    int salary;
    string duties;
    string demand;

    void input() {
        cout << "Код посади: "; cin >> position_id;
        cout << "Найменування посади: "; cin >> position_name;
        cout << "Оклад: "; cin >> salary;
        cout << "Обов'язки: "; cin >> duties;
        cout << "Вимоги: "; cin >> demand;
    }
    void output() {
        cout << "Код посади: " << position_id << "\n";
        cout << "Найменування посади: " << position_name << "\n";
        cout << "Оклад: " << salary << "\n";
        cout << "Обов'язки: " << duties << "\n";
        cout << "Вимоги: " << demand << "\n";
    }
};

struct Disease {
    int disease_id;
    string disease_name;
    string symptoms;
    string continuance;
    string consequent;
    int medicament_id_1;
    int medicament_id_2;
    int medicament_id_3;

    void input() {
        cout << "Код хвороби: "; cin >> disease_id;
        cout << "Найменування: "; cin >> disease_name;
        cout << "Симптоми: "; cin >> symptoms;
        cout << "Тривалість: "; cin >> continuance;
        cout << "Наслідки: "; cin >> consequent;
        cout << "Код ліків 1: "; cin >> medicament_id_1;
        cout << "Код ліків 2: "; cin >> medicament_id_2;
        cout << "Код ліків 3: "; cin >> medicament_id_3;
    }
    void output() {
        cout << "Код хвороби: " << disease_id << "\n";
        cout << "Найменування: " << disease_name << "\n";
        cout << "Симптоми: " << symptoms << "\n";
        cout << "Тривалість: " << continuance << "\n";
        cout << "Наслідки: " << consequent << "\n";
        cout << "Код ліків 1: " << medicament_id_1 << "\n";
        cout << "Код ліків 2: " << medicament_id_2 << "\n";
        cout << "Код ліків 3: " << medicament_id_3 << "\n";
    }
};

struct Pacient {
    string full_name_pacient;
    int age;
    string sex;
    string address;
    int phone_number;
    string date_of_treatment;
    int disease_id;
    int position_id;
    string result;

    void input() {
        cout << "ПІП пацієнта: "; cin >> full_name_pacient;
        cout << "Вік: "; cin >> age;
        cout << "Стать: "; cin >> sex;
        cout << "Адреса: "; cin >> address;
        cout << "Телефон: "; cin >> phone_number;
        cout << "Дата звернення: "; cin >> date_of_treatment;
        cout << "Код хвороби: "; cin >> disease_id;
        cout << "Код співробітника: "; cin >> position_id;
        cout << "Результат лікування: "; cin >> result;
    }
    void output() {
        cout << "ПІП пацієнта: " << full_name_pacient << "\n";
        cout << "Вік: " << age << "\n";
        cout << "Стать: " << sex << "\n";
        cout << "Адреса: " << address << "\n";
        cout << "Телефон: " << phone_number << "\n";
        cout << "Дата звернення: " << date_of_treatment << "\n";
        cout << "Код хвороби: " << disease_id << "\n";
        cout << "Код співробітника: " << position_id << "\n";
        cout << "Результат лікування: " << result << "\n";
    }
};

struct Hospital
{
    Employee emplyees[10];
    Position positions[5];
    Disease diseases[10];
    Pacient pacients[10];
};

Hospital hospital;

void init_emplyees()
{
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tСпівробітник\n";
    for (int i = 0; i < 10; i++) {
        cout << "Співобітник №" << i + 1 << "\n";
        hospital.emplyees[i].input();
        system("cls");
    }
}

void init_positions()
{
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tПосада\n";
    for (int i = 0; i < 10; i++) {
        cout << "Посада №" << i + 1 << "\n";
        hospital.positions[i].input();
        system("cls");
    }
}

void init_diseases()
{
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tХвороба\n";
    for (int i = 0; i < 10; i++) {
        cout << "Хвороба №" << i + 1 << "\n";
        hospital.diseases[i].input();
        system("cls");
    }
}

void init_pacients()
{
    cout << "\n---Заповнення структури---\n";
    cout << "\n\tПацієнт\n";
    for (int i = 0; i < 10; i++) {
        cout << "Пацієнт №" << i + 1 << "\n";
        hospital.pacients[i].input();
        system("cls");
    }
}

void filter1(void);
void filter2(void);
void filter3(void);

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    cout << "\n---Структура Лікарні---\n\n";

    init_emplyees();
    init_positions();
    init_diseases();
    init_pacients();

    filter1();
    filter2();
    filter3();

    int z;
    cout << "Для завершення роботи програми введіть будь-яке число: "; cin >> z;
    return 0;
}

void filter1(void)
{
    int type;
    int count = 0;
    cout << "Відділ кадрів: ", cin >> type;
    for (int i = 0; i < 10; i++) {
        if (type == hospital.emplyees[i].position_id) {
            cout << "Співобітник №" << i + 1 << "\n";
            hospital.emplyees[i].output();
            count++; //враховуємо
        }
    }
    cout << "Всього знайдено : " << count << " записів\n";
}

void filter2(void)
{
    int type;
    int count = 0;
    cout << "Хвороби: ", cin >> type;
    for (int i = 0; i < 10; i++) {
        if (type == hospital.diseases[i].symptoms) {
            cout << "Хвороба №" << i + 1 << "\n";
            hospital.diseases[i].output();
            count++; //враховуємо
        }
    }
    cout << "Всього знайдено : " << count << " записів\n";
}

void filter3(void)
{
    int type;
    int count = 0;
    cout << "Пацієнти: ", cin >> type;
    for (int i = 0; i < 10; i++) {
        if (type == hospital.pacients[i].disease_id) {
            cout << "Пацієнт №" << i + 1 << "\n";
            hospital.pacients[i].output();
            count++; //враховуємо
        }
    }
    cout << "Всього знайдено : " << count << " записів\n";
}

4

Re: Пошук в структурі через фільтри

Я вам таки ремоендую змінити мову віжуал студії на англійцьку. На то є багато причин.

Подякували: fyyrest, koala2

5

Re: Пошук в структурі через фільтри

fyyrest написав:

потрібно щоб пошук був за симптомами, а не за цифрами.

То вводьте симптом, а не числа.
І не плутайте числа із цифрами.

6

Re: Пошук в структурі через фільтри

Там помилка йде

Прихований текст

Error C2678 binary '==': no operator found which takes a left-hand operand of type 'int' (or there is no acceptable conversion)

Як її виправити?

7

Re: Пошук в структурі через фільтри

Я не зовсім розумію, що саме вам не зрозуміло. Проблема у виразі

type == hospital.diseases[i].symptoms

в операторі ==, це ви бачите? У нього є два операнди - один type, типу int, другий hospital.diseases[i].symptoms, типу string.
Якби було написано

1 == string("1")

то ви б знали, як виправити цю помилку?

8

Re: Пошук в структурі через фільтри

koala написав:

Я не зовсім розумію, що саме вам не зрозуміло. Проблема у виразі

type == hospital.diseases[i].symptoms

в операторі ==, це ви бачите? У нього є два операнди - один type, типу int, другий hospital.diseases[i].symptoms, типу string.
Якби було написано

1 == string("1")

то ви б знали, як виправити цю помилку?

Ні, навіть гадки не маю як це зробити :(

9

Re: Пошук в структурі через фільтри

Замість

int type;

зробіть

string type;

і почитайте підручник про типи даних.

Подякували: fyyrest1

10

Re: Пошук в структурі через фільтри

koala написав:

Замість

int type;

зробіть

string type;

і почитайте підручник про типи даних.

Дуже Вам дякую за допомогу! *THUMBSUP*