Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <fstream>
- #include <iomanip>
- #include <string>
- #include <string.h>
- #include <Windows.h>
- #include <algorithm>
- using namespace std;
- int n;
- struct date
- {
- int day;
- int mounth;
- int year;
- };
- struct student
- {
- string name;
- string inits;
- date datedsar;
- };
- struct dayyear
- {
- date dr;
- int nm;
- };
- bool sortyear(student a, student b); //исходный // сортировка по годам
- bool sortvozrast(student a, student b);//выходной //сортировка от самого старшего к самому младшему
- bool sortalf(student a, student b);//выходной
- void vivod(student *a,int n); //Вывод массива на экран
- void zapisvfile(student *a, int n); //Запись массива в файл
- void searchhh(student *a, student b[], int n, int& chek); //поиск
- void pechatchapki(); //Печать шапки
- void addstudent(student a[], int &n); //добавить студента
- void deletestudent(student a[], int& n); //удалить студента
- void pere4en(student *a, int n, dayyear b[], int& k);
- void vivodpere4n(dayyear *a, int n);
- void zapisvfileper4(dayyear *a, int n);
- bool sortpere42(dayyear a, dayyear b);
- bool sortpere41(dayyear a, dayyear b);
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int vibormenu, sortirovka, n, chek, c4k;
- chek = 0, c4k = 0;
- const int N=1000;
- student srch, gg;
- cout << "Введите колличество студентов" << endl; cin >> n;
- /*student* real = new student[n];*/
- student real[N], poiskk[N];
- dayyear pr4n[N] = { 0 };
- ifstream filevhod("C:/Users/Vadim/Desktop/studen1.txt");
- for (int i = 0; i < n; i++)
- filevhod >> real[i].name >> real[i].inits >> real[i].datedsar.day >> real[i].datedsar.mounth >> real[i].datedsar.year; //Считывание массива
- //
- //sort(real, real + n, sortyear); //изначальная сортировка
- menu:
- system("cls");
- cout << "Выберите пункт меню(1,2,3,4,5)" << endl;
- cout << "1 - Вывод массива на экран" << endl;
- cout << "2 - Сортировка" << endl;
- cout << "3 - Поиск" << endl;
- cout << "4 - Новый студент" << endl;
- cout << "5 - Удалить студента" << endl;
- cout << "6 - сформировать перечень" << endl;
- cout << "Для выхода из программы нажмите на любую другу клавишу" << endl;
- cin >> vibormenu;
- switch (vibormenu)
- {
- case 1:
- {
- system("cls");
- vivod(real, n);
- system("pause");
- goto menu;
- }
- case 2:
- {
- system("cls");
- cout << "Выберите способ сортировки(1,2,3)" << endl;
- cout << "1 - Сортировка по году рождения по возрастанию" << endl;
- cout << "2 - Сортировка по возрасту, в порядке убывания" << endl;
- cout << "3 - Сортировка по по фамилии и инциалам в алфавитном порядке" << endl;
- cout << "Нажмите любую клавишу для возврата в меню" << endl;
- cin >> sortirovka;
- switch (sortirovka)
- {
- case 1:
- {
- sort(real, real + n, sortyear);
- vivod(real, n);
- zapisvfile(real, n);
- system("pause");
- goto menu;
- }
- case 2:
- {
- sort(real, real + n, sortvozrast);
- vivod(real, n);
- zapisvfile(real, n);
- system("pause");
- goto menu;
- }
- case 3:
- {
- sort(real, real + n, sortalf);
- vivod(real, n);
- zapisvfile(real, n);
- system("pause");
- goto menu;
- }
- default:
- {
- goto menu;
- }
- }
- }
- case 3:
- {
- int psk;
- chek = 0;
- searchhh(real, poiskk, n, chek);
- vivod(poiskk, chek);
- cout << "Как отсортировать массив?" << endl;
- cout << "1 - по возраству; 2 - по алфавиту; 3 - выход без сортировки" << endl;
- cin >> psk;
- switch (psk)
- {
- case 1:
- {
- sort(poiskk, poiskk + chek, sortvozrast);
- vivod(poiskk, chek);
- zapisvfile(poiskk, chek);
- system("pause");
- break;
- }
- case 2:
- {
- sort(poiskk, poiskk + chek, sortalf);
- vivod(poiskk, chek);
- zapisvfile(poiskk, chek);
- system("pause");
- break;
- }
- case 3:
- {
- goto menu;
- }
- }
- system("pause");
- goto menu;
- }
- case 4:
- {
- system("cls");
- addstudent(real, n);
- vivod(real, n);
- zapisvfile(real, n);
- goto menu;
- break;
- }
- case 5:
- {
- system("cls");
- vivod(real, n);
- deletestudent(real, n);
- zapisvfile(real, n);
- goto menu; // Вшзврат к меню
- }
- case 6:
- {
- system("cls");
- pere4en(real, n, pr4n, c4k);
- vivodpere4n(pr4n, c4k);
- zapisvfileper4(pr4n, c4k);
- int otvet2;
- cout << "Выберите способ сортировки перечня" << endl;
- cout << "1 - по году рождения в порядке возрастания" << endl;
- cout << "2 - по количеству студентов в порядке убывания" << endl;
- cout << "3 - выход без сортировки" << endl;
- cin >> otvet2;
- switch (otvet2)
- {
- case 1:
- {
- system("cls");
- sort(pr4n, pr4n + c4k,sortpere41);
- vivodpere4n(pr4n, c4k);
- zapisvfileper4(pr4n, c4k);
- system("pause");
- goto menu;
- }
- case 2:
- {
- system("cls");
- sort(pr4n, pr4n + c4k, sortpere42);
- vivodpere4n(pr4n, c4k);
- zapisvfileper4(pr4n, c4k);
- system("pause");
- goto menu;
- }
- case 3:
- {
- goto menu;
- }
- }
- }
- }
- }
- void vivod(student *a, int n)
- {
- cout << "__________________________________________" << endl;
- cout << "| № | Фамилия и инициалы | Дата рождения |" << endl;
- cout << "__________________________________________" << endl;
- for (int i = 0; i < n; i++)
- {
- cout << "|" << setw(3) << i+1 << "|" << setw(15) << a[i].name << " " << setw(4) << a[i].inits << "|" << setw(7) << a[i].datedsar.day << "." << setw(2) << a[i].datedsar.mounth << "." << setw(4) << a[i].datedsar.year << "|" << endl;
- }
- }
- void zapisvfile(student *a, int n)
- {
- int otvet;
- cout << "Сохранить в файл?(1-да/2-нет)" << endl; cin >> otvet;
- if (otvet == 1)
- {
- string filename, kone4niipyt;
- string pytrabstol = "C:/Users/Vadim/Desktop/";
- string txt = ".txt";
- cout << "Введите имя конечного файла" << endl; cin >> filename;
- kone4niipyt = pytrabstol + filename;
- kone4niipyt = kone4niipyt + txt;
- ofstream fout(kone4niipyt);
- if (!fout.is_open()) cout << "Ошибка";
- fout << "__________________________________________" << endl;
- fout << "| № | Фамилия и инициалы | Дата рождения |" << endl;
- fout << "__________________________________________" << endl;
- for (int i = 0; i < n; i++)
- {
- fout << "|" << setw(3) << i+1 << "|" << setw(15) << a[i].name << " " << setw(4) << a[i].inits << "|" << setw(7) << a[i].datedsar.day << "." << setw(2) << a[i].datedsar.mounth << "." << setw(4) << a[i].datedsar.year << "|" << endl;
- }
- }
- else return;
- }
- bool sortyear(student a, student b)
- {
- return abs(a.datedsar.year) < abs(b.datedsar.year);
- }
- bool sortvozrast(student a, student b)
- {
- if (a.datedsar.year != b.datedsar.year)
- return a.datedsar.year < b.datedsar.year;
- else if (a.datedsar.year == b.datedsar.year)
- {
- if (a.datedsar.mounth != b.datedsar.mounth)
- return a.datedsar.mounth < b.datedsar.mounth;
- else
- return a.datedsar.day < b.datedsar.day;
- };
- }
- void searchhh(student *a, student b[], int n, int& chek)
- {
- student search, search2;
- cout << "Введите левую границу поиска(День,месяц,год — через пробел)" << endl;
- cin >> search.datedsar.day >> search.datedsar.mounth >> search.datedsar.year;
- cout << "Введите правую границу поиска(День,месяц,год — через пробел)" << endl;
- cin >> search2.datedsar.day >> search2.datedsar.mounth >> search2.datedsar.year;
- chek = 0;
- for (int i = 0; i < n; i++)
- {
- if ((a[i].datedsar.year >= search.datedsar.year ) and (a[i].datedsar.year <= search2.datedsar.year))
- {
- if ((search.datedsar.year == a[i].datedsar.year) or (a[i].datedsar.year == search2.datedsar.year))
- {
- if ((search2.datedsar.mounth >= a[i].datedsar.mounth))
- {
- b[chek] = a[i];
- chek++;
- }
- }
- else {
- b[chek] = a[i];
- chek++;
- }
- }
- }
- }
- bool sortalf(student a, student b)
- {
- if (a.name != b.name)
- return a.name < b.name;
- else
- return a.inits < b.inits;
- }
- void addstudent(student a[], int& n)
- {
- int s;
- cout << "Введите имя, инициаллы и дату рождения студента(день,месяц,год)" << endl;
- student newstudent;
- cin >> newstudent.name >> newstudent.inits >> newstudent.datedsar.day >> newstudent.datedsar.mounth >> newstudent.datedsar.year;
- a[n] = newstudent;
- n++;
- }
- void deletestudent(student a[], int& n)
- {
- int i, j;
- char ch;
- i = 0;
- cout << "Номер указанной строки";
- cin >> j;
- j--;
- if (j < 0 || j >= n)
- {
- cout << "Такой строки нет";
- system("pause");
- return;
- }
- else
- {
- cout << a[j].name << " " << a[j].inits << " " << a[j].datedsar.day << "." << a[j].datedsar.mounth << "."<< a[j].datedsar.year << "." << endl;
- cout << "Удалить?" << endl;
- cout << "Yes/No" << endl;
- cin >> ch;
- if (ch == 'n')
- return;
- if (ch != 'y')
- {
- cout << "Некорректно";
- system("pause");
- return;
- }
- for (i = j + 1; i < n; i++)
- a[i - 1] = a[i];
- n--;
- cout << "Запись удалена \n";
- }
- system("pause");
- }
- void pere4en(student *a, int n, dayyear b[], int& c4k)
- {
- c4k = 0;
- for (int i = 0; i < n; i++)
- {
- b[i].nm = 0;
- b[i].dr.year = 0;
- b[i].dr.mounth = 0;
- b[i].dr.day = 0;
- }
- int fl = 0;
- for (int i = 0; i < n; i++)
- {
- fl = 0;
- for (int j = 0; j < n; j++)
- {
- if (a[i].datedsar.day == b[j].dr.day && a[i].datedsar.mounth == b[j].dr.mounth && a[i].datedsar.year == b[j].dr.year)
- {
- fl = 1;
- }
- }
- if (fl == 0)
- {
- b[c4k].dr = a[i].datedsar;
- c4k++;
- }
- }
- for (int i = 0; i < c4k; i++)
- {
- for (int j = 0; j < n; j++)
- if (b[i].dr.day == a[j].datedsar.day && b[i].dr.mounth == a[j].datedsar.mounth && b[i].dr.year == a[j].datedsar.year)
- {
- b[i].nm++;
- }
- }
- cout << "Перечень удачно сформирован!" << endl << endl;
- }
- void vivodpere4n(dayyear *a, int n)
- {
- cout << "__________________________________" << endl;
- cout << "| № | День рождения | Количество |" << endl;
- cout << "__________________________________" << endl;
- for (int i = 0; i < n; i++)
- {
- cout << "|" << setw(3) << i + 1 << "|" << setw(7) << a[i].dr.day << "." << setw(2) << a[i].dr.mounth << "." << setw(4) << a[i].dr.year << "|" << setw(11) << a[i].nm << "|" << endl;
- }
- }
- void zapisvfileper4(dayyear *a, int n)
- {
- int otvet;
- cout << "Сохранить в файл?(1-да/2-нет)" << endl; cin >> otvet;
- if (otvet == 1)
- {
- string filename, kone4niipyt;
- string pytrabstol = "C:/Users/Vadim/Desktop/";
- string txt = ".txt";
- cout << "Введите имя конечного файла" << endl; cin >> filename;
- kone4niipyt = pytrabstol + filename;
- kone4niipyt = kone4niipyt + txt;
- ofstream fout(kone4niipyt);
- if (!fout.is_open()) cout << "Ошибка";
- fout << "__________________________________" << endl;
- fout << "| № | День рождения | Количество |" << endl;
- fout << "__________________________________" << endl;
- for (int i = 0; i < n; i++)
- {
- fout << "|" << setw(3) << i + 1 << "|" << setw(7) << a[i].dr.day << "." << setw(2) << a[i].dr.mounth << "." << setw(4) << a[i].dr.year << "|" << setw(11) << a[i].nm << "|" << endl;
- }
- }
- else return;
- }
- bool sortpere41(dayyear a,dayyear b)
- {
- if (a.dr.year != b.dr.year)
- return a.dr.year < b.dr.year;
- else if (a.dr.year == b.dr.year)
- {
- if (a.dr.mounth != b.dr.mounth)
- return a.dr.mounth < b.dr.mounth;
- else
- return a.dr.day < b.dr.day;
- };
- }
- bool sortpere42(dayyear a, dayyear b)
- {
- return a.nm > b.nm;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement