Programação Orientada à Procedimentos II Programação Orientada à Procedimentos I Processamento Paralelo Lógica de Programação Introdução à Computação Informática Básica

 

 

Informática Básica
Introdução à Computação
Lógica de Programação
Programação Orientada à Procedimentos I
Programação Orientada à Procedimentos II

Processamento Paralelo


Uma Possível Solução ...





//Bianca Del Duca
// 2o. Engenharia da Computacao A - Noturno

include "conio.h"
#include "stdio.h"
#include "ctype.h"
#include "dir.h"
#include "stdlib.h"
# define TAM 300

void cadastrar();
void alterar();
void imprimir();


struct banco
{
	int matricula;
	char nome[30];
	char tel[10];
};
struct banco dados[TAM];
struct banco dado;
int n,matr;

FILE *pt;
FILE *pt1;

void limpa( void )
{
	int i,j,x;
	for(i=0;i<TAM;i++)
	{
		for(j=0;j<30;j++)
			dados[i].nome[j]=NULL;

		dados[i].matricula=0;

		for(x=0;x<10;x++)
			dados[i].tel[x]=NULL;
	}
}

void main()
{
	int i;
	char op,resp,op1,resp1;
	clrscr();
	limpa();

	printf("Deseja come‡ar novo arquivo? (S/N): ");
	resp=getche();
	if(toupper(resp)=='S')
	{
		if((pt1=fopen("testen.bin","wb"))==NULL)
		{
			printf("Erro na abertura do arquivo");
			getch();
			exit(1);
		}
		else
		{
			n=0;
			fwrite(&n,sizeof(n),1,pt1);
			fclose(pt1);
		}
	}

	if((pt1=fopen("testen.bin","rb"))==NULL)
	{
		printf("Erro na abertura do arquivo");
		getch();
		exit(1);
	}
	else
		fread(&n,sizeof(n),1,pt1);
	fclose(pt1);
 //	printf("%d",n);
 //	getch();

	do
	{
		clrscr();
		for(i=25;i<=55;i++)
		{
			gotoxy(i,10);printf("*");
			gotoxy(i,17);printf("*");
		}
		for(i=11;i<=16;i++)
		{
			gotoxy(25,i);printf("*");
			gotoxy(55,i);printf("*");
		}
		gotoxy(33,4);printf("Menu Principal");
		gotoxy(29,12);printf("1- Incluir registro");
		gotoxy(29,13);printf("2- Alterar registro");
		gotoxy(29,14);printf("3- Imprimir (tela)");
		gotoxy(29,15);printf("ESC- Encerrar programa");
		gotoxy(31,19);printf("Escolha uma opcao: ");
		fflush(stdin);
		op=getch();
		switch(op)
		{
			case '1':
			{
				cadastrar();
				getch();
				break;
			}
			case '2':
			{
				alterar();
				getch();
				break;
			}
			case '3':
			{
				imprimir();
				getch();
				break;
			}
			case 27:
			{
				clrscr();
				printf("Deseja apagar o arquivo? (S/N):");
				scanf("%c",&resp1);
				if(toupper(resp1)=='S')
				{
					  if (remove("teste.dat") == 0)
					  {
						printf("Arquivo removido!");
						getch();
					  }
					  else
					  {
						perror("remove");
						getch();
					  }
				}
				break;
			}
			default:
			{
				printf("Digite somente opcoes validas!");
				getch();
			}
		 };
	}while(op!=27);
}

void cadastrar()
{
	clrscr();
	char op;

	if(n==TAM)
	{
		printf("Banco de dados cheio");
		getch();
		exit(1);
	}
	do
	{
		matr=n+1;
		dado.matricula=matr;
		printf("\nMatricula: %d",dado.matricula);
		printf("\nDigite nome: ");
		gets(dado.nome);
		printf("Digite telefone: ");
		gets(dado.tel);
		printf("Confirma dados? (S/N): ");
		op=getche();
		printf("\n");
	}while(toupper(op)!='S');

	if((pt=fopen("teste.dat","ab"))==NULL)
	{
		printf("\nErro na abertura do arquivo");
		getch();
		exit(1);
	}
	else
		fwrite(&dado,sizeof(dado),1,pt);
	fclose(pt);

	n++;
	printf("\n\nRegistro %d gravado",n);

	if((pt1=fopen("testen.bin","wb"))==NULL)
	{
		printf("\nErro na abertura do arquivo");
		getch();
		exit(1);
	}
	else
		fwrite(&n,sizeof(n),1,pt1);
	fclose(pt1);
}

void imprimir()
{
	clrscr();
	int i,numreg;
	char op;

	if(n==0)
		printf("Banco de dados vazio");
	else
	{
		do
		{
			printf("Deseja visualizar todos os registros ou somente um?(T/S): ");
			fflush(stdin);
			op=getch();
			clrscr();
			if(toupper(op)=='T')
			{
				if((pt=fopen("teste.dat","rb"))==NULL)
				{
					printf("\nErro na abertura do arquivo");
					getch();
					exit(1);
				}
				else
				   i=0;
				   while(fread(&dados[i],sizeof(dados[i]),1,pt)==1)
					 i++;
				    //	fread(&dados,sizeof(dados),1,pt);

				for(i=0;i<n;i++)
				{
					printf("\nMatricula: %d\n",dados[i].matricula);
					printf("Nome: %s\n",dados[i].nome);
					printf("Telefone: %s\n",dados[i].tel);
				}
				fclose(pt);
				break;
			}
			if(toupper(op)=='S')
			{
				if((pt=fopen("teste.dat","rb"))==NULL)
				{
					printf("\nErro na abertura do arquivo");
					getch();
					exit(1);
				}
				else
				{
					printf("\nDigite o numero do registro: ");
					scanf("%d",&numreg);
					if(numreg>n)
						printf("\nRegistro inexistente");
					else
					{
						fread(&dados,sizeof(dados),1,pt);

						printf("\nMatricula: %d\n",dados[numreg-1].matricula);
						printf("Nome: %s\n",dados[numreg-1].nome);
						printf("Telefone: %s\n",dados[numreg-1].tel);
					}
				}
				fclose(pt);
				break;
			}
		}while((toupper(op)!='T')||(toupper(op)!='S'));
	}
}

void alterar()
{
	clrscr();
	int i,numreg;

	if(n==0)
		printf("Banco de dados vazio");
	else
	{
		printf("\nDigite o numero do registro: ");
		scanf("%d",&numreg);

		if(numreg<=n)
		{
			if((pt=fopen("teste.dat","rb"))==NULL)
			{
				printf("\nErro na abertura do arquivo");
				getch();
				exit(1);
			}
			else
			{
			   i=0;
			   while(fread(&dados[i],sizeof(dados[i]),1,pt)==1)
				   //fread(&dados,sizeof(dados),1,pt);
				   i++;


				printf("\nMatricula: %d\n",dados[numreg-1].matricula);
				printf("Nome: %s\n",dados[numreg-1].nome);
				printf("Telefone: %s\n",dados[numreg-1].tel);
			}
			fclose(pt);

			printf("\nMatricula: %d",dados[numreg-1].matricula);
			printf("\nDigite novo nome: ");
			fflush(stdin);
			gets(dados[numreg-1].nome);
			printf("Digite novo telefone: ");
			fflush(stdin);
			gets(dados[numreg-1].tel);

			if((pt=fopen("teste.dat","wb"))==NULL)
			{
				printf("\nErro na abertura do arquivo");
				getch();
				exit(1);
			}
			else
				for(i=0;i<n;i++)
				   fwrite(&dados[i],sizeof(dados[i]),1,pt);

			fclose(pt);
			printf("\nRegistro %d foi alterado",numreg);
		} //fecho if
		else
			printf("\nRegistro inexistente");
	} //fecho else
}