Buscar

Programa em linguagem C -> Cadastro de aluno e relatórios de notas.

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
/* Desenvolvido por Vinicius Costa -> EMAIL: vinicius_comics@hotmail.com*/
#define Cadastrar_Aluno 1
#define Relatorio 2
#define SAIR 9
typedef struct DadosAlunos dAluno; //Criei uma struct para armezenar os dados de todos os alunos, usei a tecnica da lista encadeada, onde eu posso inserir, excluir e fazer busca dos alunos
struct DadosAlunos {
 char nome[30] ;
 char matricula[10];
 char situacao[10];
 double p1,p2,p3,p4,sub,media;
 dAluno *prox;
};
static dAluno * alunos;
int menuPrincipal(){
	
	printf("1- Cadastrar Aluno.\n");
	printf("2- Relatorio de Notas.\n");
	printf("9- Sair.\n");
	
	char opcao;
	scanf(" %c",&opcao); // espaço em branco entre a aspa e caractere %c para o scanf desconsiderar enter e espaços em branco.	
		
	if(isdigit(opcao)==0) {
	printf("A opcao digitada invalida.Tente novamente.\n\n");	//Caso o usuário digite letra o app não se perca no fluxo.
	return 0;
	}	
	
	printf("\n\n");
		
	return opcao - 48; // Convertendo um caracter char para int	(subtraindo seu valor decimal por 48, chegamos no valor numerico.)
}
double* valorMin(double notas[],double sub ){ // Funçaõ que faz a busca pela menor nota e troca a menor nota pela a nota substitutiva.
	
	
 double min= notas[0];
 
 for(int i = 0; i < 4; i++)
 {
 if(notas[i] < min) 
 min = notas[i]; 
 }
 
 for(int i=0;i< 4;i++){
 	
 	if(notas[i] == min){
 		
 		if(notas[i] < sub) //Para evitar trocar a nota , quando a nota da sub for menor que a nota minima entre P1 e P4. 
 		notas[i] = sub;
		}
 	
	} 
 
 return notas;
	
}
double CaucularMedia(dAluno aln){
	double nts[4] = { aln.p1, aln.p2, aln.p3, aln.p4 };
	
	double *notas = valorMin(nts, aln.sub); 
	
	return (notas[0] +(notas[1]*2) + (notas[2]*3) + (notas[3]*4)) / 10; //calculo da média.
	
}
dAluno CadastrarAluno(){	
	
	dAluno aln;
	
	printf("Entre com o nome do aluno.\n");
	scanf(" %[^\n]s",&aln.nome); // expresão utilizada para ler todo o nome , só parar quando encontrar o \n.	
	
	printf("Entre com a matricula.\n");
	scanf("%s",&aln.matricula);
	
	printf("Entre com nota P1.\n");
	scanf("%lf",&aln.p1);
	
	printf("Entre com nota P2.\n");
	scanf("%lf",&aln.p2);
	
	printf("Entre com nota P3.\n");
	scanf("%lf",&aln.p3);
	
	printf("Entre com nota P4.\n");
	scanf("%lf",&aln.p4);
	
	printf("Entre com nota SUB.\n");
	scanf("%lf",&aln.sub);
	printf("\n\n");
 aln.media = CaucularMedia(aln);
 
 if(aln.media < 5){	
 printf("Aluno REPROVADO- Media= %.2f\n\n",aln.media);
 strcpy(aln.situacao,"REPROVADO");
 }
 else{	
 printf("Aluno APROVADO- Media= %.2f\n\n",aln.media);
 strcpy(aln.situacao,"APROVADO");
 }
 
 return aln;
	
}
void insereAluno (dAluno aln)
{ 
 dAluno *aux = (dAluno*)malloc(sizeof (dAluno)); // lista está no estilo pilha,primeiro que entra, ultimo a sair.
 strcpy(aux->nome,aln.nome); 
 strcpy(aux->matricula, aln.matricula);
 aux->p1 = aln.p1;
 aux->p2 = aln.p2;
 aux->p3 = aln.p3;
 aux->p4 = aln.p4;
 aux->sub = aln.sub;
 aux->media = aln.media;
 strcpy(aux->situacao, aln.situacao);
 
 if(alunos == NULL){
 	alunos = aux; 	
 	alunos->prox = NULL;
 	return;
 } 
 aux->prox = alunos;
 alunos = aux;
}
void PrintDadosAluno(){ // Função que imprime no console todos os dados dos alunos cadastrados
	
	int cont =0;
	dAluno *aux;
	double media_sala=0;
	
 for (aux = alunos; aux != NULL; aux = aux->prox){
 
 cont++;
 printf ("Aluno = %d\n\n", cont);
 printf("Nome: %s\n",aux->nome);
 printf("Matricula: %s\n",aux->matricula);
 printf("P1: %.2f\n",aux->p1);
 printf("P2: %.2f\n",aux->p2);
 printf("P3: %.2f\n",aux->p3);
 printf("P4: %.2f\n",aux->p4);
 printf("SUB: %.2f\n",aux->sub);
 printf("MEDIA: %.2f\n",aux->media);
 printf("SITUACAO: %s\n",aux->situacao); 
 
 media_sala+= aux->media;
 }
 
 if(cont == 0)
 printf("Lista vazia - Cadastre um aluno.\n\n");
 
 else{
 	media_sala= media_sala / cont;
 	printf("Media da Sala: %.2f\n\n",media_sala);
 }
 
 
}
int main(int argc, char** argv) {
	
	 
	int opcao = 0;	
	
	do{
	
	opcao = menuPrincipal();
	if(opcao == Cadastrar_Aluno){
		
	insereAluno(CadastrarAluno());	
		
	}
	else if(opcao == Relatorio){
		PrintDadosAluno();		
	}
	
	
}while(opcao != SAIR);
	system("pause");
	return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando