Example #1
0
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();
}
Example #2
0
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;
}