#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_PRODUTOS 50 // Capacidade máxima do vetor (mínimo 5 exigido)
// 1. Estrutura para representar os produtos (struct)
typedef struct {
    int codigo;
    char nome[50];
    char categoria;
    float preco;
    int quantidade;
    }Produto;
    // Protótipos das funções
    void limparBuffer()
        int buscarSequencial(Produto estoque[], int total, int codigo);
        void bubbleSort(Produto estoque[], int total);
        void cadastrarProduto(Produto estoque[], int *total)
        void relatorioGeral(Produto estoque[], int total);
        void executarVenda(Produto estoque[], int total);
        void atualizarPrecoTodos(Produto estoque[], int total);
        void atualizarPrecoEspecifico(Produto estoque[], int total);
        void menuAtualizacaoPreco(Produto estoque[], int total);
        int main(){
            Produto estoque [MAX_PRODUTOS]
            int totalCadastrados = 0;
            int opcao;
            do {
                printf("\n===================================\n");
                printf(          TECHSTORE INFORMATICA          );
                printf("     SISTEMA DE CONTROLE DE ESTOQUE'    ");
                printf("\n===================================\n");
                printf("1. Cadastrar produtos no estoque\n");
                printf("2.Relatorio geral (Listar produtos)\n");
                printf("3. Excutar venda \n");
                printf("4. Atualizacao de preco\n");
                printf("5. Sair\n");
                if (scanf("%d", &opcao) != 1){
                    printf("\nErro: Entrada invalida! Digite apenas numeros. \n");
                    limparBuffer();
                    continue;{
                    switch (opcao) {
                        case 1: 
                        cadastrarProduto(estoque, &totalCadastrados);
                        break;
                        case 2:
                        relatorioGeral(estoque, totalCadastrados);
                        break;
                        case 3:
                        executarVenda(estoqu, totalCadastrados);
                        break;
                        case 4:
                        menuAtualizacaoPreco(estoque, totalCadastrados);
                        break;
                        case 5:
                        printf("\nEncerrando o sistema... Ate logo!\n")
                        break;
                        default:
                        printf("\nOpcao invalda! Escolha um valor entre 1 e 5.\n")}
                    } while (opcao != 5)
                    return 0;
                }
                // Funçao para lmpar o buffer de entrada do teclado
                void limparBuffer()
                int c;
                while (( c = getchat()) != '\n' && c != EOF)

                    }
            // 2. Algoritmo d Busca Sequencial pelo codigo do produto
            int buscarSequencial(Produto estoque[], int total, int codigo) {
                for (int i = 0; i < total; i++) {
                    if (estoquei [i].codigo == codigo) {
                        return i; // Retorna o índice onde o produto foi localizado
                        {
                          return -1; // Produto não ncontrado
                          //3. Algoritmo de Ordenação Bubble Sort por código (ordem crescente)
                          void bubbleSort(Produto estoque[], int total) {
                            for (int i=0; i < total - 1; i++) {
                                for (int j = 0; j < total - 1 - i; j++) {
                                    if (estoque[j].codigo > estoque[j +1].codigo) {
                                        Produto temp = estoque[j];
                                        estoque[j] = estoque[j +1];
                                        estoque[j + 1] = temp;

                                    }
                                }
                            } 
                        }
                    } //4. Opção 1: cadastrar Produto
                    void cadstrarProduto(Produto estoque[], int *total) {
                        printf("\n--- CADASTRO DE PRODUTO ---\n");

                //Validação de capacidade do vetor
                if(*total >=MAX_PRODUTOS) {
                printf("Erro: Capacidade maxima de estoque atingida (%d produtos) !\n", MAX_PRODUTOS);
                return;
                {
            
                int codigo;
                printf("Digite o codigo do produto: ");
                if (scanf("%d", &codigo) != 1) {
                    printf("Codigo invalido!\n");
                    limparBuffe();
                    return;
                }
            //Validação de código duplicado por buscar sequencial
            if (buscarSequencial(estoque, *total, codigo) != -1) {
            printf("Erro: Já exste um produto cadastrado com o código %d!\n", codigo);
            return;
            {
        }
            Produto novo;
            novo.codgo = codigo;
            limparBuffer();

            printf("Digite o nome do produto:");
            fgets(novo.nome, sizeof(novo.nome), stidin);
            novo.nome[strcspn(novo.nome, '\n')] = '\0'; // Remove o \n do final

            printf("Digite a categoria do produto:");
            fgets(novo.categoria, sizeof(novo.categoria), stidin);
            novo.categoria[strcspn(novo.categoria, "\n")] = '\0':

            printf("Digite o preco do produto:");
            fgets(novo.preco, sizeof(novo.preco), stidin);
            if (scanf("%f", &novo.preco) != 1 || novo.preco <= 0) { 

            printf("Digite o preco unitario (ex: 150.00): R$");
            if (scanf("%f", %novo.preco) != 1 || novo.preco <= 0) {
            printf("Erro: 0 preco dve ser um valor maior que zero!\n");
            limparBuffer();
            return;

                        }
            printf("Digite a quantidade inicial em estoque");
            if (scanf("%d", &novo.quantidade) != 1 || novo.quantidade < 0) {
            lmparBuffer();
            return;

            {

            estoque[*total] = novo;
            (*total)++;
            printf("Sucesso: produto "%s" cadastrado com sucesso!\n", novo.nome);
            {
                //5. Opção 2: Relatório Geral (Com Ordenação Bubble Sort)
                void relatorioGeral(Produto estoque[], int total) {
                    printf("\n--- RELATORIO GERAL DE PRODUTOS ---\n");

                    if (total == 0) {
                        printf("Nenhum produto cadastrado no estoque.\n");
                        return;
                    

                    
                    }

                    //Ordernação obrigatória com Bubble Sort antes de exibir
                    bubbleSort(estoque, total);

                    printf("--------------------------------------------------------------------------------------------\n");
                    printf("%-8s | %-25s | %-15s | %-10s | %-10s\n", "CODIGO", "NOME", "CATEGORIA", "PRECO" (R$), "ESTOQUE");
                    printf("--------------------------------------------------------------------------------------------\n");

                    for (int i = 0; i < total; i++) {
                        printf("&-8d | %-25s | %-15s | R$ %-9.2f | %-10s\n",
                            estoque[i].codigo,
                            estoque[i].nome
                            estoque[i].categoria.
                            estoque[i].preco,
                            estoque[i].quantidade);


                            
                    }

                    printf("--------------------------------------------------------------------------------------------\n")/
                    printf("Total de produtos listados: %d\n", total);
                    {
                        //6. Opção 3: Executar venda
                        void executarVenda(Produto estoque[], int total) {
                            printf("\n--- EXECUTAR VENDA ---\n");

                            if (total == 0) {
                                printf("Nenhum produto cadastrado no estoque.\n");
                                return;
                            }

                            int codigo;
                            printf("Digite o codigo do produto a ser vendido: ");


                            if (scanf("%d", &codigo) != 1) {
                                printf("Erro: Codigo invalido!\n");
                                limparBuffer();
                                return;
                            }

                            int indice = buscarSequencial(estoque, total, codigo);
                            if (indice == -1) {
                                printf("Erro: Produto com codigo %d nao encontrado!\n", codigo);
                                return;
                            

                            }

                            int quantidadeVendida;
                            printf("Digite a quantidade a ser vendida: ");
                            if (scanf("%d", &quantidadeVendida) != 1 || quantidadeVendida <= 0) {
                                printf("Erro: Quantidade invalida! Deve ser um valor maior que zero.\n");
                                limparBuffer();
                                return;
                            

                            }

                            if (quantidadeVendida > estoque[indice].quantidade) {
                                printf("Erro: Quantidade em estoque insuficiente! Estoque atual: %d\n", estoque[indice].quantidade);
                                return;
                            

                            }

                            // Atualiza a quantidade em estoque após a venda
                            estoque[indice].quantidade -= quantidadeVendida;
                            float valorTotal = quantidadeVendida * estoque[indice].preco;
                            printf("Venda realizada com sucesso! Valor total da venda: R$ %.2f\n", valorTotal);

                            // Resumo da Operação
                            printf("\n--- RESUMO DA VENDA ---\n");
                            printf("Produto: %s\n", estoque[indice].nome);
                            printf("Quantidade vendida: %d\n", quantidadeVendida);
                            printf("Valor total: R$ %.2f\n", valorTotal);
                            printf("--------------------------------\n");

                            char confirmacao;
                            printf("Deseja confirmar a venda? (S/N): ");
                            limparBuffer();
                            scanf("%c", &confirmacao);

                            if (confirmacao == 'S' || confirmacao == 's') {
                                printf("Venda confirmada!\n");
                            } else {
                                // Reverte a quantidade em estoque caso a venda não seja confirmada
                                estoque[indice].quantidade += quantidadeVendida;
                                printf("Venda cancelada. Estoque revertido.\n");

                                //7. Opção 4: Atualização de Preço
                                void atualizarPrecoTodos(Produto estoque[], int total) {
                                    if (total == 0) {
                                        printf("Nenhum produto cadastrado no estoque.\n");
                                        return;
                                    }

                                    float percentual;
                                    printf("Digite o percentual de aumento (ex: 10 para 10%%): ");
                                    if (scanf("%f", &percentual) != 1) {
                                        printf("Erro: Percentual invalido!\n");
                                        limparBuffer();
                                        return;
                                    }

                                    for (int i = 0; i < total; i++) {
                                        estoque[i].preco *= (1 + percentual / 100);
                                    }
                                    printf("Preços atualizados com sucesso!\n");
                                }

                                //8 . Atualização de preço específico
                                void atualizarPrecoEspecifico(Produto estoque[], int total) {
                                    if (total == 0) {
                                        printf("Nenhum produto cadastrado no estoque.\n");
                                        return;
                                    } 

                                    int codigo;
                                    printf("Digite o codigo do produto para atualizar o preco: ");
                                    if (scanf("%d", &codigo) != 1) {
                                        printf("Erro: Codigo invalido!\n");
                                        limparBuffer();
                                        return;
                                    }

                                    int indice = buscarSequencial(estoque, total, codigo);
                                    if (indice == -1) {
                                        printf("Erro: Produto com codigo %d nao encontrado!\n", codigo);
                                        return;
                                    }

                                    float percentual;
                                    printf("Digite o percentual de aumento (ex: 10 para 10%%): ");
                                    if (scanf("%f", &percentual) != 1) {
                                        printf("Erro: Percentual invalido!\n");
                                        limparBuffer();
                                        return;
                                    }

                                    float precoAntigo = estoque[indice].preco;
                                    estoque[indice].preco *= (1 + percentual / 100);
                                    printf("Preco do produto atualizado de R$ %.2f para R$ %.2f\n", precoAntigo, estoque[indice].preco);

                                {
                                    //9. Menu de atualização de preço
                                    void menuAtualizacaoPreco(Produto estoque[], int total) {
                                        int opcao;
                                        do {
                                            printf("\n--- ATUALIZACAO DE PRECO ---\n");
                                            printf("1. Atualizar preco de todos os produtos\n");
                                            printf("2. Atualizar preco de um produto especifico\n");
                                            printf("3. Voltar ao menu principal\n");
                                            printf("Escolha uma opcao: ");
                                            if (scanf("%d", &opcao) != 1) {
                                                printf("Erro: Entrada invalida! Digite apenas numeros.\n");
                                                limparBuffer();
                                                continue;
                                            }

                                            switch (opcao) {
                                                case 1:
                                                    atualizarPrecoTodos(estoque, total);
                                                    break;
                                                case 2:
                                                    atualizarPrecoEspecifico(estoque, total);
                                                    break;
                                                case 3:
                                                    printf("Voltando ao menu principal...\n");
                                                    break;
                                                default:
                                                    printf("Opcao invalida! Escolha um valor entre 1 e 3.\n");
                                            }
                                        } while (opcao != 3);
                                }

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: