Advertisement
Magnect

Secretaria Project

May 29th, 2019
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 12.34 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.             fscanf(arq, "%s ", alunos[c].nome);
  213.             fscanf(arq, "%lf ", &alunos[c].mensalidade);
  214.             fscanf(arq, "%i ", &alunos[c].num_matricula);
  215.             fscanf(arq, "%i ", &alunos[c].status_matricula);
  216.             fscanf(arq, "%i\n", &alunos[c].status_mensalidade);
  217.         }
  218.     }else{
  219.         *valor = -1;
  220.     }
  221. }
  222.  
  223. void opcoes_consulta(int valor, Aluno *alunos, int numero){
  224.     char opcao;
  225.  
  226.     if(valor == -1){
  227.         printf("\nNenhum dado encontrado! Pressione qualquer tecla para continuar...");
  228.     }else{
  229.         exibir(alunos, valor);
  230.         if(alunos[valor].status_matricula == 1)
  231.             printf("\n[1] TRANCAR");
  232.         else
  233.             printf("\n[1] DESTRANCAR ");
  234.  
  235.             printf(" [2] PAGAR [3] VOLTAR");
  236.  
  237.             opcao = getch();
  238.             switch(opcao){
  239.             case '1':
  240.                 if(alunos[valor].status_matricula == 1){
  241.                     if(alunos[valor].status_mensalidade == 0){
  242.                         printf("\n\nMatricula so pode ser trancada apos o pagamento da mensalidade!");
  243.                         printf("\nPressione qualquer tecla para continuar..");
  244.                     }else{
  245.                         bloquear_matriula(alunos, valor);
  246.                         printf("\n\nMatricula trancada! Pressione qualquer tecla para continuar..");
  247.                         salvar(alunos, numero);
  248.                     }
  249.                 }else{
  250.                     ativar_matricula(alunos, valor);
  251.                     printf("\n\nMatricula ativa! Pressione qualquer tecla para continuar..");
  252.                     salvar(alunos, numero);
  253.                 }
  254.                 break;
  255.         case '2':
  256.             if(alunos[valor].status_mensalidade == 0){
  257.                 pagar_mensalidade(alunos, valor);
  258.                 printf("\n\nMensalidade paga! Pressione qualquer tecla para continuar..");
  259.                 salvar(alunos, numero);
  260.             }else{
  261.                 printf("\n\nMensalidade ja esta paga! Pressione qualquer tecla para continuar..");
  262.                 salvar(alunos, numero);
  263.             }
  264.             break;
  265.         case '3':
  266.             consultar_aluno(alunos, numero, valor);
  267.             break;
  268.         default:
  269.             printf("\nOpcao invalida!\n");
  270.             break;
  271.         }
  272.     }
  273. }
  274.  
  275. void consultar_aluno(Aluno *alunos, int numero, int valor){
  276.     char nome[255];
  277.     int c;
  278.     char opcao;
  279.     menu_consulta();
  280.     opcao = getch();
  281.     switch(opcao){
  282.     case '1':
  283.         printf("Nome do aluno: ");
  284.         setbuf(stdin, 0);
  285.         fgets(nome, 255, stdin);
  286.         nome[strlen(nome)-1] = '\0';
  287.  
  288.         //Deixa todos os nomes em letra maiuscula pra facilitar a busca
  289.         uppercase(nome);
  290.         for(c = 0; c < numero; c++){
  291.             uppercase(alunos[c].nome);
  292.         }
  293.         //----------------------------------------------------------------------//
  294.  
  295.         valor = busca_nome(alunos, nome, numero);
  296.         opcoes_consulta(valor, alunos, numero);
  297.         getch();
  298.         break;
  299.     case '2':
  300.         printf("Numero da matricula: ");
  301.         setbuf(stdin, 0);
  302.         scanf("%i", &valor);
  303.         valor = busca_binaria(alunos, valor, numero);
  304.         opcoes_consulta(valor, alunos, numero);
  305.         getch();
  306.         break;
  307.     case '3':
  308.         break;
  309.     default:
  310.         break;
  311.     }
  312. }
  313.  
  314. void menu_consulta(){
  315.     system("cls || clear");
  316.     printf("======= C O N S U L T A =======\n\n");
  317.     printf("[1] CONSULTAR POR NOME\n");
  318.     printf("[2] CONSULTAR POR MATRICULA\n");
  319.     printf("[3] VOLTAR\n\n");
  320.     printf("===============================\n");
  321. }
  322.  
  323. int busca_binaria(Aluno *alunos, int valor, int numero){
  324.     int esquerda = 0, direita = numero;
  325.     int meio, inicial;
  326.  
  327.     while(esquerda <= direita){
  328.         meio = (esquerda + direita)/2;
  329.  
  330.         if(valor == alunos[meio].num_matricula){
  331.             return meio;
  332.         }
  333.  
  334.         if(alunos[meio].num_matricula < valor){
  335.             esquerda = meio + 1;
  336.             inicial = esquerda;
  337.         }else{
  338.             direita = meio - 1;
  339.             inicial = esquerda;
  340.         }
  341.         meio = (esquerda + direita)/2;
  342.     }
  343.  
  344.     return -1;
  345. }
  346.  
  347. int busca_nome(Aluno* alunos, char* nome, int numero){
  348.     int c, retorno;
  349.  
  350.     for(c = 0; c < numero; c++){
  351.         retorno = strncmp(nome, alunos[c].nome, strlen(nome));
  352.         if(retorno == 0)
  353.             return c;
  354.     }
  355.     return -1;
  356. }
  357.  
  358. //--Salva todos os dados em um arquivo--//
  359. void salvar(Aluno *alunos, int numero){
  360.     int c;
  361.     char url[] = "dados.txt";
  362.     FILE *arq;
  363.  
  364.     arq = fopen(url, "w");
  365.     fprintf(arq, "%i\n", numero);
  366.  
  367.     for(c = 0; c < numero; c++){
  368.         fprintf(arq, "%s", alunos[c].nome);
  369.         fprintf(arq, " %lf ", alunos[c].mensalidade);
  370.         fprintf(arq, "%i ", alunos[c].num_matricula);
  371.         fprintf(arq, "%i ", alunos[c].status_matricula);
  372.         fprintf(arq, "%i\n", alunos[c].status_mensalidade);
  373.     }
  374.     fclose(arq);
  375. }
  376. //----------------------------------------------//
  377.  
  378. void bloquear_matriula(Aluno *alunos, int valor){
  379.     alunos[valor].status_matricula = 0;
  380. }
  381.  
  382. void ativar_matricula(Aluno *alunos, int valor){
  383.     alunos[valor].status_matricula = 1;
  384. }
  385.  
  386. void pagar_mensalidade(Aluno *alunos, int valor){
  387.     alunos[valor].status_mensalidade = 1;
  388. }
  389.  
  390. void uppercase(char* nome){
  391.     int c;
  392.     for(c = 0; c < strlen(nome); c++){
  393.         if((nome[c] >= 97) && (nome[c] <= 122) && nome[c] != ' '){
  394.             nome[c] = nome[c] - 32;
  395.         }
  396.     }
  397. }
  398.  
  399. void capitalize(char* nome){
  400.     int c;
  401.     for(c = 0; c < strlen(nome); c++){
  402.         if(c == 0){
  403.             if((nome[c] >= 97) && (nome[c] <= 122) && (nome[c] != ' '))
  404.                 nome[c] = nome[c] - 32;
  405.         }else if(nome[c-1] == ' '){
  406.             if((nome[c] >= 97) && (nome[c] <= 122) && (nome[c] != ' '))
  407.                 nome[c] = nome[c] - 32;
  408.         }else if((nome[c] >= 65) && (nome[c] <= 90) && (nome[c] != ' ')){
  409.                 nome[c] = nome[c] + 32;
  410.         }
  411.     }
  412. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement