Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <fstream>
- #include <string>
- #include <string.h>
- #include <windows.h>
- #include <cstring>
- #include <conio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <ctime>
- using namespace std;
- const int M = 50;//размер массива
- struct books
- {
- string fio; // фио автора
- string name; //название книг
- int year;
- };
- struct author
- {
- string nameBook;
- int yearBook;
- };
- struct perechen
- {
- int year;//год издания книги
- int quantity;//количество авторов, издавших книги в year год
- };
- void inputMasBoooksFile(books x[], int& n); //ввод из файла
- void outputMasBook(books x[], int n); //вывод исходного массива на экран
- void addbooks(books x[], int& n); //добавление записи
- void delelteBooks(books x[], int& n); //удаление записи
- void sortyear(books x[], int n);//сортировка исходного массива по году
- void sortbookfio(books y[], int k);//сортировка исходного массива по фамилии и году издания
- void outputSourceMassToFile(books x[], int n);//запись исходного массива в файл
- void poiskyear(books x[], int n, author y[], int& m); //создание поиска
- void outputResultArray(author x[], int n);//вывод поиска (выходного массива) на экран
- void sortname(author x[], int n);//сортировка поиска (выходного массива) по названию книг
- void outputMasBooksFilePoisk(author x[], int n);//запись поиска (выходного массива) в файл
- void createPerechen(books book[], int n, perechen y[], int& m);//создание перечня
- void outputPerechen(perechen x[], int m);//вывод перечня на экран
- void outputSourcePerechenToFile(perechen x[], int m);//запись исходного перечня на экран
- void sortPerechYear(perechen x[], int m);//сортировка переченя по году издания в порядке возрастания.
- void sortPerechQuantity(perechen x[], int m);//сортировка переченя по количеству авторов в порядке убывания.
- void outputSortPerechenToFile(perechen x[], int m);//запись результата работы с перечнем на экран
- int main()
- {
- SetConsoleCP(1251);// для ввода русского языка
- SetConsoleOutputCP(1251); // для вывода русского языка
- setlocale(LC_ALL, "rus");
- books a[M];//исходный массив
- author b[M];//выходной массив
- perechen c[M];//перечень
- int m, l, t, n;//m - действительный размер исходного массива; l - действительный размер выходного массива; n - действительный размер перечня
- bool exit = true;
- while (exit)
- {
- system("CLS");
- cout << " МЕНЮ \n";
- cout << "1. Заполнить исходный массив.\n";
- cout << "2. Вывести исходную таблицу записей на экран.\n";
- cout << "3. Добавить книгу.\n";
- cout << "4. Удалить книгу.\n";
- cout << "5. Отсортировать исходный массив по году издания в порядке возрастания.\n";
- cout << "6. Отсортировать исходный массив по фио в алфавитном порядке, а при совпадении фио по году издания в порядке убывания.\n";
- cout << "7.Запись исходного массива в файл.\n";
- cout << "8. Для данного автора найти его самую раннюю и самую последнюю книгу по году издания(выходной массив).\n";
- cout << "9. Вывести результа поиска на экран.\n";
- cout << "10. Отсортировать выходной массив по названию книг в алфавитном порядке.\n";
- cout << "11.Запись результата поиска в файл.\n";
- cout << "12.Составить перечень.\n";
- cout << "13.Вывести перечень на экран.\n";
- cout << "14.Записать исходный перечень в файл.\n";
- cout << "15.Отсортировать перечень по году издания в порядке возрастания.\n";
- cout << "16.Отсортировать перечень по количеству авторов в порядке убывания.\n";
- cout << "17.Записать результат работы с перечнем в файл.\n";
- cout << "18.Завершить работу.\n";
- cout << "Ваш выбор (1-18): ";
- cin >> t;
- switch (t)
- {
- case 1:
- inputMasBoooksFile(a, m);
- break;
- case 2:
- outputMasBook(a, m);
- break;
- case 3:
- addbooks(a, m);
- break;
- case 4:
- delelteBooks(a, m);
- break;
- case 5:
- sortyear(a, m);
- break;
- case 6:
- sortbookfio(a, m);
- break;
- case 7:
- outputSourceMassToFile(a, m);
- break;
- case 8:
- poiskyear(a, m, b, l);
- break;
- case 9:
- outputResultArray(b, l);
- break;
- case 10:
- sortname(b, l);
- break;
- case 11:
- outputMasBooksFilePoisk(b, l);
- break;
- case 12:
- createPerechen(a, m, c, n);
- break;
- case 13:
- outputPerechen(c, n);
- break;
- case 14:
- outputSourcePerechenToFile(c, n);
- break;
- case 15:
- sortPerechYear(c, n);
- break;
- case 16:
- sortPerechQuantity(c, n);
- break;
- case 17:
- outputSortPerechenToFile(c, n);
- break;
- case 18:
- exit = false;
- break;
- default:
- cout << "Нет такого номера меню.\n";
- break;
- }
- if (t != 18)
- system("pause");
- }
- cout << "Конец работы.\n";
- return 0;
- }
- //1
- void inputMasBoooksFile(books x[], int& n)//ввод данных из файла
- {
- char file[20];
- string iniz;
- n = 0;
- ifstream fin;
- cout << "Введите имя входного файла: ";
- cin >> file;
- strcat_s(file, ".txt");
- fin.open(file);
- if (fin.fail())
- {
- cout << "Ошибка! Файл не открывается!\n\n";
- return;
- }
- while (!fin.eof())
- {
- fin >> x[n].fio >> iniz >> x[n].name >> x[n].year;
- x[n].fio = x[n].fio + " ";
- x[n].fio = x[n].fio + iniz;
- n++;
- }
- n--;
- fin.close();
- cout << "\n\tФайл введен.\n\n";
- }
- //2
- void outputMasBook(books x[], int n)//вывод результата в текстовый файл
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- cout << " _____________________________________________________________________________\n";
- cout << "| Список книг |\n";
- cout << "|_____________________________________________________________________________|\n";
- cout << "|№ | Фамилия и инициалы | Название |Год издания|\n";
- for (int i = 0; i < n; i++)
- cout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].fio << "|" << setw(30) << x[i].name << "|" << setw(11) << x[i].year << "|\n";
- cout << "|_____________________________________________________________________________|\n\n";
- }
- //3
- void addbooks(books x[], int& n)//добавление строки
- {
- books t;
- string iniz;
- if (n == M)
- {
- cout << "Массив заполнен!\n\n";
- return;
- }
- cout << "Фамилия: ";
- cin >> t.fio;
- cout << "Инициалы: ";
- cin >> iniz;
- t.fio = t.fio + " ";
- t.fio = t.fio + iniz;
- cout << "Название: ";
- cin >> t.name;
- cout << "Год издания: ";
- cin >> t.year;
- x[n++] = t;
- cout << "\n\tЗапись добавлена.\n\n";
- }
- //4
- void delelteBooks(books x[], int& n)//удаление строки
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- int j;
- char ch;
- bool exit = true;
- outputMasBook(x, n);
- cout << "Номер удаляемой строки: ";
- cin >> j;
- j--;
- if (j < 0 || j >= n)
- {
- cout << "Нет такой строки!\n\n";
- return;
- }
- while (exit)
- {
- cout << j + 1 << "-я строка:\n";
- cout << x[j].fio << " " << x[j].name << " " << x[j].year << " " << endl;
- cout << "Удалить: 'y' или 'д'(да)/ 'n' или 'н'(нет)? -> ";
- cin >> ch;
- switch (ch)
- {
- case 'n':
- case 'N':
- case 'н':
- case 'Н':
- cout << "\n\tЗапись не удалена.\n\n";
- return;
- case 'y':
- case 'Y':
- case 'д':
- case 'Д':
- for (int i = j + 1; i < n; i++)
- x[i - 1] = x[i];
- n--;
- exit = false;
- break;
- default:
- cout << "\n\nНеправильно введен символ! Пожалуйста, повторите попытку...\n";
- }
- }
- cout << "\n\tЗапись удалена.\n\n";
- }
- //5
- void sortyear(books x[], int n) //сортировка по году издания в порядке возрастания
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- for (int j = 0; j < n; j++)
- {
- for (int i = 0; i < n; i++)
- {
- if (x[j].year < x[i].year)
- {
- books t = x[i];
- x[i] = x[j];
- x[j] = t;
- }
- }
- }
- cout << "\n\tЗаписи отсортированы по году издания в порядке возрастания.\n\n";
- }
- //6
- void sortbookfio(books y[], int n)
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- if (y[i].fio <= y[j].fio)
- {
- if (y[i].fio == y[j].fio)
- {
- if (y[i].year > y[j].year)
- {
- books t = y[i];
- y[i] = y[j];
- y[j] = t;
- }
- }
- else
- {
- books t = y[i];
- y[i] = y[j];
- y[j] = t;
- }
- }
- cout << "\n\tЗаписи отсортированы по фио в алфавитном порядке и году издания в порядке убывания.\n\n";
- }
- //7
- void outputSourceMassToFile(books x[], int n)//вывод в файл сортировки
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- char file[20];
- ofstream fout;
- cout << "\n\tВведите имя выходного файла: ";
- cin >> file;
- strcat_s(file, ".txt");
- fout.open(file);
- if (fout.fail())
- {
- cout << "Ошибка! Файл не открывается!\n\n";
- return;
- }
- fout << " _____________________________________________________________________________\n";
- fout << "| Список книг |\n";
- fout << "|_____________________________________________________________________________|\n";
- fout << "|№ | Фамилия и инициалы | Название |Год издания|\n";
- for (int i = 0; i < n; i++)
- fout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].fio << "|" << setw(30) << x[i].name << "|" << setw(11) << x[i].year << "|\n";
- fout << "|_____________________________________________________________________________|\n";
- cout << "\n\tИсходный массив выведен в файл " << file << ".\n\n";
- }
- //8
- void poiskyear(books x[], int n, author y[], int& m)//Поиск самой ранней и самой поздней книг данного автора
- {
- int s = 0;
- m = 0;
- string fio, iniz;
- int earlybook, latebook;
- outputMasBook(x, n);
- cout << "\tВведите автора: ";
- cout << "\nФамилия: ";
- cin >> fio;
- cout << "Инициалы: ";
- cin >> iniz;
- fio = fio + " ";
- fio = fio + iniz;
- for (int i = 0; i < n; i++)
- if (fio != x[i].fio)
- s++;
- if (s == n)
- {
- cout << "Такого автора нет.\n\n";
- return;
- }
- for (int i = 1; i < n; i++)
- if (fio == x[i].fio)
- {
- earlybook = x[i].year;
- latebook = x[i].year;
- break;
- }
- //находим минимальный и максимальный год для данного автора
- for (int i = 0; i < n; i++)
- {
- if ((fio == x[i].fio) && (earlybook > x[i].year))
- earlybook = x[i].year;//минимальное
- if ((fio == x[i].fio) && (x[i].year > latebook))
- latebook = x[i].year; //максимальное
- }
- for (int i = 0; i < n; i++)
- if ((fio == x[i].fio) && ((earlybook == x[i].year) || (x[i].year == latebook)))
- {
- y[m++].nameBook = x[i].name;
- if (x[i].year == earlybook)
- y[m - 1].yearBook = x[i].year;
- if (x[i].year == latebook)
- y[m - 1].yearBook = x[i].year;
- }
- cout << "\n\tПоиск завершен.\n\n";
- }
- //9
- void outputResultArray(author x[], int n)
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- cout << " ______________________________________________ \n";
- cout << "| Список книг |\n";
- cout << "|______________________________________________|\n";
- cout << "|№ | Название |Год издания|\n";
- for (int i = 0; i < n; i++)
- cout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].nameBook << "|" << setw(11) << x[i].yearBook << "|\n";
- cout << "|______________________________________________|\n\n";
- }
- //10
- void sortname(author x[], int n) //сортировка по названию книги в алфавитном порядке
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- for (int j = 0; j < n; j++)
- {
- for (int i = 0; i < n; i++)
- {
- if (x[i].nameBook > x[j].nameBook)
- {
- author t = x[i];
- x[i] = x[j];
- x[j] = t;
- }
- }
- }
- cout << "\n\tЗаписи отсортированы по названию книг в алфавитном порядке.\n\n";
- }
- //11
- void outputMasBooksFilePoisk(author x[], int n)// вывод поиска в файл
- {
- if (n == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- char file[20];
- ofstream fout;
- cout << "\n\tВведите имя выходного файла: ";
- cin >> file;
- strcat_s(file, ".txt");
- fout.open(file);
- if (fout.fail())
- {
- cout << "Ошибка! Файл не открывается!\n\n";
- return;
- }
- fout << " ______________________________________________ \n";
- fout << "| Список книг |\n";
- fout << "|______________________________________________|\n";
- fout << "|№ | Название |Год издания|\n";
- for (int i = 0; i < n; i++)
- fout << '|' << setw(3) << i + 1 << "|" << setw(30) << x[i].nameBook << "|" << setw(11) << x[i].yearBook << "|\n";
- fout << "|______________________________________________|\n";
- cout << "\n\tМассив выведен в файл " << file << "\n\n";
- }
- //12
- void createPerechen(books x[], int n, perechen y[], int& m)
- {
- int flag;//флаг, показывающий, что нашлись совпадения по году
- m = 0;
- for (int i = 0; i < n; i++)
- {
- flag = 0;
- for (int j = 0; j < m; j++)
- {
- if (x[i].year == y[j].year)//если год издания книги из book совпал с годом издания из перечня, то ...
- {
- y[j].quantity++;//увеличиваем количество авторов на 1
- flag = 1;//показываем, что замена была
- }
- }
- if (flag == 0)//если замен не было, то
- {
- y[m].year = x[i].year;//присваиваем году издания из перечня год издания из book
- y[m].quantity = 1;//устанавливаем количество авторов на 1
- m++;//увеличиваем размер перечня
- }
- }
- cout << "\n\tПеречень составлен\n\n";
- }
- //13
- void outputPerechen(perechen x[], int m)
- {
- if (m == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- cout << " ___________________________\n";
- cout << "| Перечень |\n";
- cout << "|__________________________|\n";
- cout << "|№ |Год издания|Количество|\n";
- for (int i = 0; i < m; i++)
- cout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
- cout << " ___________________________\n\n";
- }
- //14
- void sortPerechYear(perechen x[], int m)
- {
- if (m == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- for (int j = 0; j < m; j++)
- {
- for (int i = 0; i < m; i++)
- {
- if (x[j].year < x[i].year)
- {
- perechen t = x[i];
- x[i] = x[j];
- x[j] = t;
- }
- }
- }
- cout << "\n\tПеречень отсортирован по году издания в порядке возрастания.\n\n";
- }
- //15
- void sortPerechQuantity(perechen x[], int m)
- {
- if (m == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- for (int j = 0; j < m; j++)
- {
- for (int i = 0; i < m; i++)
- {
- if (x[j].quantity > x[i].quantity)
- {
- perechen t = x[i];
- x[i] = x[j];
- x[j] = t;
- }
- }
- }
- cout << "\n\tПеречень отсортирован по количеству авторов в порядке убывания.\n\n";
- }
- //16
- void outputSourcePerechenToFile(perechen x[], int m)
- {
- if (m == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- char file[20];
- ofstream fout;
- cout << "Введите имя выходного файла: ";
- cin >> file;
- strcat_s(file, ".txt");
- fout.open(file);
- if (fout.fail())
- {
- cout << "Ошибка! Файл не открывается!\n\n";
- return;
- }
- fout << " ___________________________\n";
- fout << "| Перечень |\n";
- fout << "|__________________________|\n";
- fout << "|№ |Год издания|Количество|\n";
- for (int i = 0; i < m; i++)
- fout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
- fout << " ___________________________\n\n";
- cout << "\n\tИсходный перечень выведен в файл " << file << ".\n\n";
- }
- //17
- void outputSortPerechenToFile(perechen x[], int m)
- {
- if (m == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- char file[20];
- ofstream fout;
- cout << "Введите имя выходного файла: ";
- cin >> file;
- strcat_s(file, ".txt");
- fout.open(file);
- if (fout.fail())
- {
- cout << "Ошибка! Файл не открывается!\n\n";
- return;
- }
- fout << " ___________________________\n";
- fout << "| Перечень |\n";
- fout << "|__________________________|\n";
- fout << "|№ |Год издания|Количество|\n";
- for (int i = 0; i < m; i++)
- fout << '|' << setw(3) << i + 1 << "|" << setw(11) << x[i].year << "|" << setw(10) << x[i].quantity << "|\n";
- fout << " ___________________________\n\n";
- cout << "\n\tРезультат работы с перечнем выведен в файл " << file << ".\n\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement