• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Biscoito111

Gestão de um Clínica Médica (em Linguagem C)

11 mensagens neste tópico

Boa pessoal.  :P

Tenho um pequeno problema aqui no meu trabalho prático da disciplina de P1 que é sobre a gestao de uma clinica medica.

Dá este erro quando acabo de adicionar um novo medico ao fim de introduzir os dados dele:

      Run-Time Check Failure #2 - Stack around the variable 'op_inserir' was corruped

Eu nao sei como voltar para o menu com o primeiro elemento do meu array de estrutura dos medicos guardado.

Estou a programar no compilador Microsoft Visual Studio 2003

Alguem me pode ajudar...

#include<stdio.h>
#include<string.h>
#include<windows.h>

//--------------------------------------------------------DEFINES--------------------------------------------------------
#define MAXMED 10
#define MAXPAC 250
//-----------------------------------------------------------------------------------------------------------------------

//--------------------------------------------------------TYPEDEF--------------------------------------------------------
typedef struct MEDICO medico;
typedef struct PACIENTE paciente;
//-----------------------------------------------------------------------------------------------------------------------

//--------------------------------------------------DECLARACAO DE FUNCOES------------------------------------------------
int inserir_m(medico tab_m[],int n_m);
int inserir_p(paciente tab_p[],int n_p);
int edit_m(medico tab_m[],int n_m);
int edit_p(paciente tab_p[],int n_p);
int elim_m(medico tab_m[],int n_m);
int elim_p(paciente tab_p[],int n_p);
medico obtem_info_m();
paciente obtem_info_p();
void clrscr();
//-----------------------------------------------------------------------------------------------------------------------

//-------------------------------------------------------ESTRUTURAS------------------------------------------------------
struct dados_pessoais{
char nome[50];
int idade;
};

struct dados_consul{
int media_consult_dia;
int tempo_medio_consul;
};

struct histo_consultas{
char tipo_consul[10];    //Tipo de consulta (normal/urgente)
char data[10];           //data
char medico[30];         //médico
char espec[20];          //especialidade
char descricao[100];     //descrição (campo de texto com pequena descrição da ocorrência)
};

struct MEDICO{
struct dados_pessoais Dados_Pessoais;   //estrutura com os dados pessoais de cada medico
char espec[20];                         //especialidade
char hor_trab[10];                     //manhã/tarde individualizado por dia da semana
int num_pac;                            //numero de pacientes
struct dados_consul Dados_Consultas;    //estrutura com os dados da consulta
int anos_trab_activo;                   //anos a trabalhar no activo
};

struct PACIENTE{
struct dados_pessoais Dados_Pessoais;          //estrutura com os dados pessoais de cada paciente
struct histo_consultas Historico_Consultas;    //historico das ultimas 10 consultas de cada paciente
};
//-----------------------------------------------------------------------------------------------------------------------

//-------------------------------------------------------MAIN------------------------------------------------------------
void main()
{	
int op_menu,tam=3,j;
char op_inserir,op_editar,op_eliminar;
int total_m=0,total_p=0;

medico m[MAXMED];
paciente p[MAXPAC];


printf("\t\t<<<----------Gestao de uma clinica medica---------->>>\n\n");
printf("1 - Inserir medicos ou pacientes\n");
printf("2 - Editar medicos ou pacientes\n");
printf("3 - Eliminar medicos ou pacientes\n\n");

printf("Introduza a opcao desejada(1,2,3): ");
scanf("%d",&op_menu);
clrscr();

switch(op_menu){

	case 1:

		printf("-->Prima m se deseja INSERIR um novo medico\n");
		printf("\t\t\tou\n");
		printf("-->Prima p se deseja INSERIR um novo paciente.\n");
		scanf("%s",&op_inserir);

		if(op_inserir=='m')
		{
			total_m=inserir_m(m,total_m);
			clrscr();
		}
		else 
			if(op_inserir=='p')		
				total_p=inserir_p(p,total_p);		   //função para inserir médicos ou pacientes
		break;
	case 2:

		printf("Prima m se deseja EDITAR um medico\n");
		printf("\t\t\tou\n");
		printf("Prima p se deseja EDITAR um paciente\n");
		scanf("%s",&op_editar);

		if(op_editar=='m')
			total_m=edit_m(m,total_m);
		else 
			if(op_editar=='p')
				total_p=edit_p(p,total_p);             //função para editar médicos ou pacientes
		break;
	case 3:

		printf("Prima m se deseja ELIMINAR um medico\n");
		printf("\t\t\tou\n");
		printf("Prima p se deseja ELIMINAR um paciente\n");
		scanf("%s",&op_eliminar);

		if(op_eliminar=='m')
			total_m=elim_m(m,total_m);
		else 
			if(op_eliminar=='p')
				total_p=elim_p(p,total_p);         	   //função para eliminar médicos ou pacientes
		break;

	default:
		printf("OPCAO INEXISTENTE\n\n");
}
}
//-----------------------------------------------------------------------------------------------------------------------

//-----------------------------------------------FUNÇÕES(EM DESENVOLVIMENTO)---------------------------------------------

int inserir_m(medico tab_m[],int n_m)
{
if(n_m>=MAXMED)
{
	printf("Tabela completa\n");
	return n_m;
}
else
{
	tab_m[n_m]=obtem_info_m();
	return n_m+1;
}
}

int inserir_p(paciente tab_p[],int n_p)
{
if(n_p>=MAXPAC)
{
	printf("Tabela completa\n");
	return n_p;
}
else
{
	tab_p[n_p]=obtem_info_p();
	return n_p+1;
}
}

int edit_m(medico tab_m[],int n_m)
{
char nome_m[50];
int i;
printf("Qual o nome do MEDICO que deseja editar: \n");
gets(nome_m);
for(i=0; i<n_m && strcmp(nome_m, tab_m[i].Dados_Pessoais.nome)!=0; i++);
if(i==n_m)
{
	printf("Nome inexistente\n");
	system("pause");
	clrscr();
	return n_m;
}
else
{
	tab_m[i] = obtem_info_m();
}
return n_m;
}

int edit_p(paciente tab_p[],int n_p)
{
char nome_p[50];
int i;
printf("Qual o nome do PACIENTE que deseja editar: \n");
gets(nome_p);
for(i=0; i<n_p && strcmp(nome_p, tab_p[i].Dados_Pessoais.nome)!=0; i++);
if(i==n_p)
{
	printf("Nome inexistente\n");
	return n_p;
}
else
{
	tab_p[i] = obtem_info_p();
}
return n_p;
}

int elim_m(medico tab_m[],int n_m)
{
char nome_m[50];
int i,pos;
printf("Qual o nome do MEDICO que deseja eliminar: \n");
gets(nome_m);
for(i=0; i<n_m && strcmp(nome_m, tab_m[i].Dados_Pessoais.nome)!=0; i++);
pos=i;
if(i==n_m)
{
	printf("Nome inexistente\n");
	return n_m;
}
else
{
	for(i=pos;i<n_m;i++)
	{
		tab_m[i] = tab_m[n_m+1];
	}
		return n_m-1;
}
}

int elim_p(paciente tab_p[],int n_p)
{
char nome_p[50];
int i,pos;
printf("Qual o nome do PACIENTE que deseja eliminar: \n");
gets(nome_p);
for(i=0; i<n_p && strcmp(nome_p, tab_p[i].Dados_Pessoais.nome)!=0; i++);
pos=i;
if(i==n_p)
{
	printf("Nome inexistente\n");
	return n_p;
}
else
{
	for(i=pos;i<n_p;i++)
	{
		tab_p[i] = tab_p[n_p+1];
	}
		return n_p-1;
}
}

medico obtem_info_m()
{
medico x;

printf("Nome: \n");
fflush(stdin);
gets(x.Dados_Pessoais.nome);
printf("Idade: \n");
scanf("%d",&(x.Dados_Pessoais.idade));
printf("Especialidade: \n");
fflush(stdin);
gets(x.espec);
printf("Horario de trabalho: \n");
fflush(stdin);
gets(x.hor_trab);
printf("Numero de pacientes: \n");
scanf("%d",&(x.num_pac));
printf("Media de consultas por dia: \n");
scanf("%d",&(x.Dados_Consultas.media_consult_dia));
printf("Tempo medio por consulta: \n");
scanf("%d",&(x.Dados_Consultas.tempo_medio_consul));
printf("Anos a trabalhar no activo: \n");
scanf("%d",&(x.anos_trab_activo));

return x;
}

paciente obtem_info_p()
{
paciente y;

printf("Nome: \n");
fflush(stdin);
gets(y.Dados_Pessoais.nome);
printf("Idade: \n");
fflush(stdin);
scanf("%d",&(y.Dados_Pessoais.idade));
printf("Historico das ultimas 10 consultas\n");
printf("Tipo de consulta(normal/urgente): \n");
scanf("%s",&(y.Historico_Consultas.tipo_consul));
printf("Data(dd/mm/yyyy): \n");
fflush(stdin);
gets(y.Historico_Consultas.data);
printf("Medico: \n");
fflush(stdin);
gets(y.Historico_Consultas.medico);
printf("Especialidade: \n");
fflush(stdin);
gets(y.Historico_Consultas.espec);
printf("Descricao da consulta: \n");
fflush(stdin);
gets(y.Historico_Consultas.descricao);

return y;
}

void clrscr()
{
HANDLE h_stdout;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwConSize;
COORD coordScreen = { 0, 0 };    
DWORD dwCharsWritten;

h_stdout = GetStdHandle(STD_OUTPUT_HANDLE); 

GetConsoleScreenBufferInfo( h_stdout, &csbi );
dwConSize = csbi.dwSize.X * csbi.dwSize.Y;

FillConsoleOutputCharacter( h_stdout, (TCHAR) ' ', dwConSize, coordScreen, &dwCharsWritten );

SetConsoleCursorPosition( h_stdout, coordScreen );
}

Obrigado a todos :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas.

Yah sou.

Acho que ja estou a ver kem és susana, akela k m pede sempre para por o cabo da intenet nas aulas d BD loool.

Consegues ajudar na minha duvida.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites




case 1:

         printf("-->Prima m se deseja INSERIR um novo medico\n");
         printf("\t\t\tou\n");
         printf("-->Prima p se deseja INSERIR um novo paciente.\n");
         scanf("%s",&op_inserir);
         
         if(op_inserir=='m')
         {
            total_m=inserir_m(m,total_m);
            clrscr();
         }
         else
            if(op_inserir=='p')      
               total_p=inserir_p(p,total_p);         //função para inserir médicos ou pacientes
         break;

ora bem, a funcao inserir medico como inserir paciente, tem de retornar uma total de numero de livros.

aconselho-te a olhares para as folhas do prof:) esta lá tudo e funciona  :P :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas Gois.

Sabes-me dizer o que ek o stor pretende kom esta função ( Inserir informação sobre a realização de uma nova consulta;), ek na fase 2 tb é pa fazer uma funcao destas e por isso estou baralhado.

Sabes-me tirar esta duvida, o k é pa fazer concretamente?

Ptt

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:D

na 2 fase e para fazer um array de estruturas de consultas na funcao main, esse array de consultas da 1 fase so serve somente de historico, nada mais.

bom estudo. :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

Alguem já tem a marcação de consultas mais ou menos a funcionar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora