void menuPrincipal() { system("clear"); bemVindo(); escolhas(); int x; scanf("%d", &x); if (x == 0) { return; } else { switch(x) { case 1: printf("OPCAO 1\n\n\n"); cadastraCliente(); break; case 2: printf("OPCAO 2\n\n\n"); cadastraMaterial(); break; case 3: printf("OPCAO 3\n\n\n"); geraPedido(); break; case 4: printf("OPCAO 4\n\n\n"); //listaPedidos(); break; case 5: printf("OPCAO 5\n\n\n"); listaClientes(); break; case 6: printf("OPCAO 6\n\n\n"); listaMateriais(); break; case 7: printf("OPCAO 7\n\n\n"); //registraEntrega(); break; default: printf("Opcao invalida! Tente novamente . . .\n\n\n"); } } menuPrincipal(); }
int main(int argc, char *argv[]) { clock_t beginClock, endClock; time_t beginTime,endTime; int okFlag = 1; int totalProdutos = 0; char* filenameP; char lineP[SIZEMAX_PRODUTOS]; FILE* fprodutos; Catalogo* catalogoProdutos; int totalClientes = 0; char* filenameC; char lineC[SIZEMAX_CLIENTES]; FILE* fclientes; Catalogo* catalogoClientes; Contabilidade* contabilidade; int totalCompras = 0; char* filenameCmp; char lineCmp[SIZEMAX_COMPRAS]; FILE* fcompras; char* codP = malloc(SIZEMAX_PRODUTOS); float preco = 0; int unidades = 0; char tipo = 0; char* codC= malloc(SIZEMAX_CLIENTES); int mes= 0; int compras_validas = 0; Compras* compras; catalogoProdutos = initCatalogo(); catalogoClientes = initCatalogo(); contabilidade = initContabilidade(); compras = initCompras(); /* Aceder os ficheiros */ filenameP = malloc(strlen(argv[1])+1); filenameP = strcpy(filenameP,argv[1]); fprodutos = fopen(filenameP,"r"); filenameC = malloc(strlen(argv[2])+1); filenameC = strcpy(filenameP,argv[2]); fclientes = fopen(filenameC,"r"); filenameCmp = malloc(strlen(argv[3])+1); filenameCmp = strcpy(filenameCmp,argv[3]); fcompras = fopen(filenameCmp,"r"); /*Construir as estruturas*/ printf(COLOR_BLUE"A carregar...\n"COLOR_RESET); beginTime = time(NULL); /*Produtos*/ if(fprodutos){ char* codProd; while(fgets(lineP,SIZEMAX_PRODUTOS,fprodutos) != NULL){ codProd = strtok(lineP,"\r\n"); if(check_codigo_produto(codProd) == 0){ catalogoProdutos = addToCatalogo(catalogoProdutos,codProd); contabilidade = addProdutoToContabilidade(contabilidade,codProd); totalProdutos++; } } } else{printf("Erro ao ler de ficheiro de Produtos!\n");okFlag = 0;} /*Clientes*/ if(fclientes){ char* codCli; while(fgets(lineC,SIZEMAX_CLIENTES,fclientes) != NULL){ codCli = strtok(lineC,"\r\n"); if(check_codigo_cliente(codCli) == 0){ catalogoClientes= addToCatalogo(catalogoClientes,codCli); totalClientes++; } } } else{printf("Erro ao ler o ficheiro de Clientes!\n");okFlag = 0;} /*Compras;*/ if(fcompras){ int ok = -1; char* regComp; while(fgets(lineCmp,SIZEMAX_COMPRAS,fcompras) != NULL){ regComp = strtok(lineCmp,"\r\n"); ok = parse(regComp,&codP,&preco,&unidades,&tipo,&codC,&mes); if(ok == -1){ printf("ERRO NA LEITURA NA LINHA: %d!!!\n",totalCompras+1); } else{ if((existeNoCatalogo(catalogoClientes,codC) == True) && (existeNoCatalogo(catalogoProdutos,codP) == True)){ contabilidade = addCompraToContabilidade(contabilidade,codP,preco,unidades,tipo,mes); compras = addToCompras(compras,codP,unidades,tipo,codC,mes); compras_validas++; } } totalCompras++; } } else {printf("Erro ao ler o ficheiro de Compras!\n"); okFlag = 0;} endTime = time(NULL); fclose(fprodutos); fclose(fclientes); fclose(fcompras); if(okFlag == 0){ return 0;} CLEAR_CONSOLE; bemVindo(); printf(COLOR_GREEN"\nTempo para carregar os ficheiros:"COLOR_RESET" %lds\n",endTime-beginTime); printMenu(); while(okFlag) { int opcao; while((opcao = le_inteiro()) == -1 ){ printf("Opção invalida!\n"); printf("> "); } switch (opcao) { case 0: { okFlag = 0; printf(COLOR_BLUE"Até a proxima!\n"COLOR_RESET); break; } case 1: { CLEAR_CONSOLE; printf(COLOR_GREEN"\nNome do ficheiro de Produtos:"COLOR_RESET" %s\n",filenameP); printf(COLOR_GREEN"Nome do ficheiro de Clientes:"COLOR_RESET" %s\n",filenameC); printf(COLOR_GREEN"Nome do ficheiro de Compras:"COLOR_RESET" %s\n",filenameCmp); printf(COLOR_GREEN"Total de Produtos:"COLOR_RESET" %d\n",totalProdutos); printf(COLOR_GREEN"Total de Clientes:"COLOR_RESET" %d\n",totalClientes); printf(COLOR_GREEN"Total de Compras:"COLOR_RESET" %d\n",totalCompras); printf(COLOR_GREEN"Total de Compras validas:"COLOR_RESET" %d\n",compras_validas); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 2: { char l = -1; Result q2 = NULL; printf("- Letra:\n"); printf(" > "); while((l = le_caracter()) == -1){ printf("Letra Inválida!\n"); printf(" > "); } CLEAR_CONSOLE; q2 = getCatalogoLetra(catalogoProdutos,l); if(q2==NULL) {printf(COLOR_BLUE"\nNão existe registos!\n\n\n"COLOR_RESET);} else { imprimePorPagina(q2); } PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 3: { int tN; int tP; float tF; int mes; char *cod = (char*)malloc(sizeof(char)*SIZEMAX_PRODUTOS);; printf("- Código de Produto: \n"); printf(" > "); while((cod = ler_CodigoProtudo()) == NULL){ printf("Código Inválido!\n"); printf(" > "); } printf(" - Mês: "); while((mes = le_mes()) == -1){ printf("Mês inválido: 1 .. 12!\n"); printf(" - Mês: "); } tN = totalDeVendasNormalMes(contabilidade,cod,mes); tP = totalDeVendasPromocaoMes(contabilidade,cod,mes); tF = totalFaturadoMes(contabilidade,cod,mes); CLEAR_CONSOLE; printf(COLOR_BLUE"\nContabilidade do produto: %s, no mês: %d \n\n"COLOR_RESET,cod,mes); printf(COLOR_YELLOW"Total Vendas Normal:"COLOR_RESET" %d\n",tN); printf(COLOR_YELLOW"Total Vendas Promoção:"COLOR_RESET" %d\n",tP); printf(COLOR_YELLOW"Total Faturado:"COLOR_RESET" %0.2f€\n",tF); free(cod); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 4: { int n = 0; ResultContabilidade r = produtosSemComprador(contabilidade); CLEAR_CONSOLE; if(r==NULL){printf(COLOR_BLUE"\nNão existe registos!\n"COLOR_RESET);} else{ int total_paginas = 0; int pagina = 1; int inicio = 0; int pode_imprimir = 1; int c = -1; n = lenghtResultContabilidade(r); if(n<ELEMS_POR_PAGINA){ printResultContabilidade(r); } else{ total_paginas = (int) n/ELEMS_POR_PAGINA + 1; while(pagina <= total_paginas) { int ok = -1; if(pode_imprimir == 1){ CLEAR_CONSOLE; printf(COLOR_BLUE"\nExistem - %d - produtos que ninguem Comprou! - pagina: %d/%d\n"COLOR_RESET,n,pagina,total_paginas); r = printResultContabilidadePagina(r,inicio); } if(pagina == total_paginas){ printf(COLOR_YELLOW" -Não existem mais registos-\n"COLOR_YELLOW); break; } while(ok != 0) /*ate f/b/q */ { printf(COLOR_BLUE"- front / back / exit (f / b / e): "COLOR_RESET); while((c = le_caracter()) == -1){ printf(COLOR_BLUE"- front / back / exit (f / b / e): "COLOR_RESET); } if(c == 'F') { /*imprimir proxima pagina (inicio=1), sai do ciclo e pode imprimir*/ inicio = 1; pagina++; ok = 0; pode_imprimir = 1; } else if( c == 'B'){ if(pagina > 1){ /*Se existe pagina anterior*/ inicio = -1; /* pagina anterior (-1) */ pagina --; ok = 0; pode_imprimir = 1; } else{ printf(COLOR_YELLOW"Não existe registos anteriores!\n"COLOR_RESET); pode_imprimir = 0; /*não pode imprimir*/ } }else if(c == 'E'){ pagina = total_paginas+1; /*sai do ciclo principal*/ ok = 0; } } } } } PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 5: { int i = 0; int c; int * r; /*Retorna um array de inteiros*/ char *cod = (char*)malloc(sizeof(char)*SIZEMAX_CLIENTES); printf("- Código de Cliente: "); while((cod = ler_CodigoCliente()) == NULL){ printf("Código Inválido!\n"); printf("> "); } r = getInfoComprasDeCliente(compras,cod); CLEAR_CONSOLE; printf(" -----------------------\n"); printf("| "COLOR_BLUE"Registo compras %s |\n"COLOR_RESET,cod); printf("|=======================|\n"); while(i<12) { printf("| "COLOR_BLUE"Mês %2d |"COLOR_RESET" %4d\t|\n",i+1,r[i]); i++; } printf(" ------------------------\n"); i = 0; printf(COLOR_BLUE"- Quer guardar informação em ficheiro? (y ou n): "COLOR_RESET); while((c = le_caracter()) == -1){ printf("Invalido!\n"); printf("> "); } if(c == 'y' || c == 'Y') { FILE* f; char* begin = "Cliente "; char* end = " - Registo de Compras.txt"; char* fileName = calloc((6+strlen(begin)+strlen(end)),sizeof(char)); strcat(fileName,begin); strcat(fileName,cod); strcat(fileName,end); f = fopen(fileName,"w+"); fprintf(f," -----------------------\n"); fprintf(f,"| Registo compras %s |\n",cod); fprintf(f,"|=======================|\n"); while(i<12){ fprintf(f,"| Mês %2d | %4d\t|\n",i+1,r[i]); i++; } fprintf(f," ------------------------\n"); printf(COLOR_BLUE"\nInformação guardada no ficheiro: %s\n"COLOR_RESET,fileName); fclose(f); free(fileName); } free(cod); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 6: { char letra = -1; Result q6 = NULL; printf("Letra:\n"); printf(" > "); while((letra = le_caracter()) == -1){ printf("Letra Inválida!\n"); printf(" > "); } CLEAR_CONSOLE; q6 = getCatalogoLetra(catalogoClientes,letra); if(q6==NULL) {printf(COLOR_BLUE"Não existe registos!\n\n\n"COLOR_RESET);} else{ imprimePorPagina(q6); } PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 7: { int mes1; int mes2; Par p; printf(" - Mês 1: "); while((mes1 = le_mes()) == -1){ printf("Mês inválido: 1 .. 12!\n"); printf(" - Mês 1: "); } printf(" - Mês 2: "); while((mes2 = le_mes()) == -1){ printf("Mês inválido: 1 .. 12!\n"); printf(" - Mês 2: "); } CLEAR_CONSOLE; p = totalComprasEFaturadoEntreMes(contabilidade,mes1,mes2); printf(COLOR_BLUE"Registo entre os Meses [%d...%d]:\n"COLOR_RESET,mes1, mes2); printf(COLOR_YELLOW" - Total de compras : %d unidades\n"COLOR_RESET,getFstElem(p)); printf(COLOR_YELLOW" - Total de faturado : %d€\n"COLOR_RESET,getSndElem(p)); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 8: { char *cod = (char*)malloc(sizeof(char)*SIZEMAX_PRODUTOS); ResultCompras8 r = NULL; ResultCompras rn = NULL; ResultCompras rp = NULL; int total_cliente_normal; int total_cliente_promocao; int ok = 1; while(ok){ printf("- Código de Produto: "); while((cod = ler_CodigoProtudo()) == NULL){ printf("Código Inválido!\n"); printf("> "); } if(existeNoCatalogo(catalogoProdutos,cod) == 0) ok = 0; else{printf(COLOR_YELLOW"Código não existe!\n"COLOR_RESET);} } beginClock = clock(); r = getRegistoTotaldeClientes(compras,cod); rn = getResultadoComprasNormal(r); rp = getResultadoComprasPromocao(r); total_cliente_normal = lenghtResultCompras(rn); total_cliente_promocao = lenghtResultCompras(rp); endClock= clock(); CLEAR_CONSOLE; printf(COLOR_BLUE"Para o produto %s:\n\n"COLOR_RESET,cod); printf(COLOR_BLUE"Existe um total de %d clientes que fizeram compras normal\n"COLOR_RESET,total_cliente_normal); printResultCompras(rn); printf(COLOR_BLUE"\nExiste um total de %d clientes que fizeram compras promoção\n"COLOR_RESET,total_cliente_promocao); printResultCompras(rp); printf(COLOR_GREEN"Tempo gasto pelo CPU: %f \n"COLOR_RESET, (double)(endClock - beginClock)/CLOCKS_PER_SEC); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 9: { ResultCompras9 r = NULL; char *codigo_cliente = (char*)malloc(sizeof(char)*SIZEMAX_CLIENTES); int mes; int ok = 1; while(ok){ printf("- Código de Cliente: "); while((codigo_cliente = ler_CodigoCliente()) == NULL){ printf("Código Inválido!\n"); printf("> "); } if(existeNoCatalogo(catalogoClientes,codigo_cliente) == 0) ok = 0; else{printf(COLOR_YELLOW"Código não existe!\n"COLOR_RESET);} } printf(" - Mês: "); while((mes = le_inteiro()) == -1 ){ printf("Mês inválido: 1 .. 12!\n"); printf(" - Mês: "); } beginClock = clock(); r= getProdutosMaisComprados(compras,codigo_cliente,mes); endClock= clock(); CLEAR_CONSOLE; printf(COLOR_GREEN"Tempo gasto pelo CPU: %f \n"COLOR_RESET, (double)(endClock - beginClock)/CLOCKS_PER_SEC); printf(COLOR_BLUE"Para o cliente %s no mês %d:\n\n"COLOR_RESET,codigo_cliente,mes); printResultComprasQuerie9(r); free(codigo_cliente); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 10: { /*So esta a testar para um produto de cada vez*/ ResultCompras r = NULL; r= getClientesQueComprouTodoAno(compras); CLEAR_CONSOLE; if(lenghtResultCompras(r) == 0) printf(COLOR_BLUE"\nNão existe registos de clientes que compraram o mesmo produto todos os meses do ano\n"COLOR_RESET); else{ printf(COLOR_BLUE"\nClientes que compraram o mesmo produto todos os meses do ano\n"COLOR_RESET); printResultCompras(r); } PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 11: { ComprasEClientes cc = initComprasEClientes(); int mes = 1; FILE * file; file = fopen("Estatisticas.csv", "w+"); fprintf(file, "\"Mês\",\"#Compras\",\"#Clientes\"\n"); beginTime = time(NULL); while(mes<=12){ cc = getComprasEClientesMes(compras,mes); fprintf(file, "\"%d\",\"%d\",\"%d\"\n",mes,getComprasElem(cc),getClientesElem(cc)); mes++; } fclose(file); endTime= time(NULL); CLEAR_CONSOLE; printf(COLOR_GREEN"Tempo gasto: %ld segundos \n"COLOR_RESET, endTime-beginTime); printf(COLOR_BLUE"\nFicheiro Estatisticas.csv criado!\n"COLOR_RESET); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 12: { int top = 0; ResultCompras12 r = NULL; printf("TOP > "); while((top = le_inteiro()) == -1 ){ printf("TOP > "); } beginClock = clock(); r = topProdutos(compras,top); endClock = clock(); CLEAR_CONSOLE; printf("\n"); printf(COLOR_GREEN"Tempo gasto pelo CPU: %f \n"COLOR_RESET, (double)(endClock - beginClock)/CLOCKS_PER_SEC); printf(COLOR_BLUE"\nTop %d produtos vendidos:\n\n"COLOR_RESET,top); printResultComprasQuerie12(r,top); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 13: { ResultCompras9 r = NULL; char* codigo; int ok = 1; while(ok){ printf("- Código de Cliente: "); while((codigo = ler_CodigoCliente()) == NULL){ printf("Código Inválido!\n"); printf("> "); } if(existeNoCatalogo(catalogoClientes,codigo) == 0) ok = 0; else{printf(COLOR_YELLOW"Código não existe!\n"COLOR_RESET);} } beginTime = time(NULL); r = topProdutosCompradosPorCliente(compras,codigo); endTime = time(NULL); CLEAR_CONSOLE; printf(COLOR_GREEN"Tempo gasto: %ld segundos \n"COLOR_RESET, endTime-beginTime); printf(COLOR_BLUE"\nTOP3: (Quantidade/Produto)\n\n"COLOR_RESET); printResultComprasQuerie9(r); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } case 14: { int produtos; int clientes; ResultContabilidade r = NULL; beginTime = time(NULL); r = produtosSemComprador(contabilidade); produtos = lenghtResultContabilidade(r); clientes = numeroTotalDeClientes(compras); endTime = time(NULL); CLEAR_CONSOLE; printf(COLOR_GREEN"Tempo gasto: %ld segundos \n"COLOR_RESET, endTime-beginTime); printf(COLOR_BLUE"\nTotal de Produtos que ninguem comprou:"COLOR_RESET" %d\n",produtos); printf(COLOR_BLUE"Total de Clientes que não realizaram compras:"COLOR_RESET" %d\n",totalClientes-clientes); PRESS_ENTER_TO_CONTINUE(); printMenu(); break; } default: { printf ("Opção inválida!\n"); printf("> "); break; } } } deleteCatalogo(catalogoProdutos); deleteCatalogo(catalogoClientes); deleteContabilidade(contabilidade); deleteCompras(compras); return 0; }