gcc -o seguradora main.c seguradora.c
./seguradoramain.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