Mateus_Costa

Sistema de Registro escolar registro.c - yahoo resposta

Oct 8th, 2018
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.10 KB | None | 0 0
  1. /**
  2.  * @author Mateus Costa
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8.  
  9. #include "registro.h"
  10.  
  11. struct escola_t {
  12.     int total_cadastrados;
  13.     Estudante **estudantes;
  14. };
  15.  
  16. struct estudante_t {
  17.     char nome[128];
  18.     char curso[64];
  19.     int ano;
  20.     char grupo;
  21. };
  22.  
  23. Escola *criar_escola(const int max_alunos) {
  24.     Escola *escola;
  25.     escola = malloc(sizeof *escola);
  26.  
  27.     escola->estudantes = malloc(sizeof(Estudante *) * max_alunos);
  28.     escola->total_cadastrados = 0;
  29.     return escola;
  30. }
  31.  
  32. void destruir_escola(Escola **escola) {
  33.     int i;
  34.     for(i = 0; i < (*escola)->total_cadastrados; i++) {
  35.         free((*escola)->estudantes[i]);
  36.     }
  37.     free(*escola);
  38.     *escola = NULL;
  39. }
  40.  
  41. void cadastrar_estudante(Escola *escola, const char *nome, const char *curso,
  42.                          const int ano, const char grupo) {
  43.  
  44.     Estudante *estudante;
  45.     estudante = malloc(sizeof *estudante);
  46.  
  47.     strcpy(estudante->nome, nome);
  48.     strcpy(estudante->curso, curso);
  49.     estudante->ano = ano;
  50.     estudante->grupo = grupo;
  51.  
  52.     escola->estudantes[escola->total_cadastrados] = estudante;
  53.     escola->total_cadastrados++;
  54. }
  55.  
  56. void listar_estudantes(Escola *escola) {
  57.     printf("Todos os estudantes cadastrados:\n\n");
  58.     int i;
  59.     for(i = 0; i < escola->total_cadastrados; i++) {
  60.         printf("Nome: %s\n", escola->estudantes[i]->nome);
  61.         printf("Curso: %s\n", escola->estudantes[i]->curso);
  62.         printf("Ano: %d\n", escola->estudantes[i]->ano);
  63.         printf("Grupo: %c\n\n", escola->estudantes[i]->grupo);
  64.     }
  65.     printf("-----\n");
  66. }
  67.  
  68. void listar_grupo(Escola *escola) {
  69.     struct grupo_t {
  70.         Estudante* estudantes[escola->total_cadastrados];
  71.         int cont_estudantes;
  72.         char letra;
  73.     };
  74.     struct grupo_t grupos[MAX_GRUPOS]; /* suporta até MAX_GRUPOS grupos */
  75.  
  76.     int cont_grupo = 0;
  77.  
  78.     int i, j;
  79.  
  80.     /* separa os estudantes em grupos */
  81.  
  82.     for(i = 0; i < escola->total_cadastrados; i++) {
  83.  
  84.         int flag_grupo = 0;
  85.         for(j = 0; j < cont_grupo; j++) {
  86.             if(grupos[j].letra == escola->estudantes[i]->grupo) {
  87.                 grupos[j].estudantes[grupos[j].cont_estudantes] = escola->estudantes[i];
  88.                 grupos[j].cont_estudantes++;
  89.                 flag_grupo = 1;
  90.             }
  91.         }
  92.  
  93.         if(!flag_grupo) {
  94.             grupos[cont_grupo].letra = escola->estudantes[i]->grupo;
  95.             grupos[cont_grupo].cont_estudantes = 0;
  96.             grupos[cont_grupo].estudantes[grupos[cont_grupo].cont_estudantes] = escola->estudantes[i];
  97.             grupos[cont_grupo].cont_estudantes++;
  98.             cont_grupo++;
  99.         }
  100.     }
  101.  
  102.     /* exibe os resultados */
  103.  
  104.     for(i = 0; i < cont_grupo; i++) {
  105.         printf("Estudantes do Grupo: %c\n\n", grupos[i].letra);
  106.         for(j = 0; j < grupos[i].cont_estudantes; j++) {
  107.             printf("Nome: %s\n", grupos[i].estudantes[j]->nome);
  108.             printf("Curso: %s\n", grupos[i].estudantes[j]->curso);
  109.             printf("Ano: %d\n\n", grupos[i].estudantes[j]->ano);
  110.         }
  111.         printf("-----\n");
  112.     }
  113. }
Add Comment
Please, Sign In to add comment