Вариант 6

Описать структуру с именем WORKER, содержащую следующие поля:

  • фамилия и инициалы работника;
  • название занимаемой должности;
  • год поступления на работу.

Написать программу, выполняющую следующие действия:

  1. ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER, записи должны быть размещены по алфавиту;
  2. вывод на дисплей фамилий работников, чей стаж работы в организации превышает значение, введенное с клавиатуры;
  3. если таких работников нет, вывести на дисплей соответствующее сообщение.

Код программы:

//---------------------------------------------------------------------------
#include<iostream.h>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
#include<ctime.h>
#include<vcl.h>
#pragma hdrstop
#pragma argsused
//---------------------------------------------------------------------------
char *rus(const char *text);//функция для распознавания русских символов
int compare(const void *worker1,const void *worker2);//функция для сортировки
const int k=30;//объявление именованных констант
struct Worker        //объявление структуры
 {
  char fio[k];      //объявление
  char prof[k];     //полей
  int god;        //структуры
 };
int main(int argc, char* argv[])
 {
  int i,n;         //объявление переменных
  bool not_found;
  int staj;
  struct tm *tim;
  time_t tt=time(NULL);
  tim=localtime(&tt);
  int current_year=tim->tm_year+1900;
  cout<<rus(" Введите количество структур WORKER: ");cin>>n;//ввод кол-ва структур
  cout<<endl;
  Worker *WORKER=new Worker[n];//выделение в памяти место под массив структур
  for(i=0;i<n;i++)
   {
    cout<<(i+1)<<rus(".Введите фамилию и инициалы: ");
    cin.ignore();cin.getline(WORKER[i].fio,k)                                                       //ввод
    cout<<rus("   Введите название должности: ");
    cin.getline(WORKER[i].prof,k);                                                         //данных
    cout<<rus("   Введите год поступления: ");cin>>WORKER[i].god; //в структуру
    cout<<endl;
   }
  qsort(WORKER,n,sizeof(Worker),compare);               //вызов функции для сортировки
  cout<<rus(" Записи упорядоченные по алфавиту:\n\n");
  for(i=0;i<n;i++)
   {                              //вывод отсортированной структуры
    cout<<rus(" Фамилия и инициалы: ")<<WORKER[i].fio<<endl;
    cout<<rus(" Должность: ")<<WORKER[i].prof<<endl;
    cout<<rus(" Год поступления: ")<<WORKER[i].god;
    cout<<endl<<endl;
   }
 cout<<rus("\n Информации о людях, чей стаж превышает значение введенное с клавиатуры:")<<endl<<endl;
 while(true)
  {
   cout<<rus(" Введите стаж работы или 0 для окончания: ");cin>>staj;
   cout<<endl;
   if(0==staj)break;
   not_found=false;
   for(i=0;i<n;i++)
    {
     if(current_year-WORKER[i].god>staj)
      {
       cout<<rus("  Фамилия и инициалы: ")<<WORKER[i].fio<<endl;      //вывод
       cout<<rus("  Должность: ")<<WORKER[i].prof<<endl;                         //запрошенной информации
       not_found=true;
       cout<<endl;
      }
    }   //если нет такой информации выводится сообщение
   if(not_found==false)cout<<rus(" Таких работников нет!")<<endl<<endl;
  }
  getch();
  return 0;
 }
//---------------------------------------------------------------------------
int compare(const void *worker1,const void *worker2)//функция для сортировки
 {
  return strcmp((reinterpret_cast<const Worker*>(worker1))->fio,
                (reinterpret_cast<const Worker*>(worker2))->fio);
 }
//---------------------------------------------------------------------------
char bufrus[256];
char *rus(const char *text)
 {
  CharToOem(text,bufrus);
  return bufrus;
 }
//---------------------------------------------------------------------------

Для уменьшения количества выводимой на экран информации, заполним только 2 структуры WORKER.

Результат работы программы:

Результат работы. Шестой вариант. Структуры

Вариант 5
Вариант 7
error: Content is protected !!