Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование задач с применением структурированных данных. Лабораторный практикум.pdf
X
- •ВВЕДЕНИЕ
- •ОБРАБОТКА МАССИВОВ ДАННЫХ С ПРИМЕНЕНИЕМ ФУНКЦИЙ
- •1.1. Общие рекомендации по работе с динамическими массивами
- •1.2. Пример программы для работы с динамическими массивами
- •1.3. Первое задание к лабораторной работе № 1
- •1.4. Общие рекомендации по использованию функций
- •ЛАБОРАТОРНАЯ РАБОТА № 2
- •ПРОГРАММНАЯ ОБРАБОТКА СТРОК И СТРУКТУР
- •2.1. Общие рекомендации по работе со строками
- •1.5. Пример программы для работы с функциями
- •1.6. Второе задание к лабораторной работе № 1
- •1.8. Третье задание к лабораторной работе № 1
- •2.2. Пример программы для работы со строками
- •2.3. Первое задание к лабораторной работе № 2
- •2.4. Общие рекомендации по работе с данными типа string
- •2.5. Второе задание к лабораторной работе № 2
- •2.6. Общие рекомендации по работе со структурами
- •2.7. Пример программы для работы со структурами
- •2.8. Третье задание к лабораторной работе № 2
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •Итого
- •ПРОГРАММНЫЕ МЕТОДЫ РАБОТЫ
- •С ЦЕЛОЧИСЛЕННЫМИ ДАННЫМИ
- •3.1. Общие рекомендации
- •3.2. Первое задание к лабораторной работе № 3
- •3.3. Системы счисления и перевод чисел из одной системы в другую
- •3.4. Второе задание к лабораторной работе № 3
- •ЛАБОРАТОРНАЯ РАБОТА № 4
- •ТЕХНОЛОГИИ РАБОТЫ С ФАЙЛАМИ
- •4.1. Общие рекомендации по работе с файлами
- •4.2. Первое задание для лабораторной работы № 4
- •4.3. Пример программы для работы с файлами структур
- •4.4. Второе задание для лабораторной работы № 4
- •ЛАБОРАТОРНАЯ РАБОТА № 5
- •МЕТОДЫ СОРТИРОВКИ И ИХ ПРОГРАММНАЯ РЕАЛИЗАЦИЯ
- •5.1. Общие рекомендации по реализации методов сортировки
- •5.2. Задания к лабораторной работе № 5
- •ЛАБОРАТОРНАЯ РАБОТА № 6
- •ЛИНЕЙНЫЕ СПИСКИ
- •6.2. Пример программы работы с линейным списком
- •6.3. Задания к лабораторной работе № 6
- •ЛАБОРАТОРНАЯ РАБОТА № 7
- •ПРОГРАММНОЕ СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ КЛАССОВ
- •7.1. Общие рекомендации по работе с классами
- •7.2. Пример программы реализации класса
- •7.3. Задания к лабораторной работе № 7
- •ЛАБОРАТОРНАЯ РАБОТА № 8
- •РАБОТА С РОДИТЕЛЬСКИМИ И ДОЧЕРНИМИ КЛАССАМИ
- •8.2. Пример программы с виртуальными функциями
- •8.3. Виртуальные функции и абстрактные классы
- •8.4. Задания к лабораторной работе № 8
- •ЛАБОРАТОРНАЯ РАБОТА № 9
- •РАБОТА С КОНТЕЙНЕРНЫМИ КЛАССАМИ И МОДУЛЯМИ
- •9.1. Общие сведения о контейнерных классах и векторах
- •9.2. Общие сведения о модулях
- •9.3. Пример программы на С++
- •9.4. Задания к лабораторной работе № 9
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

void menu()
{
cout << "\n МЕНЮ \n";
cout << "1. Ввод данных\n";
cout << "2. Вывод данных\n";
cout << "3. Поиск\n";
cout << "4. Удаление\n";
cout << "5. Выход\n";
cout << "\nВведите номер пункта меню для дальнейшей работы\n";
}
//Функция формирования первого элемента списка
Train* first(int t_num, char* p_nazn, char* v_otpr)
{
//Создание нового элемента
Train* pv = new Train;
//Заполнение полей данных
pv->train_num = t_num;
strcpy_s(pv->p_nazn, p_nazn);
strcpy_s(pv->v_otpr, v_otpr);
//Инициализация указателей на соседние элементы списка
pv->prev = 0;
pv->next = 0;
return pv;
}
void add_sort(Train** pbeg, Train** pend, int t_num, char* p_nazn, char*
v_otpr)
{
//Создание нового элемента
Train* pv = new Train;
//Заполнение полей данных
pv->train_num = t_num;
strcpy_s(pv->p_nazn, p_nazn);
strcpy_s(pv->v_otpr, v_otpr);
Train* pt = *pbeg;
while (pt) { //Просмотр списка
if (t_num < pt->train_num)
{
pv->next = pt;
if (pt == *pbeg) //Вставка в начало списка
{
pv->prev = 0;
*pbeg = pv;
}
81

else //Вставка в середину списка
{
(pt->prev)->next = pv;
pv->prev = pt->prev;
}
pt->prev = pv;
return;
}
pt = pt->next;
}
pv->next = 0; //Вставка в конец списка
pv->prev = *pend;
(*pend)->next = pv;
*pend = pv;
}
//Функция поиска элемента по номеру поезда
Train* find(Train* const pbeg, int t_num)
{
Train* pv = pbeg;
while (pv)
{
if (pv->train_num == t_num)
break;
pv = pv->next;
}
return pv;
}
//Функция поиска элемента по имени пункта назначения
bool find_punkt(Train* const pbeg, char* p_nazn)
{
bool find = false;
Train* pv = pbeg;
while (pv) //Просмотр списка
{
if (strcmp(pv->p_nazn, p_nazn) == 0)
{
find = true;
//Вывод на экран найденного элемента
cout << setw(5) << pv->train_num << setw(20) << pv->p_nazn << setw(10)
<< pv->v_otpr;
}
pv = pv->next;
82

}
return find;
}
//Функция поиска элемента по времени отправления
bool find_time(Train* const pbeg, char* v_otpr)
{
bool find = false;
Train* pv = pbeg;
while (pv) //Просмотр списка
{
if (strcmp(pv->v_otpr, v_otpr) == 0)
{
find = true;
//Вывод на экран найденного элемента
cout << setw(5) << pv->train_num << setw(20) << pv->p_nazn << setw(10)
<< pv->v_otpr;
}
pv = pv->next;
}
return find;
}
//Функция удаления элемента из списка
bool remove(Train** pbeg, Train** pend, int key)
{
if (Train* pkey = find(*pbeg, key))
{
//Если удаляется первый элемент из списка
if (pkey == *pbeg)
{
*pbeg = (*pbeg)->next;
if (*pbeg) (*pbeg)->prev = 0;
}
else
//Если удаляется последний элемент из списка
if (pkey == *pend)
{
*pend = (*pend)->prev;
(*pend)->next = 0;
}
//Если удаляется элемент из середины списка
else
{
83

(pkey->prev)->next = pkey->next;
(pkey->next)->prev = pkey->prev;
}
delete pkey;
return true;
}
return false;
}
//Функция ввода данных
void vvod()
{
int n;
int t_num;
char p_nazn[20];
char v_otpr[10];
//Ввод количества добавляемых записей
cout << "Введите кол-во добавляемых записей в список = ";
cin >> n;
//Цикл для ввода полей структуры
for (int i = 0; i < n; i++)
{
cout << "\nВведите номер поезда\n";
cin >> t_num;
cout << "Введите имя пункта назначения\n";
while (cin.get() != '\n');
cin.getline(p_nazn, 20);
cout << "Введите время отправления\n";
cin.getline(v_otpr, 10);
//Если в списке есть элементы - добавляется новый
// элемент с сортировкой списка
if (pbeg)
add_sort(&pbeg, &pend, t_num, p_nazn, v_otpr);
//Если список пуст - формируется первый элемент списка
else
{
pbeg = first(t_num, p_nazn, v_otpr);
pend = pbeg;
}
}
}
//Функция вывода списка на экран в виде таблицы
void vivod()
84

{
if (pbeg) //Если список не пуст - вывод на экран
{
//Прорисовка шапки таблицы
cout << "\n Список поездов\n";
hline();
cout << "| Номер | Пункт назначения | Время отп. |\n";
hline();
//Вывод элементов списка на экран
Train* pv = pbeg;
while (pv)
{
cout << "| " << setw(5) << pv->train_num;
cout << " | " << setw(20) << pv->p_nazn;
cout << " | " << setw(10) << pv->v_otpr << " |" << endl;
pv = pv->next;
}
//Вывод нижней границы таблицы
hline();
}
else //Если список пуст - вывод сообщения
cout << "\nСписок пуст!\n";
}
//Функция поиска элементов в списке
void search()
{
if (pbeg)
{
int k_poisk;
//Прорисовка меню выбора критерия поиска
cout << "\nВыберите критерий поиска\n";
cout << "1. Поиск по номеру поезда\n";
cout << "2. Поиск по имени пункта назначения\n";
cout << "3. Поиск по времени отправления\n";
cout << "\nВведите номер критерия ";
cin >> k_poisk;
//Обработка выбора критерия пользователем
switch (k_poisk)
{
case 1: //Поиск по номеру поезда
int t_num;
cout << "\nВведите номер поезда ";
85

cin >> t_num;
if (Train* pv = find(pbeg, t_num))
{
cout << "\nРезультат поиска:\n";
cout << setw(5) << pv->train_num << setw(20) <<
pv->p_nazn << setw(10) << pv->v_otpr;
}
else
cout << "Поезд с таким номером не найден\n";
break;
case 2: //Поиск по имени пункта назначения
char p_nazn[20];
cout << "\nВведите имя пункта назначения\n";
while (cin.get() != '\n');
cin.getline(p_nazn, 20);
cout << "\nРезультат поиска:\n";
if (!find_punkt(pbeg, p_nazn))
cout << "Поезда с таким пунктом назначения не найдены\n";
break;
case 3: //Поиск по времени отправления
char v_otpr[10];
cout << "\nВведите время отправления\n";
while (cin.get() != '\n');
cin.getline(v_otpr, 10);
cout << "\nРезультат поиска:\n";
if (!find_time(pbeg, v_otpr))
cout << "Поезда с таким временем отправления не найдены\n";
break;
default: cout << "Неверный вариант выбора\n";
}
}
else
cout << "\nСписок пуст!\n";
}
//Функция удаления элемента из списка
void del()
{
if (pbeg)
{
int t_num;
//Ввод номера поезда для поиска и удаления
//соответствующей записи
cout << "Введите номер поезда ";
cin >> t_num;
86

if (remove(&pbeg, &pend, t_num))
cout << "\nЗапись удалена\n";
else
cout << "\nЗапись с таким номером не найдена\n";
}
else
cout << "\nСписок пуст!\n";
}
//Функция для проведения горизонтальной линии в таблице
void hline()
{
const int m = 45;
for (int i = 0; i < m; i++)
cout << "-";
cout << endl;
}
6.3. Задания к лабораторной работе № 6
Задание
Создать программу, формирующую данные определенной структуры в ви-
де двунаправленного линейного списка. Структура данных зависит от варианта.
Программа должна реализовывать следующие операции:
– формирование меню для выбора действия пользователем;
– ввод данных в список, отсортированный по ключу;
– вывод данных из списка в виде таблицы;
– поиск элемента в списке по различным критериям (номеру поезда, име-
ни пункта назначения, времени отправления);
– удаление элемента из списка по заданному ключу.
Отчет
Отчет должен содержать титульный лист, вариант задания, текст про-
граммы с комментариями, скриншоты результатов работы программы.
Варианты заданий к лабораторной работе № 6 приведены ниже.
1. Составить программу, которая обрабатывает информацию о наличии
автобусов в автобусном парке.
Сведения о каждом автобусе содержат:
– номер автобуса (ключ);
– ФИО водителя;
– номер маршрута.
87

2. Составить программу, которая обрабатывает информацию о книгах в
библиотеке.
Сведения о книгах содержат:
– номер УДК (ключ);
– ФИО автора;
– название;
– год издания.
3. Составить программу, которая обрабатывает информацию о заявках на
авиабилеты.
Каждая заявка содержит:
– номер рейса (ключ);
– пункт назначения;
– ФИО пассажира;
– желаемую дату вылета.
4. Составить программу, формирующую телефонный справочник.
Сведения об абоненте содержат:
– номер телефона (ключ);
– ФИО абонента;
– адрес абонента.
5. Составить программу, которая обрабатывает информацию о наличии
бензина на автозаправочной станции.
Сведения о бензине содержат:
– марка бензина (ключ);
– цена за литр;
– количество литров в наличии.
6. Составить программу, которая обрабатывает информацию о врачах, ра-
ботающих в поликлинике.
Сведения о враче содержат:
– табельный номер врача (ключ);
– ФИО врача;
– специализация;
– номер кабинета.
7. Составить программу, которая обрабатывает информацию о гражданах,
лежащих в больнице.
Сведения о больном содержат:
– номер больного (ключ)
– ФИО больного;
– диагноз;
– номер палаты.
88

8. Составить программу, которая обрабатывает информацию для учета
автомобильных грузоперевозок.
Сведения о грузовике содержат:
– номер грузовика (ключ);
– ФИО водителя;
– грузоподъемность.
9. Составить программу, которая обрабатывает информацию о наличии
приборов на складе.
Сведения о приборе содержат:
– название прибора (ключ);
– тип прибора;
– цена;
– количество на складе.
10. Составить программу, которая обрабатывает информацию о заказах на
ремонт вычислительной техники.
Сведения о заказе содержат:
– номер заказа (ключ);
– ФИО заказчика;
– описание неисправности;
– стоимость ремонта.
11. Составить программу, которая обрабатывает информацию о лаборато-
риях института.
Сведения о лаборатории содержат:
– номер лаборатории (ключ);
– количество компьютеров;
– ФИО ответственного лаборанта.
12. Составить программу, которая обрабатывает информацию о мебель-
ных гарнитурах, продаваемых в магазине.
Сведения о гарнитуре содержат:
– название гарнитура (ключ);
– количество предметов;
– цена;
– наличие на складе.
13. Составить программу, которая обрабатывает информацию о продаже
автомобилей в автосалоне.
Сведения об автомобиле содержат:
– номер автомобиля (ключ);
– марка автомобиля;
– дата продажи;
– ФИО менеджера.
89

14. Составить программу, которая обрабатывает информацию о заказе на
пошив одежды в ателье.
Сведения о заказе содержат:
– номер заказа (ключ);
– предмет одежды;
– ФИО закройщика;
– стоимость материала.
15. Составить программу, которая обрабатывает информацию о продаже
билетов на концерт.
– дата концерта (ключ);
– название исполнителя;
– количество проданных билетов.
16. Составить программу, которая обрабатывает информацию о продаже
путевок в туристическом агентстве.
Сведения о туре содержат:
– название тура (ключ);
– продолжительность тура;
– стоимость путевки;
– количество проданных путевок.
17. Составить программу, которая обрабатывает информацию о пользова-
телях компьютерной сети.
Сведения о пользователе содержат:
– логин пользователя(ключ);
– дата регистрации;
– тип пользователя.
18. Составить программу, которая обрабатывает информацию о продажах
компьютерных игр.
Сведения о туре содержат:
– название игры (ключ);
– издатель;
– количество проданных физических копий;
– количество проданных цифровых копий.
19. Составить программу, которая обрабатывает информацию о гости-
ничных номерах.
Сведения о номере содержат:
– номер комнаты (ключ);
– этаж;
– вид номера;
– количество мест.
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
