Ir ao conteúdo

Posts recomendados

Postado

Olá, sou iniciante na programação, a partir do case 6 até o case 9 o sistema não roda e o compilador não detecta erros, não sei o que é algum poderia me ajudar?

 

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>

//Feito por Evellyn, Nicolly, Davi e Braian
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

struct Cliente{
	char nome[50],cpf[30], endereco[100], telefone[20], email[50], nome_pet[20];
	int idade_pet;
};

struct Produto{
	char nome[50];
	int quantidade;
	float preco;	
};

struct Venda{
	char nome_produto[50], nome_cliente[50];
	int quantidade;
	float preco_unitario, preco_total;
};

struct Servico{
	char nome[50];
	float preco;
};

struct Agenda{
	char data[20], hora[10], nome_cliente[50], servico[50];
};

struct Historico{
	char nome_cliente[50], nome_pet[50], servico[50], data[20];
};

int main(int argc, char** argv) {
	
	system("color BF");//Muda a cor de fundo e do texto
	
	char user[20], senha[20];
	int opcao, index = 0, qtd_cliente = 0, qtd_produto = 0, qtd_venda = 0, produto_encontrado = 0, qtd_servico = 0, qtd_agenda = 0, qtd_historico = 0, opcaoo;
	bool senhaHidden = true;
	float vt_venda = 0;
	
	//chamando as estruturas e definindo a quantidade
	struct Cliente clientes[50];
	struct Produto produtos[50];
	struct Venda vendas[50];
	struct Servico servicos[50];
	struct Agenda agenda[50];
	struct Historico historico[50];
	
	//tela de login
	printf("Login\n");
    
    printf("Usuario: ");
    scanf("%s", &user);
    
    printf("Senha: ");
    
		while (senhaHidden){
    		char ch = getch();
    	
    		if(ch == '\r'){
    			senhaHidden = false;
			}
			else if (ch == '\b' && index > 0){
				index--;
				senha[index] = '\0';
				printf("\b \b");
			}
			else{
				senha[index++] = ch;
				printf("*");
			}
		}
		
	senha[index] = '\0';
    
    if(strcmp(user, "Braian") == 0 && strcmp(senha, "4321") == 0) {
        
		do{
			system("cls");//limpa a tela
			
			//tela principal
			printf("\nTela Principal\n\n");
			printf("1 - Cadastro de Cliente\n");
			printf("2 - Cadastro de Produtos\n");
			printf("3 - Registrar venda ou servico\n");
			printf("4 - Agendar servico\n");
			printf("5 - Registrar Historico\n");
			printf("6 - Consultar estoque\n");
			printf("7 - Consultar agenda\n");
			printf("8 - Consultar Historico de atendimento\n");
			printf("9 - Consultar faturamento\n");
			printf("10 - Sair\n");
			
			printf("Digite uma opcao: ");
			scanf("%d", &opcao);
			
			switch (opcao){

				case 1:
					//cadastro de cliente
					system("cls");
					
					printf("\n CADASTRO DE CLIENTE \n");
					
					printf("Digite o nome do cliente: ");
					scanf("%s", &clientes[qtd_cliente].nome);
					
					printf("Digite o CPF do cliente: ");
					scanf("%s", &clientes[qtd_cliente].cpf);
					
					printf("Digite o telefone para contato com cliente: ");
					scanf("%s", &clientes[qtd_cliente].telefone);
					
					printf("Digite o e-mail para contato com o cliente: ");
					scanf("%s", &clientes[qtd_cliente].email);
					
					printf("Digite o nome do pet: ");
					scanf("%s", &clientes[qtd_cliente].nome_pet);
					
					printf("Digite a idade do pet: ");
					scanf("%d", &clientes[qtd_cliente].idade_pet);
					
					qtd_cliente++;
					
				break;
				
				case 2:
					//cadastro de produtos
					system("cls");
					
					printf("\n CADASTRO DE PRODUTO \n");
					
					printf("Digite o nome do produto: ");
					scanf("%s", &produtos[qtd_produto].nome);
					
					printf("Digite a quantidade do produto: ");
					scanf("%d", &produtos[qtd_produto].quantidade);
					
					printf("Digite o valor do produto: ");
					scanf("%f", &produtos[qtd_produto].preco);
					
					qtd_produto++;
				
				break;
				
				case 3:
					//Registrar vendas ou serviço adquirido
					system("cls");
					
					printf("\n REGISTRO DE VENDAS\n");
					
					printf("Digite o nome do produto comprado: ");
					scanf("%s", &vendas[qtd_venda].nome_produto);
					
					printf("Digite a quantidade do produto comprado: ");
					scanf("%d", &vendas[qtd_venda].quantidade);
					
					//verifica se há estoque suficiente
					for(int i = 0; 1 < qtd_produto; i++){
						
						if(strcmp(vendas[qtd_venda].nome_produto, produtos[i].nome) == 0){
							produto_encontrado = 1;
							
							if(vendas[qtd_venda].quantidade > produtos[i].quantidade){
								printf("Estoque Insuficiente!\n");
							}
							else{
								produtos[i].quantidade -= vendas[qtd_venda].quantidade;
								
								vendas[qtd_venda].preco_unitario = produtos[i].preco;
								
								vendas[qtd_venda].preco_total = vendas[qtd_venda].preco_unitario * vendas[qtd_venda].quantidade;
								
								vt_venda += vendas[qtd_venda].preco_total;
								
								qtd_venda++;
							}
							break;
						}
					}
					if(!produto_encontrado){
						printf("Prooduto não encontrado.");
					}
					break;
					
					case 4:
						//Agendar Serviço
						system("cls");
						
						printf("\n AGENDAMENTO DE SERVICO \n");
						
						printf("Digite a data do servico (dd/mm/aaaa): ");
						scanf("%s", &agenda[qtd_agenda].data);
						
						printf("Digite a hora do servico (hh:mm): ");
						scanf("%s", &agenda[qtd_agenda].hora);
						
						printf("Digite o nome do cliente: ");
						scanf("%s", &agenda[qtd_agenda].nome_cliente);
						
						printf("Digite o nome do servico: ");
						scanf("%s", &agenda[qtd_agenda].servico);
						
						qtd_agenda++;
						
					break;
					
					case 5:
						//Registrar historico
						system("cls");
						
						printf("\n REGISTRO DE HISTORICO \n");
						
						printf("Digite o nome do cliente: ");
						scanf("%s", &historico[qtd_historico].nome_cliente);
						
						printf("Digite o nome do pet: ");
						scanf("%s", &historico[qtd_historico].nome_pet);
						
						printf("Digite o servico realizado: ");
						scanf("%s", &historico[qtd_historico].servico);
						
						printf("Digite a data do servico (dd/mm/aaaa): ");
						scanf("%S", &historico[qtd_historico].data);
						
						qtd_historico++;
						
						break;
						
					case 6:
					
					//Consultar Estoque
						system("cls");	
						
						printf("\n CONSULTA DE ESTOQUE \n");
						for(int e = 0; e < qtd_produto; e++){
							printf("Produto: %s\n", produtos[e].nome);
							printf("Quantidade: %d\n", produtos[e].quantidade);
							printf("Preco: R$ %.2f\n", produtos[e].preco);
							printf("\n");
						}
					break;
					
					case 7:
						//Consultar Agenda
						system("cls");
						
							printf("\n CONSULTA DE AGENDA \n");
							for(int a = 0; a < qtd_agenda; a++){
								printf("Data: %s\n", agenda[a].data);
								printf("Hora: %s\n", agenda[a].hora);
								printf("Cliente: %s\n", agenda[a].nome_cliente);
								printf("Servico: %s\n", agenda[a].servico);
								printf("\n");
						}
					break;
					
					case 8:
						//Consultar Historico
						system("cls");
						
						printf("\n CONSULTA DE HISTORICO \n");
						for(int h = 0; h < qtd_historico; h++){
							printf("Cliente: %s\n", historico[h].nome_cliente);
							printf("Pet: %s\n", historico[h].nome_pet);
							printf("Servico: %s\n", historico[h].servico);
							printf("Data: %s\n", historico[h].data);
							printf("\n");
						}
					break;
					
					case 9:
					//Consultar Faturamneto
						system("cls");
						
						printf("\n Consultar Faturamento \n");
						printf("Valor total em vendas: R$ %.2f\n", vt_venda);
					
					break;
					
					case 10:
						//Sair do Programa
						system("cls");
						
						printf("\nSaindo do programa...\n");
						exit(0);
					break;
					
					default:
						printf("\nOpcao invalida. Tente novamente.\n");
					break;
			}
		}
		while(opcao != 10);
    }
	else {
        printf("\nUsuario ou senha incorretos.\n");
    }
	return 0;
}
Postado

Cara, seu código pelo pouco que eu li dele, funciona normalmente, o que está acontecendo é que depois do case 6 não tem nada que mantenha a estrutura do que foi "printado" na tela aberta, ou seja ele faz o que tem que fazer e quando termina sai do case e o loop começa novamente, Sobrescrevendo o que estava na tela.


Você pode colocar alguma mensagem para que o usuário tenha que interagir antes de voltar ao menu.
Algo tipo assim no final:

int i;
do{
  printf("Digite 0 para retornar ao menu! ");
  scanf ("%d",&i);
}while(i != 0);


Se aplicado no case 6 ficaria assim:

case 6:				
  //Consultar Estoque
  system("cls");	

  printf("\n CONSULTA DE ESTOQUE \n");
  for(int e = 0; e < qtd_produto; e++){
    printf("Produto: %s\n", produtos[e].nome);
    printf("Quantidade: %d\n", produtos[e].quantidade);
    printf("Preco: R$ %.2f\n", produtos[e].preco);
    printf("\n");
  }
  int i;
  do{
    printf("Digite 0 para retornar ao menu! ");
    scanf ("%d",&i);
  }while(i != 0);

break;

 

 

Lembre-se de manter o seu código indentado, pois algumas linguagens exigem essa formatação e isso também o torna mais legível.

Boa sorte.

  • Curtir 1
Postado

Seu programa não está nada bom.

 

Vai ter muito trabalho a mais e perder muito tempo ao escrever assim. Há vários -- e comuns problemas --- e parece ser mesmo consequência de como ensinam ou deixam de ensinar isso nos cursos e livros.

 

  • Pelo uso de bool e o include de iostream parece que pretendia escrever um programa em C++. C++ não é C. Não é boa maneira de aprender nem C nem C++
  • NUNCA use conio.h, uma biblioteca dos anos 80 com meia dúzia de funções, tirada de um compilador C dos anos 80. Não é possível que se precise disso em 2023 em um programa C ou C++ ou qualquer um. Nem faz parte da linguagem. Nem C nem C++
  • Se vai usar C não inclua iostream e use a extensão C. Se vai usar C++ não inclua stdio.h, E se precisar MESMO de algo de C a convenção é usar #include cstdio, tirando o .h e colocando um 'c' na frente
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
  • não use esse tipo de comentário. Muito menos em comentários de uma linha. Use // e não /**/
struct Venda {
	char nome_produto[50], nome_cliente[50];
	int quantidade;
	float preco_unitario, preco_total;
};

 

Prefira
 

typedef struct Venda
{
	char  nome_produto[50];
	char  nome_cliente[50];
	int   quantidade;
	float preco_unitario;
	float preco_total;
};

 

  • Não declare mais de uma variável por linha. Elas são grátis e só fica ruim de ler assim.
  • Em C prefira typedef 
  • Em C++ prefira classes. Para isso a linguagem foi criada. E use string e não char[]
     
	system("color BF");//Muda a cor de fundo e do texto

 

  • não use system(). Nunca. Para nada. Não vai aprender nada e não vai estar fazendo nada. system foi escrita em C. Você está programando em C. Pode fazer qualquer coisa em C ou C++. Isso é proibido em toda parte, escolas e empresas.
	int opcao, index = 0, qtd_cliente = 0, qtd_produto = 0, qtd_venda = 0, produto_encontrado = 0, qtd_servico = 0, qtd_agenda = 0, qtd_historico = 0, opcaoo;

 

Sei que já disse, mas não escreva assim.

  • Se esquecer de inicializar uma variável vai perder um tempão para achar. 
  • Se precisar saber o tipo de uma aí no meio tem que ficar procurando para a esquerda até achar a declaração.
     
			printf("\nTela Principal\n\n");
			printf("1 - Cadastro de Cliente\n");
			printf("2 - Cadastro de Produtos\n");
			printf("3 - Registrar venda ou servico\n");
			printf("4 - Agendar servico\n");
			printf("5 - Registrar Historico\n");
			printf("6 - Consultar estoque\n");
			printf("7 - Consultar agenda\n");
			printf("8 - Consultar Historico de atendimento\n");
			printf("9 - Consultar faturamento\n");
			printf("10 - Sair\n");

 

Má ideia. 11 chamadas a printf e fica o d1@bo para entender como vai sair. E vai demorar como 100X mais para executar isso.

Use um printf() de 11 linhas. E se são só constantes como aqui use puts() e não printf.

E se está programando em C++ use cout e format. É mais fácil.
 

			scanf("%d", &opcao);

 

Leia o manual.

 

scanf retorna um int. TESTE. Sempre. scanf() é um scanner e nem devia ser usada com o teclado. Se o cara digitar 'x' por exemplo o que acha que vai acontecer?

 

	senha[index] = '\0';

 

isso é a mesma coisa que 0. Poruqe escrever 4 letras e se arriscar a esquecer uma apóstrofe se isso é zero?

 

Use funções. C ou C++ sem funções não tem sentido. Só fica mais difícil de ler e de escrever e de testar.

 

 

  • Curtir 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...