Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * @author Mateus Costa
- */
- #include <stdio.h>
- #include <stdlib.h>
- /**
- * @brief Capacidade máxima de grupos que podem ser listados.
- */
- #define MAX_GRUPOS 48
- typedef struct {
- int total_cadastrados;
- Estudante **estudantes;
- }Escola;
- typedef struct {
- char nome[128];
- char curso[64];
- int ano;
- char grupo;
- }Estudante;
- /**
- * @brief Aloca dinâmicamente uma escola com a capacidade de cadastrar @ref max_alunos Alunos.
- * @param max_alunos Capacidade máxima de alunos que podem ser cadastrados.
- */
- Escola *criar_escola(const int max_alunos);
- /**
- * @brief Destrói todas as referências em cascata relacionadas a uma escola.
- * @param escola Endereço da escola (indireção múltipla).
- */
- void destruir_escola(Escola **escola);
- /**
- * @brief Cadastra um estudante em uma respectiva escola
- * @param escola Endereço da escola.
- * @param nome Nome do estudante.
- * @param curso Curso do estudante.
- * @param ano Ano de matrícula do estudante.
- * @param grupo Grupo a qual o estudante pertence.
- */
- void cadastrar_estudante(
- Escola *escola,
- const char *nome,
- const char *curso,
- const int ano,
- const char grupo
- );
- /**
- * @brief Lista todos os estudantes de uma escola.
- * @param escola Endereço da escola.
- */
- void listar_estudantes(Escola *escola);
- /**
- * @brief Lista todos os estudantes de uma escola por grupo.
- * @param escola Endereço da escola.
- */
- void listar_grupo(Escola *escola);
- int main(void)
- {
- Escola *escola = criar_escola(100);
- cadastrar_estudante(escola, "Mateus", "Ciencia da Computacao", 2016, 'A');
- cadastrar_estudante(escola, "Joao", "Ciencia da Computacao", 2013, 'A');
- cadastrar_estudante(escola, "Pedro", "Ciencia da Computacao", 2015, 'B');
- cadastrar_estudante(escola, "Ana", "Ciencia da Computacao", 2015, 'C');
- cadastrar_estudante(escola, "Julia", "Ciencia da Computacao", 2015, 'B');
- listar_grupo(escola);
- listar_estudantes(escola);
- destruir_escola(&escola);
- return 0;
- }
- Escola *criar_escola(const int max_alunos) {
- Escola *escola;
- escola = malloc(sizeof *escola);
- escola->estudantes = malloc(sizeof(Estudante *) * max_alunos);
- escola->total_cadastrados = 0;
- return escola;
- }
- void destruir_escola(Escola **escola) {
- int i;
- for(i = 0; i < (*escola)->total_cadastrados; i++) {
- free((*escola)->estudantes[i]);
- }
- free(*escola);
- *escola = NULL;
- }
- void cadastrar_estudante(Escola *escola, const char *nome, const char *curso,
- const int ano, const char grupo) {
- Estudante *estudante;
- estudante = malloc(sizeof *estudante);
- strcpy(estudante->nome, nome);
- strcpy(estudante->curso, curso);
- estudante->ano = ano;
- estudante->grupo = grupo;
- escola->estudantes[escola->total_cadastrados] = estudante;
- escola->total_cadastrados++;
- }
- void listar_estudantes(Escola *escola) {
- printf("Todos os estudantes cadastrados:\n\n");
- int i;
- for(i = 0; i < escola->total_cadastrados; i++) {
- printf("Nome: %s\n", escola->estudantes[i]->nome);
- printf("Curso: %s\n", escola->estudantes[i]->curso);
- printf("Ano: %d\n", escola->estudantes[i]->ano);
- printf("Grupo: %c\n\n", escola->estudantes[i]->grupo);
- }
- printf("-----\n");
- }
- void listar_grupo(Escola *escola) {
- struct grupo_t {
- Estudante* estudantes[escola->total_cadastrados];
- int cont_estudantes;
- char letra;
- };
- struct grupo_t grupos[MAX_GRUPOS]; /* suporta até MAX_GRUPOS grupos */
- int cont_grupo = 0;
- int i, j;
- /* separa os estudantes em grupos */
- for(i = 0; i < escola->total_cadastrados; i++) {
- int flag_grupo = 0;
- for(j = 0; j < cont_grupo; j++) {
- if(grupos[j].letra == escola->estudantes[i]->grupo) {
- grupos[j].estudantes[grupos[j].cont_estudantes] = escola->estudantes[i];
- grupos[j].cont_estudantes++;
- flag_grupo = 1;
- }
- }
- if(!flag_grupo) {
- grupos[cont_grupo].letra = escola->estudantes[i]->grupo;
- grupos[cont_grupo].cont_estudantes = 0;
- grupos[cont_grupo].estudantes[grupos[cont_grupo].cont_estudantes] = escola->estudantes[i];
- grupos[cont_grupo].cont_estudantes++;
- cont_grupo++;
- }
- }
- /* exibe os resultados */
- for(i = 0; i < cont_grupo; i++) {
- printf("Estudantes do Grupo: %c\n\n", grupos[i].letra);
- for(j = 0; j < grupos[i].cont_estudantes; j++) {
- printf("Nome: %s\n", grupos[i].estudantes[j]->nome);
- printf("Curso: %s\n", grupos[i].estudantes[j]->curso);
- printf("Ano: %d\n\n", grupos[i].estudantes[j]->ano);
- }
- printf("-----\n");
- }
- }
Add Comment
Please, Sign In to add comment