#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <windows.h>
using namespace std;
struct Sotrudnik {
char secondname[20], firstname[20], position[20];
int year = 0, yearpos = 0;
Sotrudnik *next;
};
Sotrudnik *head = 0; //адрес головы списка
Sotrudnik *current, *checkyear;
int main()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
char c;
cout << "Ввести данные о субъекте? Y/y - чтобы запустить.";
c = _getche();
//формирование списка с клавиатуры
while (c == 'y' || c == 'Y')
{
if (head) //если добавляется не первый элемент списка
{
current->next = new Sotrudnik; /*выделяем память под новый элемент списка и заносим его адрес в поле next текущего (последнего на данный момент) элемента списка*/
current = current->next; /* текущим объявляем вновь созданный элемент */
}
else //если добавляем первый элемент в список
{
head = new Sotrudnik; /* выделяем память под новый элемент списка и заносим его адрес в переменную head */
current = head; /* первый элемент списка объявляем текущим */
}
system("cls");
cout << "\nВведите данные о субъекте:\n";
cout << "Фамилия:" << endl;
cin >> current->secondname;
cout << "Имя:" << endl;
cin >> current->firstname;
cout << "Год:" << endl;
cin >> current->year;
cout << "Введите год для проверки:" << endl;
cin >> current->yearpos;
cout << "Введите должность:" << endl;
cin >> current->position;
current->next = 0;
cout << "Ввести данные о еще одном субъекте?";
c = _getche();
}
if (head)//если список не пуст
{
system("cls");
cout << "Список введенных субъектов:\n";
current = head;
while (current != 0)
{
cout << "Фамилия:" << current->secondname << endl << "Имя:" << current->firstname << endl << "Год: " << current->year << endl << "Год для проверки:" << current->yearpos << endl << "Должность: " << current->position << endl;
current = current->next;
}
_getch();
cout << endl;
int check = 0;
cout << "Сортировка: введите \n 0 - чтобы отсортировать по именам, \n 1 - чтобы отсортировать по фамилиии,\n 2 - чтобы отсортировать по годам\n > ";
cin >> check;
cout << "Вы ввели" << check << endl;
switch (check)
{
case 0:
sortfirstname(head);
break;
case 1:
sortsecondname(head);
break;
case 2:
sortyear(head);
break;
default:
cerr << "Введите корректное число.";
break;
}
// Удаление из списка информацию о тех сотрудниках, которые были приняты на работу позже заданного года
current = head;
checkyear = head;
while (current != 0)
{
if (current->year>current->yearpos)
checkyear = current;
current = current->next;
}
if (checkyear != head)
{
current = head;
while (current->next = checkyear)
current = current->next;
current->next = checkyear->next;
}
else {
head = checkyear->next;
}
delete checkyear;
current = head;
while (current != 0)
{
cout << "Фамилия:" << current->secondname << endl << "Имя:" << current->firstname << endl << "Год: " << current->year << endl << "Год для проверки:" << current->yearpos << endl << "Должность: " << current->position << endl;
current = current->next;
}
_getch();
return 0;
}
}
Подскажите как отсортировать список по имени, фамилии и году
Для сортировки сразу по нескольким полям создай у каждого элемента списка новую переменную типо int forSorting = 0, затем тебе нужно определиться с приоритетом сортировки(по какому полю нужно сортировать в первую очередь), потом придумываешь с-му коэффициентов, согласно которой прибавляешь значения в свою переменную.(Например сортируем по по минутам и секундам (22 мин 43 сек)--> forSorting = 22*60 +43, если бы было ещё какое-то поле, по которому нужно сортировать, но приоритет его меньше чем у секунд, то максимальное значение данного поля не должно превышать 1), и потом просто сравниваешь forSorting у всех полей, перестраиваешь свой список
Надо написать собственную функцию сравнения и передать указатель на нее в параметрах методу .sort()
.
Хороший пример приведен в www.cplusplus.com/reference/list/list/sort/index.html
Виртуальный выделенный сервер (VDS) становится отличным выбором
Захотел научиться программировать на C++Скачал CodeLite, создал workspace, new project и скопировал текст программы "Hellow world!" в новый файл
в теме по ссылке Реализация функции atoi для меня кое что неясно: зачем от текущей ячейки s[i] отнимать символ '0'? И можно ли фильтр содержимого...
c++ how to get multiset which is the difference of two others multisets?
Какие нужно сделать условия, чтобы в виджете QLineEdit при написании текста, а затем при нажатии на кнопку принятия ("ОК"), были подходящими только...