Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 52
1

Объясните программу по теме "Структуры"

14.02.2016, 20:04. Показов 682. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Необходима ваша помощь в решении задачи по теме "Структуры". Есть структура, элементы которой мы заполняем данными о людях. Не могу понять, как сделать поиск по году рождения, если я ввожу в данных о человеке Дату рождения в формате xx.xx.xxxx. Спасибо за ответ.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <stdio.h>
using namespace std;
const int SIZE = 100;
void enter(), init_list(), display(), input(int i), clean_data(), update(), Search(), Search_pol(), Search_birthday();
int menu();
struct human
{
    char name[100];
    char birthday[11];
    char address[100];
    char pol;
} person[SIZE];
int main()
{
    setlocale(LC_ALL, "Russian");
    char choice;
    init_list();
    for(;;)
    {
        choice = menu();
        switch(choice)
        {
        case 'a': enter();
            break;
        case 'b': display();
            break;
        case 'c': clean_data();
            break;
        case 'd': update();
            break;
        case 'e': Search();
            break;
        case 'f': return 0;
        }
    }
}
void init_list()
{
    int t;
    for(t = 0; t < SIZE; t++) *person[t].name='\0';
}
int menu()
{
    char ch;
    do
    {
        cout << "A. Ввести данные\n";
        cout << "B. Отобразить данные\n";
        cout << "C. Удалить данные\n";
        cout << "D. Удаление заданной структурированной переменной\n";
        cout << "E. Поиск информации\n";
        cout << "F. Выйти из программы\n";
        cout << "Выберите команду: ";
        cin >> ch;
    } while(!strchr("abcdef", tolower(ch)));
    return ch;
}
void enter()
{
    int i;
    for(i = 0; i < SIZE; i++)
        if(!*person[i].name) break;
    input(i);
}
void input(int i)
{
    getchar();
    cout << "Ф.И.О: ";
    cin.getline(person[i].name, 40);
    cout << "Дата Рождения: ";
    cin.getline(person[i].birthday, 15);
    cout << "Адрес: ";
    cin.getline(person[i].address, 40);
    cout << "Пол: ";
    cin >> person[i].pol;
    cout << endl;
}
void display()
{
    int t;
    for(t = 0; t < SIZE; t++)
    {
        if(*person[t].name)
        {
            cout << "Ф.И.О: " << person[t].name << endl;
            cout << "Дата Рождения: " << person[t].birthday << endl;
            cout << "Адрес: " << person[t].address << endl;
            cout << "Пол: " << person[t].pol << endl;
        }
    }
}
void clean_data()
{
    int i;
    for (i = 0; i < SIZE; i++)
    {
        *person[i].name = '\0';
    }
}
void update()
{
    int t;
    char name_del[15];
    cout << "Введите Ф.И.О для удаления: ";
    getchar();
    cin.getline(name_del, 40);
    for (t = 0; t < SIZE; t++)
    {
        if (*person[t].name == *name_del)
        {
            *person[t].name = '\0';
            t++;
        }
        else break;
    }
}
void Search()
{
    char option;
    cout << "A. Поиск по полу\n";
    cout << "B. Поиск по году рождения\n";
    cout << "Выберите команду: ";
    cin >> option;
    if (option == 'a')
    {
        Search_pol();
    }
    else if (option == 'b')
    {
        Search_birthday();
    }
}
void Search_pol()
{
    char ch;
    cout << "Введите пол(m/w): ";
    cin >> ch;
    int t;
    for (t = 0; t < SIZE; t++)
    {
        if (person[t].pol == ch)
        {
            cout << "Ф.И.О: " << person[t].name << endl;
            cout << "Дата Рождения: " << person[t].birthday << endl;;
            cout << "Адрес: " << person[t].address << endl;
        }
    }
}
void Search_birthday()
{
    int t, i;
    char mas[4], data[5];
    cout << "Введите год рождения: ";
    cin >> mas;
    for (t = 0; t < SIZE; t++)
    {
        
    }
    
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2016, 20:04
Ответы с готовыми решениями:

Объясните программу по теме "Структуры"
Добрый день. Необходима ваша помощь в решении задачи по теме &quot;Структуры&quot;. Есть структура, элементы...

Объясните программу по теме "Перегрузка функций"
Добрый день. Помогите разобрать следующую задачу. Всё понятно, кроме этих моментов: if (i &lt; 0)...

Объясните программу по теме "Битовые поля структур"
Добрый вечер. Пишу программу, в которой необходимо реализовать даты с помощью битового поля, но в...

Объясните программу по теме "Работа с файлами"
Доброго времени суток. Возникли сложности с написанием программы, не могу понять, где ошибка....

3
-L
15 / 9 / 12
Регистрация: 03.12.2015
Сообщений: 79
14.02.2016, 20:17 2
Kotelliada,

по-разному можно сделать, например "вытащить год из массива". Строку для поиска тоже превратить в string и сравнивать

C++
1
2
    char num[] = "25.01.1990";
    std::string str(num + 6, num + 10);
Осторожней с записями вида "+6", "+10". Можно вылезти за границу, если формат даты поменять.

Добавлено через 6 минут
Или так

C++
1
2
3
4
    std::string str1("25.01.1990");
    std::string str2("1990");
 
    int pos = str1.find(str2);
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 52
14.02.2016, 20:23  [ТС] 3
Мы же ведь вводим год с клавиатуры и ищем в поле birthday каждого массива структур.
0
-L
15 / 9 / 12
Регистрация: 03.12.2015
Сообщений: 79
14.02.2016, 21:33 4
Я написал абстрактно. Вам точно придется пробежаться по массиву структур. На каждом шагу вам надо будет взять поле birthday. Либо вытащить из него подстроку с годом и сравнить с введенной строкой. Либо искать введенную строку как подстроку во всем birthday.

1. Вытаскивать строку из birthday можно создавая std::string, как я показал (первый листинг). Также можно весь birthday перевести в std::string.
2. Введенную строку можно точно также перевести в std::string.
3. Сравнивать std::string можно при помощи =.
4. Если Вы решили не вытаскивать ничего из birthday. То можно сразу ее преобразовать в std::string целиком и воспользоваться функцией find.
5. Если вообще не использовать std::string то почитайте про функцию strcmp

Добавлено через 4 минуты
Чтобы чуть-чуть ускорить поиск можно сравнивать посимвольно с конца в начало и при несовпадении переходить к следующей структуре. Потому что обычное сравнение строк тоже происходит посимвольно слева направо. А последняя цифра года с большей вероятностью отличается у разных персон, чем первые две
0
14.02.2016, 21:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2016, 21:33
Помогаю со студенческими работами здесь

Создать программу по теме "структуры"
Необходимо создать программу структуры &quot;справочник&quot; С клавиатуры вводится ФИО и номер телефона,...

По теме СТРУКТУРЫ
Привет всем !Помогите с такой задачкой по теме СТРУКТУРЫ. 1. Создайте структуру, которая...

Лаба по теме Структуры
Помогите пожалуйста сделать лабу по программированию. Задание 1. Исходные данные хранятся в...

По теме Составление и отладка программ на циклические структуры
Составить блок-схему, программу вычисления переменной X от х1 до х2 и Y от y1 до y2 используя...

Объясните функцию по теме "Бинарные деревья"
В общем, у меня написана программа на тему &quot;Бинарные деревья&quot; с основными функциями (поиск,...

Объясните по теме "Пространства имён"
Разбираю пример из Страуструпа (спец.изд.,2011), стр. 70-71. Есть заголовочный файл stack.h, где в...

Объясните работу этой динамической структуры
Объясните пожалуйста работу этой динамической структуры. /* присвоить начальные значения NULL...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru