#ifndef BANCO_DADOS_H #define BANCO_DADOS_H #include #include #include #include #include #include #include class Banco_Dados{ public: Banco_Dados(String arquivo, Lista_Simples &campos); ~Banco_Dados(); /** * Apaga: apaga o arquivo de banco de dados, reinicia-o */ void Apaga(); /** * Insere: insere o registro como os campos dados no arquivo com a base de dados *@param numero o numero do paciente *@param nome o nome do paciente *@param diagnostico o diagnostico do paciente *@param tratamento o tratamento do paciente *@return true=ok, false=falhou, provavelmente o registro já existia */ bool Insere(int numero, String nome, int idade, String diagnostico, String tratamento); /** * Remove: remove o registro, dado o seu numero (chave primaria) *@param numero o numero do paciente *@return true=ok, false=falhou, provavelmente o registro nao existe */ bool Remove(int numero); /** * Procura: procura por registros que contenham os campos. Campos que forem vazios("") não serão levados em conta na procura *@param campo nome do campo a ser procurado *@param valor valor a ser procurado no campo *@return apontador para a lista de registros ou NULL *OBS: Memória dinâmica. Liberar após o uso. */ Lista_Simples *Procura(String nome, String idade, String diagnostico, String tratamento); /** * Procura_Numero: procura pelo registro de chave primária 'numero' *@param numero chave primaria que identifica o registro *@return apontador para o registro ou NULL caso não encontre */ Registro *Procura_Numero(int numero); /** * Media: calcula a média do campo especificado e a retorna em 'media'. *@param campo o nome do campo a ser procurado *@param media a variável onde será retornado o valor *@return true=ok, false=false, provavelmente não haviam registros */ bool Media(String campo, double *media); /** * Inicia_Indices: inicia todos os indices, repopulando-os, caso necessario */ void Inicia_Indices(); protected: Indice_Arvore_Binaria *Indice_Numero; Indice_Secundario_Arvore_Binaria *Indice_Nome; Indice_Secundario_Arvore_Binaria *Indice_Idade; Indice_Secundario_Arvore_Binaria *Indice_Diagnostico; Indice_Secundario_Arvore_Binaria *Indice_Tratamento; Lista_Simples *Insere_Ordenado(Lista_Simples *lista); long PrimeiraPosicao; long posicao; FILE *fp; char delimitador; char delimitador_registro; char char_removido; Lista_Simples *campos; int estado_le_cabecalho; String arquivo; /** * Registro_Removido: retorna se o registro que comeca na posicao atual foi removido ou não *@return true=foi removido, false=não foi removido */ bool Registro_Removido(); /** * Pega_Posicao: retorna posição atual no arquivo. *@return (long) posição no arquivo */ long Pega_Posicao(); /** * Muda_Posicao: muda a posição no arquivo, relativo a 'onde' *@param posicao é a nova posição *@param onde pode ser SEEK_SET=a partir do começo do arquivo, SEEK_CUR=a partir da posição atual, SEEK_END=a partir do fim do arquivo */ bool Muda_Posicao(long posicao, int onde); /** * Muda_Posicao: muda a posição no arquivo, marcada apartir do início do arquivo *@param posicao é a nova posição */ bool Muda_Posicao(long posicao); /** * Escreve_Cabecalho: grava o cabeclho deste banco de dados no arquivo */ void Escreve_Cabecalho(); /** * Le_Cabecalho: lê o cabecalho do arquivo e confere se os campos do mesmo são iguais aos campos requeridos por este banco *@return -1=arquivo não existe(Cria e Escreve Cabeçalho), -2=arquivo existe, mas vazio(Cria e Escreve Cabeçalho), -3=arquivo existe mas não contém os campos requeridos pelo usuário */ int Le_Cabecalho(); /** * Le_Registro: lê registro do disco apartir da posição atual e muda a posição no mesmo. *@return o registro atual *OBS: Memória Dinâmica. Liberar após o uso! */ Registro *Le_Registro(); /** * Le_Registro_Texto: lê registro do disco apartir da posição atual e muda a posição no mesmo. *@return o registro atual no formato texto */ String Le_Registro_Texto(); /** * Estado_Le_Cabecalho: estado da última leitura de cabecalho, vide Le_Cabecalho */ int Estado_Le_Cabecalho(); /** * Insere_Indices: insere o registro nos indices. *@param reg registro a ser inserido *@param posicao posicao do registro no arquivo */ void Insere_Indices(Registro *reg, long posicao); }; #endif