Skip to content

classroom-ufersa/academic_scholarship_holder_registration_system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de cadastros de bolsistas acadêmicos.

Sumário:


Introdução

Projeto desenvolvido em C para o cadastro de bolsas e bolsistas acadêmicos que permite o gerenciamento eficiente de informações sobre os beneficiários. O sistema possibilita o registro, busca, edição, consulta, listagem e exclusão de dados dos bolsistas e das recpectivas bolsas.

Problemática

A necessidade de um sistema de cadastro de bolsistas acadêmicos surge de uma série de problemas e desafios ao gerenciar programas de bolsas de estudo. Esses desafios criam um ambiente em que o gerenciamento manual se torna ineficaz.

Executar projeto

  • 1º clone o repositório do projeto:
git clone github.com/classroom-ufersa/academic_scholarship_holder_registration_system.git
  • 2º compile:
gcc -o main main.c ../src/bolsas.c ../src/bolsistas.c ../src/sistema.c  
  • 3º execute o programa:
./main  

Funcionalidades

Menu Status
[ 1 ] - Adicionar Bolsa
[ 2 ] - Adicionar Bolsista
[ 3 ] - Excluir Bolsista
[ 4 ] - Excluir Bolsa
[ 5 ] - Listar Bolsistas
[ 6 ] - Buscar Bolsista
[ 7 ] - Editar Dados do Bolsista
[ 8 ] - Consultar Bolsas Disponiveis
[ 9 ] - Sair

Desenvolvimento

Listas encadeadas

  • Para o desenvolvimento do projeto foram utilizadas listas encadeadas simples onde cada nó guarda informações de uma bolsa e aponta para a próxima. Além disso, cada bolsa pode ter uma lista de bolsistas, formando uma relação entre si.

Exemplo visual:

Bolsa 1 -> Bolsa 2 -> Bolsa 3 -> NULL
Dentro de cada bolsa (campo Bolsista *bolsistas):
Bolsa 1 pode ter uma lista de bolsistas associados:
Bolsista 1 -> Bolsista 2 -> NULL

TAD's-(Tipos Abstratos de Dados)

struct Data

struct data
{
    int dia;
    int mes;
    int ano;
};

Struct Bolsa

struct bolsa
{
    char nome_bolsa[MAX_BOLSA];
    float valor_mensal;
    Data inicio;
    Data termino;
    Bolsista *bolsistas;
    Bolsa *proxima_bolsa;
};

Struct bolsista

struct bolsista
{
    char nome_completo[MAX];
    long int matricula;
    char curso[50];
    char CPF[15];
    char bolsa_associada[MAX];
    struct bolsista *proximo_bolsista;
};

Hierarquia dos cabeçalhos

Bolsa
 └── Bolsista
     └── Sistema

bolsas.h

#ifndef BOLSA_H
#define BOLSA_H

#include "bolsistas.h"
#include <stdio.h>

typedef struct data Data;

typedef struct bolsa Bolsa;

// Funções para manipulação de bolsas;

/*Função que aloca e preenche os campos de uma nova bolsa.
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void insere_bolsa(Bolsa **bolsas);

/*Função que retorna 0 caso data de termino seja menor que data de inicio e 1 caso contrário
Recebe como parâmetro duas variáveis do tipo Data: inicio e fim*/
int verifica_data_termino(Data inicio, Data fim);

/*Função que insere uma nova bolsa em uma lista ligada de forma ordenada.
Recebe como parâmetros duas variáveis do tipo Bolsa */
void insere_bolsa_ordenada(Bolsa **bolsas, Bolsa *nova_bolsa);

/*Função que lê as bolsas na ordem correta
Recebe como parâmetros duas variáveis do tipo Bolsa*/
void ler_bolsa_no_final(Bolsa **bolsas, Bolsa *nova_bolsa);

/*Função para excluir uma bolsa.
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void excluir_bolsas(Bolsa **bolsas);

/*Função para excluir um bolsista por nome.
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void excluir_bolsista_por_nome(Bolsa **bolsas);

/*Função para verificar se a bolsa ja esta cadastrada.
Recebe como parâmetro um ponteiro de Bolsa e o nome da bolsa*/
int verifica_bolsa_existente(Bolsa *bolsas, char *nome_bolsa);

/*Função para escolher se buscará bolsista por nome ou matricula.
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void menu_busca_bolsista(Bolsa **bolsas);

/*Função para buscar bolsista por nome.
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void buscar_bolsista_por_nome(Bolsa **bolsas);

/*Função para buscar bolsista por matricula.
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void buscar_bolsista_por_matricula(Bolsa **bolsas);

/*Função que busca bolsa
Recebe como parâmetros um ponteiro de Bolsa e o nome da bolsa*/
Bolsa *busca_bolsa(char *nome_bolsa, Bolsa *bolsas);

/*Função para consultar as bolsas disponíveis.
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void consultar_bolsas_disponiveis(Bolsa **bolsas);

/*Função que lista todos os bolsistas cadastrados
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void auxiliar_listar_bolsistas(Bolsa **bolsas);

/*Função que adiciona bolsista em uma bolsa
Recebe como parâmetro um ponteiro duplo de Bolsa*/
void adiciona_bolsista_na_bolsa(Bolsa **bolsas);

/*Função para escanear todas as bolsas armazenadas no banco de dado(arquivo.txt)
Recebe como parâmetro um ponteiro duplo de Bolsa e um ponteiro dupli para o arquivo.txt*/
void ler_bolsa_arquivo(FILE **banco_de_dados, Bolsa **bolsas);

/*Função que insere um bolsa, com seus respectivos compos, noa arquivo.txt
Recebe com parâmetro um ponteiro duplo de Bolsa e um ponteiro dupli para o arquivo.txt*/
void insere_bolsa_arquivo(FILE **banco_de_dados, Bolsa **bolsas);

/*Função que verifica se a lista de bolsas está vazia
Recebe com parâmetro um ponteiro para Bolsa*/
int bolsa_vazia(Bolsa *bolsas);

/*Função que edita os dados do Bolsista a partir de um menu com duas opções: editar por nome ou por matricula
Recebe com parâmetro um ponteiro duplo de Bolsa*/
void edita_dados_bolsista(Bolsa **bolsas);

/*Função para limpar Buffer*/
void limpaBuffer(void);

#endif // BOLSA_H


bolsistas.h

#ifndef BOLSISTA_H
#define BOLSISTA_H

#include <stdio.h>
#include "sistema.h"
#define MAX 100

// Funções para manipulação de bolsistas

typedef struct bolsista Bolsista;

/*Função que preenche os compos de bolsista e o adiciona à lista
Recebe como parâmetro um ponteiro duplo de bolsistas e uma string com o nome da bolsa*/
void adiciona_bolsista(Bolsista **bolsistas, char *nome_bolsa);

/*Função que insere o bolsista na lista de forma ordenada (ordenação por nome)
Recebe como parâmetros um ponteiro duplo de Bolsista e outro ponteiro de Bolsista*/
void insere_bolsista_ordenado(Bolsista **bolsistas, Bolsista *novo_bolsista);

/*Função que busca um bolsista pelo nome em uma bolsa.
Recebe como parâmetro um ponteiro de Bolsista e o nome do bolsista que sera procurado*/
Bolsista *auxiliar_buscar_bolsista_por_nome(Bolsista *bolsistas, char *nome_bolsista);

/*Função que busca um bolsista pela matricula em uma bolsa.
Recebe como parâmetro um ponteiro de Bolsista e a matricula do bolsista que sera procurado*/
Bolsista *auxiliar_buscar_bolsista_por_matricula(Bolsista *bolsistas, long int matricula);

/*Função que edita os dados do bolsista em uma bolsa
Recebe como parâmetros dois ponteiros para Bolsista*/
void auxiliar_editar_bolsista(Bolsista *bolsista_encontrado, Bolsista *bolsistas);

/*Função que libera a memória dos bolsistas por nome em uma bolsa.
Recebe como parâmetros um ponteiro duplo para Bolsista e uma string com o nome do bolsista  */
int auxiliar_excluir_bolsista_por_nome(Bolsista **bolsistas, char *nome_bolsista);

/*Função que libera a memória dos bolsistas de uma bolsa
Recebe como parâmetro um ponteiro duplo do Bolsista*/
void auxiliar_excluir_bolsas(Bolsista **bolsistas);

/*Função que lista os bolsistas
Recebe como parâmetro um ponteiro de Bolsista*/
void listar_bolsistas(Bolsista *bolsistas);

/*Função que verifica se o CPF digitado ja está cadastrado
Recebe como parâmetro uma string com o CPF e um ponteiro de Bolsista*/
int verifica_cpf_existente(char *CPF, Bolsista *bolsistas);

/*Função que verifica se a matricula digitada ja está cadastrda.
Recebe como parâmetro uma string com a matricula e um ponteiro de Bolsista*/
int verifica_matricula_existente(long int matricula, Bolsista *bolsistas);

/*Função que verifica se um bolsista ja está cadastrado.
Recebe como parâmetro um ponteiro de Bolsista e uma string com o nome do bolsista*/
int verifica_bolsista_existente(Bolsista *bolsistas, char *nome_bolsista);

/*Função que quantifica o total de bolsistas cadastrados em uma bolsa
Recebe como parâmetro um ponteiro de Bolsista*/
int quantitativo_bolsistas(Bolsista *bolsistas);

/*Função que lê os dados de um bolsista armazenados no arquivo.txt(banco de dados)
Recebe como parâmetros um ponteiro duplo de FILE(arquivo) e um ponteiro de Bolsista*/
Bolsista *ler_bolsista_arquivo(FILE **banco_de_dados, Bolsista *bolsistas);

/*Função que insere um bolsista em um arquivo
Recebe como parâmetros um ponteiro duplo de FILE(arquivo) e um ponteiro de Bolsista */
void insere_bolsista_arquivo(FILE **banco_de_dados, Bolsista *bolsistas);

#endif // BOLSISTA_H


sistema.h

#ifndef SISTEMA_H
#define SISTEMA_H

#include <stdio.h>
#define TAMANHO_CPF 11
#define FALHA 0
#define SUCESSO 1

/*Função que exibe o menu de opções ao usuário*/
void menu_de_opcoes();

/*Função que verifica se o arquivo foi aberto da forma correta*/
FILE * Verificacao(char * nome, char * modo);

/*Função que verifica se o CPF digitado é válido ou não dentro das condições:
    - se o CPF está no formato 000.000.000-00
    - se os numeros são inteiros
    - se contém 11 digitos 
Recebe como parâmetro uma string contendo o CPF digitado*/
int verifica_cpf_valido(char * cpf);

/*Função que verifica se a string digitada é um numero inteiro ou não
Recebe como parâmetro uma string contendo o numero digitado*/
int verifica_inteiro(char * numero);

/*Função que verifica se a string digitada está dentro das condições:
    - se é um numero inteiro E se há espaço em i[2] e i[5]
    - se está no formato DD/MM/AAAA
Recebe como parâmetro uma string contendo a data digitado*/
int verifica_data(char *data);

/*Função que verifica se a string digitada está dentro das condições:
    - se é um número inteiro 
    - se tem 8 digitos
Recebe como parâmetro uma string contendo a data digitado*/
int verifica_matricula_valida(char *numero);

/*Função que verifica se a string digitada é um float ou não
Recebe como parâmetro uma string contendo o numero digitado*/
float verifica_float(char * numero);

/*Funçõa que verifica se a string está dentro das condições:
    - se não é um caracter E se não é um espaço
Recebe como parâmetro uma string contendo o nome digitado*/
int verifica_caracter(char * nome);

/*Função que transforma os caracteres:
    - primeira letra do nome será maiúscula
    - primeira letra apos o espaço também será maiúscula
    - restante das letras serão minúsculas
Recebe como parâmetro uma string contendo o nome digitado*/
char * transforma_caracter_padrao(char * nome);


#endif // SYSTEM_H

Estrutura do repositorio

Sistema de Cadastros de Bolsistas Acadêmicos
|
├── LICENSE
├── README.md
├── apps
│   ├── main
│   └── main.c
|
├── banco_de_dados
│   └── bolsas.txt
|
├── include
│   ├── bolsas.h
│   ├── bolsistas.h
│   └── sistema.h
|
└── src
    ├── bolsas.c
    ├── bolsistas.c
    └── sistema.c

Desenvolvedores


Alice dos Santos Pinheiro

Jose Danilo Santos do Nascimento

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages