Ir ao conteúdo
  • Cadastre-se

Ajuda algoritmo - arquivos o problema é que quando é digitado a opção 4 ou a opção 5 o programa para de responder antes de mostrar os dados.


JulioKOG

Posts recomendados

Olá,
 
Estou com dificuldades em um trabalho de algoritmo que tenho que fazer e gostaria de saber se podem me ajudar.
O problema é que quando é digitado a opção 4 ou a opção 5 o programa para de responder antes de mostrar os dados.
 
A função de cada opção: 
 
1- Cadastrar paciente a partir de dados como: nome, codigo, telefone e convenio. Criando um arquivo paciente.txt.
2- Agendamento de data, hora, e tipo de consulta a partir do codigo do paciente. Criando um arquivo agenda.txt.
3- Alterar telefone de paciente a partir do codigo do paciente em "paciente.txt".
4- Mostrar paciente.txt e agenda.txt no programa
5- Criar arquivo auxiliar para mostrar somente nome, data, hora separando por " - ".
 
Segue meu codigo:  
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
using namespace std;
int main()
{ 
    FILE *registro, *registro2, *aux;
  int cod, codB, tel, telB, repetiu=0, op, data, dataB, hora, horaB;
char nome[30], conv[30], nomeB[30], convB[30], tipo[30], tipoB[30];
    int c, posicao=0;
  registro = fopen("Paciente.txt", "a+");
  registro2 =fopen("Agenda.txt","a+");


  if (registro==NULL)
     { printf("\n Erro na criacao dos arquivos\n");
       
     }
  else{
  

   printf("\n 1- Cadastrar paciente");
  printf("\n 2- Agendar");
  printf("\n 3- Alterar tel.");
  printf("\n 4- Mostrar");
  printf("\n 5- Arq. auxiliar"); 
  printf("\n 6- Sair\n"); 
    printf(" Digite opcao: ");
  cin>>op;

       if(op==1){
  
     printf("\n Digite o codigo do paciente:  ");
       scanf("%d%*c", &cod);
 rewind(registro);
       fseek(registro, posicao, SEEK_SET);
       printf("Digite nome do paciente: ");
        scanf("%s%*c", &nome);
        printf("Digite telefone do paciente: ");
        scanf("%d%*c", &tel);
        printf("Digite convenio do paciente: ");
        scanf("%s%*c", &conv);
       
       
       fprintf(registro,"%d %d %30s %30s\n", codB, telB, nomeB, convB);
       printf("\nCadastro realizado com sucesso !\n\n");
       fclose(registro);
   }

       
       if(op==2){
     rewind (registro2);
     fseek(registro2, posicao, SEEK_SET);
       printf(" Digite data da consulta: ");
       scanf("%d%*c", &data);
       printf(" Digite hora da consulta: ");
       scanf("%d%*c", &hora);
       printf(" Digite codigo do paciente: ");
       scanf("%d%*c", &cod);
       printf(" Digite tipo de consulta (Normal/Retorno): ");
       scanf("%c%*c", &tipo);
       fprintf(registro2,"%d %d %d %30s\n", dataB, horaB, codB, tipoB);
       printf("\nAgendamento realizado com sucesso !\n\n");
       fclose(registro2);
  }
  
  if(op==3){


printf("Digite codigo do paciente: ");
  scanf("%d%*c", &cod);
  fscanf(registro,"%d %d %30s %30s\n", codB, telB, nomeB, convB);
  if(cod==codB){
  posicao=0;
  repetiu=1;
 }
    else{
    while ((!feof(registro)) && (cod!=codB)){
    posicao=posicao+48+repetiu; 
    fscanf(registro,"%d %d %30s %30s\n", codB, telB, nomeB, convB);
    repetiu++;
}
}
 if(repetiu==0){
  cout<<"\n Paciente nao cadastrado\n\n";
 }
 else
 {
  rewind (registro);
  fseek(registro, posicao, SEEK_SET);
  printf("Digite telefone: ");
    scanf("%d%*c", &tel);
    fprintf(registro,"%d %d %30s %30s\n", codB, telB, nomeB, convB);
    cout<<"\n Alterado com sucesso \n";
 }
 fclose(registro);
}

if (op==4){
registro = fopen("Paciente.txt", "a+");
registro2 =fopen("Agenda.txt","a+");
feof(registro);
feof(registro2);
fscanf(registro,"%d %d %30s %30s\n", codB, telB, nomeB, convB);
fscanf(registro2,"%d %d %d %30s\n", dataB, horaB, codB, tipoB);
fprintf(registro,"%d %d %30s %30s\n", codB, telB, nomeB, convB);
fprintf(registro2,"%d %d %d %30s\n", dataB, horaB, codB, tipoB);
fclose(registro);
fclose(registro2);
}

if(op==5){
  aux=fopen("Emp.txt", "w+");
  fscanf(registro," %s %d %d ", nomeB, dataB, horaB);
  printf("\n %s %d %d ", nomeB," - ", dataB," - ", horaB);
  fclose(aux);

}
      
    
 if(op==6){
  fclose(registro);
fclose(registro2);
}
 }


   system("pause");
}

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

@JulioKOG Sugiro começar pela opção 1, a que salva os dados, você já parou pra ler o que seu programa está salvando?

 

 

Aconselho a dar uma estudada a mais em manipulação de arquivos, recomendo essas: https://programacaodescomplicada.wordpress.com/indice/linguagem-c/


Da aula 66 a 79 o assunto é manipulação de arquivos.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...