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;
- };
- 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); //удалить студента
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- int vibormenu, sortirovka, n, chek;
- chek = 0;
- const int N=1000;
- student srch, gg;
- cout << "Введите колличество студентов" << endl; cin >> n;
- /*student* real = new student[n];*/
- student real[N], poiskk[N];
- 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 << "Для выхода из программы нажмите на любую другу клавишу" << 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(real, 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; // Вшзврат к меню
- }
- }
- }
- void pechatchapki()
- {
- cout << "__________________________________________" << endl;
- cout << "| № | Фамилия и инициалы | Дата рождения |" << endl;
- cout << "__________________________________________" << endl;
- }
- void vivod(student *a, int n)
- {
- pechatchapki();
- 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");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement