Сортировка сотрудников в порядке убывания стажа - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите пожалуйста написать программу: информация о сотрудниках предприятия содержит ФИО, номер отдела, должность и дату начала работы. Вывести список сотрудников заданного отдела в порядке убывания стажа. (нужно делать через структуру, например strukt sotr). Программа нужна на C... Срочно((
Решение задачи: «Сортировка сотрудников в порядке убывания стажа»
textual
Листинг программы
#include <stdio.h>
#include <cstdlib>
#include <string.h>
using namespace std;
struct sport
{ char surname[20];
char name[15];
char patronym[20]; //îò÷åñòâî
int num;
char post[20];
struct D
{int day;
int month;
int year;
}D;
};
void CreatingStruct(sport *s)
{
printf("Enter surname\n");
scanf("%s", s->surname);
printf("Enter name\n");
scanf("%s", s->name);
printf("Enter patronym\n");
scanf("%s", s->patronym);
printf("Enter the number of department\n");
scanf("%d", &s->num);
printf("Enter post\n");
scanf("%s", s->post);
printf("Enter day\n");
scanf("%d", &s->D.day);
printf("Enter month\n");
scanf("%d", &s->D.month);
printf("Enter year\n");
scanf("%d", &s->D.year);
};
void PrintStruct(sport *s)
{
printf("%s %s %s| %d | %s |%d.%d.%d", s->surname,s->name,s->patronym, s->num, s->post,(s->D).day,(s->D).month,(s->D).year);
}
int main (void)
{
const int n=3;//êîëè÷åñòâî Г§Г*ГЇГЁГ±ГҐГ© Гў Г*Г*ГёГҐГ© ñòðóêòóðå
int i,j;
int temp;//ïåðåìåГ*Г*Г*Гї äëÿ ñîðòèðîâêè
char s[128];// äëÿ ñîðòèðîâêè
sport a[n];
for(i=0;i<n;i++)
CreatingStruct(&a[i]);
printf("_____Your Struct_____\n");
for(i=0;i<n;i++)
{ PrintStruct (&a[i]);
printf("\n");
}
for(i=n-1;i>=0;i--)
for(j=0;j<i;j++)
{ if((a[j].D.day>a[j+1].D.day)||(a[j].D.month>a[j+1].D.month)||(a[j].D.year>a[j+1].D.year))
{
temp=a[j+1].D.day;//Г¤Г*ГІГ*
a[j+1].D.day=a[j].D.day;
a[j].D.day=temp;
temp=a[j+1].D.month;
a[j+1].D.month=a[j].D.month;
a[j].D.month=temp;
temp=a[j+1].D.year;
a[j+1].D.year=a[j].D.year;
a[j].D.year=temp;//îòñîðòèðîâГ*ëè Г¤Г*ГІГі
strcpy(s,a[j+1].surname);//Ôèî
strcpy(a[j+1].surname,a[j].surname);
strcpy(a[j].surname,s);
strcpy(s,a[j+1].name);
strcpy(a[j+1].name,a[j].name);
strcpy(a[j].name,s);
strcpy(s,a[j+1].patronym);
strcpy(a[j+1].patronym,a[j].patronym);
strcpy(a[j].patronym,s);//Ôèî
temp=a[j+1].num;// Г*îìåð îòäåëГ*
a[j+1].num=a[j].num;
a[j].num=temp;//
strcpy(s,a[j+1].post);
strcpy(a[j+1].post,a[j].post);
strcpy(a[j].post,s);
}
}
int p=0; //переменная для номера отдела
printf("Enter number of department\n");
scanf("%d", &p);
printf("\n----------- Sorted Struct ------------\n");
for(i=0;i<n;i++)
{if(a[i].num==p)
PrintStruct (&a[i]);
printf("\n");
}
system("pause");
return 0;
}
Объяснение кода листинга программы
В данном коде реализована сортировка структур sport в порядке убывания года рождения сотрудников.
Список действий:
- Объявление структуры
sportс полями: фамилия, имя, отчество, номер отдела, должность и дата рождения (день, месяц, год). - Создание пустого массива
sдля временного хранения данных. - Ввод данных о сотрудниках в структуры
sportс помощью функцииCreatingStruct. - Вывод несортированных структур на экран с помощью функции
PrintStruct. - Сортировка структур в порядке убывания года рождения с помощью двух вложенных циклов
for. - Замена в первой структуре данных на данные последней структуры.
- Ввод номера отдела для сортировки структур по этому параметру.
- Вывод отсортированных структур на экран с помощью функции
PrintStruct. - Ввод любой клавиши для завершения работы программы. Список переменных:
- n - количество сотрудников.
- i, j - индексы для обхода массива структур
sport. - temp - временная переменная для обмена данными.
- s - временная строка для обмена данными.
- p - номер отдела для сортировки структур по этому параметру.