Magnect

Secretaria Project 2

Jun 6th, 2019
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.40 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <windows.h>
  6. #define MAX 1000
  7.  
  8. /*
  9.         Secretaria faculdade (Cadastrar Aluno, bloquear matricula, ativar matricula)
  10.         (Login)
  11.         (Matricular aluno)
  12.         (Consultar aluno por nome ou matricula)
  13.         (Pagar mensalidade)
  14.         (Ativar matricula)
  15. */
  16.  
  17. typedef struct{
  18.     char nome[255];
  19.     int num_matricula, status_matricula, status_mensalidade;
  20.     double mensalidade;
  21. }Aluno;
  22.  
  23. //--PROTÓTIPOS DE FUNÇÃO--//
  24. void menu();
  25. void menu_consulta();
  26. void matricular_aluno(Aluno *alunos, int *numero);
  27. void consultar_aluno(Aluno *alunos, int numero, int valor);
  28. void exibir(Aluno *alunos, int numero);
  29. void salvar(Aluno *alunos, int numero);
  30. void carregar_dados(Aluno *alunos, int *numero, int *valor);
  31. void bloquear_matriula(Aluno *alunos, int valor);
  32. void ativar_matricula(Aluno *alunos, int valor);
  33. void pagar_mensalidade(Aluno *alunos, int valor);
  34. void uppercase(char *nome);
  35. void capitalize(char *nome);
  36. void opcoes_consulta(int valor, Aluno *alunos, int numero);
  37. int busca_binaria(Aluno *alunos, int valor, int numero);
  38. int busca_nome(Aluno *alunos, char *nome, int numero);
  39. //-----------------------------------//
  40.  
  41. int main(){
  42.     int sair = 0, numero = 0, c, retorno, maximo = 0, valor;
  43.     char opcao, login[255], senha[255], login2[255], senha2[255], url[] = "login.txt";
  44.     Aluno alunos[MAX];
  45.     carregar_dados(alunos, &numero, &valor);
  46.  
  47.     FILE *arq;
  48.     arq = fopen(url, "r");
  49.  
  50.     //Carrega os logins armazenados pra comparação
  51.     fgets(login2, 255, arq);
  52.     login2[strlen(login2)-1] = '\0';
  53.     fgets(senha2, 255, arq);
  54.     senha2[strlen(senha2)-1] = '\0';
  55.  
  56.     while(maximo < 3){
  57.         //Lê o login e a senha do usuário
  58.         printf("Login: ");
  59.         setbuf(stdin, 0);
  60.         fgets(login, 255, stdin);
  61.         login[strlen(login)-1] = '\0';
  62.         printf("Senha: ");
  63.         setbuf(stdin, 0);
  64.         fgets(senha, 255, stdin);
  65.         senha[strlen(senha)-1] = '\0';
  66.         //***************************//
  67.  
  68.         retorno = strncmp(login, login2, strlen(login2));
  69.  
  70.         if(retorno == 0){
  71.             retorno = strncmp(senha, senha2, strlen(senha2));
  72.             if(retorno == 0){
  73.                 while(sair != 1){
  74.                     setbuf(stdin, 0);
  75.                     menu();
  76.                     opcao = getch();
  77.                     switch(opcao){
  78.                     case '1':
  79.                         numero++;
  80.                         matricular_aluno(alunos, &numero);
  81.                         break;
  82.                     case '2':
  83.                         consultar_aluno(alunos, numero, valor);
  84.                         break;
  85.                     case '3':
  86.                         if(numero > 0){
  87.                             for(c = 0; c < numero; c++){
  88.                                 exibir(alunos, c);
  89.                             }
  90.                         }else
  91.                             printf("\nNenhuma informacao a ser exibida!");
  92.                         getch();
  93.                         break;
  94.                     case '4':
  95.                         sair = 1;
  96.                         printf("Saindo...\n");
  97.                         break;
  98.                     default:
  99.                         printf("Opcao invalida!");
  100.                         getch();
  101.                         break;
  102.                     }
  103.                 }
  104.             }else{
  105.                 printf("\nSenha invalida!");
  106.                 maximo++;
  107.                 printf(" Tentativas (%i/3)", maximo);
  108.                 getch();
  109.                 system("cls || clear");
  110.             }
  111.         }else{
  112.             printf("\nLogin invalido!");
  113.             maximo++;
  114.             printf(" Tentativas (%i/3)", maximo);
  115.             getch();
  116.             system("cls || clear");
  117.         }
  118.     }
  119.     return 0;
  120. }
  121.  
  122. void menu(){
  123.     system("cls || clear");
  124.     printf("========== M E N U ============\n\n");
  125.     printf("[1] MATRICULAR ALUNO\n");
  126.     printf("[2] CONSULTAR ALUNO\n");
  127.     printf("[3] EXIBIR INFORMACOES\n");
  128.     printf("[4] SAIR\n\n");
  129.     printf("===============================\n");
  130. }
  131.  
  132. void exibir(Aluno *alunos, int numero){
  133.  
  134.     capitalize(alunos[numero].nome);
  135.  
  136.     printf("\nID: %i\n", alunos[numero].num_matricula);
  137.     printf("Nome: %s\n", alunos[numero].nome);
  138.     printf("Mensalidade: R$%.2lf", alunos[numero].mensalidade);
  139.     if(alunos[numero].status_mensalidade == 0)
  140.         printf(" (EM ABERTO)\n");
  141.     else
  142.         printf(" (PAGO)\n");
  143.  
  144.     if(alunos[numero].status_matricula == 1)
  145.         printf("Status: ATIVA\n");
  146.     else
  147.         printf("Status: TRANCADA\n");
  148.  
  149.     printf("\n===============================\n");
  150. }
  151.  
  152. void matricular_aluno(Aluno *alunos, int *numero){
  153.     int c = 0;
  154.     char opcao;
  155.  
  156.     //Realoca para caber o novo elemento
  157.     system("cls || clear");
  158.     printf("======= C A D A S T R O =======\n\n");
  159.  
  160.     //Lê o nome do aluno
  161.     printf("Nome: ");
  162.     fgets(alunos[*numero-1].nome, 255, stdin);
  163.     alunos[*numero-1].nome[strlen(alunos[*numero-1].nome)-1] = '\0';
  164.     setbuf(stdin, NULL);
  165.  
  166.     //Lê o valor da mensalidade
  167.     printf("Mensalidade: ");
  168.     scanf("%lf", &alunos[*numero-1].mensalidade);
  169.  
  170.     //Seta o status da matricula e mensalidade para o padrão e adiciona o id da matricula
  171.     alunos[(*numero)-1].num_matricula = (*numero);
  172.     alunos[(*numero)-1].status_matricula = 1;
  173.     alunos[(*numero)-1].status_mensalidade = 0;
  174.     printf("===============================\n");
  175.  
  176.     exibir(alunos, (*numero)-1);
  177.     printf("\n[1] CONFIRMAR [2] DESCARTAR");
  178.  
  179.     do{
  180.         opcao = getch();
  181.         switch(opcao){
  182.         case '1':
  183.             salvar(alunos, *numero);
  184.             printf("\n\nCadastro realizado!\n");
  185.             c = 0;
  186.             Sleep(1000);
  187.             break;
  188.         case '2':
  189.             printf("\n\nCadastro descartado!\n");
  190.             *numero = *numero-1;
  191.             c = 0;
  192.             Sleep(1000);
  193.             break;
  194.         default:
  195.             printf("\n\nOpcao invalida! Tente novamente..\n");
  196.             c = 1;
  197.             break;
  198.         }
  199.     }while(c != 0);
  200. }
  201.  
  202. void carregar_dados(Aluno *alunos, int *numero, int *valor){
  203.     int c;
  204.     char letra[255];
  205.     char url[] = "dados.txt";
  206.     FILE *arq;
  207.     arq = fopen(url, "r");
  208.  
  209.     if(arq != NULL){
  210.         fscanf(arq, "%i\n", numero);
  211.         for(c = 0; c < *numero; c++){
  212.             fgets(alunos[c].nome, 255, arq);
  213.             alunos[c].nome[strlen(alunos[c].nome)-1] = '\0';
  214.             fscanf(arq, "%lf ", &alunos[c].mensalidade);
  215.             fscanf(arq, "%i ", &alunos[c].num_matricula);
  216.             fscanf(arq, "%i ", &alunos[c].status_matricula);
  217.             fscanf(arq, "%i\n", &alunos[c].status_mensalidade);
  218.         }
  219.     }else{
  220.         *valor = -1;
  221.     }
  222. }
  223.  
  224. void opcoes_consulta(int valor, Aluno *alunos, int numero){
  225.     char opcao;
  226.  
  227.     if(valor == -1){
  228.         printf("\nNenhum dado encontrado! Pressione qualquer tecla para continuar...");
  229.     }else{
  230.         exibir(alunos, valor);
  231.         if(alunos[valor].status_matricula == 1)
  232.             printf("\n[1] TRANCAR");
  233.         else
  234.             printf("\n[1] DESTRANCAR ");
  235.  
  236.             printf(" [2] PAGAR [3] VOLTAR");
  237.  
  238.             opcao = getch();
  239.             switch(opcao){
  240.             case '1':
  241.                 if(alunos[valor].status_matricula == 1){
  242.                     if(alunos[valor].status_mensalidade == 0){
  243.                         printf("\n\nMatricula so pode ser trancada apos o pagamento da mensalidade!");
  244.                         printf("\nPressione qualquer tecla para continuar..");
  245.                     }else{
  246.                         bloquear_matriula(alunos, valor);
  247.                         printf("\n\nMatricula trancada! Pressione qualquer tecla para continuar..");
  248.                         salvar(alunos, numero);
  249.                     }
  250.                 }else{
  251.                     ativar_matricula(alunos, valor);
  252.                     printf("\n\nMatricula ativa! Pressione qualquer tecla para continuar..");
  253.                     salvar(alunos, numero);
  254.                 }
  255.                 break;
  256.         case '2':
  257.             if(alunos[valor].status_mensalidade == 0){
  258.                 pagar_mensalidade(alunos, valor);
  259.                 printf("\n\nMensalidade paga! Pressione qualquer tecla para continuar..");
  260.                 salvar(alunos, numero);
  261.             }else{
  262.                 printf("\n\nMensalidade ja esta paga! Pressione qualquer tecla para continuar..");
  263.                 salvar(alunos, numero);
  264.             }
  265.             break;
  266.         case '3':
  267.             consultar_aluno(alunos, numero, valor);
  268.             break;
  269.         default:
  270.             printf("\nOpcao invalida!\n");
  271.             break;
  272.         }
  273.     }
  274. }
  275.  
  276. void consultar_aluno(Aluno *alunos, int numero, int valor){
  277.     char nome[255];
  278.     int c;
  279.     char opcao;
  280.     menu_consulta();
  281.     opcao = getch();
  282.     switch(opcao){
  283.     case '1':
  284.         printf("Nome do aluno: ");
  285.         setbuf(stdin, 0);
  286.         fgets(nome, 255, stdin);
  287.         nome[strlen(nome)-1] = '\0';
  288.  
  289.         //Deixa todos os nomes em letra maiuscula pra facilitar a busca
  290.         uppercase(nome);
  291.         for(c = 0; c < numero; c++){
  292.             uppercase(alunos[c].nome);
  293.         }
  294.         //----------------------------------------------------------------------//
  295.  
  296.         valor = busca_nome(alunos, nome, numero);
  297.         opcoes_consulta(valor, alunos, numero);
  298.         getch();
  299.         break;
  300.     case '2':
  301.         printf("Numero da matricula: ");
  302.         setbuf(stdin, 0);
  303.         scanf("%i", &valor);
  304.         valor = busca_binaria(alunos, valor, numero);
  305.         opcoes_consulta(valor, alunos, numero);
  306.         getch();
  307.         break;
  308.     case '3':
  309.         break;
  310.     default:
  311.         break;
  312.     }
  313. }
  314.  
  315. void menu_consulta(){
  316.     system("cls || clear");
  317.     printf("======= C O N S U L T A =======\n\n");
  318.     printf("[1] CONSULTAR POR NOME\n");
  319.     printf("[2] CONSULTAR POR MATRICULA\n");
  320.     printf("[3] VOLTAR\n\n");
  321.     printf("===============================\n");
  322. }
  323.  
  324. int busca_binaria(Aluno *alunos, int valor, int numero){
  325.     int esquerda = 0, direita = numero;
  326.     int meio, inicial;
  327.  
  328.     while(esquerda <= direita){
  329.         meio = (esquerda + direita)/2;
  330.  
  331.         if(valor == alunos[meio].num_matricula){
  332.             return meio;
  333.         }
  334.  
  335.         if(alunos[meio].num_matricula < valor){
  336.             esquerda = meio + 1;
  337.             inicial = esquerda;
  338.         }else{
  339.             direita = meio - 1;
  340.             inicial = esquerda;
  341.         }
  342.         meio = (esquerda + direita)/2;
  343.     }
  344.  
  345.     return -1;
  346. }
  347.  
  348. int busca_nome(Aluno* alunos, char* nome, int numero){
  349.     int c, retorno;
  350.  
  351.     for(c = 0; c < numero; c++){
  352.         retorno = strncmp(nome, alunos[c].nome, strlen(nome));
  353.         if(retorno == 0)
  354.             return c;
  355.     }
  356.     return -1;
  357. }
  358.  
  359. //--Salva todos os dados em um arquivo--//
  360. void salvar(Aluno *alunos, int numero){
  361.     int c;
  362.     char url[] = "dados.txt";
  363.     FILE *arq;
  364.  
  365.     arq = fopen(url, "w");
  366.     fprintf(arq, "%i\n", numero);
  367.  
  368.     for(c = 0; c < numero; c++){
  369.         fprintf(arq, "%s\n", alunos[c].nome);
  370.         fprintf(arq, "%lf ", alunos[c].mensalidade);
  371.         fprintf(arq, "%i ", alunos[c].num_matricula);
  372.         fprintf(arq, "%i ", alunos[c].status_matricula);
  373.         fprintf(arq, "%i\n", alunos[c].status_mensalidade);
  374.     }
  375.     fclose(arq);
  376. }
  377. //----------------------------------------------//
  378.  
  379. void bloquear_matriula(Aluno *alunos, int valor){
  380.     alunos[valor].status_matricula = 0;
  381. }
  382.  
  383. void ativar_matricula(Aluno *alunos, int valor){
  384.     alunos[valor].status_matricula = 1;
  385. }
  386.  
  387. void pagar_mensalidade(Aluno *alunos, int valor){
  388.     alunos[valor].status_mensalidade = 1;
  389. }
  390.  
  391. void uppercase(char* nome){
  392.     int c;
  393.     for(c = 0; c < strlen(nome); c++){
  394.         if((nome[c] >= 97) && (nome[c] <= 122) && nome[c] != ' '){
  395.             nome[c] = nome[c] - 32;
  396.         }
  397.     }
  398. }
  399.  
  400. void capitalize(char* nome){
  401.     int c;
  402.     for(c = 0; c < strlen(nome); c++){
  403.         if(c == 0){
  404.             if((nome[c] >= 97) && (nome[c] <= 122) && (nome[c] != ' '))
  405.                 nome[c] = nome[c] - 32;
  406.         }else if(nome[c-1] == ' '){
  407.             if((nome[c] >= 97) && (nome[c] <= 122) && (nome[c] != ' '))
  408.                 nome[c] = nome[c] - 32;
  409.         }else if((nome[c] >= 65) && (nome[c] <= 90) && (nome[c] != ' ')){
  410.                 nome[c] = nome[c] + 32;
  411.         }
  412.     }
  413. }
Add Comment
Please, Sign In to add comment