All pastes #15715 Raw Edit

listas

public text v1 · immutable
#15715 ·published 2005-06-24 03:20 UTC
rendered paste body
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <malloc.h>

/*
typedef struct cvisa
{
	char nome[20];
	int bi;
	int VISA;
	struct cvisa *seg;
}*CVISA;


typedef struct svisa
{
	char nome[20];
	int bi;
	struct svisa *seg;
}*SVISA;
*/

typedef struct hotel
{
	char nome[20];
	int cod;
	int pag;
	long int seg;
	long int aptc;
}*HOT;

typedef struct area
{
	char nome[20];
	int cod;
	long int seg;
}*AREA;


int menu3()
{
        int op3;
        printf("\n-------Hoteis-------");
        printf("\n 1-Inserir Hotel");
        printf("\n 2-Eliminar Hotel");
        printf("\n 3-Lista de Hoteis");
        printf("\n 4-Voltar");

        do{
                printf("\n\n Escolha a opo: ");
                scanf("%d",&op3);
        }while(op3<1 || op3>4);
        return op3;
}


int menu2()
{
        int op2;
        printf("\n-----------------Areas-----------------");
        printf("\n 1-Inserir Nova Area de Investigao");
        printf("\n 2-Eliminar Area de Investigaao");
        printf("\n 3-Lista Areas de Investigaao");
        printf("\n 4-Menu Principal");

        do{
                printf("\n\n Escolha a opo: ");
                scanf("%d",&op2);
        }while(op2<1 || op2>4);
        return op2;
}

void ler(ele)
HOT ele;
{
	int p;
	printf("\n Nome: ");
	scanf("%s",ele->nome);
	printf("\n Codigo: ");
	scanf("%d",&ele->cod);
	printf("\n Pagamento (com VISA (1), sem VISA (2): ");
	do{
		scanf("%d",&ele->pag);
		p=ele->pag;
	}while (p<1 || p>2);
				
}

void lerarea(ele)
AREA ele;
{
	printf("\n Nome: ");
	scanf("%s",ele->nome);
	printf("\n Codigo: ");
	scanf("%d",&ele->cod);

}

long int tamanho(fp)
FILE *fp;
{
	long pos,t;
	pos=ftell(fp);
	fseek(fp,0L,SEEK_END);
	t=ftell(fp);
	fseek(fp,pos,SEEK_SET);
	return t;
}

void inserir(ele)
HOT ele;
{
	long int tamanho(),pos_ant,pos_act;
	int av=1;
	HOT cab,ant,act;
	FILE *fp;
	cab=(HOT)malloc(sizeof(struct hotel));
	ant=(HOT)malloc(sizeof(struct hotel));
	act=(HOT)malloc(sizeof(struct hotel));
	fp=fopen("hoteis.dat","r+");
	ele->seg=-1;
	if(tamanho(fp)==0)
		fwrite(ele,sizeof(struct hotel),1,fp);
	else
	{
		fread(cab,sizeof(struct hotel),1,fp);
		if(cab->cod > ele->cod)
		{
			fseek(fp,0L,SEEK_END);
			ele->seg=ftell(fp);
			fwrite(cab,sizeof(struct hotel),1,fp);
			fseek(fp,0L,SEEK_SET);
			fwrite(ele,sizeof(struct hotel),1,fp);
		}
		else
		{
			pos_ant=0;
			pos_act=cab->seg;
			*ant=*act=*cab;
			while(av)
			{
				if(pos_act==-1)
					av=0;
				else
				{
					fseek(fp,pos_act,SEEK_SET);
					fread(act,sizeof(struct hotel),1,fp);
					if(act->cod > ele->cod)
						av=0;
					else
					{
						pos_ant=pos_act;
						pos_act=act->seg;
						*ant=*act;
					}
				}
			}
			ele->seg=pos_act;
			fseek(fp,0L,SEEK_END);
			ant->seg=ftell(fp);
			fwrite(ele,sizeof(struct hotel),1,fp);
			fseek(fp,pos_ant,SEEK_SET);
			fwrite(ant,sizeof(struct hotel),1,fp);
		}
	}
	fclose(fp);
}

void inserirarea(ele)
AREA ele;
{
	long int tamanho(),pos_ant,pos_act;
	int av=1;
	AREA cab,ant,act;
	FILE *fp;
	cab=(AREA)malloc(sizeof(struct area));
	ant=(AREA)malloc(sizeof(struct area));
	act=(AREA)malloc(sizeof(struct area));
	fp=fopen("areas.dat","r+");
	ele->seg=-1;
	if(tamanho(fp)==0)
		fwrite(ele,sizeof(struct area),1,fp);
	else
	{
		fread(cab,sizeof(struct area),1,fp);
		if(cab->cod > ele->cod)
		{
			fseek(fp,0L,SEEK_END);
			ele->seg=ftell(fp);
			fwrite(cab,sizeof(struct area),1,fp);
			fseek(fp,0L,SEEK_SET);
			fwrite(ele,sizeof(struct area),1,fp);
		}
		else
		{
			pos_ant=0;
			pos_act=cab->seg;
			*ant=*act=*cab;
			while(av)
			{
				if(pos_act==-1)
					av=0;
				else
				{
					fseek(fp,pos_act,SEEK_SET);
					fread(act,sizeof(struct area),1,fp);
					if(act->cod > ele->cod)
						av=0;
					else
					{
						pos_ant=pos_act;
						pos_act=act->seg;
						*ant=*act;
					}
				}
			}
			ele->seg=pos_act;
			fseek(fp,0L,SEEK_END);
			ant->seg=ftell(fp);
			fwrite(ele,sizeof(struct area),1,fp);
			fseek(fp,pos_ant,SEEK_SET);
			fwrite(ant,sizeof(struct area),1,fp);
		}
	}
	fclose(fp);
}


HOT remover(chave)
int chave;
{
	int av=1;
	HOT rem,ant,act,cab;
	long int tamanho(),posant,posact;
	FILE *fp;
	cab=(HOT)malloc(sizeof(struct hotel));
	ant=(HOT)malloc(sizeof(struct hotel));	
	act=(HOT)malloc(sizeof(struct hotel));
	fp=fopen("hoteis.dat","r+");
	if(tamanho(fp)==0)
		rem=NULL;
	else
	{
		fread(cab,sizeof(struct hotel),1,fp);
		if(cab->cod==chave)
		{
			rem=cab;
			if(cab->seg!=-1)
			{
				fseek(fp,cab->seg,SEEK_SET);
				fread(act,sizeof(struct hotel),1,fp);
				fseek(fp,0L,SEEK_SET);
				fwrite(act,sizeof(struct hotel),1,fp);
			}
			else
			{
				fclose(fp);
				fp=fopen("hoteis.dat","w");
			}
		}
		else
		{
			posant=0;
			posact=cab->seg;
			*ant=*act=*cab;
			while(av)
			{
				if(posact==-1)
					av=0;
				else
				{
					fseek(fp,posact,SEEK_SET);
					fread(act,sizeof(struct hotel),1,fp);
					if(act->cod==chave)
						av=0;
					else
					{
						posant=posact;
						posact=act->seg;
						*ant=*act;
					}
				}
				if(posact!=-1)
				{
					rem=act;
					ant->seg=act->seg;
					fseek(fp,posant,SEEK_SET);
					fwrite(ant,sizeof(struct hotel),1,fp);
				}
				else
					rem=NULL;
			}
		}
	}
	fclose(fp);
	return(rem);
}

AREA removerarea(chave)
int chave;
{
	int av=1;
	AREA rem,ant,act,cab;
	long int tamanho(),posant,posact;
	FILE *fp;
	cab=(AREA)malloc(sizeof(struct area));
	ant=(AREA)malloc(sizeof(struct area));	
	act=(AREA)malloc(sizeof(struct area));
	fp=fopen("areas.dat","r+");
	if(tamanho(fp)==0)
		rem=NULL;
	else
	{
		fread(cab,sizeof(struct area),1,fp);
		if(cab->cod==chave)
		{
			rem=cab;
			if(cab->seg!=-1)
			{
				fseek(fp,cab->seg,SEEK_SET);
				fread(act,sizeof(struct area),1,fp);
				fseek(fp,0L,SEEK_SET);
				fwrite(act,sizeof(struct area),1,fp);
			}
			else
			{
				fclose(fp);
				fp=fopen("areas.dat","w");
			}
		}
		else
		{
			posant=0;
			posact=cab->seg;
			*ant=*act=*cab;
			while(av)
			{
				if(posact==-1)
					av=0;
				else
				{
					fseek(fp,posact,SEEK_SET);
					fread(act,sizeof(struct area),1,fp);
					if(act->cod==chave)
						av=0;
					else
					{
						posant=posact;
						posact=act->seg;
						*ant=*act;
					}
				}
				if(posact!=-1)
				{
					rem=act;
					ant->seg=act->seg;
					fseek(fp,posant,SEEK_SET);
					fwrite(ant,sizeof(struct area),1,fp);
				}
				else
					rem=NULL;
			}
		}
	}
	fclose(fp);
	return(rem);
}

void mostrar()
{
	int i=0;
	HOT ele;
	FILE *fp;
	long int pos;
	fp=fopen("hoteis.dat","a+");
	if(tamanho(fp)==0)
		printf("\n Lista vazia!!");
	else
	{
		ele=(HOT)malloc(sizeof(struct hotel));
		ele->seg=0;
		while(ele->seg!=-1)
		{
			i++;
			fseek(fp,(long int)ele->seg,SEEK_SET);
			pos=ftell(fp);
			fread(ele,sizeof(struct hotel),1,fp);
			printf("\n %3d Elemento (guardado apartir do byte %d)",i,pos);
			printf("\n Nome: %s \n Codigo: %d \n Pagamento: %d", ele->nome,ele->cod,ele->pag);
		}
	}
	fclose(fp);
}

void mostrararea()
{
	int i=0;
	AREA ele;
	FILE *fp;
	long int pos;
	fp=fopen("areas.dat","a+");
	if(tamanho(fp)==0)
		printf("\n Lista vazia!!");
	else
	{
		ele=(AREA)malloc(sizeof(struct area));
		ele->seg=0;
		while(ele->seg!=-1)
		{
			i++;
			fseek(fp,(long int)ele->seg,SEEK_SET);
			pos=ftell(fp);
			fread(ele,sizeof(struct area),1,fp);
			printf("\n %3d Elemento (guardado apartir do byte %d)",i,pos);
			printf("\n Nome: %s \n Codigo: %d", ele->nome,ele->cod);
		}
	}
	fclose(fp);
}
	
int main2()
{
	void inserirarea(),lerarea(),mostrararea();
	int menu2(),op,codigo;
	AREA removerarea(),el;
	FILE *fp;
	
	fp=fopen("areas.dat","a+");
	fclose(fp);
	do
	{
		op=menu2();
		switch(op)
		{
			case 1:	el=(AREA)malloc(sizeof(struct area));
				lerarea(el);
				inserirarea(el);
				break;
			case 2: printf("\n Introduza o codigo da area a remover: ");
				scanf("%d",&codigo);
				el=removerarea(codigo);
				if(el)
				{
					printf("\n Removeu a Area!");
					printf("\n Nome: %s \n Codigo: %d",el->nome,&el->cod);
					free(el);
				}
				break;
			case 3: mostrararea();
				break;
			case 4: return(1);
		}
	}while(1);
	return 0;
			
}

int main3()
{
	void inserir(),ler(),mostrar();
	int menu3(),op,codigo;
	HOT remover(),el;
	FILE *fp;
	
	fp=fopen("hoteis.dat","a+");
	fclose(fp);
	do
	{
		op=menu3();
		switch(op)
		{
			case 1:	el=(HOT)malloc(sizeof(struct hotel));
				ler(el);
				inserir(el);
				break;
			case 2: printf("\n Introduza o codigo do hotel a remover: ");
				scanf("%d",&codigo);
				el=remover(codigo);
				if(el)
				{
					printf("\n Removeu o Hotel!");
					printf("\n Nome: %s \n Codigo: %d \n Pagamento: %s\n",el->nome,&el->cod,el->pag);
					free(el);
				}
				break;
			case 3: mostrar();
				break;
			case 4: return(1);
		}
	}while(1);
	return 0;
			
}