Jump to content

Máquina auto atendimento


TiagoCP

Recommended Posts

Olá boa noite, 

Estou a desenvolver um trabalho sobre uma maquina de auto atendimento, que deve de aparecer um menu e depois o utilizador escolhe o menu que quiser e deverá de aparecer o valor com o respetivo troco ou não. E eu estou com duvidas como fazer para que se possa adicionar mais um produto depois de se já ter escolhido o primeiro menu.

Nesta parte foi a minha tentativa de fazer algo:

        case 1: printf("Escolheu o menu 'Frango sem bebida e com acompanhamento'.\n");
            printf("Quer adicionar mais algum produto? (S/N)\n");
            scanf("%s", &letra);
            switch(letra){

            case 'N': printf("\nTotal: 10,89 euros \nProceda ao pagamento...\n");
                      scanf("%f", &dinheiro);

                while(dinheiro<PrecoP1){
                    dinheiro_falta = PrecoP1 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP1;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

            case 'S': printf("Insira o numero do outro produto que quer adicionar: \n");
                      scanf("%d", &novo_produto);
            }
            break;

e este é o meu trabalho inteiro: 

#include<stdio.h>
#include<locale.h>
void escreveLinha(){
		printf("\n**************************");
	}
void escreveTraco(){
		printf("\n -------------------------------------------------------------------------------------------");
	}
void escreveColuna(){
		printf("\t|\t|\t|\t|\t|\t");
}
int main()
{
	setlocale(LC_ALL,"Portuguese");

char letra;
int menu;
float troco, dinheiro, dinheiro_falta, falta, PrecoP1 = 10.89, PrecoP2 = 13.29, PrecoP3 = 15.00, PrecoP4 = 16.99, PrecoP5 = 7.50, PrecoP6 = 8.50, PrecoP7 = 3.00, PrecoP8 = 4.00, PrecoP9 = 3.50;

		escreveLinha();
	printf("|SEJA BEM-VINDO A CHURRASQUEIRA CAMOMILA|**************************\n");

		escreveTraco();

	printf("\n|\t\t\t\t\t\t\t\t\t\t\t    |\n|  *Menu*\t *Conteúdo*\t\t\t\t\t\t  *Preço*\t    |\n");
   	printf("|    1 \t\t  Frango sem bebida e com acompanhamento \t\t   10,89 euros\t    |\n");
   	printf("|    2 \t\t  Frango com bebida e acompanhamento \t\t\t   13,29 euros\t    |\n");
   	printf("|    3 \t\t  Frango com bebida, acompanhamento e sobremesa \t   15,00 euros\t    |\n");
   	printf("|    4 \t\t  Prato do dia com bebida, acompanhamento e sobremesa \t   16,99 euros\t    |\n");
    printf("|\t\t\t\t\t\t\t\t\t\t\t    |\n");
   	printf("|  *Unidade*\t *Conteúdo*\t\t\t\t\t\t  *Preco*\t    |\n");
   	printf("|    5 \t\t  Frango \t\t\t\t\t\t   7,50  euros\t    |\n");
   	printf("|    6 \t\t  Prato do Dia \t\t\t\t\t\t   8,50  euros\t    |\n");
   	printf("|    7 \t\t  Bebida \t\t\t\t\t\t   3,00  euros\t    |\n");
   	printf("|    8 \t\t  Guarnição \t\t\t\t\t\t   4,00  euros\t    |\n");
   	printf("|    9 \t\t  Sobremesa \t\t\t\t\t\t");
	printf("   3,50  euros\t    |\n");
	printf("|\t\t\t\t\t\t\t\t\t\t\t    |");
    printf("\n|   Para SAIR, marque 10 \t\t\t\t\t\t\t\t    |\n");
    printf("|\t\t\t\t\t\t\t\t\t\t\t    |");

			escreveTraco();

	printf("\n\nInsira o número do produto que deseja: \n");
do{
    scanf("%d",&menu);
switch(menu)
        {

    case 1: printf("Escolheu o menu 'Frango sem bebida e com acompanhamento'.\n");
            printf("Quer adicionar mais algum produto? (S/N)\n");
            scanf("%s", &letra);
            switch(letra){

            case 'N': printf("\nTotal: 10,89 euros \nProceda ao pagamento...\n");
                      scanf("%f", &dinheiro);

                while(dinheiro<PrecoP1){
                    dinheiro_falta = PrecoP1 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP1;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

            case 'S': printf("Insira o numero do outro produto que quer adicionar: \n");
                      scanf("%d", &novo_produto);
                      


            }
            break;
    case 2: printf("Escolheu o menu 'Frango com bebida e acompanhamento'.\n");
                printf("\nTotal: 13,29 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP2){
                    dinheiro_falta = PrecoP2 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP2;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

				break;

    case 3: printf("Escolheu o menu 'Frango com bebida, com acompanhamento e sobremesa'.\n");
                printf("\nTotal: 15,00 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP3){
                    dinheiro_falta = PrecoP3 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP3;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

				break;

    case 4: printf("Escolheu o menu 'Prato do dia com bebida, acompanhamento e sobremesa'.\n");
                printf("\nTotal: 16,99 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP4){
                    dinheiro_falta = PrecoP4 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP4;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

			    break;

    case 5: printf("Escolheu uma unidose de 'Frango'.\n");
                printf("\nTotal: 7,50 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP5){
                    dinheiro_falta = PrecoP5 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP5;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

				break;

    case 6: printf("Escolheu uma unidose de 'Prato do dia'.\n");
                printf("\nTotal: 8,50 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP6){
                    dinheiro_falta = PrecoP6 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP6;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

				break;

    case 7: printf("Escolheu uma unidose de 'Bebida'.\n");
                printf("\nTotal: 3,00 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP7){
                    dinheiro_falta = PrecoP7 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP7;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nDirija-se ao balcão para levantar o seu pedido, OBRIGADO!\n\n");

				break;

    case 8: printf("Escolheu uma unidose de 'Acompanhamento'.\n");
                printf("\nTotal: 4,00 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP8){
                    dinheiro_falta = PrecoP8 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP8;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nAguarde a confeção do seu pedido e depois dirija-se ao balcão para o levantar, seremos rápidos, OBRIGADO!\n\n");

				break;

    case 9: printf("Escolheu uma unidose de 'Sobremesa'.\n");
                printf("\nTotal: 3,50 euros \nProceda ao pagamento...\n");
                scanf("%f", &dinheiro);

				while(dinheiro<PrecoP9){
                    dinheiro_falta = PrecoP9 - dinheiro;
                    printf("\nDinheiro insuficiente, falta(m) %.2f euros\n", dinheiro_falta);
                    scanf("%f", &falta);
                    dinheiro = dinheiro + falta;
                }
                troco = dinheiro - PrecoP9;
                printf("\nRetire o seu troco...\n%.2f euros", troco);
                printf("\n\nDirija-se ao balcão para levantar o seu pedido, OBRIGADO!\n\n");

				break;

    case 10: printf("Temos muita pena que não queira continuar a operação, OBRIGADO E VOLTE SEMPRE! \n");

			break;

    default: printf("\nNão existe o producto escolhido, volte a introduzir o número do produto que deseja: \n");
        }

        }
    while(menu>10);
}

Cumprimentos,

Link to comment
Share on other sites

Antes de mais, sugiro fortemente o uso de funções para que a função main() não fique tão grande e com o programa todo. Será, aliás, mais fácil de gerir dessa forma. Cada função seria responsável por cada uma das operações.

Quanto ao problema em mãos, a ideia será a mesma que o menu: um ciclo while até que o utilizador diga que não quer inserir mais nada.

do {
   // tarefas...
   do {
      printf("Deseja inserir mais alguma coisa? (S/N) ");
      // ler opção do teclado
   } while (opcao != 'S' && opcao != 'N');
} while (opcao == 'S');

Como bónus inseri um ciclo extra que obriga o utilizador a escrever S ou N e não outra letra ou número.

Cumprimentos.

Knowledge is free!

Link to comment
Share on other sites

Primeiramente queria agradecer imenso a ajuda.

Posto isto, não entendi como posso executar a primeira dica. Sou um iniciante nesta materia da programação, mas acredito que essa dica me possa vir a ajudar, facilitando o trabalho. 

Depois, não consigo ligar essa ideia do ciclo while ao programa que tenho, consegui entender a ideia, mas não consigo implementá-la.

Peço desculpa o incomodo.

Cumprimentos.

Link to comment
Share on other sites

59 minutos atrás, TiagoCP disse:

não entendi como posso executar a primeira dica

Recomendo a leitura do nosso artigo na Wiki e de outros relacionados com a temática de funções.

As funções podem ser reutilizadas, evitando copy-pastes de código, e permitem modular as tarefas por objectivos e passos mais pequenos.

Por exemplo, ao ver o teu código vi que tens em todos os casos a mesma operação: o pagamento. É, portanto, uma excelente oportunidade para criar uma função. Por exemplo:

void pagamento(float preco) {
  float dinheiro = 0.f, pago;
  printf("Total: %.2f euros\nProceda ao pagamento...\n", preco);
  while(dinheiro < preco) {
    printf("\tValor? ");
    scanf("%f", &pago);
    dinheiro += pago;
    if (dinheiro < preco)
      printf("\tFalta(m) %.2f euros!\n", preco - dinheiro);
  }
  printf("\nRetire o seu troco: %.2f euros", dinheiro - preco);
}

Assim, quando executares um menu, podes chamar a função assim:

// Exemplo para o Menu 7
case 7:
  printf("Escolheu uma unidose de 'Bebida'.\n");
  pagamento(PrecoP7);
  break;

 

59 minutos atrás, TiagoCP disse:

não consigo ligar essa ideia do ciclo while ao programa que tenho, consegui entender a ideia, mas não consigo implementá-la

Considera o seguinte esqueleto para o a função main(). Aquilo que ele alcança é:

  1. Mostrar o menu;
  2. Ler o menu desejado pelo cliente;
  3. Executar o menu desejado;
  4. Perguntar se quer mais alguma coisa. Se sim, volta ao ponto 1.
do {
  // Mostrar menu
  
  do {
    printf("Qual o menu que deseja? ");
    // Ler menu
  } while (menu < 1 || menu > 10);
  
  switch (menu) {
    case 1:   /* Exemplo COMPLETO do Menu 1 */
      printf("Escolheu o menu 'Frango sem bebida e com acompanhamento'.\n");
      pagamento(PrecoP1);
      break;
      
    case 2:
      // Menu 2...
      break;
      
    // Outros menus...
  }
  
  do {
    printf("Deseja outro menu? (S/N) ");
    // Ler opcao
  } while (opcao != 'S' && opcao != 'N');
} while (opcao == 'S');

Não dá jeito perguntar se o utilizador quer mais alguma coisa dentro do próprio case. É uma tarefa comum a todos os casos, pelo que podemos perguntar apenas no final. Se a pessoa quiser mais algum menu, o programa volta a executar os 4 pontos que enumerei.

 

Cumprimentos.

Knowledge is free!

Link to comment
Share on other sites

Aproveito para deixar algumas dicas adicionais, não inerentes ao problema mas que podem contribuir para um código mais bem estruturado.

  • Sempre que possível, evita numerar as variáveis e as constantes. Se porventura tiveres de mudar as coisas de ordem, os números deixam de fazer sentido. Podes, por exemplo, usar o nome PRECO_FRANGO em vez de PrecoP5 para te referires ao preço do frango. A vantagem imediata é que, ao leres PrecoP5, não sabes do que é, mas ao leres PRECO_FRANGO sabes de caras que é o preço do prato de frango.
  • Para distinguir à vista desarmada as variáveis das constantes, nomeia as constantes com maiúsculas (por exemplo, PRECO_FRANGO).
  • Define os valores constantes usando a directiva #define. No teu caso seria algo como:
    #define PRECO_FRANGO_A       10.89f       // Frango com acompanhamento
    #define PRECO_FRANGO_AB      13.29f       // Frango com acompanhamento e bebida
    #define PRECO_FRANGO_ABS     15.00f       // Frango com acompanhamento, bebida e sobremesa
    #define PRECO_DIA_ABS        16.99f       // Prato do dia com acompanhamento, bebida e sobremesa
    #define PRECO_FRANGO          7.50f       // Frango
    #define PRECO_DIA             8.50f       // Prato do dia
    #define PRECO_BEBIDA          3.00f       // Bebida
    #define PRECO_ACOMPANHAMENTO  4.00f       // Acompanhamento
    #define PRECO_SOBREMESA       3.50f       // Sobremesa

     

  • Coloca o menu numa função à parte para não encher tanto a função main():
    void menu(void);
    
    int main(void) {
      char opcao;
      // Outras variáveis...
      
      do {
        menu();  /* Escreve o menu */
        
        // Ler menu, executar e perguntar se quer algo mais...
        
      while (opcao == 'S');
      
      return 0;
    }
    
    void menu(void) {
      printf("MENU\n");
      printf("1 > Um delicioso frango só com acompanhamento.\n");
      // etc...
    }

 

Cumprimentos.

Edited by thoga31
Pequena gafe no código

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.