Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <string.h>
- #include <windows.h>
- #define MAX 1000
- /*
- Secretaria faculdade (Cadastrar Aluno, bloquear matricula, ativar matricula)
- (Login)
- (Matricular aluno)
- (Consultar aluno por nome ou matricula)
- (Pagar mensalidade)
- (Ativar matricula)
- */
- typedef struct{
- char nome[255];
- int num_matricula, status_matricula, status_mensalidade;
- double mensalidade;
- }Aluno;
- //--PROTÓTIPOS DE FUNÇÃO--//
- void menu();
- void menu_consulta();
- void matricular_aluno(Aluno *alunos, int *numero);
- void consultar_aluno(Aluno *alunos, int numero, int valor);
- void exibir(Aluno *alunos, int numero);
- void salvar(Aluno *alunos, int numero);
- void carregar_dados(Aluno *alunos, int *numero, int *valor);
- void bloquear_matriula(Aluno *alunos, int valor);
- void ativar_matricula(Aluno *alunos, int valor);
- void pagar_mensalidade(Aluno *alunos, int valor);
- void uppercase(char *nome);
- void capitalize(char *nome);
- void opcoes_consulta(int valor, Aluno *alunos, int numero);
- int busca_binaria(Aluno *alunos, int valor, int numero);
- int busca_nome(Aluno *alunos, char *nome, int numero);
- //-----------------------------------//
- int main(){
- int sair = 0, numero = 0, c, retorno, maximo = 0, valor;
- char opcao, login[255], senha[255], login2[255], senha2[255], url[] = "login.txt";
- Aluno alunos[MAX];
- carregar_dados(alunos, &numero, &valor);
- FILE *arq;
- arq = fopen(url, "r");
- //Carrega os logins armazenados pra comparação
- fgets(login2, 255, arq);
- login2[strlen(login2)-1] = '\0';
- fgets(senha2, 255, arq);
- senha2[strlen(senha2)-1] = '\0';
- while(maximo < 3){
- //Lê o login e a senha do usuário
- printf("Login: ");
- setbuf(stdin, 0);
- fgets(login, 255, stdin);
- login[strlen(login)-1] = '\0';
- printf("Senha: ");
- setbuf(stdin, 0);
- fgets(senha, 255, stdin);
- senha[strlen(senha)-1] = '\0';
- //***************************//
- retorno = strncmp(login, login2, strlen(login2));
- if(retorno == 0){
- retorno = strncmp(senha, senha2, strlen(senha2));
- if(retorno == 0){
- while(sair != 1){
- setbuf(stdin, 0);
- menu();
- opcao = getch();
- switch(opcao){
- case '1':
- numero++;
- matricular_aluno(alunos, &numero);
- break;
- case '2':
- consultar_aluno(alunos, numero, valor);
- break;
- case '3':
- if(numero > 0){
- for(c = 0; c < numero; c++){
- exibir(alunos, c);
- }
- }else
- printf("\nNenhuma informacao a ser exibida!");
- getch();
- break;
- case '4':
- sair = 1;
- printf("Saindo...\n");
- break;
- default:
- printf("Opcao invalida!");
- getch();
- break;
- }
- }
- }else{
- printf("\nSenha invalida!");
- maximo++;
- printf(" Tentativas (%i/3)", maximo);
- getch();
- system("cls || clear");
- }
- }else{
- printf("\nLogin invalido!");
- maximo++;
- printf(" Tentativas (%i/3)", maximo);
- getch();
- system("cls || clear");
- }
- }
- return 0;
- }
- void menu(){
- system("cls || clear");
- printf("========== M E N U ============\n\n");
- printf("[1] MATRICULAR ALUNO\n");
- printf("[2] CONSULTAR ALUNO\n");
- printf("[3] EXIBIR INFORMACOES\n");
- printf("[4] SAIR\n\n");
- printf("===============================\n");
- }
- void exibir(Aluno *alunos, int numero){
- capitalize(alunos[numero].nome);
- printf("\nID: %i\n", alunos[numero].num_matricula);
- printf("Nome: %s\n", alunos[numero].nome);
- printf("Mensalidade: R$%.2lf", alunos[numero].mensalidade);
- if(alunos[numero].status_mensalidade == 0)
- printf(" (EM ABERTO)\n");
- else
- printf(" (PAGO)\n");
- if(alunos[numero].status_matricula == 1)
- printf("Status: ATIVA\n");
- else
- printf("Status: TRANCADA\n");
- printf("\n===============================\n");
- }
- void matricular_aluno(Aluno *alunos, int *numero){
- int c = 0;
- char opcao;
- //Realoca para caber o novo elemento
- system("cls || clear");
- printf("======= C A D A S T R O =======\n\n");
- //Lê o nome do aluno
- printf("Nome: ");
- fgets(alunos[*numero-1].nome, 255, stdin);
- alunos[*numero-1].nome[strlen(alunos[*numero-1].nome)-1] = '\0';
- setbuf(stdin, NULL);
- //Lê o valor da mensalidade
- printf("Mensalidade: ");
- scanf("%lf", &alunos[*numero-1].mensalidade);
- //Seta o status da matricula e mensalidade para o padrão e adiciona o id da matricula
- alunos[(*numero)-1].num_matricula = (*numero);
- alunos[(*numero)-1].status_matricula = 1;
- alunos[(*numero)-1].status_mensalidade = 0;
- printf("===============================\n");
- exibir(alunos, (*numero)-1);
- printf("\n[1] CONFIRMAR [2] DESCARTAR");
- do{
- opcao = getch();
- switch(opcao){
- case '1':
- salvar(alunos, *numero);
- printf("\n\nCadastro realizado!\n");
- c = 0;
- Sleep(1000);
- break;
- case '2':
- printf("\n\nCadastro descartado!\n");
- *numero = *numero-1;
- c = 0;
- Sleep(1000);
- break;
- default:
- printf("\n\nOpcao invalida! Tente novamente..\n");
- c = 1;
- break;
- }
- }while(c != 0);
- }
- void carregar_dados(Aluno *alunos, int *numero, int *valor){
- int c;
- char letra[255];
- char url[] = "dados.txt";
- FILE *arq;
- arq = fopen(url, "r");
- if(arq != NULL){
- fscanf(arq, "%i\n", numero);
- for(c = 0; c < *numero; c++){
- fgets(alunos[c].nome, 255, arq);
- alunos[c].nome[strlen(alunos[c].nome)-1] = '\0';
- fscanf(arq, "%lf ", &alunos[c].mensalidade);
- fscanf(arq, "%i ", &alunos[c].num_matricula);
- fscanf(arq, "%i ", &alunos[c].status_matricula);
- fscanf(arq, "%i\n", &alunos[c].status_mensalidade);
- }
- }else{
- *valor = -1;
- }
- }
- void opcoes_consulta(int valor, Aluno *alunos, int numero){
- char opcao;
- if(valor == -1){
- printf("\nNenhum dado encontrado! Pressione qualquer tecla para continuar...");
- }else{
- exibir(alunos, valor);
- if(alunos[valor].status_matricula == 1)
- printf("\n[1] TRANCAR");
- else
- printf("\n[1] DESTRANCAR ");
- printf(" [2] PAGAR [3] VOLTAR");
- opcao = getch();
- switch(opcao){
- case '1':
- if(alunos[valor].status_matricula == 1){
- if(alunos[valor].status_mensalidade == 0){
- printf("\n\nMatricula so pode ser trancada apos o pagamento da mensalidade!");
- printf("\nPressione qualquer tecla para continuar..");
- }else{
- bloquear_matriula(alunos, valor);
- printf("\n\nMatricula trancada! Pressione qualquer tecla para continuar..");
- salvar(alunos, numero);
- }
- }else{
- ativar_matricula(alunos, valor);
- printf("\n\nMatricula ativa! Pressione qualquer tecla para continuar..");
- salvar(alunos, numero);
- }
- break;
- case '2':
- if(alunos[valor].status_mensalidade == 0){
- pagar_mensalidade(alunos, valor);
- printf("\n\nMensalidade paga! Pressione qualquer tecla para continuar..");
- salvar(alunos, numero);
- }else{
- printf("\n\nMensalidade ja esta paga! Pressione qualquer tecla para continuar..");
- salvar(alunos, numero);
- }
- break;
- case '3':
- consultar_aluno(alunos, numero, valor);
- break;
- default:
- printf("\nOpcao invalida!\n");
- break;
- }
- }
- }
- void consultar_aluno(Aluno *alunos, int numero, int valor){
- char nome[255];
- int c;
- char opcao;
- menu_consulta();
- opcao = getch();
- switch(opcao){
- case '1':
- printf("Nome do aluno: ");
- setbuf(stdin, 0);
- fgets(nome, 255, stdin);
- nome[strlen(nome)-1] = '\0';
- //Deixa todos os nomes em letra maiuscula pra facilitar a busca
- uppercase(nome);
- for(c = 0; c < numero; c++){
- uppercase(alunos[c].nome);
- }
- //----------------------------------------------------------------------//
- valor = busca_nome(alunos, nome, numero);
- opcoes_consulta(valor, alunos, numero);
- getch();
- break;
- case '2':
- printf("Numero da matricula: ");
- setbuf(stdin, 0);
- scanf("%i", &valor);
- valor = busca_binaria(alunos, valor, numero);
- opcoes_consulta(valor, alunos, numero);
- getch();
- break;
- case '3':
- break;
- default:
- break;
- }
- }
- void menu_consulta(){
- system("cls || clear");
- printf("======= C O N S U L T A =======\n\n");
- printf("[1] CONSULTAR POR NOME\n");
- printf("[2] CONSULTAR POR MATRICULA\n");
- printf("[3] VOLTAR\n\n");
- printf("===============================\n");
- }
- int busca_binaria(Aluno *alunos, int valor, int numero){
- int esquerda = 0, direita = numero;
- int meio, inicial;
- while(esquerda <= direita){
- meio = (esquerda + direita)/2;
- if(valor == alunos[meio].num_matricula){
- return meio;
- }
- if(alunos[meio].num_matricula < valor){
- esquerda = meio + 1;
- inicial = esquerda;
- }else{
- direita = meio - 1;
- inicial = esquerda;
- }
- meio = (esquerda + direita)/2;
- }
- return -1;
- }
- int busca_nome(Aluno* alunos, char* nome, int numero){
- int c, retorno;
- for(c = 0; c < numero; c++){
- retorno = strncmp(nome, alunos[c].nome, strlen(nome));
- if(retorno == 0)
- return c;
- }
- return -1;
- }
- //--Salva todos os dados em um arquivo--//
- void salvar(Aluno *alunos, int numero){
- int c;
- char url[] = "dados.txt";
- FILE *arq;
- arq = fopen(url, "w");
- fprintf(arq, "%i\n", numero);
- for(c = 0; c < numero; c++){
- fprintf(arq, "%s\n", alunos[c].nome);
- fprintf(arq, "%lf ", alunos[c].mensalidade);
- fprintf(arq, "%i ", alunos[c].num_matricula);
- fprintf(arq, "%i ", alunos[c].status_matricula);
- fprintf(arq, "%i\n", alunos[c].status_mensalidade);
- }
- fclose(arq);
- }
- //----------------------------------------------//
- void bloquear_matriula(Aluno *alunos, int valor){
- alunos[valor].status_matricula = 0;
- }
- void ativar_matricula(Aluno *alunos, int valor){
- alunos[valor].status_matricula = 1;
- }
- void pagar_mensalidade(Aluno *alunos, int valor){
- alunos[valor].status_mensalidade = 1;
- }
- void uppercase(char* nome){
- int c;
- for(c = 0; c < strlen(nome); c++){
- if((nome[c] >= 97) && (nome[c] <= 122) && nome[c] != ' '){
- nome[c] = nome[c] - 32;
- }
- }
- }
- void capitalize(char* nome){
- int c;
- for(c = 0; c < strlen(nome); c++){
- if(c == 0){
- if((nome[c] >= 97) && (nome[c] <= 122) && (nome[c] != ' '))
- nome[c] = nome[c] - 32;
- }else if(nome[c-1] == ' '){
- if((nome[c] >= 97) && (nome[c] <= 122) && (nome[c] != ' '))
- nome[c] = nome[c] - 32;
- }else if((nome[c] >= 65) && (nome[c] <= 90) && (nome[c] != ' ')){
- nome[c] = nome[c] + 32;
- }
- }
- }
Add Comment
Please, Sign In to add comment