Ir ao conteúdo

Posts recomendados

Postado

Preciso criar um programa que leia dados do teclado, armazene em arquivo, e depois permita a alteração desses dados armazenados. Para tanto preciso escrever o nome do funcionário, localiza-lo no arquivo e aí selecionar qual dado quero modificar. Estou tendo dificuldade nesta parte, pois não estou conseguindo encontrar o funcionário pelo nome. Não sei exatamente em que parte estou errando.

prova.txt

  • Obrigado 1
Postado

@Sil Ks      para postar seu código é melhor usar o botão  <> que está lá na barra de ferramentas da janela de postar ,  pois senão seu código fica faltando alguns caracteres ,  e  esse txt que está nesse link está complicado de usar pois está  gravado tudo junto numa mesma linha ,  e seu código está bom  e parece que você está usando Linux pois no código tem o comando system("clrear"); e eu uso windows então coloquei "cls"  e para ler arquivo txt você precisa usar o comando fscanf e lendo arquivo txt ele só consegue ler string , e então seu código com algumas modificações ficou assim  :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
/*#include "teste.h"*/
#define MAX 100
int i, tam, posicao;
char nome[50];
int salario, familia, idade;
float peso, altura, renda, media;
typedef struct // Cria uma STRUCT para armazenar os dados de uma pessoa
{
    char  nome[50]; 
    // char* nome dá falha de segmentação
    int   salario;
    int   familia;
    int   idade;
    float peso;
    float altura;
} Pessoa; // Define o nome do novo tipo criado

Pessoa func[MAX];

void inicio();
int menu();
void cadastro();
int menu_op_2();
int menu_op_3();
void leitura();
int altera_salario(); 
int altera_altura(); 
int altera_peso(); 
int altera_idade();
int altera_familia();
int listar();
using namespace std;
int contador;

int main(){
    int op;
    int op2;
    int op3;
    inicio();
    do{
        op=menu();
        switch(op){
        case 01: 
            cadastro();
            break;
        case 02:
            menu_op_2();
            break;
        case 03:
            menu_op_3(); 
            break;
        case 04: 
            listar();
            break;
        default:
            printf("\nOpcão invalida!!!\n\n "); 
            break;
        } 
    } while (op!=0);
    return 0;
}
/*
=============================================================
=                 Menu Principal
=============================================================
*/
int menu(){
    int opcao;
    system("cls");
    do {
        printf("\n        ======= Menu =======\n\n");
        printf("1 - Cadastrar dados\n");
        printf("2 - Alterar dados\n");
        printf("3 - Relatorios\n");
        printf("4 - Listar Todos\n");
        printf("0 - sair do programa.\n\n");
        printf("Escolha um opcao: \n");
        scanf("%d", &opcao);
        /*if (opcao > 3 || opcao < 0){
            system("cls");
            printf("\nOpcão invalida!!!\n\n "); 
        }*/
    }while (opcao > 4 || opcao < 0);
    return opcao;
}
/*
=============================================================
=                 Funções Cadastrar dados
=============================================================
*/
void cadastro(){ 
    // cadastrar dados
    FILE *cadastrar;
    cadastrar=fopen("Dados2.txt", "a");	
    printf ("Quantidade de funcionários %d\n\n",contador-1);
    for(i=0; i<contador; i++) 
    // leitura a partir do teclado
    {
            printf(" Nome do funcionario: ");
            scanf(" %[^\n]s", func[i].nome);
            fputs(func[i].nome, cadastrar);
            printf(" Salario: ");
            scanf("%d", &func[i].salario);
            fprintf(cadastrar, " %d ", func[i].salario); 
            printf(" Nro de familiares: ");
            scanf("%d", &func[i].familia);
            fprintf(cadastrar, " %d ", func[i].familia); 
            printf(" Idade: ");
            scanf("%d", &func[i].idade);
            fprintf(cadastrar, " %d ", func[i].idade); 
            printf(" Peso: ");
            scanf("%f", &func[i].peso);
            fprintf(cadastrar, " %0.3f ", func[i].peso); 
            printf(" Altura: ");
            scanf("%f", &func[i].altura);
            fprintf(cadastrar, " %0.2f\n ", func[i].altura); 
            printf(" \n ");
       }
        printf("Dados armazenados\n");
            //impressão para teste
	{
            printf(" \n Funcionario: %s ", func[i].nome);
            printf(" \n Salario: %d ", func[i].salario);
            printf(" \n Familia: %d ", func[i].familia);
            printf(" \n Idade: %d ", func[i].idade);
            printf(" \n Peso: %0.3f ", func[i].peso);
            printf(" \n Altura: %0.2f ", func[i].altura);
            printf(" \n ");
       }

        fclose(cadastrar);
    }
/*
    =============================================================
    =                 Menu Alterar dados
=============================================================
*/
int menu_op_2(){
    printf(" \n Digite um nome : ");
    scanf(" %[^\n]s", nome);
    posicao=0;
    for(i=0; i<contador; i++)
    {
        if(strcmp(nome, func[i].nome)== 0) {
            posicao = i;
            break;
        } 
    }
    if(posicao = 0) {
        printf(" Registro não encontrado!\n ");
   } 
   else{
        printf("\n Registro encontrado! "                               );
        printf(" \n Trabalhador --------: %s"    , nome                 );
        printf(" \n Salario ------------: %d "   , func[posicao].salario);
        printf(" \n Nro familiares -----: %d "   , func[posicao].familia);
        printf(" \n Idade --------------: %d "   , func[posicao].idade  );
        printf(" \n Peso ---------------: %0.3f ", func[posicao].peso   );
        printf(" \n Altura -------------: %0.2f ", func[posicao].altura );
        printf(" \n -------------------------------------------------\n");
        leitura();
   }
   printf("    Tecle !");
   getch();

}
void leitura(){
    FILE *cadastrar;
    cadastrar = fopen("Dados2.txt","r+");
    int opcao2;
    printf("======= O Que Deseja Alterar =======\n");
    printf("\n");
    printf("1 - Alterar nome\n");
    printf("2 - Alterar salario\n");
    printf("3 - Alterar altura\n");
    printf("4 - Alterar peso\n");
    printf("5 - Alterar idade\n");
    printf("6 - Alterar familia\n");
    printf("0 - Retornar ao menu principal.\n\n");
    printf("Escolha um opcao: \n");
    scanf("%d", &opcao2);
    if (opcao2 > 6 || opcao2 < 0){
        system("clear");
        printf("\nOpcão invalida!!!\n\n ");
        return leitura(); 
        // retorna ao menu alterar
    }
    if (opcao2 < 7 && opcao2 > 0){
        do{
            system("clear");
            switch(opcao2){
            case 1: 
                setbuf(stdin, NULL);
                printf("Informe novo nome: ");
                fgets(nome, 50, stdin);
                fputs(nome, cadastrar);					 
                break;
           case 2: 
                altera_salario(); 
                break;
            case 3: 
                altera_altura(); 
                break;
            case 4: 
                altera_peso(); 
                break;
            case 5: 
                altera_idade(); 
                break;
            case 6:
                altera_familia(); 
                break;
            }
           //espera enter	
        }while(opcao2 > 6 || opcao2 < 0);
        return leitura();
    }
}
int menu_op_3(){

}
int altera_salario(){
    
}
int altera_altura(){
    
}
int altera_peso(){
    
}
int altera_idade(){
    
}
int altera_familia(){
    
}
void inicio(){
    int j=0;
    char a[10],b[10],c[10],d[10],e[10];
    FILE *fp;
    fp = fopen("Dados2.txt","r+");
    if(fp!=NULL)
    while( fscanf(fp,"%s %s %s %s %s %s",func[j].nome,a,b,c,d,e ) != EOF ){
        func[j].salario = atoi(a)    ;
        func[j].familia = atoi(b)    ;
        func[j].idade   = atoi(c)    ;
        func[j].peso  =(float)atoi(d);
        func[j].altura=(float)atoi(e);
        
        printf("nome ----: %s\n"    ,func[j].nome   );
        printf("salario -: %d\n"    ,func[j].salario);
        printf("familia -: %d\n"    ,func[j].familia);
        printf("idade ---: %d\n"    ,func[j].idade  );
        printf("peso ----: %.2f\n"  ,func[j].peso   );
        printf("altura --: %.2f\n\n",func[j].altura );
        
        j++;
    }
    else
    printf("Erro No Arquivo, Nao Pode Abrir . . .!"  );
    printf("Aqui estão Todos Os Cadastros\n"         );
    printf("  Guardados Na Struct\n\n      Tecle !\n");
    contador=j;
    getch();
    fclose(fp);
}
int listar(){
    int j;
    system("cls");
    printf("  Todos Os Cadastros\n\n");
    for(j=0;j<contador;j++){
        printf("nome ----: %s\n"    ,func[j].nome   );
        printf("salario -: %d\n"    ,func[j].salario);
        printf("familia -: %d\n"    ,func[j].familia);
        printf("idade ---: %d\n"    ,func[j].idade  );
        printf("peso ----: %.2f\n"  ,func[j].peso   );
        printf("altura --: %.2f\n\n",func[j].altura );
    }
    printf("    Tecle !");
    getch();
}

 

  • Amei 1
Postado

Erro meu. Achei que ficaria melhor para visualizar seu eu mandasse em txt, mas nas próximas sigo teu conselho. obrigado pela ajuda, vou fazer as modificações pra testa-lo no linux... muito obrigado

  • Obrigado 1

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!