Mateus_Costa

Sistema de Registro escolar sem modulos - yahoo resposta

Oct 9th, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.98 KB | None | 0 0
  1. /**
  2.  * @author Mateus Costa
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. /**
  9.  * @brief Capacidade máxima de grupos que podem ser listados.
  10.  */
  11. #define MAX_GRUPOS 48
  12.  
  13. typedef struct {
  14.     int total_cadastrados;
  15.     Estudante **estudantes;
  16. }Escola;
  17.  
  18. typedef struct {
  19.     char nome[128];
  20.     char curso[64];
  21.     int ano;
  22.     char grupo;
  23. }Estudante;
  24.  
  25. /**
  26.  * @brief Aloca dinâmicamente uma escola com a capacidade de cadastrar @ref max_alunos Alunos.
  27.  * @param max_alunos Capacidade máxima de alunos que podem ser cadastrados.
  28.  */
  29. Escola *criar_escola(const int max_alunos);
  30.  
  31. /**
  32.  * @brief Destrói todas as referências em cascata relacionadas a uma escola.
  33.  * @param escola Endereço da escola (indireção múltipla).
  34.  */
  35. void destruir_escola(Escola **escola);
  36.  
  37. /**
  38.  * @brief Cadastra um estudante em uma respectiva escola
  39.  * @param escola Endereço da escola.
  40.  * @param nome Nome do estudante.
  41.  * @param curso Curso do estudante.
  42.  * @param ano Ano de matrícula do estudante.
  43.  * @param grupo Grupo a qual o estudante pertence.
  44.  */
  45. void cadastrar_estudante(
  46.                          Escola *escola,
  47.                          const char *nome,
  48.                          const char *curso,
  49.                          const int ano,
  50.                          const char grupo
  51.                          );
  52.  
  53. /**
  54.  * @brief Lista todos os estudantes de uma escola.
  55.  * @param escola Endereço da escola.
  56.  */
  57. void listar_estudantes(Escola *escola);
  58.  
  59. /**
  60.  * @brief Lista todos os estudantes de uma escola por grupo.
  61.  * @param escola Endereço da escola.
  62.  */
  63. void listar_grupo(Escola *escola);
  64.  
  65.  
  66. int main(void)
  67. {
  68.     Escola *escola = criar_escola(100);
  69.     cadastrar_estudante(escola, "Mateus", "Ciencia da Computacao", 2016, 'A');
  70.     cadastrar_estudante(escola, "Joao", "Ciencia da Computacao", 2013, 'A');
  71.     cadastrar_estudante(escola, "Pedro", "Ciencia da Computacao", 2015, 'B');
  72.     cadastrar_estudante(escola, "Ana", "Ciencia da Computacao", 2015, 'C');
  73.     cadastrar_estudante(escola, "Julia", "Ciencia da Computacao", 2015, 'B');
  74.     listar_grupo(escola);
  75.     listar_estudantes(escola);
  76.     destruir_escola(&escola);
  77.     return 0;
  78. }
  79.  
  80.  
  81. Escola *criar_escola(const int max_alunos) {
  82.     Escola *escola;
  83.     escola = malloc(sizeof *escola);
  84.  
  85.     escola->estudantes = malloc(sizeof(Estudante *) * max_alunos);
  86.     escola->total_cadastrados = 0;
  87.     return escola;
  88. }
  89.  
  90. void destruir_escola(Escola **escola) {
  91.     int i;
  92.     for(i = 0; i < (*escola)->total_cadastrados; i++) {
  93.         free((*escola)->estudantes[i]);
  94.     }
  95.     free(*escola);
  96.     *escola = NULL;
  97. }
  98.  
  99. void cadastrar_estudante(Escola *escola, const char *nome, const char *curso,
  100.                          const int ano, const char grupo) {
  101.  
  102.     Estudante *estudante;
  103.     estudante = malloc(sizeof *estudante);
  104.  
  105.     strcpy(estudante->nome, nome);
  106.     strcpy(estudante->curso, curso);
  107.     estudante->ano = ano;
  108.     estudante->grupo = grupo;
  109.  
  110.     escola->estudantes[escola->total_cadastrados] = estudante;
  111.     escola->total_cadastrados++;
  112. }
  113.  
  114. void listar_estudantes(Escola *escola) {
  115.     printf("Todos os estudantes cadastrados:\n\n");
  116.     int i;
  117.     for(i = 0; i < escola->total_cadastrados; i++) {
  118.         printf("Nome: %s\n", escola->estudantes[i]->nome);
  119.         printf("Curso: %s\n", escola->estudantes[i]->curso);
  120.         printf("Ano: %d\n", escola->estudantes[i]->ano);
  121.         printf("Grupo: %c\n\n", escola->estudantes[i]->grupo);
  122.     }
  123.     printf("-----\n");
  124. }
  125.  
  126. void listar_grupo(Escola *escola) {
  127.     struct grupo_t {
  128.         Estudante* estudantes[escola->total_cadastrados];
  129.         int cont_estudantes;
  130.         char letra;
  131.     };
  132.     struct grupo_t grupos[MAX_GRUPOS]; /* suporta até MAX_GRUPOS grupos */
  133.  
  134.     int cont_grupo = 0;
  135.  
  136.     int i, j;
  137.  
  138.     /* separa os estudantes em grupos */
  139.  
  140.     for(i = 0; i < escola->total_cadastrados; i++) {
  141.  
  142.         int flag_grupo = 0;
  143.         for(j = 0; j < cont_grupo; j++) {
  144.             if(grupos[j].letra == escola->estudantes[i]->grupo) {
  145.                 grupos[j].estudantes[grupos[j].cont_estudantes] = escola->estudantes[i];
  146.                 grupos[j].cont_estudantes++;
  147.                 flag_grupo = 1;
  148.             }
  149.         }
  150.  
  151.         if(!flag_grupo) {
  152.             grupos[cont_grupo].letra = escola->estudantes[i]->grupo;
  153.             grupos[cont_grupo].cont_estudantes = 0;
  154.             grupos[cont_grupo].estudantes[grupos[cont_grupo].cont_estudantes] = escola->estudantes[i];
  155.             grupos[cont_grupo].cont_estudantes++;
  156.             cont_grupo++;
  157.         }
  158.     }
  159.  
  160.     /* exibe os resultados */
  161.  
  162.     for(i = 0; i < cont_grupo; i++) {
  163.         printf("Estudantes do Grupo: %c\n\n", grupos[i].letra);
  164.         for(j = 0; j < grupos[i].cont_estudantes; j++) {
  165.             printf("Nome: %s\n", grupos[i].estudantes[j]->nome);
  166.             printf("Curso: %s\n", grupos[i].estudantes[j]->curso);
  167.             printf("Ano: %d\n\n", grupos[i].estudantes[j]->ano);
  168.         }
  169.         printf("-----\n");
  170.     }
  171. }
Add Comment
Please, Sign In to add comment