rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <malloc.h>
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;
}