Осуществить сортировку и поиск в структуре Worker - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <stdafx.h>
#include <conio.h>
#include <math.h>
 
int i,j,result=0;
struct Worker
{
char name[10];
char post[10];
int year;
};
Worker mas[10],x;
void vvod();
void vyvod();
void sort();
void poisk();
void main()
{
for(;result!=1;)
{
int answer;
printf("\n Worker - Enter 1\n Sort - Enter 2\n Poisk - Enter 3\n Exit. - Enter 0\n\n You answer: ");
scanf ("%i",&answer);
{
switch(answer)
{
        case 1:{vvod();vyvod();result=0;break;}
        case 2:{sort();vyvod();result=0;break;}
       case 3:{poisk();result=0;break;}
        default:break;
 
}
}
}}
void vvod()
{
for(i=0;i<10;i++)
{
        cprintf("                                Worker %i.",i+1);
        printf("\n Name:  ");
        scanf("%s",&mas[i].name);
        printf(" Dolgnost:   ");
        scanf("%s",&mas[i].post);
        printf("\n God postupleniya:\n");
        scanf("%i",&mas[i].year);
        
}
getch();
 
}
 
void vyvod()
{
printf("\n-------------------------------------\n");
    printf("|   Ф.И.О    | Должность  | Год п.р |\n");
    for(i=0; i<10; i++)
    {
        printf("| %10s | %10s | %7d |\n",mas[i].name,mas[i].post,mas[i].year);
    }
    printf("-------------------------------------\n");
}
void sort()
{
cputs("                                Spisok.");
for(i=0;i<10;i++)
{
        for(j=i;j<10;j++)
        {
                if((mas[i].name)>(mas[j].name))
                {
                        x=mas[i];
                        mas[i]=mas[j];
                        mas[j]=x;
                }
        }
        //printf("\n %i: Name: %s\n    dolgnost: %s\n %d god postupleniya: ",i+1,mas[i].name,mas[i].post,mas[i].year);
}
getch();
}
void poisk()
{
int date=2011,r;
int f=0,k;
printf("vvedite staj:");
scanf("%f",&k);
cputs("                                Session.");
for(i=0;i<10;i++)
{
        if(date-mas[i].year > k)
        {
                f=1;
                printf("\n  %s\n",mas[i].name);
        }
 
}
if(f==0)
printf("\n\n Net rabotnikov so stajem bol`she %d.",k);
 
getch();
}
ввод и вывод работают, а вот с остальным трудности помогите, кто может

Решение задачи: «Осуществить сортировку и поиск в структуре Worker»

textual
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
 
 
struct Worker
{
        char name[10];
        char post[10];
        int year;
};
int size=10;
Worker *mas,x;
int i,j;
bool result=false;
void vvod();
void vyvod();
void sort();
void poisk();
void exit();
 
int main(){
    setlocale( LC_ALL,"Russian" );
    std::cout<<"Введите количество рабочих\n";
    std::cin>>size;
    mas=new Worker[size];
    do{
    int answer=0;
    std::cout<<"Рабочий - Enter-1\n Сортировка - Enter-2\n Поиск - Enter-3\n Выход. - Enter-0\n\n Ваш выбор: \n";
    std::cin>>answer;
        if(answer==1){vvod();vyvod();exit();}
        if(answer==2){sort();vyvod();exit();}
        if(answer==3){poisk();exit();}
        if(answer==0){return 0;}
    }while(!result);
    return 0;
}
void vvod(){
        for(i=0;i<size;i++)
        {
                std::cout<<"Worker "<<i+1<<std::endl;
                std::cout<<"Name:  \n";
                std::cin>>mas[i].name;
                std::cout<<"Dolgnost:  \n";
                std::cin>>mas[i].post;
                std::cout<<"God postupleniya: \n";
                std::cin>>mas[i].year;
                std::cout<<std::endl;
        }   
} 
void vyvod(){
        std::cout<<"\n-------------------------------------\n";
        std::cout<<"|   Ф.И.О    | Должность  | Год п.р |\n";
        for(i=0; i<size; i++)
        {
            std::cout<<" "<<mas[i].name<<" "<<mas[i].post<<" "<<mas[i].year<<std::endl;
        }
        std::cout<<"-------------------------------------\n";
}
void sort(){
        for(int i=0;i<size;i++){
                for(int j=i;j<size;j++){
                        if(abs((int)mas[i].name[0]))>abs((int)(mas[j].name[0]))){
                                x=mas[i];
                                mas[i]=mas[j];
                                mas[j]=x;
                        }
                }
        }
}
void poisk(){
        int date=2011;
        int f=0,k;
        std::cout << "Введите стаж:" <<std::endl;
        std::cin>>k;
        for(int i=0;i<size;i++){
                if(date-mas[i].year > k){
                        f=1;
                        std::cout<<"\n"<< mas[i].name<<std::endl;
                }
        }
        if(f==0)
            std::cout<<"\n\n Нет работников со стажем больше "<<k<<std::endl;
}
void exit(){
    char answer;
    std::cout << "Выход да-0, нет-1\r\n";
    std::cin >> answer;
    result=false;
    if(answer=='1'){
        result=true;
    }
}

Объяснение кода листинга программы

Список функций и переменных:

  1. void vvod() - ввод данных о работниках
  2. void vyvod() - вывод данных о работниках
  3. void sort() - сортировка работников по алфавиту (по имени)
  4. void poisk() - поиск работников по году поступления на работу
  5. void exit() - выход из программы
  6. int size - количество работников
  7. Worker *mas - массив структур Worker, представляющих работников
  8. Worker x - временная структура Worker
  9. int i, j - индексы для обхода массива mas
  10. bool result - флаг выхода из цикла do-while
  11. char answer - введенный пользователем ответ на вопрос
  12. int answer - введенный пользователем ответ на вопрос
  13. int k - год, отстоящий от текущего года на указанное количество лет
  14. int date - текущий год
  15. int f - флаг наличия работников, удовлетворяющих условию поиска Код выполняет следующие действия:
  16. Ввод количества работников с помощью функции std::cin и переменной size.
  17. Выделение памяти под массив структур Worker с помощью оператора new.
  18. Запуск цикла do-while, который продолжается до тех пор, пока пользователь не введет '1' для выхода из программы.
  19. В начале каждого прохода цикла пользователю предлагается ввести число от 1 до 3 для выбора действия: ввод данных, вывод данных или сортировка.
  20. Если выбрано введение данных, вызывается функция vvod(), которая запрашивает и сохраняет данные о каждом работнике.
  21. Если выбрано вывод данных, вызывается функция vyvod(), которая выводит данные о всех работниках в формате таблицы.
  22. Если выбрана сортировка, вызывается функция sort(), которая сортирует работников по алфавиту (по имени).
  23. Если выбрано поиск, вызывается функция poisk(), которая ищет работников, у которых год поступления на работу больше указанного пользователем числа.
  24. После окончания цикла do-while программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы