Jump to content

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


Recommended Posts

Posted
// 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();

}		
Posted

Ui meu Deus!  ?

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. 🙂

😉

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

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. 😉

<3 life

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.