Ir ao conteúdo

Ajuda com vetor e laço


SeRgImDUG

Posts recomendados

Postado

Olá pessoal, boa tarde.

Estou começando em C e vão surgindo muitas dúvidas, gostaria de uma ajuda se possível.

Estou fazendo esse pequeno programa com menu, apenas para rodar com vetor registrando algumas informações na base de uma estrutura e depois consultando esses registros.

Eu defini o máximo de 3 cadastros apenas, mas quando saio do laço, volto para o menu e entro no laço novamente, a posição se torna 0 de novo. Lógico, pois dentro da função eu coloquei que Posicao = 0.

Mas onde eu posso definir o valor inicial? Gostaria de inserir um cadastro apenas, voltar e poder continuar a partir do segundo.

Está um pouco confuso o código porque estou iniciando mesmo, mas creio que dá para entender com alguns comentários:

Obs: A estrutura está como "CLIENTE", mas usei para um cadastro de funcionario.


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

#define NUM_REG 3

struct DATA
{
int Dia;
int Mes;
int Ano;
};

struct CLIENTE
{
int Uso; //"1" se a posicao estiver em uso e "0" se nao estiver
char Nome[40];
char Endereco[40];
char Bairro[30];
char Cidade[20];
char UF[2];
char Cep[8];
float Salario;
struct DATA Data_Admissao;
};


void ChamaMenu();
void EscolherOpcao(int OpcaoMenu);
int AddFuncionario();
void ExibirRegistro();

struct CLIENTE NovoFuncionario[NUM_REG];

int main (int arg, char * args[])
{
ChamaMenu();
system("pause >> null");
return 0;
}

// Funçao que lista o menu e pega a opcao desejada

void ChamaMenu()
{

int OpcaoMenu;
system("cls");
printf("\n\n[1] - Incluir Registro");
printf("\n[2] - Exibir Registro");
printf("\n[3] - Listar um Registro");
printf("\n[4] - Listar todos os Registros");

printf("\n\nInsira uma opcao do Menu: ");
fflush(stdin);
scanf("%d", &OpcaoMenu);
EscolherOpcao(OpcaoMenu);

}

// Funçao que processa a opcao escolhida no menu

void EscolherOpcao(int OpcaoMenu)
{
switch(OpcaoMenu)
{
case 1:
AddFuncionario();
break;
case 2:
ExibirRegistro();
break;
case 3:
printf("\nMostra Funcao 3");
break;
case 4:
printf("\nMostra Funcao 4");
break;
default:
system("cls");
printf("\n\nA opcao escolhida e invalida");
ChamaMenu();

}
}

// Funçao para voltar ao menu ou sair depois de alguma outra funcao ser executada

void VoltarMenu()
{
int Opcao;
printf("\n\n[1] - Voltar ao Menu Principal");
printf("\n[0] - Sair");
printf("\nDigite a opcao desejada: ");
scanf("%d", &Opcao);
if (Opcao == 1)
ChamaMenu();
else if (Opcao == 0)
exit(0);
else
printf("\n\nA Opcao escolhida e invalida\n\n");
VoltarMenu();
}

// Zerar o Uso dos cadastros

void ZerarUso()
{
int i;
for (i=0; i < NUM_REG; i++)
{
NovoFuncionario[i].Uso = 0;
}
}

// Adicionar um novo Funcionario

int AddFuncionario()
{
fflush(stdin);

int NovoCadastro;
int Posicao = 0;
int Registro;

do
{
fflush(stdin);
system("cls");
NovoFuncionario[Posicao].Uso = 1;
puts("Informe o NOME do Cliente: ");
gets(NovoFuncionario[Posicao].Nome);
puts("Insira o ENDERECO: ");
gets(NovoFuncionario[Posicao].Endereco);
puts("Insira o BAIRRO: ");
gets(NovoFuncionario[Posicao].Bairro);
puts("Insira a CIDADE: ");
gets(NovoFuncionario[Posicao].Cidade);
puts("Insira a UF: ");
gets(NovoFuncionario[Posicao].UF);
puts("Insira o CEP: ");
scanf("%d", NovoFuncionario[Posicao].Cep);
puts("Salario: ");
scanf("%f", &NovoFuncionario[Posicao].Salario);
puts("Data de Admissao (dd/mm/aaaa): ");
scanf("%d %*c %d %*c %d", &NovoFuncionario[Posicao].Data_Admissao.Dia, &NovoFuncionario[Posicao].Data_Admissao.Mes, &NovoFuncionario[Posicao].Data_Admissao.Ano );


printf("\n\nNovo Funcionario cadastrado:");
//printf("\n\nNome: %s", NovoFuncionario[Posicao].Nome);
//printf("\nEndereco: %s", NovoFuncionario[Posicao].Endereco);
//printf("\nBairro: %s", NovoFuncionario[Posicao].Bairro);
//printf("\nCidade: %s / UF: %s", NovoFuncionario[Posicao].Cidade, NovoFuncionario[Posicao].UF);
//printf("\nCEP: %s", NovoFuncionario[Posicao].Cep);
//printf("\nSalario: %.2f", NovoFuncionario[Posicao].Salario);
//printf("\nData de Admissao: %02d/%02d/%04d", NovoFuncionario[Posicao].Data_Admissao.Dia, NovoFuncionario[Posicao].Data_Admissao.Mes, NovoFuncionario[Posicao].Data_Admissao.Ano);


Registro = Posicao + 1;
printf("\n\nPosicao no Sistema: %d", Posicao);
printf("\nNumero do Registro: %d", Registro);
Posicao++;

printf("\n\n\nDeseja inserir um novo funcionario?");
printf("\n[1] - Sim\n[2] - Nao");
printf("\nDigite a opcao desejada: ");
scanf("%d", &NovoCadastro);


} while ((NovoCadastro == 1) && (Posicao < NUM_REG));

VoltarMenu();

}

// Exibir o cadastro de um funcionario

void ExibirRegistro()
{
int Registro;
int Posicao;

system("cls");
printf("Digite o numero do Registro:");
scanf("%d", &Registro);

Posicao = Registro - 1;

if ((Posicao < 0) || (Posicao > NUM_REG))
{
printf("\n\nRegistro invalido!\n\n");
}

else if (NovoFuncionario[Posicao].Uso == 0)
{
printf("\n\nRegistro vazio!\n\n");
}

else
{
printf("\n\nNome: %s", NovoFuncionario[Posicao].Nome);
printf("\nEndereco: %s", NovoFuncionario[Posicao].Endereco);
printf("\nBairro: %s", NovoFuncionario[Posicao].Bairro);
printf("\nCidade: %s / UF: %s", NovoFuncionario[Posicao].Cidade, NovoFuncionario[Posicao].UF);
printf("\nCEP: %s", NovoFuncionario[Posicao].Cep);
printf("\nSalario: %.2f", NovoFuncionario[Posicao].Salario);
printf("\nData de Admissao: %02d/%02d/%04d", NovoFuncionario[Posicao].Data_Admissao.Dia, NovoFuncionario[Posicao].Data_Admissao.Mes, NovoFuncionario[Posicao].Data_Admissao.Ano);
}

VoltarMenu();
}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!