Лабораторная работа 4.5. Динамические структуры данных

Цель. Разработать приложение, требующее умения использовать всего изученного в курсе материала. Получить практические навыки реализации динамических структур данных на основе массива.

ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ

Задача. Разработайте приложение «Книжный каталог». Для этого создайте структуру из четырех полей: название книги, тираж, цена.Создайте массив, который может содержать до 20 структур. Реализуйте меню из следующих пунктов: вывод всех книг, добавление новой книги, удаление указанной книги, снижение цены всех книг на заданное число процентов, сортировка книг по цене, выход.

#include <windows.h>

#include <string>

#include <iostream>

using namespace std;

const int MAX = 20; int n;

struct Book {

string name;

string author;

int circulation;

double price;

};

Book books[MAX];

void initBooks() {

books[0].name = "Преступление и наказание";

books[0].author = "Достоевский";

books[0].circulation = 100000;

books[0].price = 12.55;

books[1].name = "Война и мир";

books[1].author = "Толстой";

books[1].circulation = 200000;

books[1].price = 15.61;

books[2].name = "Совершенный код";

books[2].author = "Макконнелл";

books[2].circulation = 5000;

books[2].price = 20.55;

n=3;

}

void printBooks() {

for (int i=0; i<n; i++) {

cout.width(25);

cout << books[i].name;

cout.width(15);

cout << books[i].author;

cout.width(10);

cout << books[i].circulation;

cout.width(10);

cout << books[i].price << endl;

}

}

void discount() {

cout << "На сколько процентов?\n";

double percent;

cin >> percent;

for (int i=0; i<n; i++) {

books[i].price *= (100-percent)/100;

}

}

void addBook() {

if (n==MAX) {

cout << "Каталог полон\n";

return;

}

cout << "Введите название:\n";

cin >> books[n].name;

cout << "Введите автора:\n";

cin >> books[n].author;

cout << "Введите тираж:\n";

cin >> books[n].circulation;

cout << "Введите цену:\n";

cin >> books[n].price;

n++;

}

void removeLastBook() {

if (n==0) {

cout << "Каталог пуст\n";

} else {

n--;

}

}

void sortBooks() {

for (int i=0; i<n-1; i++) {

int j_max=i;

for (int j=i+1; j<n; j++) {

if (books[j_max].price < books[j].price) {

j_max=j;

}

}

Book temp=books[i];

books[i]=books[j_max];

books[j_max]=temp;

}

}

void printMenu() {

cout << "1 - Вывод всех книг\n";

cout << "2 - Добавить книгу\n";

cout << "3 - Удалить последнюю книгу\n";

cout << "4 - Сортировка книг по цене\n";

cout << "5 - Снизить цену всех книг\n";

cout << "0 - Выход\n";

cout << "Ваш выбор:\n";

}

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

initBooks();

while (true) {

system("cls");

printMenu();

int choice;

cin >> choice;

switch(choice) {

case 1: printBooks(); break;

case 2: addBook(); break;

case 3: removeLastBook(); break;

case 4: sortBooks(); break;

case 5: discount(); break;

case 0: exit(0);

default: cout << "Неверный выбор\n";

}

system("pause");

}

return 0;

}

ЗАДАЧИ

В данной лабораторной работе требуется реализовать меню из нескольких пунктов согласно варианту. Базовое задание является обязательным для всех.

Базовое задание. Создайте структуру из полей товар (строка), количество (целое), цена (вещественное).Создайте массив, который может содержать до 20 таких структур. Реализуйте меню из следующих пунктов: вывод всех сотрудников, добавление сотрудника, удаление сотрудника, выход. При запуске в базе уже должны находиться 5 сотрудников.

Задания сформулированы на примере структуры «Сотрудник-возраст-зарплата».

1. Определить, есть ли сотрудник с указанным именем в базе (строку вводит пользователь).

2. Определить среднюю зарплату по всем сотрудникам.

3. Найти сотрудника с самой большой зарплатой.

4. Найти самого возрастного сотрудника.

5. Найти самого молодого сотрудника.

6. Отсортировать сотрудников по алфавиту по возрастанию.

7. Отсортировать сотрудников по зарплате по убыванию.

8. Отсортировать сотрудников по возрасту по убыванию.

9. Отсортировать массив по количеству слов в них по возрастанию.

10. Отсортировать массив по количеству слов в них по убыванию.

11. Вывести всех сотрудников, у которых зарплата превышает указанный порог (порог вводится пользователем).

12. Вывести всех сотрудников, у которых возраст превышает указанный порог (порог вводится пользователем).

13. Определить количество сотрудников, у которых зарплата превышает указанный порог (порог вводится пользователем).

14. Определить количество сотрудников, у которых возраст превышает указанный порог (порог вводится пользователем).

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

16. Вывести всех сотрудников, фамилия которых начинается с указанной буквы.

17. Поднять зарплату всем сотрудникам на указанное число процентов (вводится пользователем).

18. Понизить зарплату всем сотрудникам из-за кризиса на указанное число процентов (вводится пользователем).

19. Записать базу в некоторый файл.

20. Определить зарплатный бюджет (вычислите сумму всех зарплат).

21. Определить средний возраст сотрудников.

22. Определить сотрудника с самой длинной фамилией.

23. Определить сотрудника с самой короткой фамилией.

24. Понизить оклад сотрудника (понизить зарплату на 5%).

25. Повысить оклад сотрудника (повысить зарплату на 5%).

26. Сообщить, сколько всего сотрудников в базе.

27. Изменить зарплату выбранного сотрудника (ввести новое значение с клавиатуры).

28. Пересчитать зарплату в долларах.

29. Пересчитать зарплату в евро.

30. Вывести список сотрудников (вывести только фамилии, разделенные запятыми, а в конце списка поставить точку).

ЛИТЕРАТУРА

Основная

1. Пестунов А.И. Программирование: сб. задач / А.И. Пестунов. Новосибирск: НГУЭУ, 2012. 53 с.

2. Культин Н.Б. Основы программирования в Turbo C++ / Н.Б. Культин. СПб.: БХВ-Петербург, 2012. 449 с.

3. Иванова Г.С. Технология программирования: учеб. для высш. учеб. заведений по направлению «Информатика и вычислительная техника» / Г.С. Иванова. М.: КноРус, 2011. 333 с.

4. Подбельский В.В. Стандартный Си++: учеб.пособие для высш. учеб. заведений по направлению подготовки 230400 «Прикладная математика» / В.В. Подбельский. М.: Финансы и статистика, 2008. 687 с.

5. Гагарина Л.Г. Технология разработки программного обеспечения: учеб. пособие для вузов по направлению 230100 «Информатика и вычислительная техника», специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных систем» / Л.Г. Гагарина, Е. В. Кокорева, Б. Д. Виснадул. М.: ФОРУМ ИНФРА-М, 2008. 399 с.

Дополнительная

1. Эпштейн М.С. Программирование на языке C: учебник / М.С. Эпштейн. М.: Академия, 2011. 334 с.

2. Страуструп Б. Программирование принципы и практика использования C++: пер. с англ. / Б. Страуструп. М.: Вильямс, 2011. 1238 с.

3. Лафоре Р. Объектно-ориентированное программирование в C++ / Р. Лафоре. СПб.: Питер, 2007. 928 с.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: