#include #include #include #include #include typedef struct fich { char nome[50]; int bi; char morada[50]; int telefone[8]; int area_inv; long int VISA; int hotel; int pagamento; int documentos; struct fich *esq,*dir; }*FICHA; //declaraao das estruturas das listas typedef struct area { char nome[20]; int cod; long int seg; }*AREA; typedef struct hotel { char nome[20]; int cod; char pag; long int seg; long int aptc; }*HOT; int menu4() { int op4; printf("\n-------Inscries-------"); printf("\n 1-Nova inscrio"); printf("\n 2-Pagar inscrio"); printf("\n 3-Terminar inscries"); printf("\n 4-Sair do programa"); do{ printf("\n\n Escolha a opo: "); scanf("%d",&op4); }while(op4<1 || op4>4); return op4; } int menu5() { int op5; printf("\n--------Conferncia--------"); printf("\n 1-Levantar documentao"); printf("\n 2-Terminar conferncia"); printf("\n 3-Sair do programa"); do{ printf("\n\n Escolha a opo: "); scanf("%d",&op5); }while(op5<1 || op5>3); return op5; } void inseri(ele,raiz) FICHA ele,*raiz; { void insere(); ele->esq=NULL; ele->dir=NULL; if(*raiz==NULL) *raiz=ele; else insere(ele,*raiz); } void insere(ele,raiz) FICHA ele,raiz; { if((ele->bi < raiz->bi) && !(raiz->esq)) raiz->esq=ele; else if((ele->bi > raiz->bi) && !(raiz->dir)) raiz->dir=ele; else if(ele->bi == raiz->bi) { printf("\nJa existe uma inscrio com esse numero de BI\n"); return; } else if(ele->bi < raiz->bi) insere(ele,raiz->esq); else insere(ele,raiz->dir); } void mostra(el) FICHA el; { if(el!=NULL) { mostra(el->esq); printf("\n Nome: %s \n BI: %d \n Morada: %s \n Telefone: %d \n Area de Investigacao: %d \n VISA: %d \n Hotel: %d \n Pagamento: %d \n Documentos: %d \n",el->nome,el->bi,el->morada,el->telefone,el->area_inv,el->VISA,el->hotel,el->pagamento,el->documentos); mostra(el->dir); } } long int tamanhoa(fp) FILE *fp; { long pos,t; pos=ftell(fp); fseek(fp,0L,SEEK_END); t=ftell(fp); fseek(fp,pos,SEEK_SET); return t; } int le(ele) FICHA ele; { int p; FILE *fp,*fh,*fi; AREA el; HOT elem; FICHA elf,raiz; long int seg; fp=fopen("areas.dat","r"); if(tamanhoa(fp)==0) { printf("\n Tem de definir as areas primeiro!!"); fclose(fp); return 0; } else { fclose(fp); fh=fopen("hoteis.dat","a"); if(!fh) { printf("\n Tem de definir os hoteis primeiro!!"); fclose(fh); return 0; } else { fclose(fh); printf("\n Nome: "); scanf("%s",ele->nome); printf("\n BI: "); scanf("%d",&ele->bi); printf("\n Morada: "); scanf("%s",ele->morada); printf("\n Telefone: "); scanf("%d",&ele->telefone); printf("\n Escolha area"); fp=fopen("areas.dat","r"); el=(AREA)malloc(sizeof(struct area)); el->seg=0; printf("\n------------------------------------"); while(el->seg!=-1) { fseek(fp,(long int)el->seg,SEEK_SET); seg=ftell(fp); fread(el,sizeof(struct area),1,fp); printf("\n Nome: %s Codigo: %d \n",el->nome,el->cod); printf("\n Escolha um destes codigos\n"); } printf("\n------------------------------------"); fclose(fp); printf("\n Area de Investigao: "); scanf("%d",&ele->area_inv); printf("\n Escolha a forma de pagamento:"); printf("\n VISA 1 ou vale postal 2"); do{ scanf("%d",&p); }while (p<1 || p>2); switch(p) { case 1: ele->pagamento=1; printf("\n Insira o numero do VISA:"); scanf("%d",&ele->VISA); break; case 2: ele->pagamento=0; printf("\n Ficamos a aguardar o vale postal!!"); break; } fi=fopen("hoteis.dat","r+"); elem=(HOT)malloc(sizeof (struct hotel)); elem->seg=0; while(elem->seg!=-1) { fseek(fi,(long int)elem->seg,SEEK_SET); seg=ftell(fp); fread(elem,sizeof (struct hotel),1,fi); printf("\n--------------------Hoteis--------------------"); if(p == elem->pag) { printf("\n Nome: %s Codigo: %d \n",elem->nome,elem->cod); printf("\n --------------------------------------------- "); printf("\n Escolha um destes codigos\n"); //printf("\n Hotel: "); scanf("%d",p); printf("algo"); } if(elem->seg!=-1) fseek(fi,elem->seg,SEEK_SET); else break; } fclose(fi); ele->documentos=0; printf("algo"); } } inseri(elf,&raiz); mostra(raiz); } void pagar(int nbi,FICHA raiz) { if(raiz->bi==nbi) { printf("\n Pagamento efectuado da inscriao com o nome: %s",raiz->nome); raiz->pagamento=1; } if(raiz->esq) pagar(nbi,raiz->esq); if(raiz->dir) pagar(nbi,raiz->dir); } void document(int nbi,FICHA raiz) { if(raiz->bi==nbi) { if(raiz->pagamento==0) printf("\n Pagamento nao efectuado,nao pode levantar documentaao"); else if(raiz->pagamento==1) { if(raiz->documentos==0) { raiz->documentos=1; printf("\n Pode efectuar entrega de documentos\n"); } else printf("\n Documentaao ja entregue!!\n"); } } if(raiz->esq) document(nbi,raiz->esq); if(raiz->dir) document(nbi,raiz->dir); } void grava_fich(FICHA cab) { FILE *fp; if(!cab) return; fp=fopen("fichas.dat","a+"); fwrite(cab,sizeof(struct fich),1,fp); fclose(fp); if(cab->esq) grava_fich(cab->esq); if(cab->dir) grava_fich(cab->dir); } void carrega_fich(FICHA *raiz) { FILE *fp; FICHA ele; fp=fopen("fichas.dat","r"); while(1){ ele=(FICHA) malloc (sizeof(struct fich)); if(fread(ele,sizeof(struct fich),1,fp)) inseri(ele,raiz); else break; } fclose(fp); } void mostrar_caloteiros(el) FICHA el; { void mostra(); if(el!=NULL) { mostrar_caloteiros(el->esq); if(el->pagamento==0) mostra(el); else printf("\n Nao ha caloteiros!"); mostrar_caloteiros(el->dir); } } void define() { FILE *fp; char conf[20]; printf("\n Insira o nome da conferncia:"); scanf("%s",conf); fp=fopen("nome.dat","w+"); if(fp==NULL) { printf("\n Impossivel abrir o ficheiro - nome.dat"); exit(1); } fwrite(&conf,sizeof(char)*20,1,fp); printf("\nFicheiro aberto com sucesso!\n"); fclose(fp); } int main5() { void document(),carrega_fich(),grava_fich(),mostrar_caloteiros(); int menu5(),op,nbi; FICHA raiz; FILE *fp; raiz=NULL; fp=fopen("fichas.dat","r"); if(fp) { fclose(fp); carrega_fich(&raiz); } do { op=menu5(); switch(op) { case 1: printf("\n Introduza o numero de BI da inscricao a alterar: "); scanf("%d",&nbi); document(nbi,raiz); break; case 2: mostrar_caloteiros(raiz); break; case 3: unlink("fichas.dat"); grava_fich(raiz); return; } } while(1); return 0; } int main4() { void inseri(),insere(),carrega_fich(),grava_fich(),pagar(),mostra(); int menu4(),op,nbi,le(); FICHA raiz,el; FILE *fp; raiz=NULL; fp=fopen("fichas.dat","r"); if(fp) { fclose(fp); carrega_fich(&raiz); } do { op=menu4(); switch(op) { case 1: el=(FICHA)malloc(sizeof(struct fich)); le(el); break; case 2: printf("\n Introduza o numero de BI da inscricao a alterar: "); scanf("%d",&nbi); pagar(nbi,raiz); break; case 3: mostra(raiz); printf("\n As inscries esto terminadas!!!\n"); main5(); break; case 4: unlink("fichas.dat"); grava_fich(raiz); return; } }while(1); return 0; }