Ir para conteúdo

POWERED BY:

Arquivado

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

Francisco Jr.

C - Folha de pagamento

Recommended Posts

Tenho que apresentar um programa que simule o mais perto possível um Sistema de Folha de pagamento.

Esse é o trabalho final da cadeira de Algoritmos da faculdade. Já desenvolvi uma parte do código,como mostrado abaixo, porém não consigo prosseguir pois ainda não aprendi em aula como salvar e resgatar dados de um arquivo de texto.

E este conhecimento é requisito indispensável pra finalizar o projeto. Pesquisei na internet e consegui aprender como salvar no arquivo, mas recuperar é que o problema. Segue abaixo a descrição do que deve conter o trabalho.

Ouvi falar de estruturas também e sei que vou ter esse conteúdo, mas não sei se para o meu trabalho essa conteúdo é relevante. Aceito todas as dicas e sugestões oferecidas.

 

Requisitos do Projeto (O que a solução deve apresentar?)

 

a) Cadastro de funcionários, com as seguintes informações: número de matrícula (inteiro), ano de contratação

(inteiro), nome (caracter), cargo (caracter), salário base (decimal) e número de dependentes (inteiro).

 

B) O número de matrícula é único para cada funcionário. O sistema deve garantir isso caso o usuário tente incluir

outro funcionário com um número de matrícula já existente.

 

c) Procedimento de cálculo do salário líquido:

♦ Salário base - INSS + salário educação

♦ Salário educação é 2.50% sobre o salário base para cada dependente.

 

d) Relatórios obrigatórios (explore várias possibilidades, além das listadas abaixo):

♦ O sistema deverá fornecer ao usuário uma lista de todos os

funcionários com o salário de cada mês.

♦ Para cada "cargo", o sistema deverá fornecer ao usuário uma

lista de funcionários e seus respectivos salários.

♦ O sistema deverá fornecer o gasto total mensal e anual da

Empresa com a folha de pagamento.

 

Observações:

Os dados do sistema deverão ser armazenados em arquivos e sempre que o programa for aberto recuperá-los.

Quando o programa for encerrado seus dados não podem ser perdidos.

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include <windows.h>
// Define as constantes que serão as opções do menu
#define OP_CADASTRO 1
#define OP_LISTA_FUNC 2
#define OP_LISTA_CARGO 3
#define OP_GASTO_MENSAL 4
#define OP_GASTO_ANUAL 5
#define OP_SAIR 6
calcular_Inss(float salarioBase, float desconto){

   const float ISENCAO08=0.08;// É constante que recebe o valor de 8%
   const float ISENCAO09=0.09;// É constante que recebe o valor de 9%
   const float ISENCAO11=0.11;// É constante que recebe o valor de 11%
   const float ISENCAO_MAIOR=334.29;//É constante que recebe o valor de R$ 334,29

   //verifica se o salario total do funcionario no ano é menor que R$ 911,70
   if (salarioBase <= 911.70) {
                   //verifica se o salario é menor R$ 911,70 e calcula o valor do desconto
                   desconto = (salarioBase * ISENCAO08);
                   }
   //verifica se o salario é maior que R$ 911.70 ou é menor R$ 1519,50 e calcula o valor do desconto
   else if ((salarioBase > 911.70) && (salarioBase <= 1519.50)) {
                   //Calcula o valor da isenção
                   desconto = (salarioBase * ISENCAO09);
       }
   //verifica se o salario é maior ou igual a R$ 1519,50 ou é menor que R$ 3.038,99
   else if (salarioBase > 1519.50 && salarioBase < 3038.99) {
                   //Calcula o valor da isenção
                   desconto = (salarioBase * ISENCAO11);
       }
   //verifica se o salario é maior ou igual a 2500
   else if (salarioBase > 3038.99) {
                   //Calcula o valor da isenção
                   desconto = ISENCAO_MAIOR;
                   }
}

int main(int argc, char *argv[]){

   const float indice_educacao=0.025;
   int i, opcao, matricula, anoContratacao;
   char nome[20]; char c;
   int tamnome;
   char cargo[20];
   char usuario[6];
   char senha[5];
   char enfeite;
   float salarioBase, desconto, salarioLiquido, salario_educacao, dependentes;
   i = 0; enfeite = 0; desconto = 0.0; 
   //salarioLiquido = (salarioBase - desconto)+ salario_educacao;

   // define a cor de fundo do executavel
   system ("color F9");
   // Mostra mensagem na tela pedindo que informe o usuario
   printf ("\n\t\tDIGITE O NOME DO USUARIO: ");
   gets(usuario);
   fflush(stdin);
   // Mostra mensagem na tela pedindo que informe a senha
   printf ("\t\tDIGITE A SUA SENHA: ");
   gets(senha);

   // Verifica se o usuario é igual a nulo ou seja se não foi digitado nada
   if (usuario == NULL){
       // Mostra mensagem na tela avisando o usuário que ele não existe
       printf("usuario nao existe!");
   }
   // Faz uma comparação entre o que o usuario digitou e os valores corretos para usuario e senha
   if (strcmp(usuario,"admin")==0 && strcmp(senha,"root")==0) {
       // Mostra a mensagem na tela informando que os dados estão corretos.
       printf ("\t\tOs dados estão corretos!\n");
       //system("pause");

       do {
           // Comando do windows system que limpa a tela
           system("cls");          
           menuEntrada(opcao);
           printf ("\n\t\tQUAL A OPCAO VOCE DESEJA? ");
           scanf("%d", &opcao);
           // Comando do windows system que limpa a tela
           system("cls");

           switch (opcao) {
                  case OP_CADASTRO:
                        // Comando do windows system que limpa a tela
                       system("cls");
                       printf ("\n\t\tDIGITE A MATRICULA DO FUNCIONARIO: ");
                       scanf ("%d", &matricula);
                       fflush(stdin);
                       printf ("\n\t\tDIGITE O NOME DO FUNCIONARIO: ");
                       gets(nome);
                       fflush(stdin);
                       printf ("\n\t\tDIGITE O ANO DE CONTRATACAO: ");
                       scanf ("%d", &anoContratacao);
                       fflush(stdin);
                       printf ("\n\t\tQUAL O CARGO DO FUNCIONARIO: ");
                       gets(cargo);
                       fflush(stdin);
                       printf ("\n\t\tDIGITE O SALARIO BASE: ");
                       scanf ("%f", &salarioBase);
                       calcular_Inss(desconto, salarioBase);
                       printf ("\n\t\tQUANTOS DEPENDENTES O FUNCIONARIO TEM? ");
                       scanf ("%f", &dependentes);
                       fflush(stdin);
                       calcular_Inss(salarioBase, desconto);
                       salario_educacao = (salarioBase * (indice_educacao * dependentes));
                       salarioLiquido = ((salarioBase + salario_educacao) - desconto);
                        // Declarar um identificador de fluxo, faça como se fosse uma variável normal:    
                             FILE *fp;//Utilize o asterisco

                        // Verifica se existe um arquivo bancoDados.txt. O atributo a+ cria um arquivo
                            if ((fp = fopen("bancoDados.txt","a+")) == NULL){
                                     printf("Impossível criar arquivo");
                                     }           
                            else{
                                 fprintf(fp,"%d", matricula);
                                 fprintf(fp,"\n");
                                 fputs(nome,fp);
                                 fprintf(fp,"\n");
                                 fprintf(fp,"%d", anoContratacao);
                                 fprintf(fp,"\n");
                                 fputs(cargo,fp);
                                 fprintf(fp,"\n");
                                 fprintf(fp,"%.2f", salarioBase);
                                 fprintf(fp,"\n");
                                 fprintf(fp,"%.f", dependentes);
                                 fprintf(fp,"\n");
                                 fprintf(fp,"%.2f", salarioLiquido);
                                 fprintf(fp,"\n");
                                 }
                            fclose(fp);
                            // Abre o arquivo pelo windows
                            system("bancoDados.txt");// quando está na mesma pasta do executavel usa caminho relativo
                             // Comando do windows system que limpa a tela
                            system("cls");
                       break;
                  case OP_LISTA_FUNC:

                       break;  
                  case OP_LISTA_CARGO:

                  break;
                  case OP_GASTO_MENSAL:

                  break;
                  case OP_GASTO_ANUAL:

                  break;

                  }

         }while (opcao != 6);
   }
 //getch();	
 //return 0;
}
menuEntrada(int opcao){        

   printf ("\n\t\t[%d] CADASTRAR FUNCIONARIO\n", OP_CADASTRO);
   printf ("\t\t[%d] LISTAR FUNCIONARIOS\n", OP_LISTA_FUNC);
   printf ("\t\t[%d] LISTAR FUNCIONARIOS POR CARGO\n", OP_LISTA_CARGO);
   printf ("\t\t[%d] GASTO MENSAL\n", OP_GASTO_MENSAL);
   printf ("\t\t[%d] GASTO ANUAL\n", OP_GASTO_ANUAL);
   printf ("\t\t[%d] FECHAR PROGRAMA\n", OP_SAIR);
}

 

Não quero que ninguém faça-o por mim, mas gostaria que me dessem uma ajuda. Me mostrando como faço pra recuperar dados de um arquivo. Eu tenho 4 relatórios pra fazer se alguém puder me ajudar com um deles os outros com certeza conseguirei desenvolver sozinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Francisco Jr.,

 

Estruturas ou struct, vai sim fazer grande diferença neste seu trabalho.

 

Com estruturas, você reunir diferentes tipos de dados e "criar" um novo tipo de dados.

 

EX.:

No seu programa você declarou no main:

int i, opcao, matricula, anoContratacao;
char nome[20]; char c;
int tamnome;
char cargo[20];
char usuario[6];
char senha[5];
char enfeite;
float salarioBase, desconto, salarioLiquido, salario_educacao, dependentes;

 

Utilizando estruturas você cria um novo tipo de dado como o nome de, por exemplo, Empregado desta forma:

struct Empregado {
   int i, opcao, matricula, anoContratacao;
   char nome[20]; char c;
   int tamnome;
   char cargo[20];
   char usuario[6];
   char senha[5];
   char enfeite;
   float salarioBase, desconto, salarioLiquido, salario_educacao, dependentes;
}

 

E na função main cria apenas um tipo empregado:

int main(void) {
   struct Empregado emp; //Cria um emp do tipo Empregado
}

 

Dentro estrutura você pode colocar todos os dados que se referem ao empregado.

 

Com relação a gravação e leitura no arquivo.

Utilizando estrutura você grava e lê todo um registro Empregado do arquivo. Como se estivesse escrevendo um int por exemplo.

 

Acho que vale a pena você estudar estruturas. Segue o link:

http://www.cplusplus.com/doc/tutorial/structures/

 

Espero ter sido claro e que tenha ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Gbecker pela ajuda, mas nesse momento preciso de ajuda prática, eu já baixei n tutoriais e não consegui aprender sozinho. Eu não tenho professor na sala de aula, eu tenho um palhaço que liga um projetor e deixa os slides rodando. Bom, eu não sou programador, sou auxiliar de expedição. Mas estou me esforçando na faculdade para um dia ser um programador. Só que do jeito como as aulas são ministradas não conseguirei aprender.

 

O problema é que tenho apenas mais 1 mês pra finalizar o trabalho, e ainda não aprendi estruturas(structs)e arquivos. felizmente consegui aprender como salvar em um arquivo, contudo o sentido inverso não. E tipo tenho pouco tempo e não tenho conhecimento. Sabe sempre digo que se deve ensinar a pescar e não dar o peixe, mas dessa vez eu preciso de pelo menos um peixe. Tipo preciso de um exemplo prático de localizar os dados em um arquivo texto ou binário. Eu não consegui captar o que você quis dizer, ou melhor entendi mas não consigo colocar em uso no meu trabalho.

Se eu não conseguir finalizar esse trabalho, vou ter q refazer a disciplina e desembolsar mais uns 1000 reais semestre q vem.

 

Se alguém puder e quiser deixar um exemplo prático de salvar e localizar dados em arquivo, desde já agradeço a ajuda e o tempo dispensado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Francisco Jr.,

 

Pois bem, sei como é quando tu tem um professor que é um ótimo programador e um péssimo professor. Já passei por isso também.

Vou te passar um pequeno programa que fiz trabalhando com estruturas e gravação/leitura delas em um arquivo binário, e vou tentar te explicar passo-a-passo como isso funciona.

Se eu estiver errado, peço aos usuários mais experientes que me corrigam.

 

Vale salientar que isto não é correto, pois, imagine que. Você vai conseguir fazer esse trabalho e vai conseguir passar na cadeira, mas vai fazer isso com dúvidas.

Na proxima cadeira você vai ter q estudar no mínimo 2x mais, pois o proximo professor vai tocar novos conteúdos. Seguro que você domina plenamente o que você viu na cadeira passada.

Claro que o valor de R$1000 pesa nisso mas... Bom não vou entra nesta discussão porque não é o objetivo do tópico.

 

Vamos ao pequeno tutorial:

############# ARQUIVOS #################

1)

Quando se trabalha com arquivos, a primeira coisa que você deve fazer é declarar um ponteiro que vai receber o endereço do arquivo em memória. Esse ponteiro é normalmente conhecido como "handle" do arquivo, vai ser com este nome que vou me referir a ele.

 
//Ponteiro global, guarda o handle do arquivo
FILE* fArquivo = 0; 

 

2) ESCRITA:

---> Primeiro deve-se abrir o arquivo utilizando a função:

FILE * fopen ( const char * filename, const char * mode );

Onde:

const char * filename: É o nome do arquivo que pretende-se abrir.

const char * mode: É o modo que o arquivo deve ser aberto.

 

Esta função retorna o handle do arquivo em caso de sucesso na abertura, ou, NULL em caso de erro.

 

Para a escrita em modo binário esta função ficaria assim:

//Abre o arquivo para escrita binária.
fArquivo = fopen(NomeArquivo, "a");

Neste caso abro em modo append, ou seja, informo para escrever os dados no fim do arquivo.

 

É neste segundo parametro que informamos em que modo vamos utilizar o arquivo. (Escrita, Leitura, fazer append no arquivo, etc...)

Neste link:

http://www.cplusplus.com/reference/clibrary/cstdio/fopen/

poderá encontrar informações mais detalhadas.

 

---> Em seguida fazemos a escrita no arquivo, utilizando a função:

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

Onde:

const void * ptr: Ponteiro para os dados que vamos escrever. perceba que este ponteiro é do tipo void, o que nos permite passar a ela qualquer tipo de dado tornando-a genérica.

size_t size: Recebe o tamnho em bytes do dado que vamos escrever.

size_t count: Quantidade de dados que vamos escrever.

FILE * stream: Handle associado ao arquivo.

 

Esta função retorna a quantidade de elementos escritos.

 

Podemos dizer que ela foi feita sobre medida para escrita de estruturas em arquivos, devido ao parametro que informamos o tamanho do dado em bytes que queremos escrever.

Neste link:

http://www.cplusplus.com/reference/clibrary/cstdio/fwrite/

poderá encontrar informações mais detalhadas.

 

---> Após a escrita de dados no arquivo, devemos fechar o mesmo. Com esta função:

int fclose ( FILE * stream );

Onde:

FILE * stream: Handle associado ao arquivo.

 

Em caso de sucesso retorna 0.

 

Esta função deve sempre ser executada. Pois somente quando ela é executada o buffer de I/O é esvaziado e os dados são de fato gravados no arquivo.

Neste link:

http://www.cplusplus.com/reference/clibrary/cstdio/fclose/

poderá encontrar informações mais detalhadas.

 

3) LEITURA:

---> O primeiro passo, a abertura do arquivo é muito semelhante com a escrita. Difere apenas no modo de abertura do arquivo:

//Abre o arquivo para leitura
fArquivo = fopen(NomeArquivo,"rb");

Neste caso abro em modo de leitura binária.

 

---> Em seguida fazemos a leitura no arquivo, utilizando a função:

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

Onde:

void * ptr: Ponteiro para um bloco de memória, com no mínimo count bytes alocados.

size_t size: Tamanho em bytes de cada elemento que será lido.

size_t count: Número de elementos, cada um com o tamnho de size bytes.

FILE * stream: Handle associado ao arquivo.

 

Esta função retorna a quantidade de elementos lidos com sucesso.

 

Novamente uma função sobre medida, desta vez para ler dados gravados no arquivo à estrutura.

Neste link:

http://www.cplusplus.com/reference/clibrary/cstdio/fread/

poderá encontrar informações mais detalhadas.

 

---> Após a leitura dos dados devemos fechar o arquivo da mesma forma que foi feito com a escrita.

int fclose ( FILE * stream );

Onde:

FILE * stream: Handle associado ao arquivo.

 

Em caso de sucesso retorna 0.

 

############# ESTRUTURAS #################

 

São utilizadas quando queremos usar os vários tipos de dados pré-definidos para criar um novo tipo.

EX.:

Vamos definir um novo tipo de dado: PESSOA.

Uma pessoa pode ter um nome, uma idade, uma altura, uma profissão, um sexo, enfim. O que a sua criatividade desejar definir.

Uma estrutura para implementar uma pessoa, poderia ser definida da forma abaixo:

typedef struct {
char strNome[30];
char strProfissao[30];
char strSexo[15];
int iIdade;
float fAltura;
} PESSOA;

 

Pronto, está criado um novo tipo de dado. Este tipo de dado é chamado de Tipo de Dado Abstrato.

Lá no código declaramos uma variável do tipo PESSOA desta forma:

PESSOA people;

E acessamos seus membros desta forma:

strcpy(people.strNome,"Claudia");
strcpy(people.strProfissao,"Programadora");
strcpy(people.strSexo,"Feminino");
people.iIdade = 25;
people.fAltura = 1.77;

 

Era isso, não sei se isto pode ser chamado de tutorial. Mas está aí.

Reitero se alguém encontrar algum erro nas minhas explicações, peço que corrigam. Até para eu poder aprender mais também. :rolleyes:

 

Segue abaixo o link para download do arquivos fonte do pequeno exemplo que fiz. Se não conseguir fazer o download, me envie seu e-mail via mensagem particular que te mando os fontes por email.

http://www.4shared.com/rar/MXGYjuUS/EstruturaArquivo.html

 

Espero ter ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

GBecker

 

Te agradeço enormemente pela excelente ajuda, vi os tutoriais do site as quais me passou os links.

Todos muito bons. Fiquei com algumas poucas dúvidas, mas deu pra entender bastante coisa.

Infelizmente o seu programa não rodou na minha IDE, uso DEVC++.

 

Mas mesmo assim te agradeço muito pela ajuda.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Francisco Jr.,

 

Vai mais uma dica. Tente utilizar outra IDE, pois DevC além de ser um projeto descontinuado é antigo e cheio de bugs.

 

Te aconselho a utilizar o Code::Blocks que é multi-plataforma. Ou, se preferir, somente para windows, o Visual Studio na sua versão express que é gratuita.

 

Code::Blocks:

http://www.codeblocks.org/downloads/26

 

Visual Studio 2011 Express:

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express

 

Espero ter ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi GBecker, valeu pela dica baixei o code::blocks e é bem melhor mesmo.

Contudo ele está apresentando o mesmo erro:

  • c|| undefined reference to `GravaRegistroArquivo'|
  • c|| undefined reference to `LeRegistroArquivo'|
    ||=== Build finished: 2 errors, 0 warnings ===|

Tu chegaste a executar este código?

Bom, mais uma vez obrigado pela atenção e disposição em ajudar.

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse erro acontece quando não se encontra a função GravaRegistroArquivo ou a função LeRegistroArquivo...

 

 

 

Abraços :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

GBecker

 

Amigo, com muita persistência consegui montar uma consulta ao arquivo, em modo binário e retorno todos os funcionários cadastrados.

Até aí tudo tranquilo, mas preciso listar os funcionários por cargo, sendo que o usuário é que especifica o cargo.

Meu trabalho agora está bem adiantado, com toda a ajuda que tu me deu. Entendi sobre estruturas e ler arquivos, neste último ainda com algumas dúvidas.

 

Gostaria que desses uma analisada no meu projeto, porque de repente é algo muito fácil, mas pra mim tá sendo muito difícil encontrar o erro.

Postei o projeto no 4SHARED.

 

Mais uma vez te agradeço muito pela ajuda e pela atenção dispensada.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Francisco Jr.,

 

Eaí cara!

 

Bom dei uma olhada no seu código e encontrei um erro de lógica nesta linha na função consultar do fonte funcoes.c:

if((strcmp(func.cargo, cargo)) && (func.flag == 1))

 

Bom, primeiro. A função strcmp retorna um valor int qualquer quando as strings são diferentes e retorna zero quando são iguais.

Portanto sua condição está sempre retornando true como se a primeira string lida do arquivo fosse a string procurada, entende?

Para corrigir isto faça o seguinte:

if((!strcmp(func.cargo, cargo)) && (func.flag == 1))

 

Segue um link à explicação do strcmp:

http://www.cplusplus.com/reference/clibrary/cstring/strcmp/

 

O operador not ou ! que coloquei antes da função indica que você esta encarando o retorno '0' como true. É o equivalente a fazer:

if((strcmp(func.cargo, cargo) == 0) && (func.flag == 1))

Das duas formas funciona igual, a diferença é que com o operador not fica mais elegante e padrão.

 

beleza. Mas só isso não resolveu o problema de lógica, aparentemente, a sua flag está retornando sempre true no if. Por isso que ele entra no código dentro do if logo no primeiro registro.

 

Resolvi este problema desta forma:

if((!strcmp(func.cargo, cargo)))

Não sei qual o intuito da flag se ela for importante você terá que pensar uma forma de contornar este erro.

Só que fazendo isto apareceu outro o BUG, o problema do case sensitive. Exemplo, "vendedor" é diferente de "Vendedor". Recomendo você gravar os registros todos em lower case ou upper case e na hora da busca converter o nome digitado pelo usuário para a forma que você gravou no arquivo.

Você pode usar umas desta funções:

 

http://www.cplusplus.com/reference/clibrary/cctype/tolower/'>http://www.cplusplus.com/reference/clibrary/cctype/tolower/

 

http://www.cplusplus.com/reference/clibrary/cctype/toupper/'>http://www.cplusplus.com/reference/clibrary/cctype/toupper/

 

Da biblioteca ctype.h:

 

http://www.cplusplus.com/reference/clibrary/cctype/

 

Espero ter ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo Gabriel,

 

fiz uso da sua dica e resolvi nessa parte:

if((!strcmp(func.cargo, cargo)))

e funcionou do jeito que eu queria.

O problema do case sensitive eu resolvi usando a função strupr nesses dois casos abaixo:

printf ("\n\t\tDIGITE O NOME DO FUNCIONARIO: ");
strupr(gets(func.nome));
printf ("\n\t\tQUAL O CARGO DO FUNCIONARIO: ");
strupr(gets(func.cargo));

E estou buscando com:

printf("\nCargo: ");   
strupr(gets(cargo));

Estou com um problema que é o seguinte: na busca indicando o cargo ele só traz um funcionário cadastrado.

Exemplificando pode ter n funcionários com o mesmo cargo mas ele só traz o primeiro que ele "enxerga".

 

Tive que criar uma estrtura de data, para caadstrar a data de admissão do funcionário e mais tarde usar esta data para fazer o relatório de folha de pagamento mensal e anual.

 

Bom antes de postar eu continuei o trabalho e depois de adicionada a nova estrutura ela ta retornando com um problema que você pode verificar ao executá-lo.

 

Estou disponibilizando o link com as modificações que fiz: Folha de pagamento.

Mais uma vez muito obrigado pela paciência e boa vontade de me ajudar.

PS: saiba que tudo que você me mostrou eu consegui entender, foi a aula que precisava ter e não tive!

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Francisco Jr.,

 

Desculpe pela demora na resposta, tive uma semana agitada por aqui.

 

Bom, baixei os novos arquivos. Só que não teve Cristo que fizesse compilar novamente o projeto. Se você puder explicar o problema, posso analisar o algoritmo e tentar ajudá-lo.

 

PS: saiba que tudo que você me mostrou eu consegui entender, foi a aula que precisava ter e não tive!

 

Fico feliz que tenha compreendido, sei que é uma m**** quando explicam uma coisa e não consigo entender.

É por isso que participo deste fórum, para ajudar aqueles que realmente querem aprender e para aprender junto, afinal de contas, para aprender a programar é obrigatório que você programe. =)

 

Continue estudando e SEMPRE que tiver alguma dúvida pode recorrer a este fórum. Que sempre terá alguém com boa vontade para ajudá-lo!

 

Sds, Gabriel Becker.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel, boa tarde.

 

Meu programa não está listando os funcionários cadastrados.

E a lista por cargo ele repete o usuário.

Abaixo segue os links que postei no 4shared, com a função principal e as funções secundárias:

 

funcoes.C

 

Main.C

 

Amanhã é o dia D, e mesmo tendo aprendido muita coisa não cheguei nem perto do que ainda preciso apresentar.

Contudo, estou contente por ter aprendido bastante.

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Francisco,

 

Ele não está procurando todos os registros por causa do controle de fluxo desta linha na função consultar:

while((!feof(arquivo)) && (!achou))

 

Retire a flag achou que ele irá procurar em todo o arquivo. Só que isto acarreta que você terá que armazenar vários registros, alocando dinamicamente as estruturas ou fazendo um vetor da mesma.

 

E na função que lista os registros, terá de faze-la varrer esse vetor.

 

Espero ter ajudado, FLW! :grin:

Compartilhar este post


Link para o post
Compartilhar em outros sites

funciona, mas você nem tem como saber quantos registros vai ter.

Se você criar apenas uma estrutura auxiliar, só vai conseguir ler apenas 2 registros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bah então nem sei como consertar isso!

E não tem outro jeito de resolver isso???

Tipo criar uma condição no laço que busca os registros e somente mostrar na tela, porque não preciso armazenar eu só preciso mostrar em forma de realatório.

Ah, perae você está com uma versão antiga do meu código, tu não pegou a que eu postei hoje no 4shared, não tem flag nesse código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz um vetor da estrutura. E a cada registro novo que você lê, incrementa o índice do vetor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tire isso do seu código já!

 

fflush(stdin);

 

Existe um tópico sobre dar flush na entrada padrão: http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

 

Também não é bom utilizar o gets(): http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1049157810&id=1043284351

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tenho a mínima idéia de como montar um vetor de estrutura.

 

Tire isso do seu código já!

 

fflush(stdin);

 

Existe um tópico sobre dar flush na entrada padrão: http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/

 

Também não é bom utilizar o gets(): http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1049157810&id=1043284351

 

Eu te agradeço pelos conselhos mas no momento o meu problema é outro, eu já tinha lido esse tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.