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