#include "aves.h"
#include "ecran.h"
using namespace std;
Aves vec_aves[MAX_AVES]; // vector a conter todas as aves em memória...
int num_aves = 0; // numero de aves em memória...
void GOTOXY ( WORD y, WORD x);
void cursorOn(void);
void cursorOff(void);
void cor(char cores);
void caixa(int v_sup, int v_inf, int tamanho);
void limpa_caixa(int v_sup, int v_inf, int tamanho);
void cabecalho(void);
Aves::Aves(void) //Construtor
{
}
Aves::~Aves(void) //Destrutor
{
}
// --------------------------------- Definição da função print -----------------------------------
void Aves::print(int a, int b) // vai imprimir todas as informações da ave em causa...
{
int x = 0;
cursorOff();
for (x=0;x<50;x++)
{
if (ave_anilha[x] == '*')
{
ave_anilha[x] = ' ';
}
}
for (x=0;x<50;x++)
{
if (ave_nome_criador[x] == '*')
{
ave_nome_criador[x] = ' ';
}
}
for (x=0;x<50;x++)
{
if (ave_anilha_pai[x] == '*')
{
ave_anilha_pai[x] = ' ';
}
}
for (x=0;x<50;x++)
{
if (ave_anilha_mae[x] == '*')
{
ave_anilha_mae[x] = ' ';
}
}
GOTOXY(a,b);
cout << "ID da Ave: " << id_ave;
GOTOXY(a+2,b);
cout << "Anilha: " << ave_anilha;
GOTOXY(a+4,b);
cout << "Nome do Criador: " << ave_nome_criador;
GOTOXY(a+6,b);
cout << "Anilha do Pai: " << ave_anilha_pai;
GOTOXY(a+8,b);
cout << "Anilha da Mãe: " << ave_anilha_mae;
GOTOXY(a+10,b);
cout << "Nascido cá: " << ave_nasc;
}
// ----------------------------- Definição da função insereAve-------------------------------
void insereAve() // vai inserir nova ave
{
int x=0, i, id_a, id_p, id_m ;
int comp_ave=0;
int posicao = -1, resposta;
bool ave_nasc;
char ave_anilha[10], ave_anilha_pai[10], ave_anilha_mae[10], ave_nome_criador[50], auxid_ave[10], auxid_ave_p[10], auxid_ave_m[10];
do{
cabecalho();
GOTOXY (6,24);
cor(verde);
cout << "INTRODUCAO DOS DADOS DA AVE";
if(num_aves >= MAX_AVES) // verificar se ainda cabem mais aves no vector...
{
cor(branco | azullf);
caixa(20,25,20);
GOTOXY(21,22);
cout << "NAO E POSSIVEL INSERIR MAIS AVES";
GOTOXY(23,29);
cout << "Pressione uma tecla...";
_getch();
return; //se não couberem saimos da função...
}
GOTOXY(10,10);
cout << "Anilha da Ave: ";
GOTOXY(12,10);
cout << "Nome do Criador: ";
GOTOXY(14,10);
cout << "Anilha do Pai: ";
GOTOXY(16,10);
cout << "Anilha da Mãe: ";
GOTOXY(18,10);
cout << "Nascido cá: ";
do
{
id_a=0; // ciclo de validação da anilha
cursorOn();
fflush(stdin);
GOTOXY(10,25);
cor(verde);
cin.getline (auxid_ave,sizeof(auxid_ave));
if(auxid_ave[0]=='\0') // caso não seja introduzido nada...
id_a=-1;
if (strlen( auxid_ave )!=10) // se o tamanho for diferente de 10...
id_a=-1;
if (id_a<0) // mensagem de erro
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal introduzida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
_getch();
limpa_caixa(25,30,17);
GOTOXY(10,25); // vai apagar o que foi introduzido
cor(verde);
_strset_s(auxid_ave , ' ');
printf( "%s", auxid_ave);
}
}while (id_a<0);
resposta = procuraAve(ave_anilha); // para ver se já existe
if(resposta != -1)
{
cor(branco | azullf);
caixa(22,27,17);
GOTOXY(23,29);
cout << "Ave ja registada!!";
GOTOXY(25,29);
cout << "Pressione uma tecla...";
cor(azulf | brancol);
caixa(30,43,25);
vec_aves[resposta].print(32,17); // mostra os dados da ave
cor(amarelo);
_getch();
return; // e como não vamos fazer mais nada sai da função...
}
// caso contrario, caso n exista, continuamos...
do
{
id_m=0; // ciclo de validação da anilha da mae
cursorOn();
fflush(stdin);
GOTOXY(10,25);
cor(verde);
cin.getline (auxid_ave_m,sizeof(auxid_ave_m));
if(auxid_ave_m[0]=='\0') // caso não seja introduzido nada...
id_m=-1;
if (strlen( auxid_ave_m )!=10) // se o tamanho for diferente de 10...
id_m=-1;
if (id_m<0) // mensagem de erro
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal introduzida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
_getch();
limpa_caixa(25,30,17);
GOTOXY(10,25); // vai apagar o que foi introduzido
cor(verde);
_strset_s(auxid_ave_m , ' ');
printf( "%s", auxid_ave_m);
}
} while (id_m<0);
return; // e como não vamos fazer mais nada sai da função...
do
{
id_p=0; // ciclo de validação da anilha do pai
cursorOn();
fflush(stdin);
GOTOXY(10,25);
cor(verde);
cin.getline (auxid_ave_p,sizeof(auxid_ave_p));
if(auxid_ave_p[0]=='\0') // caso não seja introduzido nada...
id_p=-1;
if (strlen( auxid_ave_p )!=10) // se o tamanho for diferente de 10...
id_p=-1;
if (id_p<0) // mensagem de erro
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal introduzida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
_getch();
limpa_caixa(25,30,17);
GOTOXY(10,25); // vai apagar o que foi introduzido
cor(verde);
_strset_s(auxid_ave_p , ' ');
printf( "%s", auxid_ave_p);
}
}
while (id_p<0);
return; // e como não vamos fazer mais nada sai da função...
}
// Vai carregar a 1ª posição livre no vector (sempre igual ao numero de aves)
vec_aves[num_aves].id_ave = num_aves ;
vec_aves[num_aves].ave_anilha = ave_anilha ;
vec_aves[num_aves].ave_nome_criador = ave_nome_criador;
vec_aves[num_aves].ave_anilha_pai = ave_anilha_pai;
vec_aves[num_aves].ave_anilha_mae = ave_anilha_mae;
vec_aves[num_aves].ave_nasc = ave_nasc;
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,26);
cout << "Ave inserida com sucesso";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
num_aves ++; // mais um!!!
_getch();
GOTOXY(34,19);
cor(amarelo);
cout << "PRESSIONE \'P\' PARA INTRODUZIR MAIS AVES: ";
cursorOn();
cor(verde);
resposta=getch();
while (resposta== 'p' || resposta== 'P');
cor(amarelo);
return;
}
// ----------------------------- Definição da função alteraAve -------------------------------
void alteraAve()
{
int id_ave, x=0, i, id_a, id_p, id_m, nom;
int comp_ave=0;
int posicao = -1, resposta;
char ave_nasc, ave_anilha[10], ave_anilha_pai[10], ave_anilha_mae[10], ave_nome_criador[50], auxid_ave[10], auxid_ave_p[10], auxid_ave_m[10];
cabecalho();
GOTOXY (6,25);
cor(verde);
cout << "ALTERACAO DOS DADOS DA AVE";
if(num_aves<1)
{
cor(branco | azullf);
caixa(20,25,19);
GOTOXY(21,25);
cout << "NAO EXISTEM AVES A ALTERAR";
GOTOXY(23,29);
cout << "Pressione uma tecla...";
getch();
cor(amarelo);
return;
}
GOTOXY(10,10);
cor(amarelo);
cout << "Insira a anilha da ave alterar: ";
do {
id_a=0; // ciclo de validação da anilha
cursorOn();
fflush(stdin);
GOTOXY(10,25);
cor(verde);
cin.getline (auxid_ave,sizeof(auxid_ave));
if(auxid_ave[0]=='\0') // caso não seja introduzido nada...
id_a=-1;
if (strlen( auxid_ave )!=10) // se o tamanho for diferente de 10...
id_a=-1;
if (id_a<0) // mensagem de erro
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal introduzida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
getch();
limpa_caixa(25,30,17);
GOTOXY(10,25); // vai apagar o que foi introduzido
cor(verde);
_strset(auxid_ave , ' ');
printf( "%s", auxid_ave);
}
}
while (id_a<0);
i = procuraAve(ave_anilha);
if( i == -1)
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,29);
cout << "AVE INEXISTENTE!!!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
getch();
cor(amarelo);
return;
}
cor(azulf | brancol); // vai mostrar os dados antigos
caixa(13,28,25);
GOTOXY(14,33);
cout << "DADOS ANTIGOS";
GOTOXY(15,33);
cout << "==============";
vec_aves[i].print(17,17); // mostra a ave...
GOTOXY(30,27);
cor(verde);
cout << "INTRODUZA OS NOVOS DADOS";
cor(amarelo);
GOTOXY(31,10);
cout << "____________________________________________________________";
GOTOXY(34,10);
cout << "Anilha da Ave: ";
GOTOXY(36,10);
cout << "Nome do Criador: ";
GOTOXY(38,10);
cout << "Anilha do Pai: ";
GOTOXY(40,10);
cout << "Anilha da Mãe: ";
GOTOXY(42,10);
cout << "Nascido cá: ";
do {id_a=0; // ciclo de validação da anilha
cursorOn();
fflush(stdin);
GOTOXY(10,25);
cor(verde);
cin.getline (auxid_ave,sizeof(auxid_ave));
if(auxid_ave[0]=='\0') // caso não seja introduzido nada...
id_a=-1;
if (strlen( auxid_ave )!=10) // se o tamanho for diferente de 10...
id_a=-1;
if (id_a<0) // mensagem de erro
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal introduzida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
getch();
limpa_caixa(25,30,17);
GOTOXY(10,25); // vai apagar o que foi introduzido
cor(verde);
_strset(auxid_ave , ' ');
printf( "%s", auxid_ave);
}
}
while (id_a<0);
do {id_p=0; // ciclo de validação da anilha do pai
cursorOn();
fflush(stdin);
GOTOXY(10,25);
cor(verde);
cin.getline (auxid_ave_p,sizeof(auxid_ave_p));
if(auxid_ave_p[0]=='\0') // caso não seja introduzido nada...
id_p=-1;
if (strlen( auxid_ave_p )!=10) // se o tamanho for diferente de 10...
id_p=-1;
if (id_p<0) // mensagem de erro
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal introduzida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
getch();
limpa_caixa(25,30,17);
GOTOXY(10,25); // vai apagar o que foi introduzido
cor(verde);
_strset(auxid_ave_p , ' ');
printf( "%s", auxid_ave_p);
}
}while (id_p<0);
return; // e como não vamos fazer mais nada sai da função...
do {
id_m=0; // ciclo de validação da anilha da mae
cursorOn();
fflush(stdin);
GOTOXY(10,25);
cor(verde);
cin.getline (auxid_ave_m,sizeof(auxid_ave_m));
if(auxid_ave_m[0]=='\0') // caso não seja introduzido nada...
id_m=-1;
if (strlen( auxid_ave_m )!=10) // se o tamanho for diferente de 10...
id_m=-1;
if (id_m<0) // mensagem de erro
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal introduzida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
getch();
limpa_caixa(25,30,17);
GOTOXY(10,25); // vai apagar o que foi introduzido
cor(verde);
_strset(auxid_ave_m , ' ');
printf( "%s", auxid_ave_m);
}
}
while (id_m<0);
vec_aves[num_aves].ave_anilha = ave_anilha ;
vec_aves[num_aves].ave_nome_criador = ave_nome_criador;
vec_aves[num_aves].ave_anilha_pai = ave_anilha_pai;
vec_aves[num_aves].ave_anilha_mae = ave_anilha_mae;
vec_aves[num_aves].ave_nasc = ave_nasc;
cor(branco | azullf);
caixa(45,50,17);
GOTOXY(46,26);
cout << "AVE ALTERADO COM SUCESSO";
GOTOXY(48,29);
cout << "Pressione uma tecla...";
getch();
cor(amarelo);
return;
}
// ----------------------------- Definição da função eliminaAve -------------------------------
void eliminaAve() // vai eliminar uma ave existente
{
int i, posicao=-1, id_ave, id_a, j, resposta=0;
char auxid_ave[10];
cabecalho();
GOTOXY (6,27);
cor(verde);
cout << "ELIMINAR AVE";
GOTOXY(10,10);
cor(amarelo);
cout << "Insira a anilha da ave a eliminar: ";
do {id_a=0;
cursorOn();
fflush(stdin);
GOTOXY(10,46);
cor(verde);
cin.getline (auxid_ave,sizeof(auxid_ave));
if(auxid_ave[0]=='\0') // caso não seja introduzido nada...
id_a=-1;
if (strlen( auxid_ave)!=10) // se o tamanho for diferente de 10...
id_a=-1;
if (id_a<0)
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,31);
cout << "Anilha mal inserida!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
getch();
limpa_caixa(25,30,17);
GOTOXY(10,46); // vai apagar o que foi introduzido
cor(verde);
_strset(auxid_ave , ' ');
printf( "%s", auxid_ave);
}
}while (id_a<0);
posicao = procuraAve(auxid_ave);
if( posicao == -1)
{
cor(branco | azullf);
caixa(25,30,17);
GOTOXY(26,29);
cout << "Anilha não existente!!!";
GOTOXY(28,29);
cout << "Pressione uma tecla...";
getch();
cor(amarelo);
return;
}
else
{
cor(azulf | brancol);
caixa(15,28,25);
vec_aves[posicao].print(17,17);
GOTOXY(31,25);
cor(amarelo);
cout << "PRESSIONE \'S\' PARA ELIMINAR: ";
cursorOn();
cor(verde);
resposta=getche();
switch (resposta) // pede confirmação para apagar
{
case 's':
case 'S': i = posicao;
for(i = posicao; i < (num_aves -1); i++)
{
vec_aves[i] = vec_aves[i+1];
}
num_aves --;
cor(branco | azullf);
caixa(35,40,17);
GOTOXY(36,30);
cout << "Ave eliminada!!!";
GOTOXY(38,29);
cout << "Pressione uma tecla...";
cor(amarelo);
getch();
default:return;
}
return;
}
}
// ----------------------------- Definição da função procuraAve ------------------------------
int procuraAve(string ave_anilha) // vai devolver o indice da posição da anilha no vector
{
int i = 0;
for(i = 0; i < num_aves; i++)
{
if (vec_aves[i].ave_anilha == ave_anilha)
return i;
}
return -1; //caso a ave não exista devolve -1
}
// ----------------------------- Definição da função carregaAve -----------------------------
void carregaAve(void) // carrega todas as aves do ficheiro
{
ifstream entrada(FILE_AVES);
if (!entrada)
{
cout << "\n\n\t\tERRO NA ABERTURA DO FICHEIRO DE AVES!!!";
cout << "\n\n\nPressione uma tecla.";
getch();
return;
}
entrada >> num_aves;
int i=0;
for (i=0; i<num_aves; i++)
{
entrada >> vec_aves[i].ave_anilha;
entrada >> vec_aves[i].ave_nome_criador;
entrada >> vec_aves[i].ave_anilha_pai;
entrada >> vec_aves[i].ave_anilha_mae;
entrada >> vec_aves[i].ave_nasc;
}
entrada.close();
return;
}
// ----------------------------- Definição da função descarregaAve --------------------------
void descarregaAve(void) // descarrega todos as aves para o ficheiro
{
ofstream saida(FILE_AVES);
if(!saida){
cout << "\n\n\t\tERRO NA ABERTURA DO FICHEIRO DAS AVES!!!";
cout << "\n\n\nPressione uma tecla.";
getch();
return;
}
saida << num_aves << endl;
int i = 0;
for(i = 0; i < num_aves; i++)
{
saida << "\n"; // linha em branco...
saida << vec_aves[i].ave_anilha << "\n";
saida << vec_aves[i].ave_nome_criador << "\n";
saida << vec_aves[i].ave_anilha_pai << "\n";
saida << vec_aves[i].ave_anilha_mae << "\n";
saida << vec_aves[i].ave_nasc << "\n";
}
saida.close();
return;
}
// ----------------------------- Definição da função listaAve --------------------------------
void listaAve(void)
{
int i, x=0, posicao=0, a=13, altura;
cursorOff();
cabecalho();
GOTOXY (6,30);
cor(verde);
cout << "LISTAGEM DAS AVES";
if (num_aves>0)
{
altura=2*num_aves+1;
cor(azulf | brancol);
caixa(10,12+altura,32);
GOTOXY(11,16);
cout << "Anilha";
GOTOXY(11,47);
cout << "Criador";
GOTOXY(11,64);
cout << "Nascida cá";
for (i=0;i<num_aves;i++)
{
for (x=0;x<50;x++) //vai trocar os asteriscos por espaços em branco
{
if (vec_aves[posicao].ave_anilha[x] == '*')
{
vec_aves[posicao].ave_anilha[x] = ' ';
}
}
GOTOXY(a,10);
cout << vec_aves[posicao].ave_anilha;
GOTOXY(a,50);
printf("%5.2f",vec_aves[posicao].ave_nome_criador);
GOTOXY(a,61);
cout << vec_aves[posicao].ave_nasc;
for (x=0;x<50;x++)
{
if (vec_aves[posicao].ave_nome_criador[x] == ' ')
{
vec_aves[posicao].ave_nome_criador[x] = '*';
}
}
a=a+2;
posicao++;
}
cor(branco | azullf);
caixa(20+altura,23+altura,17);
GOTOXY(21+altura,29);
cout << "Pressione uma tecla...";
getch();
cor(amarelo);
}
else
{
cor(branco | azullf);
caixa(20,25,19);
GOTOXY(21,24);
cout << "NAO EXISTEM AINDA AVES PARA LISTAR";
GOTOXY(23,29);
cout << "Pressione uma tecla...";
getch();
cor(amarelo);
}
}
// ----------------------------- Definição da função mostraAve --------------------------------
void mostraAve(int a, int b)
{
int i, x=0, posicao=0;
cursorOff();
if (num_aves>0)
{
for (i=0;i<num_aves;i++)
{
for (x=0;x<50;x++) //vai trocar os asteriscos por espaços em branco
{
if (vec_aves[posicao].ave_anilha[x] == '*')
{
vec_aves[posicao].ave_anilha[x] = ' ';
}
}
GOTOXY(a,b);
cout << vec_aves[posicao].ave_anilha;
GOTOXY(a,b+12);
cout << vec_aves[posicao].ave_nome_criador;
for (x=0;x<50;x++)
{
if (vec_aves[posicao].ave_nome_criador[x] == ' ')
{
vec_aves[posicao].ave_nome_criador[x] = '*';
}
}
a=a+2;
posicao++;
}
}
else
{
cor(branco | azullf);
caixa(20,25,19);
GOTOXY(21,24);
cout << "NAO EXISTEM AINDA AVES PARA LISTAR";
GOTOXY(23,29);
cout << "Pressione uma tecla...";
getch();
cor(amarelo);
return;
}
}