/** * ============================================================================ * PHM Open Source — Curso de Lógica e Programação em C * Módulo 07: Estruturas de Dados (structs), Registros e Arquivos * Autor: Prof. Paulo Henrique Maciel · PHM Tech * ============================================================================ * * OBJETIVO DIDÁTICO: * Agrupar diferentes tipos de dados em um tipo heterogêneo personalizado (struct), * manipular vetores de registros, calcular estatísticas de turma e gravar/ler * os dados em arquivo texto (.txt) de forma didática. * * COMO COMPILAR E EXECUTAR: * gcc 07_structs_e_registros.c -o modulo07 && ./modulo07 * ============================================================================ */ #include #include #define MAX_ALUNOS 3 // 1. DEFINIÇÃO DA STRUCT ALUNO typedef struct { char nome[50]; int matricula; float nota1; float nota2; float mediaFinal; } Aluno; // Protótipos void calcularMediasTurma(Aluno turma[], int quantidade); void salvarRelatorioArquivo(const Aluno turma[], int quantidade, const char *nomeArquivo); int main(void) { printf("====================================================\n"); printf(" PHM TECH — MODULO 07: STRUCTS E ARQUIVOS \n"); printf("====================================================\n\n"); // 2. INICIALIZAÇÃO DE UM VETOR DE STRUCTS Aluno turma[MAX_ALUNOS] = { {"Ana Beatriz Silva", 202601, 8.5f, 9.0f, 0.0f}, {"Carlos Eduardo Lima", 202602, 6.0f, 7.5f, 0.0f}, {"Mariana Rocha Santos", 202603, 9.5f, 10.0f, 0.0f} }; // 3. PROCESSAMENTO DOS REGISTROS calcularMediasTurma(turma, MAX_ALUNOS); printf("Relatorio de Estudantes Cadastrados:\n"); printf("----------------------------------------------------------------------\n"); printf(" Matrícula | Nome do Estudante | N1 | N2 | Media | Status\n"); printf("----------------------------------------------------------------------\n"); for (int i = 0; i < MAX_ALUNOS; i++) { printf(" %-9d | %-26s | %4.1f | %4.1f | %4.1f | %s\n", turma[i].matricula, turma[i].nome, turma[i].nota1, turma[i].nota2, turma[i].mediaFinal, turma[i].mediaFinal >= 7.0f ? "APROVADO" : "RECUPERACAO" ); } printf("----------------------------------------------------------------------\n"); // 4. PERSISTÊNCIA EM ARQUIVO TEXTO salvarRelatorioArquivo(turma, MAX_ALUNOS, "relatorio_turma.txt"); printf("\n[SUCESSO] Relatorio acadêmico exportado para 'relatorio_turma.txt'!\n"); return 0; } void calcularMediasTurma(Aluno turma[], int quantidade) { for (int i = 0; i < quantidade; i++) { turma[i].mediaFinal = (turma[i].nota1 + turma[i].nota2) / 2.0f; } } void salvarRelatorioArquivo(const Aluno turma[], int quantidade, const char *nomeArquivo) { FILE *arquivo = fopen(nomeArquivo, "w"); if (arquivo == NULL) { printf("[ERRO] Nao foi possivel abrir o arquivo para escrita.\n"); return; } fprintf(arquivo, "RELATORIO ACADEMICO — PHM TECH OPEN SOURCE\n"); fprintf(arquivo, "====================================================\n\n"); for (int i = 0; i < quantidade; i++) { fprintf(arquivo, "Matrícula: %d\n", turma[i].matricula); fprintf(arquivo, "Nome : %s\n", turma[i].nome); fprintf(arquivo, "Notas : %.1f e %.1f -> Media: %.1f\n", turma[i].nota1, turma[i].nota2, turma[i].mediaFinal); fprintf(arquivo, "Situacao : %s\n", turma[i].mediaFinal >= 7.0f ? "Aprovado" : "Recuperacao"); fprintf(arquivo, "----------------------------------------------------\n"); } fclose(arquivo); }