quinta-feira, 26 de agosto de 2010
quinta-feira, 12 de agosto de 2010
quarta-feira, 11 de agosto de 2010
sexta-feira, 6 de agosto de 2010
domingo, 1 de agosto de 2010
domingo, 25 de julho de 2010
segunda-feira, 12 de julho de 2010
sexta-feira, 9 de julho de 2010
terça-feira, 29 de junho de 2010
sábado, 19 de junho de 2010
ControlToy v.1
Postado por
Olhando do Lado Daqui
às
17:48
Depois de algumas madrugadas a dentro e "perdendo" algumas aulas de ditado na faculdade, consegui concluir meu primeiro projeto em linguagem C usando a IDE Dev-C++, para a faculdade. Um programa para gerenciamento de loja com controle de estoque, caixa, entrada de produtos e listagem de com paginação!
Tela Principal
Código Fonte
ControlToy v.1.c
Onde é chamado os métodos correspondentes a opção selecionada pelo usuário.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ #include "includes.c" void main() { char option; // Descomente a linha abaixo para o programa cadastrar 100 produtos automaticamente. // testProducts(); while(option != '6') { system("cls"); printf("\n\t------------------"); printf("\n\t| ControlToy v.1 |"); printf("\n\t------------------"); printf("\n\n\tMENU PRINCIPAL\n"); printf("\n\t1) Cadastrar Produtos"); printf("\n\t2) Frente de Caixa"); printf("\n\t3) Consultar Estoque"); printf("\n\t4) Entrada de Produtos"); printf("\n\t5) Listagem de Produtos"); printf("\n\t6) Sair"); printf("\n\n\tSelecione a opcao desejada: "); fGetCH(&option); switch(option) { case '1': // Cadastrar Produtos createNewProduct(); break; case '2': // Frente de Caixa cashier(); break; case '3': // Consultar Estoque checkStock(); break; case '4': // Entrada de Produtos entryProduct(); break; case '5': // Listagem de Produtos listProducts(); break; case '6': // Sair if( !confirm(CONFIRMACAO_SAIR, 1) ) option = 0; break; default: alert(OPCAO_INVALIDA, 1); break; } } }
includes.c
Aqui é concentrado todos os includes necessários para o funcionamento do programa.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <math.h> #include "Constants.c" #include "Prototypes.c" #include "Structs.c" #include "db.c" #include "Utils.c" #include "Functions.c"
Constants.c
Constantes usadas no programa avisar e informar o usuário.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ // menu #define OPCAO_INVALIDA "Opcao invalida!" // db #define FIRST_ID 100 #define DB_SIZE 500 // novo produto #define PRODUTO_SUCESSO "Produto cadastrado com sucesso!" #define QTD_PAGINACAO 5 // caixa #define QUANTIA_INDISPONIVEL "Quantidade nao disponivel em estoque!" #define INSERIR_NOVO "Deseja inserir novo produto na lista de compra? ( s:SIM, n:NAO )" #define FINALIZAR_LISTA "Deseja finalizar a lista de compra? ( s:SIM, n:NAO )" #define NOVO_PRODUTO_CAIXA_ERRO "Produto ja existe da lista de compra!" #define NAO_HA_PRODUTOS_CAIXA "Nao existem produtos cadastrados na lista de compra!" #define CONFIRMAR_LISTA_COMPRA "Efetuar saida dos produtos e baixa em estoque? ( s:SIM, n:NAO )" #define NOVA_LISTA "Deseja iniciar uma nova lista de compra? ( s:SIM, n:NAO )" #define VENDA_FINALIZADA "Saida de produtos efetuada com sucesso!" // consulta #define ID_NAO_ENCONTRADO "Produto nao encontrado, tente novamente!" #define CONTINUAR_BUSCA "Deseja consultar outro produto? ( s:SIM, n:NAO )" // entrada #define ENTRAR_OUTRO "Novos dados gravados com sucesso!\n\n\tDeseja da entrada em outro produto? ( s:SIM, n:NAO )" #define CONFIRMAR_INFO "Deseja alterar os valores de compra e venda do produto? ( s:SIM, n:NAO )" // lista #define NUMERO_PRE_CADASTRO 100 #define SAIR_LISTAGEM "Pressione qualquer tecla para voltar ao menu inicial..." #define NAO_HA_PRODUTOS "Nao existe produto cadastrado!" // sair #define CONFIRMACAO_SAIR "Tem certeza que deseja sair? ( s:SIM, n:NAO )"
Prototypes.c
Mantém as assinaturas dos métodos que são necessários antes da implementação.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ void alert(char text[], char cleanScreen); float *sumPurchases(); // [0]: quantidade total, [1]: valor total void completeShoppingList();
Structs.c
Estruras necessárias para tipar conjuntos de dados.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ typedef struct products { int id; char description[100]; float sale, purchase; int stored; }product;
db.c
Variáveis e métodos usados para gerenciar as entradas e saídas de dados do vetor que guarda os produtos.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ int id = FIRST_ID, index = 0, cashierIndex = 0, cashierProducts[DB_SIZE][2]; product products[DB_SIZE]; int getNewId() { return ++id; } void insertNewProduct(product newProduct) { newProduct.id = getNewId(); products[index] = newProduct; index++; } void insertNewProductVariables(char description[], float sale, float purchase, int stored) { product newProduct; strncpy(newProduct.description, description, 100); newProduct.sale = sale; newProduct.purchase = purchase; newProduct.stored = stored; insertNewProduct( newProduct ); } int verifyProductID( int pID ) { int i, rtn = 0, found = 0; product prod; for(i = 0; i < index; i++) { if(pID == products[i].id) { rtn = pID; found = 1; break; } } if( !found ) { alert(ID_NAO_ENCONTRADO, 1); return -1; } return rtn; } int getProductByID( int pID ) { int i, rtn = 0, found = 0; product prod; for(i = 0; i < index; i++) { if(pID == products[i].id) { rtn = i; found = 1; break; } } if( !found ) { alert(ID_NAO_ENCONTRADO, 1); return -1; } return rtn; } float getProductSellingPrice(int pID) { float rtn = 0.0; int i; for(i = 0; i < index; i++) { if(pID == products[i].id) { rtn = products[i].sale; break; } } return rtn; } void startNewCashier() { int i; for(i = 0; i < DB_SIZE; i++) { cashierProducts[i][0] = -1; cashierProducts[i][1] = -1; } cashierIndex = 0; } void inserNewCashierProduct(int pID, int qtd) { cashierProducts[cashierIndex][0] = pID; cashierProducts[cashierIndex][1] = qtd; cashierIndex++; } int hasProductInCashier(int pID) { int i; for(i = 0; i < cashierIndex; i++) if(cashierProducts[i][1] == pID) return 1; return 0; }
Utils.c
Métodos e variáveis usadas globalmente pelo programa, para auxiliar no feedback do usuário e na execução de operações.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ // Mostra uma mensagem na tela void alert(char text[], char cleanScreen) { if(cleanScreen) system("cls"); printf("\n\n\n\t*** AVISO ***\n\n\t%s\n\n\n\n\t", text); system("pause"); } void pause(char text[]) { printf("%s", text); fflush(stdin); getch(); } void fGetCH(char * value) { fflush(stdin); *value = getch(); } void fGetS(char * value) { fflush(stdin); gets(value); } int confirm(char text[], char cleanScreen) { int rtn = 0; char choice; if(cleanScreen) system("cls"); printf("\n\n\n\t*** ATENCAO ***\n\n\t%s\n\t", text); fGetCH(&choice); if(choice == 'S' || choice == 's' || choice == 13) rtn = 1; return rtn; } int stopPagination(int cPage, int tPage) { int rtn = 1; char key; printf("\n\tPagina %i de %i.\n\tQualquer tecla: proxima pagina \\ ESQ: menu principal", cPage, tPage); fGetCH(&key); if(key == 27) rtn = 0; return rtn; } void showProductInfo(int pID) { printf("\t[%i] %s\n\t\tVenda R$ %.2f - Compra R$ %.2f // Estoque: %d unidades\n\n", products[pID].id, products[pID].description, products[pID].sale, products[pID].purchase, products[pID].stored); } void showCashierProductInfo(int pID) { int correctID = getProductByID(cashierProducts[pID][0]); printf("\t[%i] %s\n\t\tQuantidade: %i unidades - Total: R$ %.2f\n\n", products[correctID].id, products[correctID].description, cashierProducts[pID][1], cashierProducts[pID][1] * products[correctID].sale); } int closeShoppingList() { if(cashierIndex == 0) { alert(NAO_HA_PRODUTOS_CAIXA, 1); return 0; } int listIndex = 0, i, cPage = 1, tPage, rest, rtn = 1; tPage = cashierIndex / QTD_PAGINACAO; rest = cashierIndex % QTD_PAGINACAO; if(rest < 5) tPage++; else tPage--; for(i = 0; i < cashierIndex; i++) { if(listIndex == 0) { system("cls"); printf("\n\t--------------------"); printf("\n\t| FINALIZAR COMPRA |"); printf("\n\t--------------------\n\n"); } if(listIndex < QTD_PAGINACAO) { showCashierProductInfo(i); listIndex++; } if(listIndex >= QTD_PAGINACAO) { if( !stopPagination(cPage, tPage) ) break; cPage++; listIndex = 0; } if(listIndex != 0 && i == cashierIndex - 1) { float *sum = sumPurchases(); printf("\n\tPagina %i de %i.\n\n\t-------------------------------------------------------\n\tFIM DA LISTA DE COMPRA\n\n\tTotal de produtos: %.0f - Total da compra: R$ %.2f\n", cPage, tPage, sum[0], sum[1]); if(confirm(CONFIRMAR_LISTA_COMPRA, 0)) completeShoppingList(); else rtn = 0; } } return rtn; } float *sumPurchases() // [0]: quantidade total, [1]: valor total { float *rtn, qtd = 0.0, pSum = 0, saleValue, result[2]; int i; for(i = 0; i < cashierIndex; i++) { qtd += cashierProducts[i][1]; saleValue = getProductSellingPrice(cashierProducts[i][0]); pSum += saleValue * cashierProducts[i][1]; } result[0] = qtd; result[1] = pSum; rtn = &result; return rtn; } void completeShoppingList() { int i, productID; for(i = 0; i < cashierIndex; i++) { productID = getProductByID(cashierProducts[i][0]); products[productID].stored -= cashierProducts[i][1]; } alert(VENDA_FINALIZADA, 1); }
Functions.c
Métodos e variáveis do menu principal.
/* * ControlToy v.1 - 2010 * Desenvolvido por Marcelo L. Filho ( Idemax ) * idemax@idemax.net - www.idemax.net * Todos os direitos intelectuais reservados ao uso educacional. */ // popula o DB de produtos para testes void testProducts() { int i, n, t = NUMERO_PRE_CADASTRO; product testProduct; for(i = 0; i < t; i++) { n = i + 1; insertNewProductVariables("Produto", n*4, n*2, n*6); } } // 1- Cadastrar Produtos void createNewProduct() { system("cls"); product newProduct; printf("\n\t--------------------------"); printf("\n\t| CADASTRAR NOVO PRODUTO |"); printf("\n\t--------------------------\n"); printf("\n\n\tDigite a descricao do produto:\n\t"); fGetS( newProduct.description ); printf("\n\n\tDigite o valor de compra do produto:\n\t"); scanf("%f", &newProduct.purchase); printf("\n\n\tDigite o valor de venda do produto:\n\t"); scanf("%f", &newProduct.sale); printf("\n\n\tDigite a quantia que o produto tem em estoque:\n\t"); scanf("%d", &newProduct.stored); insertNewProduct( newProduct ); printf("\n\n\tNovo produto \"%s\" cadastrado com o ID: %i\n\n\t", newProduct.description, id); system("pause"); alert(PRODUTO_SUCESSO, 1); } // 2- Frente de Caixa void cashier() // cashier = caixa de supermercado ( http://www.liveenglishprogram.com/caixa.html ) { startNewCashier(); int continueRegistration = 1, listSize = cashierIndex, pID, qtd, qtdError; while( continueRegistration ) { system("cls"); printf("\n\t-------------------"); printf("\n\t| FRENTE DE CAIXA |"); printf("\n\t-------------------\n\n"); printf("\tProdutos da lista: %i", listSize); printf("\n\n\tDigite o ID do produto a ser inserido:\n\t\t( 0: menu principal, 1: finalizar lista )\n\t"); scanf("%i", &pID); if( pID == 0 ) return; if( pID != 1 ) // novo produto da lista { pID = verifyProductID(pID); if(pID > -1) { if( hasProductInCashier(pID) ) { alert(NOVO_PRODUTO_CAIXA_ERRO, 1); continue; } qtdError = 1; while( qtdError ) { printf("\n\n"); showProductInfo(getProductByID(pID)); printf("\tDigite a quantidade comprada: "); scanf("%i", &qtd); if( qtd > products[getProductByID(pID)].stored ) alert(QUANTIA_INDISPONIVEL, 0); else qtdError = 0; } inserNewCashierProduct(pID, qtd); listSize = cashierIndex; if(confirm(INSERIR_NOVO, 1)) { continue; } else if(confirm(FINALIZAR_LISTA, 0)) { if(!closeShoppingList() && confirm(NOVA_LISTA, 1)) cashier(); continueRegistration = 0; } else { continueRegistration = 0; } } } else // finaliza a lista { if(listSize != 0 && !closeShoppingList() && confirm(NOVA_LISTA, 1)) cashier(); continueRegistration = 0; } } } // 3- Consultar Estoque void checkStock() { system("cls"); printf("\n\t---------------------"); printf("\n\t| CONSULTAR ESTOQUE |"); printf("\n\t---------------------\n\n"); int pID; printf("\tDigite o ID do produto a ser consultado ( 0: menu principal ):\n\t"); scanf("%i", &pID); if( pID == 0 ) return; pID = getProductByID(pID); if(pID > -1) { printf("\n\n"); showProductInfo(pID); if(!confirm(CONTINUAR_BUSCA, 0)) return; } checkStock(); } // 4- Entrada de Produtos void entryProduct() { system("cls"); printf("\n\t-----------------------"); printf("\n\t| ENTRADA DE PRODUTOS |"); printf("\n\t-----------------------\n\n"); int pID; printf("\tDigite o ID do produto a ser dada entrada ( 0: menu principal ):\n\t"); scanf("%i", &pID); if( pID == 0 ) return; pID = getProductByID(pID); if(pID > -1) { printf("\n\n"); showProductInfo(pID); float sale, purchase; int stored; printf("\tDigite a quantidade de produtos que esta sendo adquirida:\n\t"); scanf("%i", &stored); products[pID].stored += stored; // No PDF pedia a quantidade adquirida nao a nova quantidade, por isso é adicionado a quantidade atual, nao atualizado. /* Contribuição abaixo de Xandão ( http://www.twitter.com/xandao_luchetti ) */ if(!confirm(CONFIRMAR_INFO, 0)) return; printf("\n\n\tDigite o novo preco de compra:\n\t"); scanf("%f", &purchase); printf("\n\n\tDigite o novo preco de venda:\n\t"); scanf("%f", &sale); products[pID].purchase = purchase; products[pID].sale = sale; if(!confirm(ENTRAR_OUTRO, 0)) return; } entryProduct(); } // 5- Listagem de Produtos void listProducts() { if(index == 0) { alert(NAO_HA_PRODUTOS, 1); return; } int listIndex = 0, i, cPage = 1, tPage, rest; tPage = index / QTD_PAGINACAO; rest = index % QTD_PAGINACAO; if(rest < 5) tPage++; else tPage--; for(i = 0; i < index; i++) { if(listIndex == 0) { system("cls"); printf("\n\t------------------------"); printf("\n\t| LISTAGEM DE PRODUTOS |"); printf("\n\t------------------------\n\n"); } if(listIndex < QTD_PAGINACAO) { showProductInfo(i); listIndex++; } if(listIndex >= QTD_PAGINACAO) { if( !stopPagination(cPage, tPage) ) break; cPage++; listIndex = 0; } if(listIndex != 0 && i == index - 1) { printf("\n\tPagina %i de %i.\n\t", cPage, tPage); pause(SAIR_LISTAGEM); } } }
Baixe os códigos fontes: ControlToy v.1.rar (16.39 KB)
quinta-feira, 17 de junho de 2010
Assinar:
Postagens (Atom)