Jump to content

remove

- - - - -

This topic has been archived. This means that you cannot reply to this topic.
1 reply to this topic

#1
zhenya

zhenya

    Newbie

  • Members
  • PipPip
  • 13 posts
How to remove record under its entered number?(void delet)

struct firma{

    char FIO[30];

    int otdel;

    float zarplata;

   

} ;


int i,j,k,g,n;

float s,average,otnowenie,min;

struct firma workers[500];

firma buffer;

void read();

void delet();

void m(){

	printf(" Vvedite kol-vo sotrydnilov: ");

	scanf("%i",&n);

	g=1;

	if(g==1){

    for(i=0; i<n; i++)

    {

		

        printf("[%i] Enter FIO: ",i+1);fflush(stdin);

scanf("%s",&workers[i].FIO);

printf("ENter otdel: ");fflush(stdin);

scanf("%i",&workers[i].otdel);

printf(" Enter zarplata: ");fflush(stdin);

scanf("%f",&workers[i].zarplata);

//fwrite(&workers[i],sizeof(workers[i]),1,fi);

		



    }

        for(i=0; i<n; i++)

			

//printf(" %-20s %i %f\n",workers[i].FIO,workers[i].otdel,workers[i].zarplata);

		

 for(i=0; i<n-1; i++)

	 for(j=i;j<n;j++)

		 if(workers[i].zarplata>workers[j].zarplata)

		 {

			 buffer=workers[i];

			 workers[i]=workers[j];

			 workers[j]=buffer;

		 }


		 s=0;  for(i=0; i<n; i++){

		 if(workers[i].zarplata>25) {s+=workers[i].zarplata;k++;}

		 }

 average=(float)s/k;

//printf("\nAverage: %f",average);


 //printf("\nmin: %f",workers[0].zarplata);

  min=workers[0].zarplata;

 otnowenie=(float)average/min;

 //printf("\notnowenie sredney z/p k minimal`noy: %f",otnowenie);

	}

_getch();

} 


void read(){


FILE*fi;

	if(!(fi=fopen("work.exe","rb")))

	{printf(" Nevozmozno sozdat` file\n"); return;

	}

        for(i=0; i<n; i++)

			

fprintf(fi," %-20s %i %f\n",workers[i].FIO,workers[i].otdel,workers[i].zarplata);

		

 for(i=0; i<n-1; i++)

	 for(j=i;j<n;j++)

		 if(workers[i].zarplata>workers[j].zarplata)

		 {

			 buffer=workers[i];

			 workers[i]=workers[j];

			 workers[j]=buffer;

		 }


		 s=0;  for(i=0; i<n; i++){

		 if(workers[i].zarplata>25) {s+=workers[i].zarplata;k++;}

		 }

 average=(float)s/k;

fprintf(fi,"\nAverage: %f",average);


 //printf("\nmin: %f",workers[0].zarplata);

  min=workers[0].zarplata;

 otnowenie=(float)average/min;

 fprintf(fi,"\notnowenie sredney z/p k minimal`noy: %f",otnowenie);

 fread(workers[i].FIO,sizeof(workers[i].FIO),1,fi);

 //fread(workers[i].otdel,sizeof(workers[i].otdel),1,fi);

// fread(workers[i].zarplata,sizeof(workers[i].zarplata),1,fi);


 fclose(fi);

}

void show(){

	if( g==1) {

	for(i=0; i<n; i++)

printf("%i %-20s %i %f\n",i,workers[i].FIO,workers[i].otdel,workers[i].zarplata);

printf("\nAverage: %f",average);

printf("\notnowenie sredney z/p k minimal`noy: %f",otnowenie);}

	else printf("Error!");

getch();

}

int menu()

{

    int choise;

   printf("***MAIN MENU***\n\n\n");

  printf ( "1 - vvod dannyx\n");

    printf( "2 - ydalenie\n");

	printf("3 - show\n");

    printf( "4 - EXIT\n\n");

  printf(":");

     scanf("%i",&choise);

        return choise;

}

void delet(){


    char FIO[30] = {0};

    printf(" who delete?!:\n");

    scanf("%s",&FIO);

	

  int k=0;

   for(j=0;j<n;)

    {

        if( strcmp(workers[j].FIO, FIO) == 0)

        {   

              

              for(k = j+1; k < i; k++)

              {

                 workers[k-1] = workers[k];

				

              }

		}

     }  

}


int main(){

	for(;;){

int choice = menu();

switch(choice){

	   {

            case (1):

              m();

                break;

            case (2):

            delet();

			break;

			case (3):

				show();

				break;

            case (4):

return 0;

                break;

            default: printf(" Please select again!\n");

             

                break;

        }       

}

	}

getch();}


#2
dargueta

dargueta

    Writes binary right handed and hex left handed

  • Moderators
  • 4,717 posts
1) You're missing the final closing brace on m()
2) Extra braces around your switch statement in main()
3) In delet(), try changing this:

for(j=0;j<n;)

{

    if( strcmp(workers[j].FIO, FIO) == 0)

    {   

          for(k = j+1; k < i; k++)

          {

               workers[k-1] = workers[k];

          }

     }

}

to this:

for(j=0;j<n; j++)

{

    if( strcmp(workers[j].FIO, FIO) == 0)

    {

        memmove(&workers[j], &workers[j + 1],

            sizeof(struct firma) * (n - (j + 1)) );

        break;

    }

}

Be sure to include memory.h.
sudo rm -rf /