gcc -o seguradora main.c seguradora.c
./seguradora
main.c
- Interface de usuário e menu interativoseguradora.c
- Implementação das estruturas de dados e funçõesseguradora.h
- Definições de tipos e declarações de funções
O sistema organiza conveniados em uma hierarquia de duas camadas:
- Titulares: Conveniados principais
- Dependentes: Vinculados a um titular específico
- Inserir Titular: Cadastra novo titular no sistema
- Inserir Dependente: Vincula dependente a um titular existente
- Buscar Conveniado: Localiza titular ou dependente por CPF
- Exibir Todos: Lista completa hierárquica
- Exibir Dependentes: Lista dependentes de um titular
- Exibir Inadimplentes: Filtra titulares com situação inadimplente
- Excluir Dependente: Remove dependente específico
- Excluir Titular: Remove titular e todos seus dependentes
- Estatísticas: Totais de titulares e dependentes
ATIVO
: Conveniado ativo no sistemaINATIVO
: Conveniado temporariamente inativoINADIMPLENTE
: Conveniado com pendências
CONJUGE
, FILHO
, FILHA
, PAI
, MAE
, IRMAO
, IRMA
, SOGRO
, SOGRA
, GENRO
, NORA
, NETO
, NETA
, AVO
, OUTRO
// Lista duplamente encadeada genérica
typedef struct No {
void* dados;
struct No* proximo;
struct No* anterior;
} No;
typedef struct Lista {
No* head;
No* tail;
int tamanho;
} Lista;
// Sistema principal
typedef struct {
Lista* listaTitulares;
int totalTitulares;
int totalDependentes;
} SistemaSeguros;
// Titular com lista própria de dependentes
typedef struct Titular {
char nome[MAX_NOME];
char cpf[MAX_CPF];
int idade;
SituacaoConveniado situacao;
Lista* listaDependentes;
} Titular;
// Dependente (sem ponteiros de lista)
typedef struct Dependente {
char nome[MAX_NOME];
char cpf[MAX_CPF];
int idade;
SituacaoConveniado situacao;
GrauParentesco grauParentesco;
} Dependente;
SistemaSeguros
└── Lista de Titulares
├── Titular 1
│ └── Lista de Dependentes
│ ├── Dependente 1.1
│ └── Dependente 1.2
├── Titular 2
│ └── Lista de Dependentes
│ └── Dependente 2.1
└── Titular N
└── Lista de Dependentes (vazia)
criarLista()
- Inicializa lista vaziainserirNoFim()
- Adiciona elemento ao finalbuscarNo()
- Localiza elemento usando função de comparaçãoremoverNo()
- Remove elemento usando função de comparaçãodestruirLista()
- Libera toda a memória da lista
inicializarSistema()
- Cria sistema com lista de titulares vaziainserirTitular()
- Cria titular e adiciona à lista principalinserirDependente()
- Localiza titular e adiciona dependente à sua listabuscarConveniado()
- Busca primeiro em titulares, depois em dependentesexcluirTitular()
- Remove titular e todos seus dependentes
bool compararTitularPorCPF(void* titular, void* cpf);
bool compararDependentePorCPF(void* dependente, void* cpf);
void processarTitular(void* titular); // Callback para exibir titular
void processarDependente(void* dependente); // Callback para exibir dependente
-
Busca de Conveniado por CPF:
- Procura primeiro na lista de titulares
- Se não encontrar, percorre cada titular buscando nos dependentes
- Retorna titular encontrado + dependente (se aplicável)
-
Inserção de Dependente:
- Localiza titular pelo CPF
- Verifica se CPF do dependente já existe no sistema
- Cria dependente e adiciona à lista do titular
- Incrementa contador global
-
Exclusão de Titular:
- Localiza titular na lista principal
- Remove titular (liberação automática inclui todos os dependentes)
- Atualiza contadores globais
O menu principal executa em loop até opção 0 (sair):
- Lê opção do usuário
- Chama função correspondente
- Exibe resultado
- Pausa para leitura
- Limpa tela
- Volta ao menu
- Cada titular possui sua própria lista de dependentes
- Exclusão de titular automaticamente libera todos os dependentes
- Sistema principal mantém apenas uma lista de titulares
- Funções callback são usadas para liberação específica de cada tipo