• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

luisaugusto

em listar stats falta-me uma pra dar o livro mais recente e o mais antigo.e mais

3 mensagens neste tópico

// Exercicio de revisao

// declaraçao das directivas
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

//Declaraçao das estruturas

typedef struct {


		short int Mes;
		int Ano;
} T_Data;

typedef struct {

		int NumLivro; //Maior que zero e menor que 9999
		char Titulo[60];
		char Autor[60]; //Primeiro e ultimo nome
		char Tipo;//0-Leitura 1-Escolar 0-Tecnico
		T_Data DataPublicacao; //mm.aaaa
		char Editora; //0-TalvezEdite 1-TalvezEncaderne 2-BomLivro 3-VelhaEditora 4-NovaEditora
		float Preco; //Duas casas decimais
		int Quantidade;
} T_Livro;

//Declaraçao da estrutura de um nó

typedef struct No {

		T_Livro LivroX; //Variavel do tipo da estrutura principal
		struct No *Prox; //Aponta para o elemento seguinte da lista

} T_NoLivro;

// Declaraçao dos prototipos das funçoes

void MenuPrincipal(int NumLivro, int NumEsgotados);
void MenuListarLivros(void);
void SubOpListarLivros(T_NoLivro *Rol);
void MenuActualizarStocks(void);
void SubOpActualizarStocks(T_NoLivro *Rol);
void LerDadosLivro( T_NoLivro *Rol ,T_Livro *New);
int CompararLivrosPorTitulo(T_Livro *Livro1, T_Livro *Livro2);
int CompararLivrosPorNumero(T_NoLivro *Rol);
T_NoLivro *ProcurarPosicaoPorTitulo(T_NoLivro *Rol, T_Livro *Livros);
T_NoLivro *InserirLivro(T_NoLivro *Rol, T_Livro *New);
void EscreverDadosLivro(T_Livro *New, int Line); 
void *ListarLivros(T_NoLivro *Rol); 
void *ListarLivrosPorTipo(T_NoLivro *Rol); 
void *ListarLivrosPorEditora(T_NoLivro *Rol); 
void *ListarLivrosEsgotados(T_NoLivro *Rol);//falta fazer
void AdquirirLivrosPorNumero(T_NoLivro *Rol);//nova funcao para adquirir livro
void VenderLivrosPorNumero(T_NoLivro *Rol);//nova funcao para vender livros por numero ta correcta em baixo
void *ListarStats(T_NoLivro *Rol); //funcao das estatisticas
T_NoLivro *RemoverLivro(T_NoLivro *Rol,T_Livro *Livro);//funcao remover alunos
int ContarLivros(T_NoLivro *Rol);
int ContarLivrosEsgotados(T_NoLivro *Rol);// falta fazer
void EscreverTitulo(int Local);
T_NoLivro *LerFich(T_NoLivro *Rol);
void EscreverFich(T_NoLivro *Rol);
void MensagemSaida(void);

void ProcurarLivrosPorTitulo(T_NoLivro *Rol); //funcao extra
void ProcurarLivrosPorNumero(T_NoLivro *Rol); //funcao extra
//******************************************************************************

void main(void) {

			T_NoLivro *Lista_Livros = NULL; //criaçao de uma nova lista de alunos
			T_Livro LivroPrincipal; //Estrutura com a qual o programa trabalha no momento

			char Escolha;
			int TotalLivros; // Variavel para armazenar o nº de formandos do program
			int TotalEsgotados;
		   
			Lista_Livros=LerFich(Lista_Livros);

			do {

				clrscr(); //Limpa o ecrã

				TotalLivros=ContarLivros(Lista_Livros);
				TotalEsgotados=ContarLivrosEsgotados(Lista_Livros);

				textcolor(WHITE);

				MenuPrincipal(TotalLivros,TotalEsgotados);

				Escolha = getch(); // guarda a opçao do utilizador

					switch (Escolha) {

							case '1': LerDadosLivro(Lista_Livros, &LivroPrincipal);
										 Lista_Livros = InserirLivro(Lista_Livros,&LivroPrincipal);
										 break;

							case '2': Lista_Livros = RemoverLivro(Lista_Livros,&LivroPrincipal);
										 break;

							case '3': SubOpListarLivros(Lista_Livros);
										 break;

							case '4': SubOpActualizarStocks(Lista_Livros);
										 break;

							case '5': ListarStats(Lista_Livros);
										 break;

					}// Fim do switch

			} while(Escolha!='0');

			EscreverFich(Lista_Livros);

			MensagemSaida();


}// fim da funçao principal
//******************************************************************************

void MenuPrincipal(int NumLivro, int NumEsgotados) {

		EscreverTitulo(3);
		gotoxy(14,4);
		cprintf("=====================================================");

		gotoxy(28,6);
		cprintf("1- Inserir Livro");

		gotoxy(28,8);
		cprintf("2- Eliminar Livros");

		gotoxy(28,10);
		cprintf("3- Listar Livros");

		gotoxy(28,12);
		cprintf("4- Actualizar Stocks");

		gotoxy(28,14);
		cprintf("5- Dados Estatisticos");

		gotoxy(28,16);
		cprintf("0- Sair Do Programa");

		gotoxy(14,18);
		cprintf("=====================================================");

		gotoxy(14,20);
		textcolor(DARKGRAY);
		cprintf("Total de Livros: %d", NumLivro);

		gotoxy(14,22);
		textcolor(DARKGRAY);
		cprintf("Total Esgotados: %d", NumEsgotados);



}







//******************************************************************************

void MenuListarLivros(void) {

		EscreverTitulo(8);
		gotoxy(14,6);
		cprintf("=====================================================");

		gotoxy(28,8);
		cprintf("1- Listar Todos");

		gotoxy(28,10);
		cprintf("2- Listar Por Tipo");

		gotoxy(28,12);
		cprintf("3- Listar Por Editora");

		gotoxy(28,14);
		cprintf("4- Listar Esgotados");

		gotoxy(28,16);
		cprintf("0- Voltar ao Menu Principal");

		gotoxy(14,18);
		cprintf("=====================================================");


}



//******************************************************************************

void SubOpListarLivros(T_NoLivro *Rol){

	char Escolha;

	do{

		clrscr(); //Limpar o ecra

		textcolor(WHITE);
		MenuListarLivros();

		Escolha=getch();

		switch (Escolha) {

				case '1': ListarLivros(Rol); 
							 break;

				case '2': ListarLivrosPorTipo(Rol);
							 break;

				case '3': ListarLivrosPorEditora(Rol);

				case '4': ListarLivrosEsgotados(Rol);


		}

		} while ( Escolha !='0' );

}// fim da funçao


//******************************************************************************


void MenuActualizarStocks(void) {   //vai ter que mudar actualizar

		EscreverTitulo(9);
		gotoxy(14,8);
		cprintf("=====================================================");

		gotoxy(28,10);
		cprintf("1- Adquirir Livros");

		gotoxy(28,12);
		cprintf("2- Vender Livros");

		gotoxy(28,14);
		cprintf("3- Procurar Livros Por Nome");

		gotoxy(28,16);
		cprintf("4- Procurar Livros Por Numero");

		gotoxy(28,18);
		cprintf("0- Voltar Ao Menu Principal");

		gotoxy(14,20);
		cprintf("=====================================================");


}
//******************************************************************************
void SubOpActualizarStocks (T_NoLivro *Rol){

	char Escolha;

	do{

		clrscr(); //Limpar o ecra

		textcolor(WHITE);
		MenuActualizarStocks();

		Escolha=getch();

		switch (Escolha) {

				case '1': AdquirirLivrosPorNumero(Rol);//vai ter k mudar para adquirir
							 break;

				case '2': VenderLivrosPorNumero(Rol);//muda para vender 
							 break;

				case '3': ProcurarLivrosPorTitulo(Rol);
							 break;

				case '4': ProcurarLivrosPorNumero(Rol);

		}

		} while ( Escolha !='0' );

}// fim da funçao
//*********************************************************************
int CompararLivrosPorNumero(T_NoLivro *Rol){

	T_NoLivro *Temp;
	int NumLivro , Aux;
do{
	Aux=1;

	do{
	    gotoxy(4,4);
	    clreol();
	    cprintf("Introduza o numero do Livro:", 167);
	    scanf("%i",&NumLivro);
	    
	}while(NumLivro < 1 ||  NumLivro >9999);
	if (Rol==NULL)
		return NumLivro;

	else{ 
			Temp=Rol;

	while (Temp!=NULL) {

	if(Temp->LivroX.NumLivro==NumLivro)
		Aux=0;

	Temp=Temp->Prox;

	}

}

}while (Aux==0);

return NumLivro;

}


//*********************************************************************
void LerDadosLivro(T_NoLivro *Rol , T_Livro *New) {
  
  				clrscr();//limpa o ecra
  				EscreverTitulo(1);
  				
  				fflush(stdin);//limpa a memoria do teclado
  				
  				New->NumLivro == CompararLivrosPorNumero(Rol);
  				
  				fflush(stdin);
  				
  				gotoxy(4,6);
  				cprintf("Titulo do Livro:");
  				gets(New->Titulo);
  				
  				gotoxy(4,8);
  				cprintf("Autor do Livro:");
  				gets(New->Autor);
  				
  				
  				gotoxy(4,10);
  				cprintf("Tipo de Livro:");
  				
  				do {
  				
  					gotoxy(4,12);
  					clreol();
  					cprintf("0-Leitura 1-Escolar 2-Tecnico");
  					New->Tipo=getch();
  					
  				} while (New->Tipo !='0' &&New->Tipo !='1' &&New->Tipo !='2');
  				
  				gotoxy(4,14);
  				cprintf("Data de Publicacao");//ainda por mudar
  				
  				
  				gotoxy(29,14);
  				cprintf("Mes:");
  				scanf("%d", &New->DataPublicacao.Mes);//tb
  				
  				gotoxy(29,15);
  				cprintf("Ano:");
  				scanf("%i", &New->DataPublicacao.Ano);//tb
  				
  				gotoxy(4,17);
  				cprintf("Seleccione a Editora:");
  				
  				do {
  				
  					clreol();
  					gotoxy(4,18);
  					printf("0-TalvezEdite");
  					
  					gotoxy(4,19);
  					printf("1-TalvezEncaderne");
  					
  					gotoxy(4,20);
  					printf("2-BomLivro");
  					
  					gotoxy(25,18);
  					printf("3-VelhaEditora");
  					
  					gotoxy(25,19);
  					printf("4-NovaEditora");
  					
  					New->Editora=getch();
  					
  				} while(New->Editora!='0'&& New->Editora!='1' && New->Editora!='2' && New->Editora!='3' &&New->Editora!='4');
  					
  				do{
  				
  					gotoxy(4,22);
  					clreol();
  					cprintf("Introduza o Preco do Livro:");
  					scanf("%f", &New->Preco);
  					
  				} while (New->Preco < 0 || New->Preco > 200);
  				
  					gotoxy(4,24);
				cprintf("Quantidade do livro: ");
				scanf("%i",&New->Quantidade);
  				} //fecho da funçao

//******************************************************************************  					

/* funçao para comparar dois alunos pelo respectivos nomes sendo que se o primeiro tiver
um nome igual ao segundo devolveo valor zero, se o primeiro aluno tiver um nome 
(em relaçao a ordem alfabetica) maior que o segundo devolve 1 senao devolve -1.*/

int CompararLivrosPorTitulo(T_Livro *Livro1, T_Livro *Livro2){

		int Aux;

		Aux=strcmp(Livro1->Titulo,Livro2->Titulo);

		if (Aux==0)
			return 0;

		if (Aux<0)
			return -1;

		return 1;

}

//******************************************************************************
/*funçao que indica onde se deve inserir o novo aluno*/

T_NoLivro *ProcurarPosicaoPorTitulo(T_NoLivro *Rol, T_Livro *Livro){

		T_NoLivro *Posicao=Rol;

		if (Rol==NULL || CompararLivrosPorTitulo(Livro, &Rol->LivroX)<0)
				return NULL; // No Passa a ser o primeiro da lista

		// no nao e o primeiro da lista

		while (Posicao->Prox !=NULL && CompararLivrosPorTitulo(Livro,&Posicao->Prox->LivroX)>0)//trocar rol por posicao

						Posicao=Posicao->Prox;

				return Posicao;

}
//******************************************************************************
//funcao para inserir um novo aluno por ordem alfabetica

T_NoLivro *InserirLivro(T_NoLivro *Rol, T_Livro *New){

			T_NoLivro *NovoLivro, *Posicao, *Temp;

			Posicao = ProcurarPosicaoPorTitulo(Rol,New);

			NovoLivro = (T_NoLivro*) malloc( sizeof(T_NoLivro));
			NovoLivro->LivroX=*New;
			NovoLivro->Prox=NULL;

			if (Posicao==NULL){

					NovoLivro->Prox=Rol;
					Rol=NovoLivro;

			}
			else{

					NovoLivro->Prox=Posicao->Prox;
					Posicao->Prox=NovoLivro;

			}

			return Rol;

}
//******************************************************************************						
void EscreverDadosLivro(T_Livro *New, int Line) { 	

	char Tipo; 
	char Editora[5][5] ={{"TEnc"},{"TEdi"},{"BLiv"},{"VEdt"},{"NEdt"}};

	int Aux; 

	gotoxy(2,Line);
	cprintf("%i",New->NumLivro);
	gotoxy(6,Line);
	cprintf("|");

	gotoxy(9,Line);
	cprintf("%s    ",New->Titulo);
	gotoxy(17,Line);
	cprintf("|");

	gotoxy(20,Line);
	cprintf("%s    ",New->Autor);
	gotoxy(28,Line);
	cprintf("|");

	 if(New->Tipo=='0')
			Tipo='L';
	else if(New->Tipo=='1')
			Tipo='E';

	else
		Tipo='T';


	gotoxy(42,Line);
	cprintf("%c     ",Tipo);
	gotoxy(48,Line);
	cprintf("|");

	gotoxy(51,Line);
	cprintf("%2d.%i   ",New->DataPublicacao.Mes,New->DataPublicacao.Ano);
	gotoxy(61,Line);
	cprintf("|");

	switch (New->Editora) {

			case '0': Aux=0;
						 break;

			case '1': Aux=1;
						 break;

			case '2': Aux=2;
						 break;

			case '3': Aux=2;
						 break;

			case '4': Aux=4;

	}

	gotoxy(31,Line);
	cprintf("%s   ",Editora[Aux]);
	gotoxy(38,Line);
	cprintf("|");

	gotoxy(64,Line);
	cprintf("%5.2f   ",New->Preco);
	gotoxy(72,Line);
	cprintf("|");

	gotoxy(75,Line);
	cprintf("%i",New->Quantidade);

	gotoxy(2,Line+1);
	cprintf("-------------------------------------------------------------------------------");

	fflush(stdin); //Limpa a memoria do teclado

}
//******************************************************************************

void *ListarLivros(T_NoLivro *Rol) { 

		T_NoLivro *Temp;
		int Linha=7;

		Temp=Rol;

		if( Temp==NULL) {

				textcolor(LIGHTRED);
				gotoxy(44,8);
				cprintf("NAO FOI INSERIDO NEHUM LIVRO!!!");

		}
		else{

				clrscr();
				textcolor(YELLOW);
				EscreverTitulo(2);

				while(Temp!=NULL) {

						EscreverDadosLivro(&	Temp->LivroX,Linha);
						Temp=Temp->Prox;
						Linha+=2;

				}//fecho do while

		}//fecho do else

		getch();
		return 0;

}

//******************************************************************************

void *ListarLivrosPorTipo(T_NoLivro*Rol) {

		char Op;
		int Linha=7;
		T_NoLivro *Temp;

		clrscr();
		textcolor(YELLOW);
		EscreverTitulo(5);

		do{ 

			clreol();
			textcolor(3);
			gotoxy(2,20);
			cprintf("Escolha a sua opcao:  0-Leitura  1-Escolar  2-Tecnico");
			Op=getch();

		} while (Op !='0' && Op!='1' && Op!='2');

		if(Rol !=NULL) {

				Temp=Rol;

				while(Temp!=NULL) {

						if (Temp->LivroX.Tipo==Op) {

							textcolor(YELLOW);
							EscreverDadosLivro(&Temp->LivroX,Linha);
							Linha+=2;
						}

						Temp=Temp->Prox;

				}//fecho do while
		}//fecho do if

		if(Linha==7) {

				gotoxy(2,22);
				textcolor(LIGHTRED);
				cprintf("NAO EXISTEM LIVROS DESTE TIPO INSERIDOS NO PROGRAMA!!!");

		}

		getch();
		return 0;
}

//******************************************************************************

void *ListarLivrosPorEditora(T_NoLivro*Rol) {

		char Op;
		int Linha=7;
		T_NoLivro *Temp;

		clrscr();
		textcolor(YELLOW);
		EscreverTitulo(6);

		do{ 

			clreol();
			textcolor(3);
			gotoxy(2,20);
			cprintf("Escolha a sua opcao:");
			gotoxy(2,21);
			cprintf("0-TalvEdit 1-TalvEnc 2-BomLiv 3-VelhaEdit 4-NovaEdit");
			Op=getch();

		} while (Op !='0' && Op!='1'&& Op!='2'&& Op!='3'&& Op!='4');

		if(Rol !=NULL) {

				Temp=Rol;

				while(Temp!=NULL) {

						if (Temp->LivroX.Editora==Op) {

							textcolor(YELLOW);
							EscreverDadosLivro(&Temp->LivroX,Linha);
							Linha+=2;
						}

						Temp=Temp->Prox;

				}//fecho do while
		}//fecho do if

		if(Linha==7) {

				gotoxy(2,22);
				textcolor(LIGHTRED);
				cprintf("NAO EXISTEM LIVROS DESTA EDITORA!!!");

		}

		getch();
		return 0;
}
//******************************************************************************
void *ListarLivrosEsgotados(T_NoLivro *Rol) {

				char Op;
				int Linha = 7;
				T_NoLivro *Temp;

				clrscr();
				textcolor(YELLOW);
				EscreverTitulo(7);	

			if (Rol != NULL) {

				Temp = Rol;

			while (Temp != NULL) {

			if (Temp->LivroX.Quantidade == 0) {

				textcolor(YELLOW);
				EscreverDadosLivro(&Temp->LivroX,Linha);
				Linha += 2;

			}

			Temp = Temp->Prox;

		}

	}

			if (Linha == 7) {

			gotoxy(2,11);
			textcolor(RED);
			cprintf("NAO EXISTE LIVROS ESGOTADOS!!!");

}

getch();
return 0;

}	
//******************************************************************************
void AdquirirLivrosPorNumero(T_NoLivro *Rol){//mudar para adqurir livro ainda por fazer

	int Linha=7;
	int NumAux;//para procura o numero quando e numeros e int
	T_NoLivro *Temp;

	clrscr();
	textcolor(YELLOW);
	EscreverTitulo(9);
	fflush(stdin);

	gotoxy(2,20);
	textcolor(3);
	cprintf("Introduza o n%c do Livro a Adquirir:",167);
	scanf("%i",&NumAux); //utiliza-se para guardar numeros

	if( Rol!=NULL) { //se a lista nao for nula

		Temp=Rol;

		while (Temp!=NULL) {

				if (Temp->LivroX.NumLivro==NumAux){

						textcolor(YELLOW);
						EscreverDadosLivro(&Temp->LivroX,Linha);
						Linha+=2;
				}

				Temp=Temp->Prox;

		}// Fecho do while

	}// Fecho do if

	if(Linha==7) {

				gotoxy(2,22);
				textcolor(LIGHTRED);
				cprintf("NAO EXISTE NENHUM LIVRO COM ESTE NUMERO!!!");

		}

		getch();

}

//******************************************************************************
void VenderLivrosPorNumero(T_NoLivro *Rol){//nova funcao para procurar por numero

	int Linha=7;
	int NumAux;//para procura o numero quando e numeros e int
	T_NoLivro *Temp;

	clrscr();
	textcolor(YELLOW);
	EscreverTitulo(9);
	fflush(stdin);

	gotoxy(2,20);
	textcolor(3);
	cprintf("Introduza o n%c do Livro a Vender:",167);
	scanf("%i",&NumAux); //utiliza-se para guardar numeros

	if( Rol!=NULL) { //se a lista nao for nula

		Temp=Rol;

		while (Temp!=NULL) {

				if (Temp->LivroX.NumLivro==NumAux){

						textcolor(YELLOW);
						EscreverDadosLivro(&Temp->LivroX,Linha);
						Linha+=2;
				}

				Temp=Temp->Prox;

		}// Fecho do while

	}// Fecho do if

	if(Linha==7) {

				gotoxy(2,22);
				textcolor(LIGHTRED);
				cprintf("NAO EXISTE NENHUM LIVRO COM ESTE NUMERO!!!");

		}

		getch();

}

//******************************************************************************
void ProcurarLivrosPorTitulo(T_NoLivro *Rol){//mudar para procurar um livro

	int Linha=7;
	char LivroAux[60];
	T_NoLivro *Temp;

	clrscr();
	textcolor(YELLOW);
	EscreverTitulo(10);
	fflush(stdin);

	gotoxy(2,20);
	textcolor(3);
	cprintf("Introduza o Titulo do livro:");
	gets(LivroAux);

	if( Rol!=NULL) { //se a lista nao for nula

		Temp=Rol;

		while (Temp!=NULL) {

				if (strcmp(Temp->LivroX.Titulo,LivroAux)==0){

						textcolor(YELLOW);
						EscreverDadosLivro(&Temp->LivroX,Linha);
						Linha+=2;
				}

				Temp=Temp->Prox;

		}// Fecho do while

	}// Fecho do if

	if(Linha==7) {

				gotoxy(2,22);
				textcolor(LIGHTRED);
				cprintf("NAO EXISTE NENHUM LIVRO COM ESTE TITULO!!!");

		}

		getch();

}
//******************************************************************************

void ProcurarLivrosPorNumero(T_NoLivro *Rol){//nova funcao para procurar por numero

	int Linha=7;
	int NumAux;//para procura o numero quando e numeros e int
	T_NoLivro *Temp;

	clrscr();
	textcolor(YELLOW);
	EscreverTitulo(10);
	fflush(stdin);

	gotoxy(2,20);
	textcolor(3);
	cprintf("Introduza o n%c do Livro:",167);
	scanf("%i",&NumAux); //utiliza-se para guardar numeros

	if( Rol!=NULL) { //se a lista nao for nula

		Temp=Rol;

		while (Temp!=NULL) {

				if (Temp->LivroX.NumLivro==NumAux){

						textcolor(YELLOW);
						EscreverDadosLivro(&Temp->LivroX,Linha);
						Linha+=2;
				}

				Temp=Temp->Prox;

		}// Fecho do while

	}// Fecho do if

	if(Linha==7) {

				gotoxy(2,22);
				textcolor(LIGHTRED);
				cprintf("NAO EXISTE NENHUM LIVRO COM ESTE NUMERO!!!");

		}

		getch();

}

//******************************************************************************
void *ListarStats( T_NoLivro *Rol){ //funcao das estatisticas

			char DescTipo[3][8]={{"Leitura"},{"Escolar"},{"Tecnico"}};
			char DescEditora[5][16]={{"TalvezEdite"},{"TalvezEncaderne"},{"BomLivro"},{"VelhaEditora"},{"NovaEditora"}};
			int Aux, Linha, LinhaPior, LinhaMelhor, NumLivro=0;
			int Tipo[3]={0,0,0}; //conta o numero de alunos do curso com o respectivo sexo
			int Editora[5]={0,0,0,0,0};
			float PrecoLivro[5]={0,0,0,0,0};
			float MaiorPreco=0;
			float MenorPreco=9999;
			float PercTipo[3], PercEditora[5];
			float Quantidade;
			float MaiorQuantidade=0;
			float MenorQuantidade=9999;
			float DataPublicacao;
			float Ano;

			T_NoLivro *Temp;







					while(Temp!=NULL) {

					switch (Temp->LivroX.Tipo) {

								case '0': Aux=0;
											 break;

								case '1': Aux=1;
											 break;

								case '2': Aux=2;


								}	



				++Tipo[Aux];




						switch (Temp->LivroX.Editora) {

								case '0': Aux=0;
											 break;

								case '1': Aux=1;
											 break;

								case '2': Aux=2;
											 break;

								case '3': Aux=3;
											 break;

								case '4': Aux=4;

						}

						++Editora[Aux];


						PrecoLivro[Aux] += Temp->LivroX.Preco;

						if(Temp->LivroX.Preco>=MaiorPreco)
							MaiorPreco=Temp->LivroX.Preco;

						if(Temp->LivroX.Preco<=MenorPreco)
							MenorPreco=Temp->LivroX.Preco;

						++NumLivro;

						Temp=Temp->Prox;

					}//fecho do while
			//fecho do if

			clrscr();
			textcolor(YELLOW);
			EscreverTitulo(4);

			gotoxy(2,5);
			cprintf("DADOS RELATIVOS AO TIPO");

			gotoxy(15,7);
			cprintf("|    N%c |  Percent " ,167);
			gotoxy(2,8);
			cprintf("-------------------------------");

			Linha=9;


			for(Aux=0; Aux<3; ++Aux) {

					gotoxy(5,Linha);
					cprintf("%s",DescTipo[Aux]);

					gotoxy(15,Linha);
					cprintf("|");

					gotoxy(20,Linha);
					cprintf("%d",Tipo[Aux]);

					gotoxy(23,Linha);
					cprintf("|");

					PercTipo[Aux]=(float)Tipo[Aux]*100/NumLivro;//calcular a percentagem

					gotoxy(26,Linha);
					cprintf("%.2f%", PercTipo[Aux]);

					gotoxy(2,Linha+1);
					cprintf("-------------------------------");

					Linha +=2;

			}

			gotoxy(35,5);
			cprintf("DADOS RELATIVOS AOS LIVROS POR EDITORA");

			gotoxy(50,7);
			cprintf("|   N%c  | Percent | T/ Precos " ,167);
			gotoxy(35,8);
			cprintf("---------------------------------------------");

			Linha=9;



			for(Aux=0; Aux<5; ++Aux) {

					gotoxy(35,Linha);
					cprintf("%s",DescEditora[Aux]);

					gotoxy(50,Linha);
					cprintf("|");

					gotoxy(54,Linha);
					cprintf("%d",Editora[Aux]);

					gotoxy(58,Linha);
					cprintf("|");

					PercEditora[Aux]=(float)Editora[Aux]*100/NumLivro;//calcular a percentagem

					gotoxy(61,Linha);
					cprintf("%.2f%", PercEditora[Aux]);

					gotoxy(68,Linha);
					cprintf("|");

					gotoxy(70,Linha);

					if (Editora[Aux]!=0)
							cprintf("%5.2f",PrecoLivro[Aux]);
					else
							cprintf("S/P");

					gotoxy(35,Linha+1);
					cprintf("---------------------------------------------");

					Linha +=2;

				}

				gotoxy(2,17);
				cprintf("Livro Mais Caro: PRECO: %5.2f", MaiorPreco);
				gotoxy(2,18);
				cprintf("--------------------------------");	

				gotoxy(2,21);
				cprintf("Livro Mais Barato: PRECO:%5.2f", MenorPreco);
				gotoxy(2,22);
				cprintf("--------------------------------");

				LinhaMelhor=19;
				LinhaPior=23;

				if (Rol!=NULL) {

						Temp=Rol;

						while(Temp!=NULL){

								if(Temp->LivroX.Preco==MaiorPreco) {

										gotoxy(2,LinhaMelhor);
										cprintf("%s",Temp->LivroX.Titulo);
										++LinhaMelhor;
								}
								if(Temp->LivroX.Preco==MenorPreco) {

										gotoxy(2,LinhaPior);
										cprintf("%s",Temp->LivroX.Titulo);
										++LinhaPior;
								}

								Temp=Temp->Prox;


				gotoxy(35,20);
				cprintf("Livro com maior Qtd em stock: %i", MaiorQuantidade);
				gotoxy(35,21);
				cprintf("-----------------------------------");
				gotoxy(35,22);
				cprintf("Livro com maior Qtd em stock: %i", MenorQuantidade);
				gotoxy(35,23);
				cprintf("-----------------------------------");
				if (Rol!=NULL) {

						Temp=Rol;

						while(Temp!=NULL){

								if(Temp->LivroX.Quantidade==MaiorQuantidade) {

										gotoxy(2,Quantidade);
										cprintf("%i",Temp->LivroX.Quantidade);
										++Quantidade;
								}

									if(Temp->LivroX.Quantidade==MenorQuantidade) {

										gotoxy(2,Quantidade);
										cprintf("%i",Temp->LivroX.Quantidade);
										++Quantidade;
								}
								Temp=Temp->Prox;

				}
				}
				gotoxy(35,24);
				cprintf("Livro Mais Recente: %i",DataPublicacao,Ano);
				gotoxy(35,25);
				cprintf("-----------------------------------");
				gotoxy(35,26);
				cprintf("Livro Mais Antigo: %i",DataPublicacao,Ano);
				gotoxy(35,27);
				cprintf("-----------------------------------");



						}//fecho do while

}// Fecho do if

getch();
return 0;



}			
//******************************************************************************
T_NoLivro *RemoverLivro(T_NoLivro *Rol,T_Livro *Livro){ //nova funcao para remover

			T_NoLivro *Temp, *LivroEliminar;

			if(Rol==NULL) { //nao existe nenhum elemento inserido na lista

					gotoxy(47,8);
					clreol();
					textcolor(LIGHTRED);
					cprintf("NAO EXISTEM LIVROS!!!");
					getch();

					return NULL;
			}

			if (Rol->Prox==NULL) { //Existe apenas um elemento na lista

			fflush(stdin);

			gotoxy(47,8);
			clreol();
			textcolor(3);
			cprintf("....N%c:",167);
			scanf("%i",&(Livro->NumLivro));

			if (Rol->LivroX.NumLivro==Livro->NumLivro) { //se o numero existir

						Rol=Rol->Prox;
						free(Rol);

						gotoxy(47,8);
						clreol();
						textcolor(LIGHTMAGENTA);
						cprintf("LIVRO REMOVIDO!!");
						getch();

						return Rol;
			}
			else { // se nao existir

					gotoxy(47,8);
					clreol();
					textcolor(RED);
					cprintf("ESTE N%c NAO EXISTE!",167);
					getch();

			}//fecho do else

		}//fecho do if

		if (Rol!=NULL){ //a lista nao e nula e tem mais de um elemento

			fflush(stdin);//limpa a memoria do ecra

			gotoxy(47,8);
			clreol();
			textcolor(3);
			cprintf("....N%c:",167);
			scanf("%i",&(Livro->NumLivro));

			Temp=Rol;

			while(Temp!= NULL) {


//se o ponteiro estiver a apontar para NULL e o nome nao existir
			if(Temp->Prox==NULL&&Temp->LivroX.NumLivro!=Livro->NumLivro){

			gotoxy(47,8);
			clreol();
			textcolor(LIGHTRED);
			cprintf("ESTE N%c NAO EXISTE!",167);
			getch();

			return Rol;

			}//fecho do if

//se o nome existir na lista e nao for o primeiro elemento
			if(Temp->Prox->LivroX.NumLivro==Livro->NumLivro){

				LivroEliminar=Temp->Prox;
				Temp->Prox=LivroEliminar->Prox;
				free(LivroEliminar);

				gotoxy(47,8);
				clreol();
				textcolor(YELLOW);
				cprintf("LIVRO REMOVIDO!!");
				getch();

				return Rol;
			}// fecho do if

//se o nome existir na lista e for o primeiro elemento
			if(Temp->LivroX.NumLivro==Livro->NumLivro){

				LivroEliminar=Rol;
				Rol=LivroEliminar->Prox;
				free(LivroEliminar);

				gotoxy(47,8);
				clreol();
				textcolor(YELLOW);
				cprintf("LIVRO REMOVIDO!!");
				getch();

				return Rol;
			}// fecho do if

			Temp=Temp->Prox;

		}//Fecho do while

	}//Fecho do if

	return Rol;	

}//fecho da funcao
//******************************************************************************
int ContarLivrosEsgotados(T_NoLivro *Rol) {

		T_NoLivro *Temp;
		int Contador = 0;

		Temp = Rol;	

		while (Temp != NULL) {

		if (Temp->LivroX.Quantidade == 0)
		++Contador;

				Temp = Temp->Prox;



		}

return Contador;

}

//******************************************************************************

int ContarLivros(T_NoLivro *Rol) {

		T_NoLivro *Temp;//variavel temporaria para substituir a lista
		int Contador=0; //contar o numero de elementos da lista

		Temp=Rol;

		while (Temp!= NULL) {

				Temp=Temp->Prox;
				++Contador;
		}

		return Contador;
}

//******************************************************************************

void EscreverTitulo(int Local) {



gotoxy(2,2);

switch (Local) {

	case 1: cprintf("****************** BOALEITURA, LDA.  NOVO LIVRO ********************");
			  break;
			  
	case 2: cprintf("********************* BOALEITURA, LDA.  LISTA DOS LIVROS ********************");
			  gotoxy(2,4);
			  cprintf("N%c  | Titulo   |  Autor   |  Edit   |  Tipo   |  DataPub   |  Preco   |  Qtd",167);
			  gotoxy(2,5);
			  cprintf("==============================================================================");
			  break;
			  
	case 3: cprintf("********************** BOALEITURA, LDA.  MENU PRINCIPAL *********************");
			  break;
			  		
	case 4: cprintf("******************** BOALEITURA, LDA.   DADOS ESTATISTICOS *******************");	  
			  break;
			  
	case 5: cprintf("****************** BOALEITURA, LDA.   LIVROS POR TIPO *******************");	  
			  gotoxy(2,4);
			  cprintf("N%c  | Titulo   |  Autor   |  Edit   |  Tipo   |  DataPub   |  Preco   |  Qtd",167);
			  gotoxy(2,5);
			  cprintf("=============================================================================");
			  break;			  

	case 6: cprintf("******************* BOALEITURA, LDA.  LIVROS POR EDITORA ********************");	  
			  gotoxy(2,4);
			  cprintf("N%c  | Titulo   |  Autor   |  Edit   |  Tipo   |  DataPub   |  Preco   |  Qtd",167);
			  gotoxy(2,5);
			  cprintf("===============================================================================");
			  break;
			  
	case 7: cprintf("******************** BOALEITURA, LDA. LIVROS ESGOTADOS *********************");	  
			  gotoxy(2,4);
			  cprintf("N%c  | Titulo    |  Autor   |  Edit   |  Tipo   |  DataPub   |  Preco   |  Qtd",167);
			  gotoxy(2,5);
			  cprintf("===========================================================================");
			  break;
			  
	case 8: cprintf("******************* BOALEITURA, LDA. MENU LISTAR LIVROS ********************");
			  break;
			  
	case 9: cprintf("****************** BOALEITURA, LDA. MENU ACTUALIZAR STOCKS *******************");
			  break;
			  
	case 10: cprintf("***************** BOALEITURA, LDA. SubMenu PROCURAR LIVROS ******************");
			  gotoxy(2,4);
			  cprintf("N%c  | Titulo    |  Autor   |  Edit   |  Tipo   |  DataPub   |  Preco   |  Qtd",167);
			  gotoxy(2,5);
			  cprintf("===============================================================================");
			  break;		  

}

}

//**************************************************************************************************************
T_NoLivro *LerFich(T_NoLivro *Rol){

		FILE *LivroFich;
		T_Livro Livro;
		int Temp;

		//primeiro passo: criar e ou abrir o ficheiro

		LivroFich= fopen("ListaLivros.dat","ab+");

		if (LivroFich==NULL) {

				clrscr();
				gotoxy(10,10);
				cprintf("Erro a tentar abrir o ficheiro pedido!!!");
				getch();

		}
		else{

				while (!feof(LivroFich)) {

						Temp=fread(&Livro,sizeof(T_Livro),1,LivroFich);

						if(Temp !=0)
								Rol=InserirLivro(Rol,&Livro);

				} //Fecho do while				
		}//Fecho do else

				fclose(LivroFich);
				return Rol;

}
//******************************************************************************
void EscreverFich(T_NoLivro *Rol){

		FILE *LivroFich;
		T_NoLivro *Temp, *Posicao;

		//primeiro passo: criar e ou abrir o ficheiro

		LivroFich= fopen("ListaLivros.dat","wb");

		if (LivroFich==NULL) {

				clrscr();
				gotoxy(10,10);
				cprintf("Erro a tentar abrir o ficheiro pedido!!!");
				getch();

		}
		else{

				Temp=Rol;

				while (Temp!=NULL) {

						fwrite(&(Temp->LivroX),sizeof(T_Livro),1,LivroFich);
						Posicao=Temp;
						Temp=Temp->Prox;
						free(Posicao);
				}//Fecho do while
		}//Fecho do else

				fclose(LivroFich);

}

//******************************************************************************

void MensagemSaida(void) {	

	int Linha;

	clrscr();
	textcolor(YELLOW);
	gotoxy(21,8);
	cprintf("***************************************");

	gotoxy(22,11);
	cprintf("NOME: LUIS CARLOS REMEDIOS AUGUSTO");

	gotoxy(22,13);
	cprintf("ALUNO N%c: 20060013", 167);

	gotoxy(22,15);
	cprintf("MODULO: PROGRAMACAO DE APLICACOES");

	gotoxy(21,18);
	cprintf("***************************************");

	for ( Linha=9; Linha<18; ++Linha) {

			gotoxy(20,Linha);
			cprintf("*");

			gotoxy(60,Linha);
			cprintf("*");
	}

	getch();

}		

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ui meu Deus!  :eek:

Faz uma coisa, Edita o teu post e faz o seguinte:

-> Usa o GeSHi para pôr o código

-> Edita o título do post para que seja mais perceptível

-> Coloca a tua dúvida de forma clara e concisa, apresentando apenas alguma parte ou algumas partes do código.

Isto para o teu bem (para que te possamos ajudar) e para o bom funcionamento do fórum. :)

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Editei o tópico para se conseguir perceber o código.

Bem, obviamente que tens de dizer o que se passa, ninguém vai ler código todo sem sequer saber o que pretendes. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora