Ir ao conteúdo

C Cadastro de alunos em linguagem c


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

boa noite forum,estou com um problema no meu codigo,ao abrir pela primeira vez ele funciona perfeitamente, escolho a opção de inserir alunos faço tudo certo,ele altera no arquivo que foi criado e exibe na tela,mas se eu fechar o programa e abrir novamente e colocar somente para exibir alunos,ele nao exibe nada,nao consigo fazer ele abrir este arquivo que ele cria e exibilo na tela novamente,com os dados que tem dentro. Se alguem conseguir me dar uma luz do que fazer eu agradeço muito.

segue abaixo o codigo.

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM 1000

typedef struct {
	char matricula[10];
	char nome[50];
	char curso[25];
} Aluno;

void inicializaLista(Aluno *lista, int n) {
	int i;

	for (i = 0; i < n; i++) {
		strcpy(lista[i].matricula,"");
		strcpy(lista[i].nome,"");
		strcpy(lista[i].curso,"");
	}
}

void copiaAlunosLista2Arquivo(Aluno *lista, int n, char *nomeArquivo) {
	FILE *procurador = fopen(nomeArquivo,"a"); //foi aberto para escrita
	int i;

	//fprintf(procurador, "ALUNOS MATRICULADOS\n\n");
	for (i = 0; i < n; i++) {
		
		if (strcmp(lista[i].matricula,"") == 0) {
			break;
		} 

		fprintf(procurador, "%s ", lista[i].matricula);
		fprintf(procurador, "%s ", lista[i].nome);
		fprintf(procurador, "%s\n", lista[i].curso);

		fflush(procurador);
	}

	fclose(procurador);
}

void insereAluno(Aluno *lista, int n) {
	int i;
	FILE *procurador = fopen("salvaAlunos.txt","a");
	char matricula[10];

	printf("Matricula: ");
	scanf("%s", matricula);
	fflush(stdin);

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

		if (strcmp(lista[i].matricula, matricula) == 0) {
			printf("Matricula já cadastrada. Voltando para menu\n");
			break;
		}

		if (strcmp(lista[i].matricula,"") == 0) {
			printf("Aluno sera inserido na posicao %d.\n", i);
	
			strcpy(lista[i].matricula, matricula);

			printf("Nome: ");
			scanf("%s",lista[i].nome);
			fflush(stdin);

			printf("Sigla curso: ");
			scanf("%s", lista[i].curso);
			fflush(stdin);

			fprintf(procurador, "%s ", lista[i].matricula);
			fprintf(procurador, "%s ", lista[i].nome);
			fprintf(procurador, "%s\n", lista[i].curso);

			fclose(procurador);

			break;
		}
	}

	if (i == n) printf("Lista cheia!\n");
}

void exibeAlunos(Aluno *lista, int n) {
	int i;

	for (i = 0; i < n; i++) {
		if (strcmp(lista[i].matricula,"") == 0) {
			break;
		}
		printf("Matricula: %s\n", lista[i].matricula);
		printf("Nome     : %s\n", lista[i].nome);
		printf("Curso    : %s\n", lista[i].curso);
		printf("--------------------------------------\n");
	}
}


int main() {
	Aluno lista[TAM];
	int opcao;

	inicializaLista(lista, TAM);

	do {
		printf("1 - Insere aluno; 2 - Lista alunos; 3 - Remove aluno; 4 - Sai\n");
		printf("Opcao: ");
		scanf("%d", &opcao);

		switch (opcao) {
			case 1 : printf("INSERCAO DE ALUNO!\n\n");
					 insereAluno(lista,TAM);
			         break;
			case 2 : printf("EXIBICAO DE ALUNOS!\n\n");
			         exibeAlunos(lista, TAM);
			         break;
			case 3 : 
			         break;
			case 4 : 
			         break;	
			default : printf("Opcao invalida!!\n");		         
		}

	} while (opcao != 4);


	//copiaAlunosLista2Arquivo(lista, TAM, "salvaAlunos.txt");

	return 1;
}

 

  • Curtir 1
  • Solução
Postado

@João Luiz Mainardi     para ele imprimir o que foi salvo no arquivo precisa pegar esses dados lá no arquivo antes de imprimir , e se você usar arquivo binário fica mais fácil , mas pode fazer com arquivo txt também , então seu código pode ser assim  :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM 1000

typedef struct {
	char matricula[10];
	char nome[50];
	char curso[25];
} Aluno;

void inicializaLista(Aluno *lista, int n) {
	int i;

	for (i = 0; i < n; i++) {
		strcpy(lista[i].matricula,"");
		strcpy(lista[i].nome,"");
		strcpy(lista[i].curso,"");
	}
}

void copiaAlunosLista2Arquivo(Aluno *lista, int n, char *nomeArquivo) {
	FILE *procurador = fopen(nomeArquivo,"a"); //foi aberto para escrita
	int i;

	//fprintf(procurador, "ALUNOS MATRICULADOS\n\n");
	for (i = 0; i < n; i++) {

		if (strcmp(lista[i].matricula,"") == 0) {
			break;
		}

		fprintf(procurador, "%s ", lista[i].matricula);
		fprintf(procurador, "%s ", lista[i].nome);
		fprintf(procurador, "%s\n", lista[i].curso);

		fflush(procurador);
	}

	fclose(procurador);
}

void insereAluno(Aluno *lista, int n) {
	int i;
	FILE *procurador = fopen("salvaAlunos.txt","a");
	char matricula[10];

	printf("Matricula : ");
	scanf("%s", matricula);
	fflush(stdin);

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

		if (strcmp(lista[i].matricula, matricula) == 0) {
			printf("Matricula já cadastrada. Voltando para menu\n");
			break;
		}

		if (strcmp(lista[i].matricula,"") == 0) {
			printf("Aluno sera inserido na posicao %d.\n", i);

			strcpy(lista[i].matricula, matricula);

			fflush(stdin              );
			printf("Nome: "           );
			scanf("%s",lista[i].nome  );

			fflush(stdin              );
			printf("Sigla curso: "    );
			scanf("%s", lista[i].curso);

			fprintf(procurador, "%s " , lista[i].matricula);
			fprintf(procurador, "%s " , lista[i].nome     );
			fprintf(procurador, "%s\n", lista[i].curso    );

			break;
		}
	}
	fclose(procurador);

	if (i == n) printf("Lista cheia!\n");
}

int pega_do_arquivoTXT(Aluno *lista, int n){
    FILE *fp = fopen("salvaAlunos.txt","r");
    if(fp == NULL)return 0;
    int i=0;
    while(fscanf(fp,"%s",&lista[i].matricula)!= EOF &&
          fscanf(fp,"%s",&lista[i].nome     )!= EOF &&
          fscanf(fp,"%s",&lista[i].curso    )!= EOF ){
        i++;
    }
    return 1;
}

void exibeAlunos(Aluno *lista, int n) {
	int i;

	for (i = 0; i < n; i++) {
		if (strcmp(lista[i].matricula,"") == 0) {
			break;
		}
		printf("Matricula -: %s\n", lista[i].matricula);
		printf("Nome ------: %s\n", lista[i].nome     );
		printf("Curso -----: %s\n", lista[i].curso    );
		printf("-----------------------------------\n");
	}
}


int main() {
	Aluno lista[TAM];
	int opcao,r;

	inicializaLista(lista, TAM);
	r = pega_do_arquivoTXT(lista,TAM);/* pega os dados que foram gravados anteriormente no arquivo txt*/

	do {
		printf("1 - Insere aluno\n");
		printf("2 - Lista alunos\n");
        printf("3 - Remove aluno\n");
        printf("4 - Sair\n");
		printf("Opcao: ");
		scanf("%d", &opcao);

		switch (opcao) {
			case 1 : printf("INSERCAO DE ALUNO !\n\n");
					 insereAluno(lista,TAM);
					 r=1;
			         break;
			case 2 : printf("\nEXIBICAO DE ALUNOS !\n\n");
			         if( r )exibeAlunos(lista, TAM);
			         else printf("Primeiro Insira Os Dados !");
			         printf("\n\n");
			         break;
			case 3 :
			         break;
			case 4 :
			         break;
			default : printf("Opcao invalida ! !\n");
		}

	} while (opcao != 4);


	//copiaAlunosLista2Arquivo(lista, TAM, "salvaAlunos.txt");

	return 1;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!