luisaugusto Posted November 29, 2006 at 05:20 PM Report #67624 Posted November 29, 2006 at 05:20 PM // 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(); }
Hipnoted Posted November 29, 2006 at 05:55 PM Report #67633 Posted November 29, 2006 at 05:55 PM 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"
Triton Posted November 29, 2006 at 08:53 PM Report #67713 Posted November 29, 2006 at 08:53 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now