Ir ao conteúdo
  • Cadastre-se
saulogoiana

C++ Problema ao cadastrar funcionario

Recommended Posts

Olá colegas!

Estou com problemas ao cadastrar um funcionário com o código seguinte.

O salário não está sendo armazenado corretamente.

 

Spoiler

 


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

using namespace std;

//Estruturas
struct nascData
{
	int dia;
	int mes;
	int ano;
};

struct Funcionario
{
	char nome[35];
	char cargo[15];
	float salario[15];
	int CPF;
	int matricula;
	nascData data_nascimento;
};

//Protótipos das funções
int menu();
void cadastrarFuncionario(Funcionario M[], int, int);
int imprimirMatricula(int, Funcionario V[]);
void imprimirCadastros(Funcionario M[], int);
void linhas_sinais();

//Função principal
int main()
{
	menu();
}

//Dev Funções
void linhas_sinais()
{
	int i;
	for(i = 0; i < 50; i++)
	{
		printf("#");
	};
	printf("\n");

}

int menu()
{
	//Declaração das variaveis
	int op_usr, matr, matricula = 0;
	Funcionario tCad[50];//Total de Cadastros
	int nCad = 0;//Qnt de cadastros
	//Funcionario Func;

	do
	{
		printf("---- MENU ----\n");
		linhas_sinais();
		printf("1--> Cadastrar Funcionario.\n");
		printf("2--> Acessar dados por matricula.\n");
		printf("3--> Acessar todos os cadastros.\n0--> SAIR.\n");
		linhas_sinais();
		printf("--> ");
		scanf("%i", &op_usr);
		fflush(stdin);
		system("cls");

		//Avaliar escolha
		switch(op_usr)
		{
		case 1:
			matricula++;
			cadastrarFuncionario(tCad, nCad, matricula);
			nCad++;

			break;
		case 2:
			printf("Digite a matricula procurada: ");
			scanf("%i", &matr);
			fflush(stdin);
			system("cls");
			matr = imprimirMatricula(matr, tCad);
			if(matr < 0)
				printf("Matricula nao encontrada!\n");
			else
			{
				linhas_sinais();
				printf("Funcionario: %s\n Cargo: %s\n Salario: %f\n", tCad[matr].nome, tCad[matr].cargo, tCad[matr].salario);
				linhas_sinais();
			}

			break;
		case 3:
			if(nCad <= 0)
			{
				printf("Nao ha cadastros!\n");
			}
			else
			{
				imprimirCadastros(tCad, nCad);
			}

			break;
		case 0:
			printf("ENCERRADO!\n");
			system("pause");
			return 0;

			break;
		default:
			break;
		}

		system("pause");
		system("cls");
	}
	while(op_usr != 0);

}
//Vetor V do tipo Funcionario, n é a posição no vetor, matr é o nº de matricula
void cadastrarFuncionario(Funcionario V[], int n, int matr)
{
	Funcionario Gen;

	printf("Digite o nome do funcionario: ");
	scanf("%s", Gen.nome);
	fflush(stdin);
	printf("Digite o cargo do funcionario %s: ", Gen.nome);
	scanf("%s", Gen.cargo);
	fflush(stdin);
	printf(" Salario: ");
	scanf("%f",&Gen.salario);
	fflush(stdin);
	printf("\n-->%f\n",Gen.salario);
	fflush(stdin);
	printf(" CPF: ");
	scanf("%i", &Gen.CPF);
	fflush(stdin);
	printf(" Digite a data de nascimento:\n");
	printf("  Dia: ");
	scanf("%i", &Gen.data_nascimento.dia);
	fflush(stdin);
	printf("  Mes: ");
	scanf("%i", &Gen.data_nascimento.mes);
	fflush(stdin);
	printf("  Ano: ");
	scanf("%i", &Gen.data_nascimento.ano);
	fflush(stdin);
	Gen.matricula = matr;

	V[n] = Gen;

	linhas_sinais();
	printf("\nCADASTRO EFETUADO!\n");
	linhas_sinais();

}

void imprimirCadastros(Funcionario V[], int n)
{
	int i;
	printf("------  FUNCIONARIOS  ------\n");
	for(i = 0; i < n; i++)
	{
		printf("|%i|\nNome: %s\nMatricula: %i\n\n", i + 1, V[i].nome, V[i].matricula);
	}
}

int imprimirMatricula(int matr, Funcionario V[])
{
	int i;
	for(i = 0; i < sizeof(V); i++)
		if(matr == V[i].matricula)
			return i;
		else
		{
			return -1;
		}

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, tudo bem?

 

 

Então, olhe mais uma vez o estrutura e o seu campo em funcionário.

57 minutos atrás, saulogoiana disse:

struct Funcionario
{
	char nome[35];
	char cargo[15];
	float salario[15];
	int CPF;
	int matricula;
	nascData data_nascimento;
};

[ !!! ] A campo em funcionário é um vetor!

 

Continue olhando e comparando agora em suas ocorrências na função

57 minutos atrás, saulogoiana disse:

printf(" Salario: ");
scanf("%f",&Gen.salario);

[ !!! ] No campo salário, por compreensão, sabemos que está gravando na primeira posição do vetor, pois a primeira posição é a referência (o nome do arranjo).

 

57 minutos atrás, saulogoiana disse:

printf("\n-->%f\n",Gen.salario);
fflush(stdin);

[ !!! ] Aqui com já discutido, a primeira posição é a referência e o nome do arranjo, o que se imprime é justamente o número da referencia do vetor e não o valor nele (no caso, a melhor interpretação é o valor na primeira posição). 

 

Por tudo isso, uma correção depende é, o campo salário ser um arranjo ou uma variável.

 

 

OK!? Tchau.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×