Ir ao conteúdo

Posts recomendados

Postado

eu preciso criar um programa para controlar preços de fornecedor, mas o menu fica igual lista e eu gostaria de mellhorar a apresentaçao do menu. como faço isso?


<

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_FORNECEDORES 50
#define MAX_ITENS 100

typedef struct {
    char nome[50];
    float preco;
    char condicao_pagamento[50];
} Fornecedor;

typedef struct {
    char nome[50];
    int quantidade;
} Item;

Fornecedor fornecedores[MAX_FORNECEDORES];
Item itens[MAX_ITENS];
int num_fornecedores = 0;
int num_itens = 0;

void cadastrarFornecedor() {
    if (num_fornecedores < MAX_FORNECEDORES) {
        printf("Nome do Fornecedor: ");
        scanf("%s", fornecedores[num_fornecedores].nome);
        printf("Preco: ");
        scanf("%f", &fornecedores[num_fornecedores].preco);
        printf("Condicoes de Pagamento: ");
        scanf("%s", fornecedores[num_fornecedores].condicao_pagamento);
        num_fornecedores++;
    } else {
        printf("Limite de fornecedores atingido.\n");
    }
}

void cadastrarItem() {
    if (num_itens < MAX_ITENS) {
        printf("Nome do Item: ");
        scanf("%s", itens[num_itens].nome);
        printf("Quantidade: ");
        scanf("%d", &itens[num_itens].quantidade);
        num_itens++;
    } else {
        printf("Limite de itens atingido.\n");
    }
}

float calcularPrecoTotal() {
    float total = 0;
    for (int i = 0; i < num_itens; i++) {
        float menor_preco = fornecedores[0].preco;
        for (int j = 1; j < num_fornecedores; j++) {
            if (fornecedores[j].preco < menor_preco) {
                menor_preco = fornecedores[j].preco;
            }
        }
        total += menor_preco * itens[i].quantidade;
    }
    return total;
}

void exibirRelatorio() {
    printf("Relatorio de Compras:\n");
    for (int i = 0; i < num_itens; i++) {
        printf("Item: %s, Quantidade: %d\n", itens[i].nome, itens[i].quantidade);
    }
    printf("Custo Total: %.2f\n", calcularPrecoTotal());
}

int main() {
    int opcao;
    do {
        printf("1. Cadastrar Fornecedor\n");
        printf("2. Cadastrar Item\n");
        printf("3. Exibir Relatorio\n");
        printf("0. Sair\n");
        printf("Escolha uma opcao: ");
        scanf("%d", &opcao);

        switch (opcao) {
            case 1:
                cadastrarFornecedor();
                break;
            case 2:
                cadastrarItem();
                break;
            case 3:
                exibirRelatorio();
                break;
            case 0:
                printf("Saindo...\n");
                break;
            default:
                printf("Opcao invalida!\n");
        }
    } while (opcao != 0);

    return 0;
}


>

image.png.5a6c769b32090dd0f0d3443d1c332991.png

fica assim e eu gostaria de algo assim: 

image.png.3afbafec63372a81bf2d324a198edbf3.png

imagem_2024-08-17_215926141.png

  • Obrigado 1
Postado

@Pantera_Mel    para o menu ficar iguaL à esse da imagem ,  você pode simplesmente ir desenhando com os caracteres ASCII , sendo que o mais difícil de conseguir é o traço vertical , pois em alhuns teclados não o têm  por padrão , e aí você precisa usar a combinação das teclas pressionando ALT + o valor 124 , e os outros caracteres são mais fáceis ,  e um menu mais detalhado você pode usar a API do Windows para consegui-lo , como por exemplo esse aqui   :

/***
    no codeblocks , crie um projeto, clicando em :
    File / New / project / Win32 GUI project ,
    coloque o nome e salve, depois delete o código
    ciado pelo codeblock e coloque esse codigo no mesmo lugar
    depois coloque no linker do compilador
    esse código aqui  "-lgdi32"  sem as aspas
***/
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#define ID_BUTTON_opcao_1    1001
#define ID_BUTTON_opcao_2    1002
#define ID_BUTTON_sair       1003
#define ID_BUTTON_campeonato 1004
#define ID_BUTTON_Exibir_Uma_Fila_Especifica 1005

HINSTANCE g_inst;
HWND ButtonOpcao_2,ButtonOpcao_1,ButtonSair,ButtonCampeonato,Button_Exibir_Uma_Fila_Especifica;

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain ( HINSTANCE hThisInstance ,
                     HINSTANCE hPrevInstance ,
                     LPSTR lpszArgument      ,
                     int nFunsterStil        )
{
    HDC hdc          ;
    HWND hwnd        ;
    MSG messages     ;
    WNDCLASSEX wincl ;
    HFONT Minhaletra ;

    wincl.hInstance     = hThisInstance;
    wincl.lpszClassName = "WindowsApp";
    wincl.lpfnWndProc   = WindowProcedure;
    wincl.style         = CS_DBLCLKS;
    wincl.cbSize        = sizeof (WNDCLASSEX);

    wincl.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm       = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName  = NULL;
    wincl.cbClsExtra    = 0;
    wincl.cbWndExtra    = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    if (!RegisterClassEx (&wincl))
        return 0;

    hwnd = CreateWindowEx (
        0,
        "WindowsApp",
        "Menu De Botões",
        WS_OVERLAPPEDWINDOW,
        50,
        10,
        1024,
        720,
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
        );

    ShowWindow (hwnd, nFunsterStil);

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    PostMessage(GetConsoleWindow(), WM_CLOSE, 0, 0);
    return messages.wParam;
}
void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    ButtonOpcao_1 = CreateWindowEx (
        0,
        "BUTTON",
        "   Informações Sobre O Programna .   ",
        WS_VISIBLE|WS_CHILD,
        80, 30, 250, 50,
        hwnd,
        (HMENU)ID_BUTTON_opcao_1,
        g_inst,
        NULL
        );

    ButtonOpcao_2 = CreateWindowEx (
        0, "BUTTON", "   Cadastrare Uma Pessoa Na File .   ",
        WS_VISIBLE|WS_CHILD,
        80, 90, 250, 50,
        hwnd, (HMENU)ID_BUTTON_opcao_2, g_inst, NULL);

    ButtonCampeonato = CreateWindowEx (
        0, "BUTTON", "   Exibir A Fila GeraL .   ",
        WS_VISIBLE|WS_CHILD,
        80, 150, 250, 50,
        hwnd, (HMENU)ID_BUTTON_campeonato, g_inst, NULL);

    Button_Exibir_Uma_Fila_Especifica = CreateWindowEx (
        0, "BUTTON", "   Exibir Uma Fila Especifica .   ",
        WS_VISIBLE|WS_CHILD,
        80, 210, 250, 50,
        hwnd, (HMENU)ID_BUTTON_Exibir_Uma_Fila_Especifica, g_inst, NULL);

    ButtonSair = CreateWindowEx (
        0, "BUTTON", "   Sair .  ",
        WS_VISIBLE|WS_CHILD,
        80, 270, 250, 50,
        hwnd, (HMENU)ID_BUTTON_sair, g_inst, NULL);

/*
    SendMessage((HWND) ButtonOpcao_1   ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) ButtonSair      ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) ButtonCampeonato,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
*/
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc ;
    hdc=GetDC(NULL);
    COLORREF cor = RGB(255,0,0);
    PAINTSTRUCT ps;
    switch (message)
    {
        case WM_CREATE:
            DesenharObjectos(hwnd,message,wParam,lParam);
            break;
        case WM_KEYDOWN:
        if (wParam == VK_ESCAPE)
        {
          PostQuitMessage (0) ;
          return 0 ;
        }
        case WM_COMMAND:

            if ((HIWORD(wParam) == BN_CLICKED))
            {
                switch (LOWORD(wParam))
                {
                case ID_BUTTON_opcao_1 :
                    /*hdc = BeginPaint (hwnd, &ps) ;*/
                    MoveToEx(hdc,300,10,NULL);
                    LineTo(hdc,800,500);
                    Rectangle(hdc,800,80,1000,220);
                    for(int j=0;j<360;j++){
                        int c=cos(j*3.141615/180)*100+965;
                        int l=sin(j*3.141615/180)*100+350;
                        SetPixel(hdc,cos(j*3.141615/180)*50+350,sin(j*3.141615/180)*50+550,cor);
                        SetPixel(hdc,c,l,cor);
                        SetPixel(hdc,j+300,50,cor);
                    }
                    /*ReleaseDC(NULL, hdc);*/
                    /*EndPaint (hwnd, &ps) ;*/
                    MessageBox(hwnd,"Você Clicou No Botão De Informações Sobre O Programna . . . !\ncoloque aqui o código para rodar o jogo .","Informação !",0);
                    break;
                case ID_BUTTON_opcao_2 :
                    MessageBox(hwnd,"Você Clicou No Botão Cadastrare Uma Pessoa Na File . . . !","Informação !",0);
                    break;
                case ID_BUTTON_campeonato :
                    MessageBox(hwnd,"Você Clicou No Botão ExibirA Fila GeraL . . . !","Informação !",0);
                    break;
                case ID_BUTTON_Exibir_Uma_Fila_Especifica :
                    MessageBox(hwnd,"Você Clicou No Botão Exibir Uma Fila Especifica . . . !","Informação !",0);
                    break;
                case ID_BUTTON_sair :
                    PostQuitMessage (0);
                    break;
                }
                /*sprintf(s_total,"%d",total); colocar texto na janela do Edite*/
            }
            break;
        case WM_DESTROY :
            PostQuitMessage (0);/* se clicar no x vermelho de fechar*/
            break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

linkerdocodeBlocks.thumb.jpg.3fa4af059841c065905e50e338ebc895.jpg

Postado

Boa noite!

 

RÓTULOS GRÁFICOS

Aquele menu é, supostamente, uma composição textual de 5 caracteres; (+),  (-), ( | ) e espaços, parte é constante, ou seja, existe literalmente no código-fonte, e a outra parte se produz num laço (repetição) pela computação. Por exemplo, a tabela "Exibir a fila geral", nela há texto constante como titulo, bordas e os rótulos nas colunas.

 

Uma exemplificação de texto:

 

	
    +-------------------------+
    |    Exibir fila geral    |
    +-------------------------+
    
    +--------+--------------------+---------+---------------------+---------------------+
    |  Fase  |  Nome              |  Idade  |  Profissão (grupo)  |  Comobirdade (1|0)  |
    +--------+--------------------+---------+---------------------+---------------------+

Tudo isso é capaz de existir numa variável.

Assim:

C'11 12.4.0

#include <stdio.h>

char *cabecalho_fila_geral =
        "+-------------------------+\n"
        "|    Exibir fila geral    |\n"
        "+-------------------------+\n"
        "\n"
        "+--------+--------------------+---------+---------------------+---------------------+\n"
        "|  Fase  |  Nome              |  Idade  |  Profissão (grupo)  |  Comobirdade (1|0)  |\n"
        "+--------+--------------------+---------+---------------------+---------------------+\n\n";

int exibir_fila_geral (void *tela);
int main (void)
  {
    printf ("%s", cabecalho_fila_geral);
    /*^~~~ produz esse texto apontado no simulador de terminal */
  }

 

Todos os gráficos e rótulos, portanto, tabelas aparentemente, seguem o mesmo princípio que tetei elucidar.

Se duvida disto, pergunte por favor.

 

Você consegue construir essas strings (texto como valor) no código-fonte, num arquivo externo ou até mesmo na computação.

A escolha é sua! Entendeu.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!