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
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", ®.idade);
printf("\n Data de Ocorrencia(dd mm aaaa):"); gets(reg.data);
reg.status='1'; /* conta quantos protocolos existem */
if(fwrite(®, 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(®, 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(®, 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(®, 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);
Pergunta
eduardo azevedo
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", ®.idade);
printf("\n Data de Ocorrencia(dd mm aaaa):"); gets(reg.data);
reg.status='1'; /* conta quantos protocolos existem */
if(fwrite(®, 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(®, 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(®, 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(®, 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(®, 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(®, 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(®, 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(®, 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(®, sizeof(struct registro), 1, fp)!=1){
printf("\nErro no cadastro.");
getch();
}
else{
printf("\nExclusao concluida.");
getch();
}
}
}
fclose(fp);
}
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.