Описать структуру с именем NOTE, содержащую следующие поля:
- фамилия, имя;
- номер телефона;
- дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE, записи должны быть упорядочены по датам рождения;
- вывод на экран информации о человеке, номер телефона которого введен с клавиатуры;
- если такого нет, выдать на дисплей соответствующее сообщение.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<windows.h> #include<vcl.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- char *rus(const char *text);//функция для распознавания русских символов int main(int argc, char* argv[]) { const int m=3,k=30;//объявление именованных констант struct Note //объявление структуры { char fio[k]; //объявление int telnumb; //полей int bdate[m]; //структуры }; int i,j,n; //объявление bool not_found,sort=1; int tel; //переменных cout<<rus("Введите количество структур NOTE: ");cin>>n;//ввод кол-ва структур cout<<endl<<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; } while(sort) { //сортировка sort=0; //структуры for(i=0;i<n-1;i++) //по датам рождения { if(NOTE[i].bdate[2]>NOTE[i+1].bdate[2]) { temp=NOTE[i]; NOTE[i]=NOTE[i+1]; NOTE[i+1]=temp; sort=1; } if((NOTE[i].bdate[2]==NOTE[i+1].bdate[2])&&\ (NOTE[i].bdate[1]>NOTE[i+1].bdate[1])) { temp=NOTE[i]; NOTE[i]=NOTE[i+1]; NOTE[i+1]=temp; sort=1; } if((NOTE[i].bdate[2]==NOTE[i+1].bdate[2])&&\ (NOTE[i].bdate[1]==NOTE[i+1].bdate[1])&&\ (NOTE[i].bdate[0]>NOTE[i+1].bdate[0])) { temp=NOTE[i]; NOTE[i]=NOTE[i+1]; NOTE[i+1]=temp; sort=1; } } } 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<<endl; while(true) { cout<<rus(" Введите номер телефона или 0 для окончания: ");cin>>tel; cout<<endl; if(0==tel)break; not_found=true; for(i=0;i<n;i++) { if(NOTE[i].telnumb==tel) { cout<<rus(" Фамилия и имя: ")<<NOTE[i].fio<<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; } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text,bufrus); return bufrus; } //---------------------------------------------------------------------------
Для уменьшения количества выводимой на экран информации, заполним только 2 структуры NOTE.
Результат работы программы: