/SupermarketManagement

Sistema de gerenciamento de supermercado

Primary LanguageC

Supermarket-Inventory-Management-System

Problematica:

Criar um progama em linguagem c que gerencia um estoque de supermercado, utilizando os conteúdos vistos nas 3 unidades da máteria Algoritmos e Estrutura de Dados 1

Recursos disponiveis no sistema:

  • Adicionar produto
//essa função recebe todos os dados necessarios para criar um produto e guarda o produto em um departamento;
void insere_novo_produto(Departamento* departamento, char* tipo, char* validade, char* fabricacao, int estoque, char* nome_departamento, float preco){
  
  Departamento* departamento_auxiliar = departamento;
  Produto* novo_produto = aloca_produto();
  if(novo_produto == NULL){
    printf("erro!!!");
    exit(1);
  }
  
  strcpy(novo_produto->tipo,tipo);
  strcpy(novo_produto->fabricacao,fabricacao);
  strcpy(novo_produto->nome_departamento,nome_departamento);
  strcpy(novo_produto->validade,validade);
  novo_produto->estoque = estoque;
  novo_produto->preco = preco;

  while(departamento_auxiliar != NULL){
    
    if(strcmp(departamento_auxiliar->nome,nome_departamento) == 0){
      
      novo_produto->proximo_produto = departamento_auxiliar->lista_produtos;
      departamento_auxiliar->lista_produtos->produto_anterior = novo_produto;
      departamento_auxiliar->lista_produtos = novo_produto;
      departamento_auxiliar->quantidade_produtos++;
      
    }
    departamento_auxiliar = departamento_auxiliar->proximo_departamento;
  }
  departamento = departamento_auxiliar;
}
  • Remover produto
//essa função usa o nome do produto e a lista de departamentos para conseguir retirar um produto do sistema;
void remove_produto(Departamento* departamento, char* nome_produto){
  int achou_produto=0;
  Departamento* departamento_auxiliar = departamento;
  Produto* produto_auxiliar;
  Produto* produto_free;

  while(departamento_auxiliar != NULL){
    produto_auxiliar = departamento_auxiliar->lista_produtos;
    
    while (produto_auxiliar != NULL){
      
      if(strcmp(produto_auxiliar->tipo,nome_produto) == 0){
        if(produto_auxiliar->produto_anterior == NULL){

          achou_produto++;
          produto_free = produto_auxiliar;
          produto_auxiliar = produto_auxiliar->proximo_produto;
          produto_auxiliar->produto_anterior = NULL;

        }else if(produto_auxiliar->proximo_produto == NULL){

          achou_produto++;
          produto_free = produto_auxiliar;
          produto_auxiliar->produto_anterior->proximo_produto = NULL;

        }else{

        achou_produto++;
        produto_free = produto_auxiliar;
        produto_auxiliar->proximo_produto->produto_anterior = produto_auxiliar->produto_anterior;
        produto_auxiliar->produto_anterior->proximo_produto = produto_auxiliar->proximo_produto;

        }
         printf("%s %s %s %d %.2f\n",produto_free->tipo, produto_free->validade,produto_free->fabricacao,produto_free->estoque, produto_free->preco);
         free(produto_free);
         printf("\nproduto removido com sucesso\n");
      }
      produto_auxiliar = produto_auxiliar->proximo_produto;
    }
    departamento_auxiliar = departamento_auxiliar->proximo_departamento;
  }
  if(achou_produto == 0){
    printf("\n\nproduto não encontrado");
  }
}
  • Listar produtos cadastrados
//essa função recebe nosso a lista de departamento e imprime todos os produtos e departamentos que estão no sistema;
void lista_departamento_imprime(Departamento* departamento){
  Departamento* departamento_auxiliar = departamento; 
  Produto* lista_produtos;

  while(departamento_auxiliar != NULL){
    if(departamento_auxiliar->quantidade_produtos == 0){
      printf("\ndepartamento: %s, nenhum produto nesse departamento;\n",departamento_auxiliar->nome);
    }
    else{
    printf("\n\nnome do departamento: %s, quantidade de produtos nesse departamento: %d\n", departamento_auxiliar->nome,departamento_auxiliar->quantidade_produtos);
    lista_produtos = departamento_auxiliar->lista_produtos;

    while (lista_produtos != NULL){
      if(lista_produtos->estoque == 0){
        printf("\nnome do produto: %s\nvalidade do produto: %s\ndata de fabricação do produto: %s\neste produto não está disponivel em estoque\npreço do produto: %.2f\n",lista_produtos->tipo, lista_produtos->validade,lista_produtos->fabricacao, lista_produtos->preco);
      }else{
      printf("\nnome do produto: %s\nvalidade do produto: %s\ndata de fabricação do produto: %s\nquantidade em estoque: %d\npreço do produto: %.2f\n",lista_produtos->tipo, lista_produtos->validade,lista_produtos->fabricacao,lista_produtos->estoque, lista_produtos->preco);
      }
      lista_produtos = lista_produtos->proximo_produto;
    }

  }
  departamento_auxiliar = departamento_auxiliar->proximo_departamento;
  }
}
  • Editar produto
//essa função utiliza a lista de departamentos e um nome digitado pelo usuario para editar algum dado do determinado produto;
void* editar_produto(Departamento* departamento, char* nome_produto){
  Produto* produto_editar = busca_produto(departamento,nome_produto);
  char tipo[50],validade[50],fabricacao[50],nome_departamento[50];
  int escolha = 0, opcao;

  printf("nome do produto:%s\ndata de validade do produto:%s\ndata de fabricação do produto:%s\nquantidade em estoque desse produto:%d\npreço do produto:%.2f\n",produto_editar->tipo, produto_editar->validade,produto_editar->fabricacao,produto_editar->estoque, produto_editar->preco);

  do{
    imprime_menu_edita();
    printf("digite a opção que deseja: ");
    escolha=somente_numeros();//garante que o usuario só vai digitar numeros
    switch (escolha){
      case 1:
        printf("digite novo nome do produto: \n");
        scanf(" %[^\n]", tipo);
        minuscula(tipo);
        strcpy(produto_editar->tipo,tipo);
        break;
      case 2:
        printf("digite a nova data de validade: \n");
        scanf(" %[^\n]", validade);
        minuscula(validade);
        strcpy(produto_editar->validade,validade);
        break;
      case 3:
        printf("digite a nova data de fabricação: \n");
        scanf(" %[^\n]", fabricacao);
        minuscula(fabricacao);
        strcpy(produto_editar->fabricacao,fabricacao);
        break;
      case 4:
        printf("digite o novo nome do departamento: \n");
        scanf(" %[^\n]", nome_departamento);
        minuscula(nome_departamento);
        strcpy(produto_editar->nome_departamento,nome_departamento);
        break;
      case 5:
        printf("digite a nova quantidade desse produto no estoque: \n");
        scanf("%d",&produto_editar->estoque);
        break;
      case 6:
        printf("digite o novo preço do produto: \n");
        scanf("%f",&produto_editar->preco);
        break;
      case 7:
        printf("item editado com sucesso\n");
        printf("%s %s %s %d %.2f\n",produto_editar->tipo, produto_editar->validade,produto_editar->fabricacao,produto_editar->estoque, produto_editar->preco);
        break;
      default:
        printf("opção inválida\n");
        break;
    }

    do{
    printf("mais alguma alteraçao a ser feita ?\n 1-sim ou 2-não\n");
      opcao = somente_numeros();
    if(opcao == 2){
      printf("item editado com sucesso\n");
      printf("nome do produto: %s\ndata de validade do produto: %s\ndata de fabricação do produto: %s\nquantidade em estoque desse produto: %d\npreço do produto: %.2f\n",produto_editar->tipo, produto_editar->validade,produto_editar->fabricacao,produto_editar->estoque, produto_editar->preco);
      escolha = 7;
      opcao = 1;
    }else if(opcao != 2){
      printf("opcão invalida\n");
    }
    }while(opcao != 1);
  }while(escolha != 7);
}
  • Consultar produtos disponiveis em um departamento
//essa função recebe a lista de departamentos e o nome do produto e verifica se esse produto está disponivel em estoque;
void verifica_produtos_estoque(Departamento* departamento, char*nome_departamento){
  Departamento* departamento_auxiliar=departamento;
  Produto* produto_auxiliar;
  while(departamento_auxiliar != NULL){

    if(strcmp(departamento_auxiliar->nome,nome_departamento) == 0){
      
      produto_auxiliar=departamento_auxiliar->lista_produtos;
      
      if(verifica_departamento_vazio(departamento_auxiliar) == 0){
        printf("\nnenhum produto cadastrado nesse departamento\n");
      }
      
      while(produto_auxiliar != NULL){

        if(produto_auxiliar->estoque != 0){
          printf("\n\nnome do produto: %s, quantidade disponivel: %d\n",produto_auxiliar->tipo,produto_auxiliar->estoque);
        }else{
          printf("\n\nnão há %s disponivel no estoque\n",produto_auxiliar->tipo);
        }
        produto_auxiliar=produto_auxiliar->proximo_produto;

      }
    }
  departamento_auxiliar = departamento_auxiliar->proximo_departamento;
  }
}
  • Consultar quantidade de produtos por departamento
//essa função imprime a quantidade de produtos de cada departamento;
void produtos_por_departamento(Departamento* departamento){
  Departamento* departamento_auxiliar = departamento;
 
  while(departamento_auxiliar!=NULL){
      printf("\ndepartamento: %s\nquantidade de produtos: %d\n\n",departamento_auxiliar->nome,departamento_auxiliar->quantidade_produtos);
   
    departamento_auxiliar = departamento_auxiliar->proximo_departamento;
  }

}
  • Sair
    • Essa funcionalidade é responsavel pela finalização o programa.