Site icon C/C++ Структурное программирование

Вариант 13

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

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

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

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

//---------------------------------------------------------------------------
#include<iostream.h>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
#include<vcl.h>
#pragma hdrstop
#pragma argsused
//---------------------------------------------------------------------------
char *rus(const char *text);//функция для распознавания русских символов
int compare(const void *note1,const void *note2);//объявление функции для сортировки
const int m=3,k=30;//объявление именованных констант
struct Note        //объявление структуры
 {
  char fio[k];      //объявление
  int telnumb;          //полей
  int bdate[m];        //структуры
 };
int main(int argc, char* argv[])
 {
  int i,j,n;         //объявление
  bool not_found;
  int month;        //переменных
  cout<<rus(" Введите количество структур NOTE: ");cin>>n;//ввод кол-ва структур
  cout<<endl;
  Note temp;
  Note *NOTE=new Note[n];//выделение в динамической памяти место под массив структур
  for(i=0;i<n;i++)
   {
    cout<<' '<<(i+1)<<rus(".Введите фамилию и имя: ");
    cin.ignore();cin.getline(NOTE[i].fio,k);                            //ввод
    cout<<rus("   Введите номер телефона: ");cin>>NOTE[i].telnumb;     //данных
    for(j=0;j<m;j++) //в структуру
     {
       cout<<rus(" Введите день рождения: ");cin>>NOTE[i].bdate[j++];
       cout<<rus(" Введите месяц рождения: ");cin>>NOTE[i].bdate[j++];
       cout<<rus(" Введите год рождения: ");cin>>NOTE[i].bdate[j];
     }
    cout<<endl;
   }
  qsort(NOTE,n,sizeof(Note),compare); //вызов функции для сортировки
  cout<<rus(" Записи упорядоченные по алфавиту:\n\n");
  for(i=0;i<n;i++)
   {                                                             //вывод отсортированной структуры
    cout<<rus(" Фамилия и имя: ")<<NOTE[i].fio<<endl;
    cout<<rus(" Номер телефона: ")<<NOTE[i].telnumb<<endl;
    cout<<rus(" Дата рождения:");
    for(j=0;j<m;j++)
     {
      cout<<NOTE[i].bdate[j]<<'.';
     }
    cout<<endl<<endl;
   }
 cout<<rus("\n Информации о людях, родившихся в месяц, который введен с клавиатуры:")<<endl;
 while(true)
  {
   cout<<rus("\n Введите месяц или 0 для окончания: ");cin>>month;
   cout<<endl;
   if(0==month)break;
   not_found=true;
   for(i=0;i<n;i++)
    {
     if(NOTE[i].bdate[1]==month)
      {                                        
       cout<<rus(" Фамилия и имя: ")<<NOTE[i].fio<<endl;   //вывод
       cout<<rus(" Номер телефона: ")<<NOTE[i].telnumb<<endl;  //запрошенной информации
       cout<<rus(" Дата рождения: ");      
       for(j=0;j<m;j++)
        {
          cout<<NOTE[i].bdate[j]<<'.';
        }
       not_found=false;
       cout<<endl<<endl;
      }
    }   //если нет такой информации выводится сообщение
   if(not_found)cout<<rus(" Таких людей нет!")<<endl<<endl;
  }
  getch();
  return 0;
 }
//---------------------------------------------------------------------------
int compare(const void *note1,const void *note2)//функция для сортировки
 {
  return strcmp((reinterpret_cast<const Note*>(note1))->fio,
                (reinterpret_cast<const Note*>(note2))->fio);
 }
//---------------------------------------------------------------------------
char bufrus[256];
char *rus(const char *text)
 {
  CharToOem(text,bufrus);
  return bufrus;
 }
//---------------------------------------------------------------------------

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

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

Вариант 12
Вариант 14
Exit mobile version