Описать структуру с именем NOTE, содержащую следующие поля:
- фамилия, имя;
- номер телефона;
- дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE, записи должны быть упорядочены по трем первым цифрам номера телефона;
- вывод на экран информации о человеке, чья фамилия введена с клавиатуры;
- если такого нет, выдать на дисплей соответствующее сообщение.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<windows.h> #include<math.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 tel3numb; }; int i,j,n; //объявление bool not_found,sort=1; char surname[k]; //переменных cout<<rus(" Введите количество структур NOTE: ");cin>>n;//ввод кол-ва структур cout<<endl; 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; //данных int tel=NOTE[i].telnumb; int len=(int)log10((double)tel)+1; char *strtel=new char[len+1]; char *tel3=new char[len+1]; for(int l=len-1;l>=0;--l) { int chartel=tel%10; strtel[l]='0'+chartel; tel/=10; } strtel[len]='\0'; int cnt=0; for(int m=0;m<3;m++) { tel3[m]=strtel[m]; cnt++; if (cnt==3)break; } tel3[m]='\0'; NOTE[i].tel3numb=atoi(tel3); 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].tel3numb>NOTE[i+1].tel3numb) //цифрам телефона { 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(" Первые 3 цифры номера телефона: ")<<NOTE[i].tel3numb<<endl; cout<<rus(" Дата рождения:"); for(j=0;j<m;j++) { cout<<NOTE[i].bdate[j]<<'.'; } cout<<endl<<endl; } cout<<rus(" Информации о человеке. чья фамилия введена с клавиатуры:")<<endl; while(true) { cout<<rus(" Введите фамилию человека или ""\"end\" для окончания: ");cin>>surname; cout<<endl; if(strcmp(surname,"end")==0)break; not_found=true; for(i=0;i<n;i++) { if(strstr(NOTE[i].fio,surname)) if(NOTE[i].fio[strlen(surname)]==' '||NOTE[i].fio[strlen(surname)]=='\0') { 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; } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text,bufrus); return bufrus; } //---------------------------------------------------------------------------
Для уменьшения количества выводимой на экран информации, заполним только 2 структуры NOTE.
Результат работы программы: