Ir para conteúdo
Fórum Script Brasil

eduardo azevedo

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Sobre eduardo azevedo

Perfil

  • Gender
    Male

eduardo azevedo's Achievements

0

Reputação

  1. eduardo azevedo

    Ajuda

    Eu dei uma ajeitada no codigo para coisas necessarias, mas um problema é que sempre que se cria um cadastro e exclui, se cadastrar o mesmo nome e tentar exclui-lo ele mostra como já excluido. Teria alguma maneira de ajeitar isso? so se realmente for simples. #include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> struct registro{ char nome[40]; char endereco[50]; char situacao[100]; char tratamento[150]; int dia; int mes; int ano; int idade; char status; } reg; FILE *fp; void abrir(char tipo[3]){ if((fp=fopen("Pacientes.txt", tipo))==NULL) { printf("\n O arquivo não pode ser aberto.\n"); getch(); exit(1); } } void incluir(void){ /* função para gravar no arquivo */ abrir("ab+"); fseek(fp,0L, SEEK_END); /* le o arquivo do inicio ao fim */ do{ printf("\n Digite o nome do paciente ou digite FIM para sair:\n\n"); gets(reg.nome); if ((strcmp(reg.nome,"fim")!=0)&&(strcmp(reg.nome,"FIM")!=0)){ /* vai comparar se tem os nomes já cadastrados */ printf("\n Informe o endereco:"); gets(reg.endereco); printf("\n Idade:"); scanf("%d%*c", &reg.idade); printf("\n Situacao do paciente:"); gets(reg.situacao); printf("\n Tratamento adequado:"); gets(reg.tratamento); do{ printf("\n Data de Ocorrencia(dd mm aaaa):"); scanf("%d%*c %d%*c %d%*c", &reg.dia, &reg.mes, &reg.ano); }while(reg.ano<=1900 || reg.ano>=2100 || reg.mes<1 || reg.mes>12 || reg.dia<1 || reg.dia>31); reg.status='1'; /* conta quantos protocolos existem */ if(fwrite(&reg, sizeof(struct registro), 1, fp) != 1){ /* confere se gravou */ printf("\n Erro na gravacao."); getch(); } else{ printf("\n Cadastro concluido.\n\n"); } } } while((strcmp(reg.nome,"fim")!=0)&&(strcmp(reg.nome,"FIM")!=0)); fclose(fp); } int busca (void){ /* função de busca */ int achou=-1,posicao=0; char nomep[40]; abrir("rb"); printf("\n Digite o nome do(a) paciente:"); gets(nomep); rewind(fp); /* volta pro inicio do arquivo */ while((!feof(fp))&&(achou==-1)){ fread(&reg, sizeof(struct registro), 1, fp); if (!feof(fp)){ if (strcmp(nomep, reg.nome)==0){ if (reg.status=='0'){ posicao=-2; } achou=1; } else{ posicao++; } } else{ posicao=-1; } } if (achou==-1){ posicao=-1; } fclose(fp); return(posicao); } void consultar(void){ int pos; pos=busca(); if(pos==-1){ printf("\nPaciente inexistente."); getch(); } else if(pos==-2){ printf("\nPaciente inexistente."); getch(); } else{ abrir("rb+"); fseek(fp,pos*sizeof(struct registro),SEEK_SET); /* percorre toda a extrutura */ fread(&reg, sizeof(struct registro), 1, fp); /* le se tiver achado */ printf("\nSituacao do(a) paciente %s: %s",reg.nome,reg.situacao); printf("\nTratamento adequado: %s",reg.tratamento); printf("\nData de Ocorrencia: %d %d %d", reg.dia, reg.mes, reg.ano); getch(); } fclose(fp); } void alterar(void){ int pos; pos=busca(); if (pos==-1){ printf("\nPaciente inexistente."); getch(); } else if(pos==-2){ printf("\nPaciente inexistente."); getch(); } else{ abrir("rb+"); fseek(fp,pos*sizeof(struct registro),SEEK_CUR); fread(&reg, sizeof(struct registro), 1, fp); printf("\nAlterar situacao do(a) paciente:%s",reg.nome); printf("\nSituacao do(a) paciente: %s",reg.situacao); getch(); printf("\nNova situacao do(a) paciente: "); gets(reg.situacao); printf("\nTratamento adequado: %s",reg.tratamento); getch(); printf("\nNovo tratamento: "); gets(reg.tratamento); do{ printf("\nNova Data de Ocorrencia(dd mm aaaa):"); scanf("%d%*c %d%*c %d%*c", &reg.dia, &reg.mes, &reg.ano); }while(reg.ano<=1900 || reg.ano>=2100 || reg.mes<1 || reg.mes>12 || reg.dia<1 || reg.dia>31); reg.status='1'; fseek(fp,pos*sizeof(struct registro),SEEK_SET); if(fwrite(&reg, sizeof(struct registro),1, fp)!=1){ printf("\nErro no cadastro."); } else{ printf("\nCadastro atualizado."); getch(); } } fclose(fp); } void listar(void){ int cont=0; abrir("rb"); fseek(fp, 0L, SEEK_SET); fread(&reg, sizeof(struct registro),1, fp); do{ if (reg.status!='0'){ printf("\nNome do(a) paciente: %s",reg.nome); printf("\nEndereco: %s",reg.endereco); printf("\nIdade: %d", reg.idade); printf("\nSituacao do(a) paciente: %s",reg.situacao); printf("\nTratamento Adequado: %s",reg.tratamento); printf("\nData de Ocorrencia: %d %d %d",reg.dia, reg.mes, reg.ano); cont++; printf("\n"); } fread(&reg, sizeof(struct registro),1, fp); } while(!feof(fp)); printf("\n#Numero de pacientes=%d",cont); getch(); } void excluir(void){ int pos; pos=busca(); if(pos==-1){ printf("\nPaciente não encontrado."); getch(); } else{ if(pos==-2){ printf("\nPaciente excluido."); getch(); } else{ abrir("rb+"); fseek(fp, pos*sizeof(struct registro), SEEK_SET); fread(&reg, sizeof(struct registro), 1, fp); printf("\nNome: %s",reg.nome); printf("\nEndereco: %s",reg.endereco); printf("\nIdade: %d", reg.idade); printf("\nSituacao: %s",reg.situacao); printf("\nTratamento Adequado: %s",reg.tratamento); printf("\nData de Ocorrencia: %d %d %d",reg.dia, reg.mes, reg.ano); printf("\nDigite qualquer tecla para excluir o registro do paciente --> %s",reg.nome); getch(); reg.status='0'; fseek(fp, pos*sizeof(struct registro), SEEK_SET); if(fwrite(&reg, sizeof(struct registro), 1, fp)!=1){ printf("\nErro no cadastro."); getch(); } else{ printf("\nExclusao concluida."); getch(); } } } fclose(fp); } int main(void){ char opcao[2], op; do{ do{ system("cls"); printf("\t\n\t Escolha uma das opcoes\n\n"); printf("\n\t Incluir paciente"); printf("\n\t [a] Alterar cadastro"); printf("\n\t [e] Excluir cadastro"); printf("\n\t [c] Consultar situacao "); printf("\n\t [l] Listar"); printf("\n\t Sair"); printf("\n\n\n\t Opcao: \n"); gets(opcao); op = tolower(*opcao); } while( !strchr("iaecls",op) ); switch(op){ case 'i': incluir(); break; case 'a': alterar(); break; case 'e': excluir(); break; case 'c': consultar(); break; case 'l': listar(); break; case 's': exit(0); } } while(1); }
  2. eduardo azevedo

    Ajuda

    beleza funcionou, mas esta acontecendo logo em seguida, na hora de perguntar outro nome ou fim ele pula e vai direto pra o endereco e não tem como sair disso.
  3. eduardo azevedo

    Ajuda

    mas ai o valor é guardado em reg.idade não seria no da data?
  4. eduardo azevedo

    Ajuda

    Nesse codigo, de um prontuario medico é necessario pedir uma data de ocorrencia, mas ele nunca pede e pula pro proximo cadastro. Como q eu ajeito? alguém pf #include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> struct registro { char nome[40]; char endereco[50]; char situacao[100]; char tratamento[150]; char data[20]; int idade; char status; }reg; FILE *fp; int main(void){ char opcao[2], op; do{ do{ system("cls"); printf("\t\n\t Escolha uma das opcoes\n\n"); printf("\n\t Incluir paciente"); printf("\n\t [a] Alterar cadastro"); printf("\n\t [e] Excluir cadastro"); printf("\n\t [c] Consultar situacao "); printf("\n\t [l] Listar"); printf("\n\t Sair"); printf("\n\n\n\t Opcao: \n"); gets(opcao); op = tolower(*opcao); } while( !strchr("iaecls",op) ); switch(op){ case 'i': incluir(); break; case 'a': alterar(); break; case 'e': excluir(); break; case 'c': consultar(); break; case 'l': listar(); break; case 's': exit(0); } } while(1); } void abrir(char tipo[3]){ if((fp=fopen("paciente.txt", tipo))==NULL){ printf("\n O arquivo não pode ser aberto.\n"); getch(); exit(1); } } void incluir(void){ /* função para gravar no arquivo */ abrir("ab+"); fseek(fp,0L, SEEK_END); /* le o arquivo do inicio ao fim */ do{ printf("\n Digite o nome do paciente ou digite FIM para sair:\n\n"); gets(reg.nome); if ((strcmp(reg.nome,"fim")!=0)&&(strcmp(reg.nome,"FIM")!=0)){ /* vai comparar se tem os nomes já cadastrados */ printf("\n Informe o endereco:"); gets(reg.endereco); printf("\n Situacao do paciente:"); gets(reg.situacao); printf("\n Tratamento adequado:"); gets(reg.tratamento); printf("\n Idade:"); scanf("%d", &reg.idade); printf("\n Data de Ocorrencia(dd mm aaaa):"); gets(reg.data); reg.status='1'; /* conta quantos protocolos existem */ if(fwrite(&reg, sizeof(struct registro), 1, fp) != 1){ /* confere se gravou */ printf("\n Erro na gravacao."); getch(); } else{ printf("\n Cadastro concluido.\n\n");} } }while((strcmp(reg.nome,"fim")!=0)&&(strcmp(reg.nome,"FIM")!=0)); fclose(fp); } int busca (void){ /* função de busca */ int achou=-1,posicao=0; char nomep[40]; abrir("rb"); printf("\n Digite o nome do paciente:"); gets(nomep); rewind(fp); /* volta pro inicio do arquivo */ while((!feof(fp))&&(achou==-1)){ fread(&reg, sizeof(struct registro), 1, fp); if (!feof(fp)){ if (strcmp(nomep, reg.nome)==0){ if (reg.status=='0') {posicao=-2;} achou=1; } else{posicao++;} } else{posicao=-1;} } if (achou==-1) {posicao=-1;} fclose(fp); return(posicao); } void consultar(void){ int pos; pos=busca(); if(pos==-1){ printf("\nPaciente inexistente."); getch(); } else if(pos==-2){ printf("\nPaciente inexistente."); getch(); } else{ abrir("rb+"); fseek(fp,pos*sizeof(struct registro),SEEK_SET); /* percorre toda a extrutura */ fread(&reg, sizeof(struct registro), 1, fp); /* le se tiver achado */ printf("\nSituacao do paciente:%s: %s",reg.nome,reg.situacao); getch(); } fclose(fp); } void alterar(void){ int pos; pos=busca(); if (pos==-1){ printf("\nPaciente inexistente."); getch(); } else if(pos==-2){ printf("\nPaciente inexistente."); getch(); } else{ abrir("rb+"); fseek(fp,pos*sizeof(struct registro),SEEK_CUR); fread(&reg, sizeof(struct registro), 1, fp); printf("\nAlterar situacao do paciente:%s",reg.nome); printf("\nSituacao do paciente: %s",reg.situacao); getch(); printf("\nNova situacao do paciente: "); gets(reg.situacao); printf("\nTratamento adequado: %s",reg.tratamento); getch(); printf("\nNovo tratamento: "); gets(reg.tratamento); reg.status='1'; fseek(fp,pos*sizeof(struct registro),SEEK_SET); if(fwrite(&reg, sizeof(struct registro),1, fp)!=1){ printf("\nErro no cadastro."); } else{ printf("\nCadastro atualizado."); getch(); } } fclose(fp); } void listar(void) { int cont=0; abrir("rb"); fseek(fp, 0L, SEEK_SET); fread(&reg, sizeof(struct registro),1, fp); do{ if (reg.status!='0'){ printf("\nNome do paciente: %s",reg.nome); printf("\nEndereco: %s",reg.endereco); printf("\nSituacao do paciente: %s",reg.situacao); printf("\nTratamento Adequado: %s",reg.tratamento); printf("\nIdade: %d", reg.idade); printf("\nData de Ocorrencia: %s",reg.data); cont++; printf("\n"); } fread(&reg, sizeof(struct registro),1, fp); }while(!feof(fp)); printf("\n#Numero de pacientes=%d",cont); getch(); } void excluir(void){ int pos; pos=busca(); if(pos==-1){ printf("\nPaciente não encontrado."); getch(); } else{ if(pos==-2){ printf("\nPaciente excluido."); getch(); } else{ abrir("rb+"); fseek(fp, pos*sizeof(struct registro), SEEK_SET); fread(&reg, sizeof(struct registro), 1, fp); printf("\nNome: %s",reg.nome); printf("\nEndereco: %s",reg.endereco); printf("\nSituacao: %s",reg.situacao); printf("\nTratamento Adequado: %s",reg.tratamento); printf("\n Idade: %d", reg.idade); printf("\nData de Ocorrencia: %s",reg.data); printf("\nDigite qualquer tecla para excluir o registro do paciente --> %s",reg.nome,(pos+1)); getch(); reg.status='0'; fseek(fp, pos*sizeof(struct registro), SEEK_SET); if(fwrite(&reg, sizeof(struct registro), 1, fp)!=1){ printf("\nErro no cadastro."); getch(); } else{ printf("\nExclusao concluida."); getch(); } } } fclose(fp); }
×
×
  • Criar Novo...