Описать структуру с именем NOTE, содержащую следующие поля:
- фамилия, имя;
- номер телефона;
- дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE, записи должны быть размещены по алфавиту;
- вывод на экран информации о людях, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры;
- если таких нет, выдать на дисплей соответствующее сообщение.
Код программы:
//--------------------------------------------------------------------------- #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.
Результат работы программы: