Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string.h>
- #include <iomanip>
- #include <fstream>
- //#include <Windows.h>
- using namespace std;
- struct Student
- {
- string nameSt;
- string group;
- int day;
- int month;
- int year;
- };
- struct ScrollList
- {
- int day;
- int month;
- int year;
- int quantity;
- };
- void readSourceDateFromFile(Student *&a, int &size);
- void outputDateToScreen(Student a[], int size);
- void sortSourceStudYear(Student a[], int size);
- void sortSourceStudAge(Student a[], int size);
- void addStudent(Student *&a, int &size);
- void deleteStudent(Student *&a, int &size);
- void searchStudents(Student a[], int sourceSize, Student *&b, int &resultSize);
- void sortSearchStudent(Student a[], int size);
- void insertDateToFile(Student a[], int size);
- void createScrollList(Student a[], int sourceSize, ScrollList *&b, int &scrollListSize);
- void outputScrollListToScreen(ScrollList a[], int size);
- void sortScrollListYear(ScrollList a[], int size);
- void sortScrollListQuantity(ScrollList a[], int size);
- void insertScrollListToFile(ScrollList a[], int size);
- int main()
- {
- //SetConsoleCP(1251);
- //SetConsoleOutputCP(1251);
- bool exit = true;
- int choice;
- Student *sourceSt = 0;
- Student *searchSt = 0;
- ScrollList *scrollList = 0;
- int realSourceSize, realSearchSize, scrollListSize;
- while (exit)
- {
- system("clear");//system("CLS");
- cout << "1.\tВвести исходный массив из файла.\n";
- cout << "2.\tВывести исходный массив на экран.\n";
- cout << "3.\tСортировка исходного массива по дате рождения в порядке убывания возраста.\n";
- cout << "4.\tСортировка исходного массива по году рождения в порядке возрастания.\n";
- cout << "5.\tДобавить студента в исходный массив студентов.\n";
- cout << "6.\tУдалить студента в исходный массив студентов.\n";
- cout << "7.\tЗаписать исходный массив в файл.\n";
- cout << "8.\tНайти всех студентов, родившихся осенью (выходной массив).\n";
- cout << "9.\tВывести выходной массив на экран.\n";
- cout << "10.\tСортировка выходного массива по фамилии студентов в алфавитном порядке.\n";
- cout << "11.\tЗаписать выходной массив в файл.\n";
- cout << "12.\tСоставить перечень дней рождений.\n";
- cout << "13.\tВывести перечень на экран.\n";
- cout << "14.\tСортировка перечня по дню рождения в порядке возрастания.\n";
- cout << "15.\tСортировка перечня по количеству в порядке убывания.\n";
- cout << "16.\tЗапись перечня в файл.\n";
- cout << "0.\tВывод из программы.\n";
- cout << "Введите пункт меню: ";
- cin >> choice;
- switch (choice)
- {
- case 0:
- exit = false;
- break;
- case 1:
- readSourceDateFromFile(sourceSt, realSourceSize);
- break;
- case 2:
- outputDateToScreen(sourceSt, realSourceSize);
- break;
- case 3:
- sortSourceStudAge(sourceSt, realSourceSize);
- break;
- case 4:
- sortSourceStudYear(sourceSt, realSourceSize);
- break;
- case 5:
- addStudent(sourceSt, realSourceSize);
- break;
- case 6:
- deleteStudent(sourceSt, realSourceSize);
- break;
- case 7:
- insertDateToFile(sourceSt, realSourceSize);
- break;
- case 8:
- searchStudents(sourceSt, realSourceSize, searchSt, realSearchSize);
- break;
- case 9:
- outputDateToScreen(searchSt, realSearchSize);
- break;
- case 10:
- sortSearchStudent(searchSt, realSearchSize);
- break;
- case 11:
- insertDateToFile(searchSt, realSearchSize);
- break;
- case 12:
- createScrollList(sourceSt, realSourceSize, scrollList, scrollListSize);
- break;
- case 13:
- outputScrollListToScreen(scrollList, scrollListSize);
- break;
- case 14:
- sortScrollListYear(scrollList, scrollListSize);
- break;
- case 15:
- sortScrollListQuantity(scrollList, scrollListSize);
- break;
- case 16:
- insertScrollListToFile(scrollList, scrollListSize);
- break;
- default:
- cout << "\n\tНет такого номера.\n";
- break;
- }
- system("read -p 'Нажмите Enter для продолжения...' var");//system("pause");
- }
- delete [] sourceSt;
- delete [] searchSt;
- delete [] scrollList;
- return 0;
- }
- //1
- void readSourceDateFromFile(Student *&a, int &size)
- {
- if (a != 0)
- {
- delete [] a;
- a = 0;
- }
- char fileName[30];
- string iniz;
- cout << "\nВведите имя файла: ";
- cin >> fileName;
- //strcat(fileName, ".txt");//strcat_s(fileName, ".txt");
- ifstream fin(fileName);
- if (fin.is_open())
- cout << "\n\tФайл успешно открыт!\n";
- else
- {
- cout << "\n\tОшибка! Файл закрыт!\n";
- return;
- }
- size = 0;
- while (!fin.eof())
- {
- string name, group;
- int day, month, year;
- fin >> name >> iniz >> group >> day >> month >> year;
- size++;
- }
- fin.close();
- size--;
- a = new Student[size];
- int i = 0;//счётчик (индекс массива)
- ifstream Fin(fileName);
- while (!Fin.eof())
- {
- if (i == size)
- break;
- Fin >> a[i].nameSt >> iniz >> a[i].group >> a[i].day >> a[i].month >> a[i].year;
- a[i].nameSt += (" " + iniz);
- i++;
- }
- cout << "\t\tЗапись завершена.\n";
- if ( !Fin.is_open() )
- cout << "\tФайл успешно закрыт!\n\n";
- else
- {
- cout << "\tОшибка! Файл открыт!\n\n";
- return;
- }
- }
- //2,9
- void outputDateToScreen(Student a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- cout << "-------------------------------------------------------------\n";
- cout << "| № | Фамилия И. О. | Группа |Дата рождения|\n";
- cout << "-------------------------------------------------------------\n";
- for (int i = 0; i < size; i++)
- {
- int b = (a[i].nameSt.length()) / 2;
- int c = (a[i].group.length()) / 2;
- cout << "|" << setw(3) << i+1;
- cout << "|" << setw(30 + b) << a[i].nameSt;
- cout << "|" << setw(10 + c) << a[i].group;
- cout << "|" << setw(3) << a[i].day << "|" << setw(3) << a[i].month << "|" << setw(5) << a[i].year;
- cout << "|\n";
- }
- cout << "-------------------------------------------------------------\n\n";
- }
- //3
- void sortSourceStudYear(Student a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tИсходный массив пуст.\n\n";
- return;
- }
- for (int i = 0; i < size; i++)
- for (int j = 0; j < size; j++)
- {
- if (a[i].year <= a[j].year)
- {
- Student c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- }
- cout << "\n\tСортировка исходного массива по году рождения в порядке убывания завершена.\n\n";
- }
- //4
- void sortSourceStudAge(Student a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tИсходный массив пуст.\n\n";
- return;
- }
- for (int i = 0; i < size; i++)
- for (int j = 0; j < size; j++)
- {
- if (a[i].year < a[j].year)
- {
- Student c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- else if (a[i].year == a[j].year)
- {
- if (a[i].month < a[j].month)
- {
- Student c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- else if (a[i].month == a[j].month)
- {
- if (a[i].day < a[j].day)
- {
- Student c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- }
- }
- }
- cout << "\n\tСортировка исходного массива по дате рождения в порядке убывания возраста завершена.\n\n";
- }
- //5
- void addStudent(Student *&a, int &size)
- {
- Student newStudent;
- string iniz;
- cout << "\nВведите данные о новом студенте:\n";
- cout << "\tФамилия: ";
- cin >> newStudent.nameSt;
- cout << "\tИнициалы: ";
- cin >> iniz;
- newStudent.nameSt += (" " + iniz);
- cout << "\tГруппа: ";
- cin >> newStudent.group;
- cout << "\tДата рождения:\n";
- cout << "\t\tдень: ";
- cin >> newStudent.day;
- cout << "\t\tмесяц: ";
- cin >> newStudent.month;
- cout << "\t\tгод: ";
- cin >> newStudent.year;
- Student *copy = new Student[size + 1];
- for (int i = 0; i < size; i++)
- copy[i] = a[i];
- delete [] a;
- a = 0;
- copy[size++] = newStudent;
- a = new Student[size];
- for (int i = 0; i < size; i++)
- a[i] = copy[i];
- delete [] copy;
- cout << "\n\tЗапись добавлена.\n\n";
- }
- //6
- void deleteStudent(Student *&a, int &size)
- {
- if (size == 0)
- {
- cout << "\n\tИсходный массив пуст.\n\n";
- return;
- }
- int number;
- char choice;
- bool exit = true;
- outputDateToScreen(a, size);
- while (true)
- {
- cout << "\nВведите номер удаляемой строки: ";
- cin >> number;
- number--;
- if ((number < 0) || (number >= size))
- {
- cout << "\n\t!!! Нет такого номера!\n";
- system("read -p 'Нажмите Enter для продолжения...' var");//system("pause");
- }
- else
- break;
- }
- cout << number+1 << " строка: " << a[number].nameSt << ' ' << a[number].group << ' ' << a[number].day << '.' << a[number].month << '.' << a[number].year << '\n';
- while ( exit )
- {
- cout << "Удалить данный элемент? (Y,y,Д,д - да; N,n,Н,н - нет) -> ";
- cin >> choice;
- switch (choice)
- {
- case 'n':
- case 'N':
- //case 'н'
- //case 'Н'
- cout << "\n\tЗапись не удалена.\n\n";
- exit = false;
- break;
- case 'y':
- case 'Y':
- //case 'у'
- //case 'У'
- {
- Student *copy = new Student[size - 1];
- int k = 0;//переменная счетчик
- for (int i = 0; i < size; i++)
- if (number != i)
- copy[k++] = a[i];
- else
- continue;
- delete [] a;
- a = 0;
- a = new Student[--size];
- for (int i = 0; i < size; i++)
- a[i] = copy[i];
- delete [] copy;
- cout << "\n\tЗапись удалена.\n\n";
- exit = false;
- break;
- }
- default:
- cout << "Пожалуйста, введите 'Y' или 'N'\n";
- system("read -p 'Нажмите Enter для повторного ввода...' var");
- }
- }
- }
- //7, 11
- void insertDateToFile(Student a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tМассив пуст.\n\n";
- return;
- }
- char fileName[30];
- cout << "\nВведите имя файла: ";
- cin >> fileName;
- strcat(fileName, ".txt");//strcat_s(fileName, ".txt");
- ofstream fout(fileName);
- if (fout.is_open())
- cout << "\n\tФайл успешно открыт!\n";
- else
- {
- cout << "\n\tОшибка! Файл закрыт!\n";
- return;
- }
- fout << "-------------------------------------------------------------\n";
- fout << "| № | Фамилия И. О. | Группа |Дата рождения|\n";
- fout << "-------------------------------------------------------------\n";
- for (int i = 0; i < size; i++)
- {
- int b = (a[i].nameSt.length()) / 2;
- int c = (a[i].group.length()) / 2;
- fout << "|" << setw(3) << i+1;
- fout << "|" << setw(30 + b) << a[i].nameSt;
- fout << "|" << setw(10 + c) << a[i].group;
- fout << "|" << setw(3) << a[i].day << "|" << setw(3) << a[i].month << "|" << setw(5) << a[i].year;
- fout << "|\n";
- }
- fout << "-------------------------------------------------------------\n";
- cout << "\t\tЗапись массива в файл " << fileName << " завершена.\n";
- fout.close();
- if ( !fout.is_open() )
- cout << "\tФайл успешно закрыт!\n\n";
- else
- {
- cout << "\tОшибка! Файл открыт!\n\n";
- return;
- }
- }
- //8
- void searchStudents(Student a[], int sourceSize, Student *&b, int &resultSize)
- {
- if (sourceSize == 0)
- {
- cout << "\n\tИсходный массив пуст.\n\n";
- return;
- }
- if (b != 0)
- {
- delete [] b;
- b = 0;
- }
- int minDay = 32, minMonth = 13, minYear = 20200;
- for (int i = 0; i < sourceSize; i++)
- {
- if ((a[i].month >= 9) && (a[i].month <= 11))
- {
- if (a[i].year < minYear || a[i].year == minYear && (a[i].month < minMonth || a[i].month == minMonth && a[i].day < minDay))
- {
- minYear = a[i].year;
- minMonth = a[i].month;
- minDay = a[i].day;
- }
- }
- }
- resultSize = 0;
- for (int i = 0; i < sourceSize; i++)
- if ((a[i].month == minMonth) && (a[i].day == minDay) && (a[i].year == minYear))
- resultSize++;
- b = new Student[resultSize];
- int k = 0;
- for (int i = 0; i < sourceSize; i++)
- if ((a[i].month == minMonth) && (a[i].day == minDay) && (a[i].year == minYear))
- b[k++] = a[i];
- if (resultSize == 0)
- cout << "\n\tСтудеты не найдены.\n\n";
- else
- cout << "\n\tПоиск завершен.\n\n";
- }
- //9
- void sortSearchStudent(Student a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tВыходной массив пуст.\n\n";
- return;
- }
- for (int i = 0; i < size; i++)
- for (int j = 0; j < size; j++)
- {
- if (a[i].nameSt <= a[j].nameSt)
- {
- Student c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- }
- cout << "\n\tСортировка выходного массива по фамилии студентов в алфавитном порядке завершена.\n\n";
- }
- //12
- void createScrollList(Student a[], int sourceSize, ScrollList *&b, int &scrollListSize)
- {
- if (sourceSize == 0)
- {
- cout << "\n\tИсходный массив пуст.\n\n";
- return;
- }
- if (b != 0)
- {
- delete [] b;
- b = 0;
- }
- int flag;
- ScrollList *copy = new ScrollList[sourceSize];
- scrollListSize = 0;
- for (int i = 0; i < sourceSize; i++)
- {
- flag = 0;
- for (int j = 0; j < scrollListSize; j++)
- {
- if (a[i].day == copy[j].day && (a[i].month == copy[j].month) && (a[i].year == copy[j].year))
- {
- copy[j].quantity++;
- flag = 1;
- }
- }
- if (flag == 0)
- {
- copy[scrollListSize].day = a[i].day;
- copy[scrollListSize].month = a[i].month;
- copy[scrollListSize].year = a[i].year;
- copy[scrollListSize].quantity = 1;
- scrollListSize++;
- }
- }
- b = new ScrollList[scrollListSize];
- for (int i = 0; i < scrollListSize; i++)
- b[i] = copy[i];
- delete [] copy;
- cout << "\n\tПеречень составлен.\n\n";
- }
- //13
- void outputScrollListToScreen(ScrollList a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- cout << "------------------------------\n";
- cout << "| № |Дата рождения|Количество|\n";
- cout << "------------------------------\n";
- for (int i = 0; i < size; i++)
- {
- cout << "|" << setw(3) << i+1;
- cout << "|" << setw(3) << a[i].day << "/" << setw(3) << a[i].month << "/" << setw(4) << a[i].year;
- cout << "|" << setw(10) << a[i].quantity;
- cout << "|\n";
- }
- cout << "------------------------------\n\n";
- }
- //14
- void sortScrollListYear(ScrollList a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- for (int i = 0; i < size; i++)
- for (int j = 0; j < size; j++)
- {
- if (a[i].year < a[j].year)
- {
- ScrollList c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- else if (a[i].year == a[j].year)
- {
- if (a[i].month < a[j].month)
- {
- ScrollList c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- else if (a[i].month == a[j].month)
- {
- if (a[i].day < a[j].day)
- {
- ScrollList c = a[i];
- a[i] = a[j];
- a[j] = c;
- }
- }
- }
- }
- cout << "\n\tСортировка перечня дню рождению завершена.\n\n";
- }
- //15
- void sortScrollListQuantity(ScrollList a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- for (int i = 0; i < size; i++)
- {
- for (int j = 0; j < size; j++)
- {
- if (a[i].quantity > a[j].quantity)
- {
- ScrollList change = a[i];
- a[i] = a[j];
- a[j] = change;
- }
- }
- }
- cout << "\n\tСортировка перечня по количеству дат завершена.\n\n";
- }
- //16
- void insertScrollListToFile(ScrollList a[], int size)
- {
- if (size == 0)
- {
- cout << "\n\tПеречень пуст.\n\n";
- return;
- }
- char fileName[30];
- cout << "\nВведите имя файла: ";
- cin >> fileName;
- strcat(fileName, ".txt");//strcat_s(fileName, ".txt");
- ofstream fout(fileName);
- if (fout.is_open())
- cout << "\n\tФайл успешно открыт!\n";
- else
- {
- cout << "\n\tОшибка! Файл закрыт!\n";
- return;
- }
- fout << "------------------------------\n";
- fout << "| № |Дата рождения|Количество|\n";
- fout << "------------------------------\n";
- for (int i = 0; i < size; i++)
- {
- fout << "|" << setw(3) << i+1;
- fout << "|" << setw(3) << a[i].day << "/" << setw(3) << a[i].month << "/" << setw(4) << a[i].year;
- fout << "|" << setw(10) << a[i].quantity;
- fout << "|\n";
- }
- fout << "------------------------------\n";
- cout << "\t\tЗапись массива в файл " << fileName << " завершена.\n";
- fout.close();
- if ( !fout.is_open() )
- cout << "\tФайл успешно закрыт!\n\n";
- else
- {
- cout << "\tОшибка! Файл открыт!\n\n";
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement