Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

@ndrew

Problema com matricula.

Recommended Posts

Galera, to fazendo um programa para a faculdade, mas to com um sério problema de matrícula..

O programa é de cadastro de alunos, notas, tem relatório em ordem alfabética e é aí que estou com problemas..

quando cadastro 3 alunos, por ex:

aa matrícula 0

a matrícula 1

b matrícula 2

quando mostro no relatorio ele fica assim:

a matrícula 1

aa matrícula 0

b matrícula 2

se eu apago a matrícula 0 e cadastro outro aluno, por ex: c

fica assim:

a matrícula 0

b matrícula 2

c matrícula 3

sendo que a matrícula a tem que ficar com 1, não 0.

estou colocando a matrícula como autoincrement, mas acho q esse n é o problema...

campo[i]='c';  
mat[i]=cont;
eu fiz do jeito mais sinistro q é guardar o valor dentro de uma auxiliar pra trocar pela outra.

 

Minha função organiza:

void organiza()
{
char auxnome[30],auxrua[50],auxbairro[50],auxcidade[50],auxuf[50],auxsit[3], auxcampo;
int auxmat,auxdia,auxmes,auxano,i,j;
float auxn1,auxn2,auxn3,auxn4,auxmedia,auxprovasub;

  for (i=0; i <max; i++)
  for (j=0; j< max-1; j++)
  {
	  if ((strcmp(nome[j],nome[j+1])>0) && (campo[j+1]=='c'))
	  {
		auxcampo=campo[j]; campo[j]=campo[j+1]; campo[j+1]=auxcampo;								
		strcpy (auxnome,nome[j]);strcpy (nome[j],nome[j+1]);strcpy (nome[j+1],auxnome);
		strcpy (auxrua,rua[j]);strcpy (rua[j],rua[j+1]);strcpy (rua[j+1],auxrua);
		strcpy (auxbairro,bairro[j]);strcpy (bairro[j],bairro[j+1]);strcpy (bairro[j+1],auxbairro);
		strcpy (auxcidade,cidade[j]);strcpy (cidade[j],cidade[j+1]);strcpy (cidade[j+1],auxcidade);
		strcpy (auxuf,uf[j]);strcpy (uf[j],uf[j+1]);strcpy (uf[j+1],auxuf);
		strcpy (auxsit,sit[j]);strcpy (sit[j],sit[j+1]);strcpy (sit[j+1],auxsit);
		auxmat=mat[j];mat[j]=mat[j+1];mat[j+1]=auxmat;  
		auxdia=dia[j];dia[j]=dia[j+1];dia[j+1]=auxdia;
		auxmes=mes[j];mes[j]=mes[j+1];mes[j+1]=auxmes;
		auxano=ano[j];ano[j]=ano[j+1];ano[j+1]=auxano;
		auxano=ano[j];ano[j]=ano[j+1];ano[j+1]=auxano;
		auxn1=n1[j];n1[j]=n1[j+1];n1[j+1]=auxn1;
		auxn2=n2[j];n2[j]=n2[j+1];n2[j+1]=auxn2;
		auxn3=n3[j];n3[j]=n3[j+1];n3[j+1]=auxn3;
		auxn4=n4[j];n4[j]=n4[j+1];n4[j+1]=auxn4;
		auxmedia=media[j];media[j]=media[j+1];media[j+1]=auxmedia;
		auxprovasub=provasub[j];provasub[j]=provasub[j+1];provasub[j+1]=auxprovasub;
	  }
  }
}

Minha opção e(Relatório Geral-exibido em ordem alfabética):

void e()
{
   int i;
   
   organiza(); 
   printf("Matricula\tNome\t\t\t""N1  N2  N3  N4  PS  Media Situacao");
   for(i=0;i<max;i++)
   {
	if(media[i]>=6.0)
	{	   
	 strcpy(sit[i], "APR");		
	}
	else
	{
	 strcpy(sit[i], "RPR");
	}
   if(campo[i]=='c')
   {
   printf("\n%i\t\t%s\t\t\t""%.1f %.1f %.1f %.1f %.1f %.1f   %s",mat[i],nome[i],n1[i],n2[i],n3[i],n4[i],provasub[i],media[i],sit[i]);
   }
  }
  getch();
  system("cls");
}

Minha oção A e minha opção B:

Opc A - Cadastro

Opc B - Excluir

 

void a () 
{
	 int i;
	 
	 i=acha();
	 if(i==100) //verifico se minha função retorna 10.
	 {
	  printf("A turma ja possui 70 alunos cadastrados.\n\n");
	  printf("\nPara cadastrar novos alunos, remova um aluno da turma.\n");
	  getch();
	  system("cls");
	 }
	 else
	 {	 
		printf("Informe o nome do aluno:");
		gets(nome[i]);
		fflush(stdin);
		printf("Informe o dia de seu nascimento:");
		scanf("%i",&dia[i]);
		fflush(stdin);
		printf("Informe seu mes de nascimento:");
		scanf("%i",&mes[i]);
		fflush(stdin);
		printf("Informe seu ano de nascimento:");
		scanf("%i",&ano[i]);
		fflush(stdin);
		printf("Informe a sua rua:");
		scanf("%[^\n]",&rua[i]);
		fflush(stdin);
		printf("Informe o numero da casa do aluno:");
		scanf("%i",&num[i]);
		fflush(stdin);
		printf("Informe o seu bairro:");
		scanf("%[^\n]",&bairro[i]);
		fflush(stdin);
		printf("Informe a sua cidade:");
		scanf("%[^\n]",&cidade[i]);
		fflush(stdin);
		printf("Informe sua UF:");
		scanf("%[^\n]",&uf[i]);
		fflush(stdin);
		campo[i]='c';  //coloco o campo que estava vazio como cheio 
		mat[i]=cont; 
		cont++;
		printf("Aluno Cadastrado! Sua matricula e: %i",mat[i]);
		getch();
		printf("\n");
		system("cls");
	   } 
}
void b ()
{
  char achou;
  int i,j,mat2;
  
	 
	 printf("Informe a matricula a ser apagada:");
	 scanf("%i",&mat2);
	 fflush(stdin);
	 achou='n';
	 for(i=0;i<max;i++)
	 {
	   if((campo[i]=='c')&&(mat[i]==mat2))
	   {
		achou='s';
		j=i;
	   }
	  }
	  if(achou=='s')
	  {
	   printf("Aluno Removido.");
	   campo[j]='v';
	   }
	   else
	  {
		 printf("O aluno n%co existe.",198);
	  } 
	 getch();
	 fflush(stdin);
	 system("cls");	
}

estou usando dev c++..

quem puder dar uma ajuda, ficarei imensamente grato..

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala @ndrew, tudo certo?

 

Como o quitZAUMMMM disse, faz isso com uma struct, facilitará a sua vida.

Os códigos que o pessoal escreveu para o 3º desafio da linguagem (pelo menos o meu ^_^) faz algo bem parecido, de uma forma mais clara.

Não sei quando será aberto um tópico para discussão, mas fique esperto.

 

E eu notei uma coisa, que você não deveria fazer.

 

fflush(stdin)

Jamais use fflush para limpar o stdin, a função fflush é feita para output buffers, e o seu comportamento é INDEFINIDO para input buffers.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.