Программирование. ЛР1: Добавление записи в массив структур и удаление записи из массива структур по запросу пользователя на язык. Прога 1 Фурсов. Добавление записи в массив структур и удаление записи из массива структур по запросу пользователя на языке С
Скачать 1.48 Mb.
|
ФГБОУ ВО Уфимский государственный авиационный технический университет Кафедра ТК ОТЧЕТ по лабораторной работе № 1 по дисциплине «Программирование» Вариант № 30 Выполнил: студент гр. ИВТ-120 Фурсов Н.Ю. Проверил: доцент каф. ТК Хасанов А.Ю. Уфа 2019 Тема работы: Добавление записи в массив структур и удаление записи из массива структур по запросу пользователя на языке С++. Цель работы: Получение навыков работы с динамическими массивами структур на языке С++. Задачи работы: - составить схему алгоритма работы программы; - написать программу на языке С++ с использованием динамических массивов структур и сортировки структур; - протестировать работоспособность программы для различных исходных данных. Вариант № 30 Задание: Дан исходный массив записей, содержащий сведения об игрушках: указывается название игрушки, ее стоимость и возрастные границы детей, для которых игрушка предназначена. Найти названия наиболее дорогих игрушек для заданного возраста, цены которых отличаются для заданного возраста не более чем на заданную стоимость. Вывести на экран в порядке убывания стоимости. Сортировка перечня: По стоимости игрушек в порядке возрастания. По названию игрушек в алфавитном порядке, а при совпадении названия по стоимости в порядке убывания. Выполнение задания: Исходный файл: Текст программы: #include #include #include #include #include #include using namespace std; struct toys { string name; double price; int y1; int y2; }; const int N = 100; void flinpt(toys *a, int &n) //Ввод из файла { ifstream fin; fin.open("toys.txt"); string temp; n = 0; while (fin >> temp) { a[n].name = temp; fin >> a[n].price >> a[n].y1 >> a[n].y2; n++; } } void look(toys *a, int n) //Вывод массива на экран { cout << "_________________________________________" << endl; cout << "| № | Название | Цена | Возраст |" << endl; cout << "_________________________________________" << endl; for (int i = 0; i < n; i++) { cout << "|" << setw(3) << i + 1 << "|" << setw(18) << a[i].name << "|" << setw(5) << a[i].price << "|" << setw(7) << a[i].y1 << "-" << setw(2) << a[i].y2 << "|" << endl; }; } void sortprice(toys *a, int n) //Сортировка по цене { toys p; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (a[i].price < a[j].price) { p = a[i]; a[i] = a[j]; a[j] = p; } } void sortnameprice(toys *a, int n) //Соритровка по алфавиту,а при совпадении по цене { toys p; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (a[i].name < a[j].name) { p = a[i]; a[i] = a[j]; a[j] = p; } if (a[i].name == a[j].name) if (a[i].price > a[j].price) { p = a[i]; a[i] = a[j]; a[j] = p; } } } void search(toys *a, int n, toys *b, int &k) // Поиск { k = 0; toys srch, prmax; double delta; cout << "Введите диапазон возраста и разброс цены" << endl; cin >> prmax.y1 >> prmax.y2 >> delta; prmax.price = 0; for (int i = 0; i < n; i++) { if (prmax.y1 >= a[i].y1 && prmax.y2 <= a[i].y2) if (a[i].price >= prmax.price) prmax.price = a[i].price; //Нашли самую большую цену на игрушку этого возраста } for (int i = 0; i < n; i++) if ((a[i].price > (prmax.price - delta)) && ((a[i].y1 >= prmax.y1 && a[i].y1 <= prmax.y2) || (a[i].y2 >= prmax.y1 && a[i].y2 <= prmax.y2))) { b[k] = a[i]; k++; } } void sortname(toys *b, int n) //Сортировка выходного массива { toys p; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (b[i].name < b[j].name) { p = b[i]; b[i] = b[j]; b[j] = p; } } } void add(toys *a, int &n) { if (n + 1 < N) { toys f; cout << "Введите название игрушки, цену и возрастной диапазон(Корабль 500 2 3" << endl; cin >> f.name >> f.price >> f.y1 >> f.y2; a[n] = f; n++; } else { cout << "Нет памяти" << endl; } system("pause"); } void remove(toys *a, int &n) { look(a, n); int num, rmv, i; toys del; cin >> num; num--; if (num < 0 || num > n) cout << "Ошибка ввода.Такой строки нет." << endl; else { cout << a[num].name << " " << a[num].price << "руб " << a[num].y1 << "-" << a[num].y2 << "лет" << endl; cout << "Удалить?(1-да,2-нет)" << endl; cin >> rmv; if (rmv != 1) { cout << "Запись не удалена, возврат в меню." << endl; system("pause"); } if (rmv == 1) { for (i = 0; i < num; i++) a[i] = a[i]; for (i = num + 1; i < n; i++) a[i - 1] = a[i]; n--; cout << "Запись успешно удалена,возврат в меню." << endl; system("pause"); } } } void save(toys *a, int &n) { string filename, endway; string waydesktop = "D:/toys.txt"; string txt = ".txt"; cout << "Введите имя файла" << endl; cin >> endway; waydesktop += endway; waydesktop += txt; ofstream fout(waydesktop); if (!fout.is_open()) cout << "Ошибка"; fout << "_________________________________________" << endl; fout << "| № | Название | Цена | Возраст |" << endl; fout << "_________________________________________" << endl; for (int i = 0; i < n; i++) { fout << "|" << setw(3) << i + 1 << "|" << setw(18) << a[i].name << "|" << setw(5) << a[i].price << "|" << setw(7) << a[i].y1 << "-" << setw(2) << a[i].y2 << "|" << endl; }; } int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); toys a[N], b[N]; int n = 0, k = 0; while (true) { system("cls"); int menu; cout << "0 - ввод из файла" << endl; cout << "1 - Сортировка исходного массива по цене" << endl; cout << "2 - Сортировка исходного массива по алфавиту и при совпадении названия — по цене" << endl; cout << "3 - Поиск" << endl; cout << "4 - Сортировка массива поиска по алфавиту" << endl; cout << "5 - Добавить запись" << endl; cout << "6 - удалить запись" << endl; cout << "7 - Вывод массива на экран" << endl; cout << "8 - сохранить исходный массив в файл" << endl; cout << "9 - сохранить выходной массив в файл" << endl; cout << "10 - Выход из программы" << endl; cin >> menu; switch (menu) { case 0: { flinpt(a, n); look(a, n); system("pause"); break; } case 1: { sortprice(a, n); look(a, n); system("pause"); break; } case 2: { sortnameprice(a, n); look(a, n); system("pause"); break; } case 3: { search(a, n, b, k); look(b, k); system("pause"); break; } case 4: { sortname(b, k); look(b, k); system("pause"); break; } case 5: { add(a, n); break; } case 6: { remove(a, n); break; } case 7: { look(a, n); system("pause"); break; } case 8: { save(a, n); break; } case 9: { save(b, k); break; } default: { exit(1); } } } } // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки" // Отладка программы: F5 или меню "Отладка" > "Запустить отладку" // Советы по началу работы // 1. В окне обозревателя решений можно добавлять файлы и управлять ими. // 2. В окне Team Explorer можно подключиться к системе управления версиями. // 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения. // 4. В окне "Список ошибок" можно просматривать ошибки. // 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода. // 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл. Схема алгоритма работы программы: Скриншоты работы программы: |