All pastes #15714 Raw Edit

arvores

public text v1 · immutable
#15714 ·published 2005-06-24 03:16 UTC
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;
			
}