Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 12.01.2020
Сообщений: 28
Записей в блоге: 11
1

Создать запись для хранения. Для хранения данных использовать стек. Для группировки данных использовать очередь

27.01.2020, 15:48. Показов 869. Ответов 2

Решил выложить свои лабораторные работы 1-10 за первый курс, первого семестра (01.09.2019-10.01.2020). Искренне надеюсь, что они кому-нибудь пригодятся.

Примечания к программе смотрите в исходном файле Source.cpp (архив находится по веб-адресу ниже). Здесь я их удалил, чтобы не нагромождать программу.

Изменение условия задания:
1. ExtremumAllFunction.cpp - дополнительная функция к программе, которая не входит в условия задания. Добавил просто ради разнообразия.
2. QuantityFunction.cpp работает не совсем так, как требуется в условии задания, поскольку считает общее количество студентов по всем факультетам (всему учебному заведению), а не по факультетам. Как сделать по факультетам, я догадаться не смог.

1 / 11. Source.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13.
 *1. Создать запись для хранения следующей информации:
 *1) ФИО студента;
 *2) Факультет;
 *3) Курс;
 *4) Дата рождения;
 *5) Место рождения.
 *2. Предусмотреть возможность добавления, изменения и удаление записи и отображения данных на экран. Для хранения данных использовать
 *     стек.
 *3. Получить список студентов, возраст которых меньше среднего.
 *4. Найти максимальный и минимальный возраст студентов по каждому из встречающихся факультетов. Для группировки данных использовать
 *     очередь.
 *5. Найти количество студентов для каждого из встречающихся мест рождения.
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN, COUT. //
#include "Header.h"
 
int main () {
     setlocale (LC_ALL, "Russian");
     int Choice = 0;
     void (*PointerOnFunction []) (ElementStruct*) = {AddRecordFunction, ChangeRecordFunction, DeleteRecordFunction,
          WriteStackFunction, MiddleAgeFunction, ExtremumFacultyFunction, QuantityFunction, ExtremumAllFunction};
     ElementStruct *SourceStruct = new ElementStruct;                // Объявление SOURCESTRUCT типа ELEMENTSTRUCT. //
     SourceStruct->Head = NULL;                                      // Инициализация SOURCESTRUCT (вершины). //
     while (Choice != 9) {
          printf ("--------------------------------------------------------\n                      ГЛАВНОЕ МЕНЮ\n------------------------"
               "--------------------------------\n1) Добавление записи о студенте........................1\n2) Изменение ПОСЛЕДНЕЙ записи"
               " о студенте...............2\n3) Удаление ПОСЛЕДНЕЙ записи о студенте................3\n4) Список студентов в ОБРАТНОМ пор"
               "ядке.................4\n5) Список студентов, возраст которых меньше среднего...5\n6) Список старших и младших студентов.."
               "................6\n7) Количество студентов................................7\n8) Самый старший и младший студенты........."
               "...........8\n9) Выход из программы..................................9\n\nВаш выбор : ");
          cin >> Choice;
          if ((Choice > 0) && (Choice < 9)) {
               (*PointerOnFunction [Choice - 1]) (SourceStruct);
               cout << endl;
          }
    }
    DestructorFunction (SourceStruct);                               // Деструктор SOURCEARRAY. //
    cout << endl << endl;
    ExitProgramFunction ();
}
2 / 11. Header.h:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
using namespace std;
 
struct ElementStruct {                                               // Объявление ELEMENTSTRUCT. //
     int CourseOfStudies, Date, Month, Years;
     char Name [16], Faculty [16], PlaceOfBirth [16];                // [0]..[15] = 1..16 (для ввода с клавиатуры), [16] = 17
     ElementStruct *Head, *Tail;                                     // (для "\0"). //
};
 
void ExitProgramFunction ();                                         // Объявление EXITPROGRAMFUNCTION. //
void DestructorFunction (ElementStruct *SourceStruct);               // Объявление DESTRUCTORFUNCTION. //
void ExtremumAllFunction (ElementStruct *SourceStruct);              // Объявление EXTREMUMALLFUNCTION. //
void QuantityFunction (ElementStruct *SourceStruct);                 // Объявление QUANTITYFUNCTION. //
void ExtremumFacultyFunction (ElementStruct *SourceStruct);          // Объявление EXTREMUMFACULTYFUNCTION. //
void MiddleAgeFunction (ElementStruct *SourceStruct);                // Объявление MIDDLEAGEFUNCTION. //
void WriteStackFunction (ElementStruct *SourceStruct);               // Объявление WRITESTACKFUNCTION. //
void DeleteRecordFunction (ElementStruct *SourceStruct);             // Объявление DELETERECORDFUNCTION. //
void ChangeRecordFunction (ElementStruct *SourceStruct);             // Объявление CHANGERECORDFUNCTION. //
void AddRecordFunction (ElementStruct *SourceStruct);                // Объявление ADDRECORDFUNCTION. //
3 / 11. AddRecordFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN, COUT. //
#include "Header.h"
 
void AddRecordFunction (ElementStruct *SourceStruct) {               // Определение ADDRECORDFUNCTION. //
     int Choice = 0;
     while (Choice != 2) {
          ElementStruct *TemporaryStruct = new ElementStruct;        // Объявление TEMPORARYSTRUCT типа ELEMENTSTRUCT. //
          printf ("\n\n---------------------------------------------------------------------------------------\n                         "
               "     ДОБАВЛЕНИЕ ЗАПИСИ О СТУДЕНТЕ\n--------------------------------------------------------------------------------------"
               "- \n");
          printf ("1) Введите ФИО студента (до 15 символов включительно, без пробелов).....");
          cin >> TemporaryStruct->Name;                              // GETLINE, GET и READ со STRUCT не работают. Нулевому элементу
          printf ("2) Введите факультет (до 15 символов включительно, без пробелов)........");
          cin >> TemporaryStruct->Faculty;                           // присваивается нуль-символ ("\0"). //
          printf ("3) Введите курс (от 1 до 5).............................................");
          cin >> TemporaryStruct->CourseOfStudies;
          if ((TemporaryStruct->CourseOfStudies < 1) || (TemporaryStruct->CourseOfStudies > 5)) {
               printf ("\nТакого номера учебного курса в Российской Федерации не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("4) Введите дату рождения (от 1 до 31)...................................");
          cin >> TemporaryStruct->Date;
          if ((TemporaryStruct->Date < 1) || (TemporaryStruct->Date > 31)) {
               printf ("\nТакого календарного числа не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("5) Введите месяц рождения (от 1 до 12)..................................");
          cin >> TemporaryStruct->Month;
          if ((TemporaryStruct->Month < 1) || (TemporaryStruct->Month > 12)) {
               printf ("\nТакого календарного месяца не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("6) Введите год рождения (от 1970 до 2003)...............................");
          cin >> TemporaryStruct->Years;
          if ((TemporaryStruct->Years < 1970) || (TemporaryStruct->Years > 2003)) {
               printf ("\nСтудента с таким возрастом не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("7) Введите место рождения (до 15 символов включительно, без пробелов)...");
          cin >> TemporaryStruct->PlaceOfBirth;
          TemporaryStruct->Tail = SourceStruct->Head;                // В *TAIL текущего элемента присваивается адрес памяти предыдущего
          SourceStruct->Head = TemporaryStruct;                      // элемента (вершины) (таким образом соблюдается метод LIFO). //
          printf ("\nХотите добавить еще одну запись о студенте?\n\n1) Да.....................................1\n2) Нет (выход в меню)..."
               "..................2\n\nВаш выбор: ");                // В *HEAD присваивается адрес памяти вершины. //
          cin >> Choice;
     }
     cout << endl;
}
4 / 11. ChangeRecordFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN, COUT. //
#include "Header.h"
 
void ChangePlaceOfBirth (ElementStruct *TemporaryStruct) {           // Объявление и определение CHANGEPLACEOFBIRTH. //
     printf ("\n\n------------------------------------------------------------------------------------\n                ИЗМЕНЕНИЕ МЕСТА Р"
          "ОЖДЕНИЯ ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------------------------------------------------------------------------------\nВв"
          "едите место рождения (до 15 символов включительно, без пробелов)...");
     cin >> TemporaryStruct->PlaceOfBirth;
     cout << endl;
}
 
void ChangeDateOfBirth (ElementStruct *TemporaryStruct) {            // Объявление и определение CHANGEDATEOFBIRTH. //
     printf ("\n\n--------------------------------------------------------\n  ИЗМЕНЕНИЕ ДАТЫ РОЖДЕНИЯ ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n-----"
          "---------------------------------------------------\n1) Введите дату рождения (от 1 до 31)...............");
     cin >> TemporaryStruct->Date;
     if ((TemporaryStruct->Date < 1) || (TemporaryStruct->Date > 31)) {
          printf ("\nТакого календарного числа не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     printf ("2) Введите месяц рождения (от 1 до 12)..............");
     cin >> TemporaryStruct->Month;
     if ((TemporaryStruct->Month < 1) || (TemporaryStruct->Month > 12)) {
          printf ("\nТакого календарного месяца не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     printf ("3) Введите год рождения (от 1970 до 2003)...........");
     cin >> TemporaryStruct->Years;
     if ((TemporaryStruct->Years < 1970) || (TemporaryStruct->Years > 2003)) {
          printf ("\nСтудента с таким возрастом не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     cout << endl;
}
 
void ChangeCourseOfStudies (ElementStruct *TemporaryStruct) {        // Объявление и определение CHANGECOURCEOFSTUDIES. //
     printf ("\n\n--------------------------------------------------------\n      ИЗМЕНЕНИЕ КУРСА ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n---------"
          "-----------------------------------------------\nВведите курс (от 1 до 5)...............................");
     cin >> TemporaryStruct->CourseOfStudies;
     if ((TemporaryStruct->CourseOfStudies < 1) || (TemporaryStruct->CourseOfStudies > 5)) {
          printf ("\nТакого номера учебного курса в Российской Федерации не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     cout << endl;
}
 
void ChangeFaculty (ElementStruct *TemporaryStruct) {                // Объявление и определение CHANGEFACULTY. //
     printf ("\n\n------------------------------------------------------------------------------------\n                  ИЗМЕНЕНИЕ ФАКУЛ"
          "ЬТЕТА ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------------------------------------------------------------------------------\nВвед"
          "ите факультет (до 15 символов включительно, без пробелов)........");
     cin >> TemporaryStruct->Faculty;
     cout << endl;
}
 
void ChangeName (ElementStruct *TemporaryStruct) {                   // Объявление и определение CHANGENAME. //
     printf ("\n\n------------------------------------------------------------------------------------\n                     ИЗМЕНЕНИЕ ФИ"
          "О ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------------------------------------------------------------------------------\nВведите "
          "ФИО студента (до 15 символов включительно, без пробелов).....");
     cin >> TemporaryStruct->Name;
     cout << endl;
}
 
void ChangeRecordFunction (ElementStruct *SourceStruct) {            // Определение CHANGERECORDFUNCTION. //
     int Choice = 0;
     void (*PointerOnFunction []) (ElementStruct*) = {ChangeName, ChangeFaculty, ChangeCourseOfStudies, ChangeDateOfBirth,
          ChangePlaceOfBirth};
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. Присваивается адрес
     printf ("\n\n--------------------------------------------------------\n         ИЗМЕНЕНИЕ ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------"
          "--------------------------------------------\n");         // памяти вершины. //
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     while (Choice != 6) {
          printf ("Какую графу вы хотите изменить?\n\n1) ФИО студента........................................1\n2) Название факультета..."
               "..............................2\n3) Номер курса.........................................3\n4) Дату рождения.............."
               ".........................4\n5) Место рождения......................................5\n6) Никакую (выход в меню).........."
               "....................6\n\nВаш выбор: ");
          cin >> Choice;
          if ((Choice > 0) && (Choice < 6)) {
               (*PointerOnFunction [Choice - 1]) (TemporaryStruct);
          }
     }
     cout << endl;
}
5 / 11. DeleteRecordFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                   // Требуется для PRINTF, COUT. //
#include "Header.h"
 
void DeleteRecordFunction (ElementStruct *SourceStruct) {             // Определение DELETERECORDFUNCTION. //
     int Choice = 0, Counter = 1;
     if (SourceStruct->Head == NULL) {
          printf ("\n\n----------------------------------------------------------------------------------\n                        УДАЛЕН"
               "ИЕ ПОСЛЕДНЕЙ ЗАПИСИ О СТУДЕНТЕ\n----------------------------------------------------------------------------------\nНОМЕР"
               " |       ФИО       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n------------------------------------------"
               "----------------------------------------\n");
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     do {
          if (SourceStruct->Head == NULL) {
               printf ("Записи о студентах отсутствуют.\n\n");
               break;
          }
          ElementStruct *TemporaryStruct = SourceStruct->Head;        // Объявление и инициализация TEMPORARYSTRUCT. //
          ElementStruct *DeleteStruct = SourceStruct->Head->Tail;     // Объявление и инициализация DELETESTRUCT. Присваиваются
          printf ("\n\n----------------------------------------------------------------------------------\n                        УДАЛЕН"
               "Е ПОСЛЕДНЕЙ ЗАПИСИ О СТУДЕНТЕ\n----------------------------------------------------------------------------------\nНОМЕР "
               "|       ФИО       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n-------------------------------------------"
               "---------------------------------------\n");
          printf ("%5d | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n", Counter++, TemporaryStruct->Name, TemporaryStruct->Faculty,
               TemporaryStruct->CourseOfStudies, TemporaryStruct->Date, TemporaryStruct->Month, TemporaryStruct->Years,
               TemporaryStruct->PlaceOfBirth);                        // адреса памяти вершины и предпоследнего элементов. //
          TemporaryStruct = TemporaryStruct->Tail;
          delete SourceStruct->Head;                                  // Удаляется адрес памяти вершины. //
          SourceStruct->Head = DeleteStruct;                          // В HEAD присваивается адрес памяти предпоследнего элемента
          printf ("\nПоследняя запись о студенте удалена.\n\nХотите удалить еще одну запись о студенте?\n\n1) Да........................."
               "...........1\n2) Нет (выход в меню)....................2\n\nВаш выбор: ");
          cin >> Choice;                                              // (TAIL). //
     } while (Choice != 2);
     cout << endl;
}
6 / 11. WriteStackFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, COUT. //
#include "Header.h"
 
void WriteStackFunction (ElementStruct *SourceStruct) {              // Объявление и определение WRITESTACKFUNCTION. //
     int Counter = 1;
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. Присваивается адрес
     printf ("\n\n----------------------------------------------------------------------------------\n                        СПИСОК СТУД"
          "ЕНТОВ В ОБРАТНОМ ПОРЯДКЕ\n----------------------------------------------------------------------------------\nНОМЕР |       ФИ"
          "О       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n----------------------------------------------------------"
          "------------------------\n");                             // памяти последнего элемента. //
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n");
     }
     while (TemporaryStruct != NULL) {
          printf ("%5d | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n", Counter++, TemporaryStruct->Name, TemporaryStruct->Faculty,
               TemporaryStruct->CourseOfStudies, TemporaryStruct->Date, TemporaryStruct->Month, TemporaryStruct->Years,
               TemporaryStruct->PlaceOfBirth);                       // Выводятся на экран все элементы. //
          TemporaryStruct = TemporaryStruct->Tail;                   // Вершине присваивается адрес памяти предыдущего элемента.//
     }
     cout << endl;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2020, 15:48
Ответы с готовыми решениями:

Создать класс, содержащий поля, которые можно использовать для хранения данных
Создать класс &lt;имя класса&gt; (имя класса задается в соответствии с выбранным вариантом), содержащий...

Использовать в качестве контейнера для хранения данных динамические массивы
Задача состоит в том, чтобы разработать программу, используя в качестве контейнера для хранения...

Стек для хранения данных
вот условия: (Динамические структуры данных) Реализовать стек для хранения данных вида: ФИО,...

Стек и очередь для хранения объектов типа Coord
Ниже представлен пример класса Coord. Напишите программу для хранения объектов типа Coord, ...

2
1 / 1 / 0
Регистрация: 12.01.2020
Сообщений: 28
Записей в блоге: 11
27.01.2020, 15:48  [ТС] 2
7 / 11. MiddleAgeFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                              // Требуется для PRINTF. //
#include <windows.h>                                                             // Требуется для SYSTEMTIME, GETLOCALTIME. //
#include "Header.h"
 
void MiddleAgeFunction (ElementStruct *SourceStruct) {                           // Определение MIDDLEAGEFUNCTION. //
     int Counter = 0, Sum = 0, AgeOfStudent = 0;                                 // Дробная часть SUM не имеет знач., поэтому INT. //
     ElementStruct *TemporaryStruct = SourceStruct->Head;                        // Объявление и инициализация TEMPORARYSTRUCT. //
     SYSTEMTIME TemporaryTimeStruct;                                             // Объявление TEMPORARYSTRUCT типа SYSTEMTIME. //
     GetLocalTime (&TemporaryTimeStruct);                                        // Инициализация TEMPORARYSTRUCT. //
     printf ("\n\n----------------------------------------------------------------------------------\n                 СПИСОК СТУДЕНТОВ, "
          "ВОЗРАСТ КОТОРЫХ МЕНЬШЕ СРЕДНЕГО\n----------------------------------------------------------------------------------\nНОМЕР |  "
          "     ФИО       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n---------------------------------------------------"
          "-------------------------------\n");
     while (TemporaryStruct != NULL) {
          Sum += (TemporaryTimeStruct.wYear - TemporaryStruct->Years);           // Вычисляется сумма лет всех элементов (студентов). //
          Counter++;                                                             // Вычисляется количество элементов. //
          TemporaryStruct = TemporaryStruct->Tail;                               // Вершине присваивается адрес памяти предыдущего
     }                                                                           // элемента. //
     if (Counter < 2) {                                                          // Если элементов меньше двух или они вообще отсутствуют,
          printf ("Записей о студентах меньше двух.\n\n");                       // то сравнивать не с чем.//
          return;
     }
     Sum = Sum / Counter;                                                        // Вычисляется средний возраст всех студентов. //
     Counter = 1;
     TemporaryStruct = SourceStruct->Head;                                       // В *HEAD присваивается адрес памяти вершины. //
     while (TemporaryStruct != NULL) {
          AgeOfStudent = TemporaryTimeStruct.wYear - TemporaryStruct->Years;     // Вычисляется возраст текущего элемента. //
          if (AgeOfStudent < Sum) {                                              // Если возраст веришны меньше среднего, то он выводится
               printf ("%5d | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n", Counter++, TemporaryStruct->Name,
                    TemporaryStruct->Faculty, TemporaryStruct->CourseOfStudies, TemporaryStruct->Date, TemporaryStruct->Month,
                    TemporaryStruct->Years, TemporaryStruct->PlaceOfBirth);      // на экран.//
          }
          TemporaryStruct = TemporaryStruct->Tail;                               // Вершине присваивается адрес памяти предыдущего
     }                                                                           // элемента. //
     printf ("\nСредний возраст студентов: %d лет.\n\n", Sum);
}
8 / 11. ExtremumFacultyFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, COUT. //
#include <queue>                                                     // Требуется для PRIORITY_QUEUE. //
#include <string>                                                    // Требуется для TO_STRING. //
#include "Header.h"
 
void ExtremumFacultyFunction (ElementStruct *SourceStruct) {         // Определение EXTREMUMFACULTYFUNCTION. //
     int Counter = 1;
     string FacultyDate = " ";
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. //
     priority_queue <string> QueueMetod;
     printf ("\n\n--------------------------------------------------------\n           СПИСОК СТАРШИХ И МЛАДШИХ СТУДЕНТОВ\n--------------"
          "------------------------------------------\nНОМЕР |    ФАКУЛЬТЕТ    | ГОД РОЖДЕНИЯ\n------------------------------------------"
          "--------------\n");
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     while (TemporaryStruct != NULL) {
          FacultyDate = TemporaryStruct->Faculty + (" |         " + to_string (TemporaryStruct->Years));
          QueueMetod.push (FacultyDate);                             // Преобразует FACULTY и YEARS в STRING, причем упорядочивает вначале
          TemporaryStruct = TemporaryStruct->Tail;                   // по FACULTY, а затем внутри него по YEARS. //
     }
     while (!QueueMetod.empty ()) {
          printf ("%5d | ", Counter++);
          cout << QueueMetod.top ();
          QueueMetod.pop ();
          cout << endl;
     }
     cout << endl;
}
9 / 11. QuantityFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, COUT. //
#include "Header.h"
 
void QuantityFunction (ElementStruct *SourceStruct) {                // Определение QUANTITYFUNCTION. //
     int Counter = 0;
     ElementStruct *TemporaryStruct = SourceStruct->Head;
     printf ("\n\n--------------------------------------------------------\n                  КОЛИЧЕСТВО СТУДЕНТОВ\n---------------------"
          "-----------------------------------\n");
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     while (TemporaryStruct != NULL) {
          Counter++;
          TemporaryStruct = TemporaryStruct->Tail;
     }
     printf ("Количество студентов: %d.\n", Counter);
     cout << endl;
}
10 / 11. ExtremumAllFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, STRCPY_S, COUT. //
#include "Header.h"
 
void ExtremumAllFunction (ElementStruct *SourceStruct) {             // Определение EXTREMUMALLFUNCTION. //
     const int Dimension = 2;
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. //
     ElementStruct *ArrayStruct = new ElementStruct [Dimension];     // Объявление ARRAYSTRUCT типа ELEMENTSTRUCT. //
     printf ("\n\n----------------------------------------------------------------------------------\n                         САМЫЙ СТАР"
          "ШИЙ И МЛАДШИЙ СТУДЕНТЫ\n----------------------------------------------------------------------------------\nНОМЕР |       ФИО "
          "      |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n------------------------------------------------------------"
          "----------------------\n");
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     int MaxSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
     int MinSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
     while (TemporaryStruct != NULL) {
          if (((TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date) <= MaxSumDate) {
               strcpy_s ((*(ArrayStruct + 0)).Name, TemporaryStruct->Name);
               strcpy_s ((*(ArrayStruct + 0)).Faculty, TemporaryStruct->Faculty);
               (*(ArrayStruct + 0)).CourseOfStudies = TemporaryStruct->CourseOfStudies;
               (*(ArrayStruct + 0)).Date = TemporaryStruct->Date;
               (*(ArrayStruct + 0)).Month = TemporaryStruct->Month;
               (*(ArrayStruct + 0)).Years = TemporaryStruct->Years;
               strcpy_s ((*(ArrayStruct + 0)).PlaceOfBirth, TemporaryStruct->PlaceOfBirth);
               MaxSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
          }
          if (((TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date) >= MinSumDate) {
               strcpy_s ((*(ArrayStruct + 1)).Name, TemporaryStruct->Name);
               strcpy_s ((*(ArrayStruct + 1)).Faculty, TemporaryStruct->Faculty);
               (*(ArrayStruct + 1)).CourseOfStudies = TemporaryStruct->CourseOfStudies;
               (*(ArrayStruct + 1)).Date = TemporaryStruct->Date;
               (*(ArrayStruct + 1)).Month = TemporaryStruct->Month;
               (*(ArrayStruct + 1)).Years = TemporaryStruct->Years;
               strcpy_s ((*(ArrayStruct + 0)).PlaceOfBirth, TemporaryStruct->PlaceOfBirth);
               MinSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
          }
          TemporaryStruct = TemporaryStruct->Tail;
     }
     printf("                                  СТАРШИЙ СТУДЕНТ\n-------------------------------------------------------------------------"
          "---------\n    1 | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n----------------------------------------------------------"
          "------------------------\n                                  МЛАДШИЙ СТУДЕНТ\n-------------------------------------------------"
          "---------------------------------\n    2 | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n",
          (*(ArrayStruct + 0)).Name, (*(ArrayStruct + 0)).Faculty, (*(ArrayStruct + 0)).CourseOfStudies, (*(ArrayStruct + 0)).Date,
          (*(ArrayStruct + 0)).Month, (*(ArrayStruct + 0)).Years, (*(ArrayStruct + 0)).PlaceOfBirth, (*(ArrayStruct + 1)).Name,
          (*(ArrayStruct + 1)).Faculty, (*(ArrayStruct + 1)).CourseOfStudies, (*(ArrayStruct + 1)).Date, (*(ArrayStruct + 1)).Month,
          (*(ArrayStruct + 1)).Years, (*(ArrayStruct + 0)).PlaceOfBirth);
     cout << endl;
     delete [] ArrayStruct;                                           // Удаление ARRAYSTRUCT. //
}
11 / 11. ExitProgramFunction.cpp:

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
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для SYSTEM, EXIT. //
#include "Header.h"
 
void ExitProgramFunction () {                                        // Определение EXITPROGRAMFUNCTION. //
     system ("pause");
     exit (true);
}
 
void DestructorFunction (ElementStruct *SourceStruct) {              // Определение DESTRUCTORFUNCTION. //
     while (SourceStruct->Head != NULL) {
          ElementStruct *TemporaryStruct = SourceStruct->Head->Tail;
          delete SourceStruct->Head;                                 // Удаление вершины. //
          SourceStruct->Head = TemporaryStruct;                      // В *HEAD присваевается адрес памяти предыдущего элемента. //
     }
     delete SourceStruct->Head;                                      // Удаление первого элемента. //
     delete SourceStruct;                                            // Удаление SOURCESTRUCT. //
}
Архив с исходными файлами (Cyberforum.ru, 11 MB)
0
1 / 1 / 0
Регистрация: 12.01.2020
Сообщений: 28
Записей в блоге: 11
27.01.2020, 15:52  [ТС] 3
Во вложении скриншот главного меню программы.
Миниатюры
Создать запись для хранения. Для хранения данных использовать стек. Для группировки данных использовать очередь  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2020, 15:52

Создать тип данных для хранения строки символов. С перегрузкой оператора
Полностью задание: &quot;Создать тип данных для хранения строки символов. Перегрузить оператор унарный...

Доделать код. Тема массивы. Нужно использовать массив для хранения ответа
Дана целочисленная прямоугольная матрица. Определить: 1. количество строк, содержащих хотя бы один...

Создать тип данных для хранения массива логических величин, перегрузить операторы поэлементно
Создать тип данных для хранения массива логических величин. Перегрузить операторы «&amp;&amp;», «||» и «!»...

Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения человека, а также класс для хранения ФИО и почтового ад
Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru