Buscar segunda posição de um vetor, quando deletado a posição 1 em c/ c++
Saudações senhoras (es), venho por meio desta pedir um help, pois tenho esse código que exibirei abaixo que esta funcionando 99%, mas só esta faltando um porém que ainda não consigo implementar, tipo:
Tenho esse código , um menu de nota de alunos, que insere, deleta, imprime e busca por código, até aí esta funcionando de boa, só que, por exemplo se eu cadastrar 2 alunos, um com a matrícula 1 e o outro com a matrícula 2, ele mostra normalmente na tela quando eu peço para listar , mas se eu deletar a matrícula 1 e deixar apenas a matrícula 2 , ele já não lista mais, e pelo que vi e li em vários fóruns é que teria que colocar um ponteiro, ou uma opção recursiva de uma função chamando ela mesma, e gostaria de saber como faço , e se preciso que ao deletar a matrícula 1, este espaço de memória ficará vazio e se tem como realocar a matrícula 2 para o espaço 1 da memória, pois mesmo eu fazendo o laço nessa variável ela não busca a segunda cadastrada, segue o código:
A senha de acesso é 1
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#define SENHA 1
#define MAX 3
#ifndef COLORS_H
#define COLORS_H
#define foreground(color) FORE##color
#define background(color) BACK##color
#define style(style_) style_
/ Foreground Colors /
#define FOREBLACK printf("\033[30m")
#define FORERED printf("\033[31m")
#define FOREGREEN printf("\033[32m")
#define FOREYELLOW printf("\033[33m")
#define FOREBLUE printf("\033[34m")
#define FOREMARGENTA printf("\033[35m")
#define FORECYAN printf("\033[36m")
#define FOREWHITE printf("\033[37m")
#define FORENORMAL_COLOR printf("\033[39m")
/ Background Colors /
#define BACKBLACK printf("\033[40m")
#define BACKRED printf("\033[41m")
#define BACKGREEN printf("\033[42m")
#define BACKYELLOW printf("\033[43m")
#define BACKBLUE printf("\033[44m")
#define BACKMAGENTA printf("\033[45m")
#define BACKCYAN printf("\033[46m")
#define BACKWHITE printf("\033[47m")
#define BACKNORMAL printf("\033[49m")
/ Style /
#define BRIGHT printf("\033[1m")
#define DIM printf("\033[2m")
#define NORMAL printf("\033[22m")
#define RESETALL printf("\033[0m")
#define UNDERLINE printf("\033[4m")
#define BLINKSLOW printf("\033[5m")
#define BLINKRAPID printf("\033[6m")
#define ITALIC printf("\033[3m")
#define NEGATIVE printf("\033[7m")
#endif / COLORS_H /
//CONSTRUTOR DE VARIÁVEIS
struct cadastro
{
int matricula;
char aluno[50];
char disciplina1[50];
char disciplina2[50];
char disciplina3[50];
float nota1;
float nota2;
float nota3;
float nota4;
float nota5;
float nota6;
float nota7;
float nota8;
float nota9;
int codaux[20];
int vazio;
int cod;
};
struct cadastro registros[MAX];
void flush_in(){
int ch;
while( (ch = fgetc(stdin)) != EOF && ch != '\n' ){}
}
void gotoxy (int x, int y);
//Funçoes que serao usadas
void cadastrar(int cod, int pos);
//Funçao para consulta
void listar( void );
//Funçao para consulta
void consultar( void );
//Funçao para exibir relatorio
int relatorio( void );
//Função para verificar posição
int verifica_pos( void );
//Função para verificar codigo
int verifica_cod( int cod );
//Função para verificar posição do codigo
int verifica_pos( void );
//Função para excluir cadastro
void zerar( void );
//Função para excluir cadastro
void excluir( void );
//FUNÇÃO DO MAIN QUE CHAMA TODAS AS FUNÇÕES
int main(void){
system ("color 1f");
int op = 0,senha=SENHA,posicao, matricula, retorno;
printf("######### SISTEMA DE NOTAS DE ALUNOS: ##############\n\n ");
do
{
printf ("\t\t ----------------------------------\n");
printf ("\n\t\t\t INSIRA A SUA SENHA : ");
fflush(stdin);
scanf ("%d",&senha);
if(senha!=SENHA)
{
system ("color 1E");
printf("\n\n\t\t\t Senha incorreta. Tente Novamente !\n\n");
printf("\t\t ");system("pause");
system("cls");
}
}
while(senha!=SENHA);
while(op!=5){
system("cls");
printf ("\t\t\t *** MENU DE NOTAS DE ALUNO: ***\n\n ",setlocale(LC_ALL,""));
printf ("\n\n\n\t\t\t DIGITE UMA OPÇÃO ABAIXO: \n\n\n\n ",setlocale(LC_ALL,""));
printf ("\t\t\t -----------------------------\n",setlocale(LC_ALL,""));
printf ("\t\t\t| 1 - Matrícula do Aluno |\n",setlocale(LC_ALL,""));
printf ("\t\t\t| 2 - Listar todos os Alunos |\n",setlocale(LC_ALL,""));
printf ("\t\t\t| 3 - Pesquisar por Matrícula |\n",setlocale(LC_ALL,""));
printf ("\t\t\t| 4 - Excluir Aluno |\n",setlocale(LC_ALL,""));
printf ("\t\t\t| 5 - Sair |\n",setlocale(LC_ALL,""));
printf ("\t\t\t -----------------------------\n",setlocale(LC_ALL,""));
scanf ("%d", &op);
switch(op)
{
case 1: // FUNÇÃO VERIFICA A MATRÍCULA AO CADASTRAR
{
posicao=verifica_pos();
if ( posicao !=2)
{
printf("\n\t\t Digite o número da matrícula para o aluno : ");
scanf("%d",&matricula);
fflush(stdin);
retorno = verifica_cod( matricula);
if ( retorno == 1 )
{
cadastrar( matricula, posicao );
}else{
printf("\n\t\tEste número de Matrícula já existe. Tente Outro !\n\n");
printf("\t\t ");system("pause\n\n");
}
}else
printf("\n\n\t\t Não é possível realizar mais cadastros !\n\n");
printf("\t\t ");system("pause\n\n");
break;
}
case 2: // LISTAR
{
listar();
break;
}
case 3:// CONSULTAR
{
consultar();
break;
}
case 4:// EXCLUIR
{
excluir();
system ("pause");
break;
}
// SAIR
case 5:
{
printf("\n\n\t\t Saindo do Sistema - Tchau");
getchar();
printf("\t\t ");return 0;
break;
}
default :// OPÇÃO INVÁLIDA
printf("\n\t\t Opcão Inválida\n\n",setlocale(LC_ALL,""));
printf("\t\t ");system("pause\n\n");
break;
}
}
getchar();
}//Final da Função Verifica se a matrícula ja esta sendo usada
//FIM DO MAIN
// FUNÇAO CADASTRAR
void cadastrar( int cod, int pos )
{
pos = verifica_pos();
registros[pos].cod = cod;
printf("\n\t\t Digite Nome do Aluno: ");
scanf("%s",®istros[pos].aluno);
printf("\n\t\t Digite a 1º Disciplina : ");
scanf("%s",®istros[pos].disciplina1);
flush_in();
printf("\n\t\t Nota do 1º Bimestre: ");
scanf("%f",®istros[pos].nota1);
fflush(stdin);
printf("\n\t\t Nota do 2º Bimestre: ");
scanf("%f",®istros[pos].nota2);
fflush(stdin);
printf("\n\t\t Nota do 3º Bimestre: ");
scanf("%f",®istros[pos].nota3);
printf("\n\t\t Digite a 2º Disciplina : ");
scanf("%s",®istros[pos].disciplina2);
fflush(stdin);
printf("\n\t\t Nota do 1º Bimestre: ");
scanf("%f",®istros[pos].nota4);
fflush(stdin);
printf("\n\t\t Nota do 2º Bimestre: ");
scanf("%f",®istros[pos].nota5);
fflush(stdin);
printf("\n\t\t Nota do 3º Bimestre: ");
scanf("%f",®istros[pos].nota6);
printf("\n\t\t Digite a 3º Disciplina : ",setlocale(LC_ALL,""));
scanf("%s",®istros[pos].disciplina3);
fflush(stdin);
printf("\n\t\t Nota do 1º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",®istros[pos].nota7);
fflush(stdin);
printf("\n\t\t Nota do 2º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",®istros[pos].nota8);
fflush(stdin);
printf("\n\t\t Nota do 3º Bimestre: ",setlocale(LC_ALL,""));
scanf("%f",®istros[pos].nota9);
registros[pos].vazio = 1;
printf("\n\t\t Cadastro Realizado com Sucesso!\n\n",setlocale(LC_ALL,""));
printf("\t\t ");system("pause");
} //Final da Função Cadastrar
// FUNÇAO LISTAR DADOS
void listar(void)
{
int i,cod,posicao,pos,total;
setlocale(LC_ALL," ");
pos = verifica_pos();
if (cod>MAX)
{
system("cls");
printf("\nRESULTADO DA BUSCA: \n");
printf("\nForam encontrado (s) o total de :");
for(i=0; i<pos; i++){
total=pos;
}
printf(" %d Aluno (s) :\n",total);
printf("________________________________________________\n\n");
}
if (pos>=1)
{
for (i=0; i<pos; i++ )
{
printf("\n\t |Matrícula : %d\n",registros[i].cod);
printf("\n\t |Nome do Aluno é: %s\n" ,registros[i].aluno);
printf("\n\t |Disciplina : %s\n",registros[i].disciplina1);
printf("\n\t |Nota do 1º Bimestre: %.1f\t",registros[i].nota1);
printf("\n\t |Nota do 2º Bimestre: %.1f\t",registros[i].nota1);
printf("\n\t |Nota do 3º Bimestre: %.1f\n",registros[i].nota3);
printf("\n\t |Disciplina : %s\n",registros[i].disciplina2);
printf("\n\t |Nota do 1º Bimestre: %.1f\t",registros[i].nota4);
printf("\n\t |Nota do 2º Bimestre: %.1f\t",registros[i].nota5);
printf("\n\t |Nota do 3º Bimestre: %.1f\n",registros[i].nota6);
printf("\n\t |Disciplina : %s\n",registros[i].disciplina3);
printf("\n\t |Nota do 1º Bimestre: %.1f\t",registros[i].nota7);
printf("\n\t |Nota do 2º Bimestre: %.1f\t",registros[i].nota8);
printf("\n\t |Nota do 3º Bimestre: %.1f\n",registros[i].nota9);
printf("___________________________________________________\n\n");
}
}else{
if (pos<=0)
{
printf("\n\n\t\t\t Não existe Aluno cadastrado !\n\n");
printf("\t\t ");system("pause");
return;
getchar();
}
}
printf("\t\t ")/system("pause");
}//Final da Função Listar
//FUNÇÃO CONSULTAR DADOS
void consultar( void )
{
int cont = 0, cod,posicao, retorno,codaux;
printf("\n\n\t\t\tEntre com o número de Matrícula : ",setlocale(LC_ALL,""));
scanf("%d",&cod);
while ( cont <=2)
{
if (registros[cont].cod==cod)
{
if (registros[cont].vazio==1)
{
system("cls");
printf("\nRESULTADO DA BUSCA: \n\n");
printf("_____________________________________________\n\n");
printf("\nMatrícula : %d\n",registros[cont].cod);
printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno);
printf("\nDisciplina : %s\n",registros[cont].disciplina1);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3);
printf("\nDisciplina : %s\n",registros[cont].disciplina2);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6);
printf("\nDisciplina : %s\n",registros[cont].disciplina3);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9);
printf("\n\n");
system ("pause");
break;
}
}
cont++;
}
if (registros[cont].vazio==0)
{
printf("\n\t\t Esta Matrícula não existe. Tente novamente !\n\n",setlocale(LC_ALL,""));
printf("\t\t ")/system("pause");
}
} //Final da Função Consultar Dados
//FUNÇÃO VERIFICA POSIÇÃO
int verifica_pos( void )
{
int cont = 0;
while ( cont <=MAX)
{
if ( registros[cont].vazio == 0 )
return(cont);
cont++;
}
return(-1);
}//Final da verifica Posição
int zerar(int cod)
{
int cont;
for ( cont = 0; cont <= MAX; cont++ )
registros[cont].vazio = 0;
}
//FUNÇÃO VERIFICA CÓDIGO
int verifica_cod( int cod )
{
int cont = 0;
while ( cont <= MAX )
{
if ( registros[cont].cod == cod )
return(0);
cont++;
}
return(1);
}//Final da Função Verifica Código
//FUNÇÃO EXCLUIR
void excluir( void )
{
int cod, cont = 0;
char resp;
printf("\n\t Entre com o código do registro que deseja excluir :",setlocale(LC_ALL,""));
scanf("%d", &cod );
while ( cont <= MAX)
{
if ( registros[cont].cod == cod )
{ // FALTOU
if ( registros[cont].vazio == 1 )
{
printf("\n\n\nRESULTADO DA BUSCA: \n\n");
printf("\nForam encontrado (os) Aluno (s) : %d\n" ,registros[cont].cod);
printf("**********************************************\n\n");
printf("\nMatrícula : %d\n",registros[cont].cod);
printf("\nNome do Aluno é: %s\n" ,registros[cont].aluno);
printf("\nDisciplina : %s\n",registros[cont].disciplina1);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota1);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota3);
printf("\nDisciplina : %s\n",registros[cont].disciplina2);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota4);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota5);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota6);
printf("\nDisciplina : %s\n",registros[cont].disciplina3);
printf("\nNota do 1º Bimestre: %.1f\t",registros[cont].nota7);
printf("\nNota do 2º Bimestre: %.1f\t",registros[cont].nota8);
printf("\nNota do 3º Bimestre: %.1f\n",registros[cont].nota9);
getchar();
printf("\nDeseja realmente excluir ? S/N:");
scanf("%c",&resp);
if ( ( resp == 'S' ) || ( resp == 's' ) )
{
registros[cont].cod=0;
registros[cont].aluno[50]=0;
registros[cont].disciplina1[50]=0;
registros[cont].nota1=0;
registros[cont].nota1=0;
registros[cont].nota3=0;
registros[cont].disciplina2[50]=0;
registros[cont].nota4=0;
registros[cont].nota5=0;
registros[cont].nota6=0;
registros[cont].disciplina3[50]=0;
registros[cont].nota7=0;
registros[cont].nota8=0;
registros[cont].nota9=0;
registros[cont].vazio=0;
printf("\nExclusão feita com sucesso\n\n");
break;
}
else
{
if ( ( resp == 'N' ) || ( resp == 'n' ) )
{
printf("Exclusão cancelada!\n");
break;
}
}
}
}
cont++;
if ( cont > 2)
printf("\n\n\t\t Código não encontrado . Tente Outro !\n");
}
printf("\n\t\t ");return;system("pause");
system("cls");
}//Final da Função Excluir
Desde já eu agradeço o espaço..Discussão (1)
Carregando comentários...