Dirsovisk

Gerenciamento de Histórico Escolar

Jan 24th, 2021
712
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2.  
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <locale.h>
  6. #include <string.h>
  7. #include <stdbool.h>
  8.  
  9. #define MEDIA 6.0
  10. #define ESC 27
  11. #define TOTAL_DISC 3
  12.  
  13. struct Aluno {
  14.     int id; // matricula
  15.     char nome[50];
  16.     int qtde_mat;
  17. };
  18.  
  19. struct Aluno_Disciplina {
  20.  
  21.     int id_aluno, id_disc;
  22.     int ano, semestre;
  23.     int nota, aulas_assistidas;
  24.  
  25. };
  26.  
  27. struct Disciplina {
  28.     int id;
  29.     char nome[50];
  30.     int total_aulas;
  31. };
  32.  
  33.  
  34. ////////////////////////////////////////////////////////////////////////////
  35.  
  36. char Menu(){
  37.  
  38.     system("cls");
  39.     printf("##### Bem vindo a consulta de histórico escolar! ##### \n");
  40.     printf("\n[1] - Matricular aluno em uma nova disciplina");
  41.     printf("\n[2] - Registrar nota e dados finais do aluno");
  42.     printf("\n[3] - Disciplinas não concluidas.");
  43.     printf("\n[4] - Disciplinas com Aprovação");
  44.     printf("\n[5] - Disciplinas com Reprovação");
  45.     printf("\n[6] - Média nas disciplinas aprovadas");
  46.     printf("\n[7] - Disciplinas cursadas em Ano/Semestre");
  47.     printf("\n[8] - Frequência total");
  48.     printf("\n[ESC] - Sair");
  49.  
  50.     char op = getch();
  51.     return op;
  52. }
  53.  
  54. void Inicio(struct Aluno * aluno){
  55.  
  56.     printf("##### Bem vindo ao Sistema de Gerenciamento de Alunos! #####\n");
  57.     printf("\nInforme os dados do aluno abaixo!");
  58.  
  59.     printf("\nMatricula: ");
  60.     fflush(stdin);
  61.     scanf("%i", &aluno->id);
  62.  
  63.     printf("\nNome: ");
  64.     fflush(stdin);
  65.     fgets (&aluno->nome, 100, stdin);
  66.  
  67.     printf("\n\n**** Dados recebidos com sucesso!: \n");
  68.     system("pause");
  69.  
  70. }
  71.  
  72. char SelecionarDisciplina(struct Aluno *aluno, struct Disciplina disc[]){
  73.  
  74.     char op = "";
  75.  
  76.     do{
  77.         system("cls");
  78.         printf("##### Matricular aluno %s #####\n", aluno->nome);
  79.  
  80.         printf("\nSelecione a disciplina abaixo!");
  81.         for(int i=0; i<TOTAL_DISC; i++)
  82.             printf("\n[%i] - %s", i+1, disc[i].nome);
  83.  
  84.         printf("\n[ESC] - Sair");
  85.         op=getch();
  86.     }while(op != '1' && op != '2' && op != '3' && op != ESC);
  87.  
  88.     return op;
  89. }
  90.  
  91. bool existeMatricula(struct Disciplina *d, struct Aluno *aluno, struct Aluno_Disciplina ad[]){
  92.  
  93.     if(aluno->qtde_mat == 0)
  94.         return false;
  95.  
  96.     for(int i=0;i<aluno->qtde_mat; i++){
  97.         if(ad[i].id_aluno == aluno->id && ad[i].id_disc == d->id)
  98.             return true;
  99.     }
  100.  
  101.     return false;
  102. }
  103.  
  104. void Matricular(struct Aluno *aluno, struct Disciplina disc[], struct Aluno_Disciplina ad[]){
  105.  
  106.     char op = "";
  107.     op = SelecionarDisciplina(aluno, disc);
  108.  
  109.     if(aluno->qtde_mat > 2)
  110.     {
  111.         printf("\n****** Quantidade de matriculas máximas realizadas! (3)");
  112.         getch();
  113.     }
  114.     else
  115.     {
  116.         while(op != ESC && aluno->qtde_mat < 4){
  117.  
  118.             struct Disciplina *d = &disc[op];
  119.  
  120.             if(!existeMatricula(d, aluno, ad)){
  121.                 ad[aluno->qtde_mat].id_aluno = aluno->id;
  122.                 ad[aluno->qtde_mat].id_disc = d->id;
  123.  
  124.                 system("cls");
  125.                 printf("##### Dados complementares da Matricula #####");
  126.                 printf("\nAno/Semestre (9999/99): ");
  127.                 scanf("%i/%i", &ad[aluno->qtde_mat].ano, &ad[aluno->qtde_mat].semestre);
  128.  
  129.                 aluno->qtde_mat++;
  130.                 printf("\n****** MATRÍCULA REALIZADA COM SUCESSO!");
  131.             }
  132.             else
  133.                 printf("\n****** Matricula já nessa disciplina existe!");
  134.  
  135.             getch();
  136.             op = SelecionarDisciplina(aluno, disc);
  137.         }
  138.     }
  139.  
  140. }
  141.  
  142. void Gerenciar(char op, struct Aluno *aluno, struct Disciplina disc[]){
  143.  
  144.     struct Aluno_Disciplina aluno_disc[TOTAL_DISC];
  145.  
  146.     switch(op)
  147.     {
  148.  
  149.         case '1':
  150.             Matricular(aluno, disc, aluno_disc);
  151.         break;
  152.         case '2':
  153.             DadosFinais(aluno, disc, aluno_disc);
  154.         break;
  155.         case '3':
  156.             ExibirNaoConcluidas(aluno, disc, aluno_disc);
  157.         break;
  158.         case '4':
  159.             ExibirAprovadas(aluno, disc, aluno_disc);
  160.         break;
  161.         case '5':
  162.             ExibirReprovadas(aluno, disc, aluno_disc);
  163.         break;
  164.         case '6':
  165.             MediaAprovadas(aluno, disc, aluno_disc);
  166.         break;
  167.         case '7':
  168.             ExibirDisciplinasAno(aluno, disc, aluno_disc);
  169.         break;
  170.         case '8':
  171.             FrequenciaTotal(aluno, disc, aluno_disc);
  172.         break;
  173.     }
  174.  
  175. }
  176.  
  177. void CarregarDisciplinas(struct Disciplina disc[]){
  178.  
  179.     // TOTAL_DISC setado como 3 em #DEFINE ^
  180.     disc[0].id = 1;
  181.     strcpy(disc[0].nome, "Português");
  182.     disc[0].total_aulas = 100;
  183.  
  184.     disc[1].id = 2;
  185.     strcpy(disc[1].nome, "Matemática");
  186.     disc[1].total_aulas = 300;
  187.  
  188.     disc[2].id = 3;
  189.     strcpy(disc[2].nome, "Física");
  190.     disc[2].total_aulas = 200;
  191. }
  192.  
  193. void ExibirDisciplinas(struct Disciplina *disc){
  194.  
  195.     system("cls");
  196.     printf("##### DISCIPLINAS CADASTRADAS #####\n");
  197.     for(int i=0; i<TOTAL_DISC; i++){
  198.         printf("\nID: %d", disc[i].id );
  199.         printf("\nNome: %s", disc[i].nome );
  200.         printf("\nTotal Aulas: %d", disc[i].total_aulas );
  201.         printf("\n\n");
  202.     }
  203.  
  204.     system("pause");
  205. }
  206.  
  207.  
  208. int main()
  209. {
  210.     struct Aluno aluno;
  211.     struct Disciplina disciplinas[TOTAL_DISC];
  212.     char op = "";
  213.  
  214.     setlocale( LC_ALL, "Portuguese" );
  215.  
  216.     // coleta dados do aluno
  217.     aluno.qtde_mat = 0;
  218.     Inicio(&aluno);
  219.     CarregarDisciplinas(disciplinas);
  220.     ExibirDisciplinas(disciplinas);
  221.  
  222.  
  223.     // exibe menu de ações e verifica o que deseja realizar
  224.     do{
  225.         op = Menu();
  226.         Gerenciar(op, &aluno, disciplinas);
  227.  
  228.     }while(op != ESC);
  229.  
  230.     system("pause");
  231.     return 0;
  232. }
  233.  
RAW Paste Data