Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 0
#define FALSE 1
#define LEN_FICHEIRO 256
#define FICHEIRO_DEFAULT "dadosBin.dat"
/* ESTRUTURAS */
/* estrutura que define o no */
typedef struct no {
struct no *prox;
struct no *ant;
void *dados;
}NO;
typedef NO *PNO;
/* estrutura que define a especialidade */
typedef struct especialidades {
char nomeEspecialidade [20+1];
char descricaoEspecialidade [40+1];
} ESPECIALIDADES;
typedef ESPECIALIDADES *PESPECIALIDADES;
/* estrutura que define os medicos niom= numero identificacao ordem medico*/
typedef struct medicos {
int niom; //num identificacao ordem medicos
char nomeMedico [40+1];
char espMedico [20+1];
} MEDICOS;
typedef MEDICOS *PMEDICOS;
/* estrutura que define os utentes */
typedef struct utentes {
char nomeUtente [40+1];
char tipoAssistencia [20+1];
char nrcartao [20+1];
char valCartaoUtente[10];
char dataNascUtente[10];
char telefone[10];
char localidade [40+1];
} UTENTES;
typedef UTENTES *PUTENTES;
/* estrutura que define os tipos de assistencia */
typedef struct assistenciamedica {
char nomeAssUtente [20+1];
char descAssUtente [40+1];
} ASSISTENCIAMEDICA;
typedef ASSISTENCIAMEDICA *PASSISTENCIAMEDICA;
/* VARIAVEIS GLOBAIS */
PNO cabecaMedico = NULL;
PNO cabecaEspecialidade = NULL;
PNO cabecaUtente = NULL;
PNO cabecaAssistenciamedica = NULL;
PNO cabecaAgendaConsultas = NULL;
int listaFicheiroAlterado=FALSE;
/* FUNCOES */
void fim();
void MenuEspecialidades();
void MenuMedicos();
void MenuAssistenciaMedica();
void MenuUtentes();
void MenuConsultas();
void MenuPesquisas();
void MenuOrdenar();
void verificaFicheiro();
void leFicheiro();
void gravaFicheiro(PNO *cabecaEspMedicaTemp, PNO *cabecaMedicoTemp, PNO *cabecaAssUtenteTemp, PNO *cabecaUtenteTemp, PNO *cabecaAgendaConsultasTemp);
PNO criarNO (void *p);
void insereAcabeca (PNO *cabeca, PNO elemento);
void bubbleSort (PNO cabeca, int (*compara)(), char ordem);
void ordenaNome (PMEDICOS p1, PMEDICOS p2, char ordem);
void ordenaNomeMedico (PMEDICOS p1, PMEDICOS p2, char ordem);
void ordenaMedicoEsp (PMEDICOS p1, PMEDICOS p2, char ordem);
void ordenaUtenteNome (PUTENTES p1, PUTENTES p2, char ordem);
void ordenaUtenteData (PUTENTES p1, PUTENTES p2, char ordem);
/* ESPECIALIDADES */
void insereEspecialidade();
int pesquisarEspecialidade(PNO *cabeca, char pesquisaNomeEspecialidade [20+1]);
void apagarEspecialidade(PNO *cabeca);
void alterarEspecialidade(PNO *cabeca);
void listarEspecialidades(PNO *cabeca);
/* Utentes */
void insereUtente();
int pesquisarUtente(PNO *cabecaUtente, char pesquisaNomeUtente [20+1]);
void apagarUtente(PNO *cabecaUtente);
void alterarUtente(PNO *cabecaUtente);
void listarUtentes(PNO *cabecaUtente);
/* MEDICOS */
void insereMedico();
void listarMedicos(PNO *cabeca);
/* ASSISTENCIA */
void insereAssistencia();
int pesquisar_Assistencia(PNO *cabeca, char nomeAssUtentePesq [20+1]);
void apagarAssistencia(PNO *cabeca);
void alterarAssistencia(PNO *cabeca);
void listarAssistencia(PNO *cabeca);
/* FUNCAO PARA AO FINALIZAR, PERGUNTAR, EM CASO DE HAVER INFORMACAO NA MEMORIA, SE QUEREMOS GRAVAR ESSA INFORMACAO*/
void fim(){
system("cls");
char grava_Ficheiro[3];
if (listaFicheiroAlterado==TRUE) {
printf("\nExistem dados da Memoria que nao foram guardados, deseja garda-los (s/n)?:");
fflush(stdin);
fgets(grava_Ficheiro, 3, stdin);
if(grava_Ficheiro[0] == '\r' || grava_Ficheiro[0] == '\n' || grava_Ficheiro[0] != 's'){
printf("\nOs registos nao foram gravados" );
}
else {
gravaFicheiro(&cabecaEspecialidade, &cabecaMedico, &cabecaAssistenciamedica, &cabecaUtente, &cabecaAgendaConsultas);
}
}
system("cls");
printf("\tObrigado por utilizar o PGM - Programa de Gestao Medica\n");
getch();
system("cls");
}
/* CRIAR NO */
PNO criarNO (void *p){
PNO pno;
pno = (PNO) malloc (sizeof(NO));
pno->ant=pno->prox=NULL;
pno->dados=p;
return pno;
}
/* INSERIR NA LISTA */
void insereAcabeca (PNO *cabeca, PNO elemento){
if (*cabeca) (*cabeca)->ant=elemento; //if cabeca existe , anterior passa a apontar para elemento
elemento->prox=*cabeca;
*cabeca=elemento; // elemento passa a ser o primeiro elemento e é a cabeca
}
/* ORDENAR AS LISTAS */
void bubbleSort (PNO cabeca, int (*compara)(), char ordem){
void *tmp;
PNO ptr1, ptr2;
for (ptr1=cabeca; ptr1; ptr1=ptr1->prox) { /* apenas procede à contagem*/
for (ptr2=cabeca; ptr2->prox; ptr2=ptr2->prox) {
if ((*compara)(ptr2->dados, ptr2->prox->dados, ordem)){
tmp=ptr2->dados;
ptr2->dados=ptr2->prox->dados;
ptr2->prox->dados=tmp;
}
}
}
}
/* FUNCOES PARA SEREM UTILIZADAS A QUANDO PEDIDO DE ORDENACAO POR DETERMINADO REGISTO //////// */
/*ordenar+, ordenar plus+ */
void ordenaNome (PMEDICOS p1, PMEDICOS p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='decr') { // ordena por ordem decrescente
return p1->niom < p2->niom;
} else {
return p1->niom > p2->niom;
}
}
void ordenaNomeMedico (PMEDICOS p1, PMEDICOS p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->nomeMedico, p2->nomeMedico)==-1;
} else {
return strcmp(p1->nomeMedico, p2->nomeMedico)==1;
}
}
void ordenaMedicoEsp (PMEDICOS p1, PMEDICOS p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->espMedico, p2->espMedico)==-1;
} else {
return strcmp(p1->espMedico, p2->espMedico)==1;
}
}
void ordenaUtenteNome (PUTENTES p1, PUTENTES p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->nomeUtente, p2->nomeUtente)==-1;
} else {
return strcmp(p1->nomeUtente, p2->nomeUtente)==1;
}
}
void ordenaUtenteData (PUTENTES p1, PUTENTES p2, char ordem){ //ordem decrescente --> d, ordem crescente --> c ou outra
if (ordem=='d') { // ordena por ordem decrescente
return strcmp(p1->dataNascUtente, p2->dataNascUtente)==-1;
} else {
return strcmp(p1->dataNascUtente, p2->dataNascUtente)==1;
}
}
/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
/* FUNCAO PARA INSERIR ESPECIALIDADES EM MEMORIA */
void insereEspecialidade(){
system("cls");
PNO ptrTempEspecialidade;
PESPECIALIDADES pEspecialidades;
char nomeEspecialidadeTemp [20+1];
printf("\nNome da Especialidade: ");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
pEspecialidades = (PESPECIALIDADES) malloc (sizeof(ESPECIALIDADES));
strcpy(pEspecialidades->nomeEspecialidade,nomeEspecialidadeTemp);
printf("\n\nIndique a Descricao:");
fflush(stdin);
fgets(pEspecialidades->descricaoEspecialidade, 40+1, stdin );
if(pEspecialidades->descricaoEspecialidade[0] == '\r' || pEspecialidades->descricaoEspecialidade[0] == '\n'){
printf("\nAtencao, deixou o campo vazio" );
}
ptrTempEspecialidade = criarNO(pEspecialidades);
insereAcabeca(&cabecaEspecialidade,ptrTempEspecialidade);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA PESQUISAR ESPECIALIDADES POR NOME */
int pesquisarEspecialidade(PNO *cabeca, char pesquisaNomeEspecialidade [20+1]){
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
if (strcmp(ptrTempEspecialidade->nomeEspecialidade, pesquisaNomeEspecialidade)==0)
printf("\nFoi encontrado e tem a Descricao:%s \n", ptrTempEspecialidade->descricaoEspecialidade);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
/* FUNCAO PARA ALTERAR ESPECIALIDADE NUM REGISTO ExISTENTE */
void alterarEspecialidade(PNO *cabeca){
system("cls");
char nomeEspecialidadeTemp [20+1];
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome da Especialidade: ");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){ /* Se não colocou nada */
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\n\tPressione uma tecla para continuar...");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
if (strcmp(ptrTempEspecialidade->nomeEspecialidade, nomeEspecialidadeTemp)==0) {
/* printf("\nFoi encontrado com a Descricao:%s \n", ptrTempEspecialidade->descricaoEspecialidade); */
printf("\nNovo nome: ");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao" );
}
else {
strcpy(ptrTempEspecialidade->nomeEspecialidade,nomeEspecialidadeTemp);
printf("\nIndique a Descricao:");
fflush(stdin);
fgets(ptrTempEspecialidade->descricaoEspecialidade, 40+1, stdin );
if(ptrTempEspecialidade->descricaoEspecialidade[0] == '\r' || ptrTempEspecialidade->descricaoEspecialidade[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
listaFicheiroAlterado=TRUE;
}
}
printf("\nPressione uma tecla para continuar...");
getch();
}
}
/* FUNCAO PARA APAGAR ESPECIALIDADE PELO REGISTO DO NOME */
void apagarEspecialidade(PNO *cabeca){
system("cls");
char apagar_Especialidade[3];
char nomeEspecialidadeTemp [20+1];
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome da Especialidade Medica:");
fflush(stdin);
fgets(nomeEspecialidadeTemp, 20+1, stdin);
if(nomeEspecialidadeTemp[0] == '\r' || nomeEspecialidadeTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
if (strcmp(ptrTempEspecialidade->nomeEspecialidade, nomeEspecialidadeTemp)==0) {
printf("\nFoi encontrado com a Descricao: %s \n", ptrTempEspecialidade->descricaoEspecialidade);
printf("\nTem a certeza que deseja apagar (s/n)? :");
fflush(stdin);
fgets(apagar_Especialidade, 3, stdin);
if(apagar_Especialidade[0] == '\r' || apagar_Especialidade[0] == '\n' || apagar_Especialidade[0] != 's'){
printf("\nA informacao existente nao sera alterada" );
}
else {
if(ptr->ant) ptr->ant->prox = ptr->prox;
else *cabeca = ptr->prox;
if(ptr->prox) ptr->prox->ant = ptr->ant;
ptr->ant = ptr->prox = NULL;
listaFicheiroAlterado=TRUE;
printf("\nA Especialidade foi apagada com Sucesso\n");
}
}
}
printf("\nPressione uma tecla para continuar");
getch();
}
}
/* FUNCAO PARA LISTAR ESPECIALIDADES , MOSTRA O NOME E DESCRICAO */
void listarEspecialidades(PNO *cabeca){
system("cls");
PNO ptr;
PESPECIALIDADES ptrTempEspecialidade;
if(!*cabeca) {
printf("\nNao Existem Especialidades na Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempEspecialidade=ptr->dados;
printf("\nEspecialidade: %s", ptrTempEspecialidade->nomeEspecialidade);
printf("Descricao: %s \n", ptrTempEspecialidade->descricaoEspecialidade);
}
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA INSERIR MEDICOS EM MEMORIA */
void insereMedico(){
system("cls");
PNO ptrMedico_Temp;
PMEDICOS pMedicos;
int niomTemp=0;
char nomeMedicoTemp [20+1];
char EspMedTempMed [20+1];
printf("\nIndique qual o Nr da ordem dos Medicos:");
fflush(stdin);
scanf( " %d", &niomTemp);
printf("\nNome do Medico:");
fflush(stdin);
fgets(nomeMedicoTemp, 20+1, stdin);
if(nomeMedicoTemp[0] == '\r' || nomeMedicoTemp[0] == '\n' || niomTemp==0){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
printf("\nQual a especialidade do Medico: ");
fflush(stdin);
fgets(EspMedTempMed, 20+1, stdin);
if (pesquisarEspecialidade(&cabecaEspecialidade, EspMedTempMed)==FALSE) {
printf("\nA especialidade nao existe. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
return;
}
pMedicos = (PMEDICOS) malloc (sizeof(MEDICOS));
pMedicos->niom=niomTemp;
strcpy(pMedicos->nomeMedico,nomeMedicoTemp);
strcpy(pMedicos->espMedico,EspMedTempMed);
ptrMedico_Temp = criarNO(pMedicos);
insereAcabeca(&cabecaMedico,ptrMedico_Temp);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA LISTAR MEDICOS ExISTENTES PELO NUMERO DA ORDEM DOS MEDICOS, NOME E ESPECIALIDADE */
void listarMedicos(PNO *cabeca){
system("cls");
PNO ptr;
PMEDICOS ptrTempMedicos;
if(!*cabeca) {
printf("\nNao Existem Medicos na Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempMedicos=ptr->dados;
printf("\nNumero da Ordem: %d", ptrTempMedicos->niom);
printf("\nNome: %s", ptrTempMedicos->nomeMedico);
printf("\nEspecialidade: %s \n", ptrTempMedicos->espMedico);
}
printf("\nPressione uma tecla para continuar...");
getch();
}
/*//////////////////////////////////////////////////////////////////////////////////////*/
/* FUNCAO PARA PESQUISAR MEDICOS INACABADA */
/*
int pesquisarmedico(PNO *cabeca, int pesquisaNomeMedico [20+1]){
PNO ptr;
MEDICOS ptrTempMedicos;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existem Medicos na Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempMedicos=ptr->dados;
if (strcmp(ptrTempMedicos->nomeMedico, pesquisaNomeMedico)==0)
printf("\nFoi encontrado e tem a Especialidade:%s \n", ptrTempMedicos->espMedicoTemp);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
*/
/*///////////////////////////////////////////////////////////////////////////////////////// */
/* FUNCAO PARA INSERIR ASSISTENCIAS MEDICAS POR NUMERO E DESCRICAO */
void insereAssistencia(){
system("cls");
PNO ptrAssistencia_Temp;
PASSISTENCIAMEDICA pAssistencia;
char nomeAssistenciaTemp [20+1];
printf("\nNr. do Cartao: ");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
pAssistencia = (PASSISTENCIAMEDICA) malloc (sizeof(ASSISTENCIAMEDICA));
strcpy(pAssistencia->nomeAssUtente,nomeAssistenciaTemp);
printf("\nDescricao: ");
fflush(stdin);
fgets(pAssistencia->descAssUtente, 40+1, stdin );
if(pAssistencia->descAssUtente[0] == '\r' || pAssistencia->descAssUtente[0] == '\n'){
printf("\n\nAtencao, deixou o campo vazio..." );
}
ptrAssistencia_Temp = criarNO(pAssistencia);
insereAcabeca(&cabecaAssistenciamedica,ptrAssistencia_Temp);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA PESQUISAR CARTOES DE ASSISTENCIA PELO NUMERO
(TAMBEM SERA PARA ALTERAR A FIM DE PESQUISAR POR DESCRICAO) */
int pesquisar_Assistencia(PNO *cabeca, char nomeAssUtentePesq [20+1]){
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
if (strcmp(ptrAssistencia_Temp->nomeAssUtente, nomeAssUtentePesq)==0)
printf("\nFoi encontrado o numero: %s \n", ptrAssistencia_Temp->descAssUtente);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
/* FUNCAO PARA APAGAR REGISTO DE CARTOES DE ASSISTENCIA MEDICA PELO NUMERO */
void apagarAssistencia(PNO *cabeca) {
system("cls");
char apagar_Assistencia[3];
char nomeAssistenciaTemp [20+1];
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Numero do cartao: ");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
if (strcmp(ptrAssistencia_Temp->nomeAssUtente, nomeAssistenciaTemp)==0) {
printf("\nFoi encontrado o numero: %s \n", ptrAssistencia_Temp->descAssUtente);
printf("\tTem a certeza que deseja apagar (s/n)? :");
fflush(stdin);
fgets(apagar_Assistencia, 3, stdin);
if(apagar_Assistencia[0] == '\r' || apagar_Assistencia[0] == '\n' || apagar_Assistencia[0] != 's'){
printf("\nA informacao existente nao sera alterada" );
}
else {
if(ptr->ant) ptr->ant->prox = ptr->prox;
else *cabeca = ptr->prox;
if(ptr->prox) ptr->prox->ant = ptr->ant;
ptr->ant = ptr->prox = NULL;
listaFicheiroAlterado=TRUE;
printf("\nO cartao foi apagado apagado com Sucesso\n");
}
}
}
printf("\nPressione uma tecla para continuar");
getch();
}
}
/* FUNCAO PARA ALTERAR DADOS NOS REGISTOS DOS CARTOES DE ASSISTENCIA */
void alterarAssistencia(PNO *cabeca){
system("cls");
char nomeAssistenciaTemp [20+1];
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
/* printf("\t\t==========Alterar Tipos de Assistencia============="); */
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o numero do cartao: ");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){ /*Se não colocou nada */
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu..." );
printf("\n\tPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
if (strcmp(ptrAssistencia_Temp->nomeAssUtente, nomeAssistenciaTemp)==0) {
printf("\nFoi encontrado o numero: %s \n", ptrAssistencia_Temp->descAssUtente);
printf("\nNovo niom:");
fflush(stdin);
fgets(nomeAssistenciaTemp, 20+1, stdin);
if(nomeAssistenciaTemp[0] == '\r' || nomeAssistenciaTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao" );
}
else {
strcpy(ptrAssistencia_Temp->nomeAssUtente,nomeAssistenciaTemp);
printf("\nDescricao:");
fflush(stdin);
fgets(ptrAssistencia_Temp->descAssUtente, 40+1, stdin );
if(ptrAssistencia_Temp->descAssUtente[0] == '\r' || ptrAssistencia_Temp->descAssUtente[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
listaFicheiroAlterado=TRUE;
}
}
printf("\nPressione uma tecla para continuar...");
getch();
}
}
/* FUNCAO PARA LISTAR TODOS OS DE ASSISTENCIA MEDICA */
void listarAssistencia(PNO *cabeca){
system("cls");
PNO ptr;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
/* printf("\t\t========Listagem de Tipo de Assistencia============"); */
if(!*cabeca) {
printf("\nNao Existe Registo de Assistencias em Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrAssistencia_Temp=ptr->dados;
printf("\nCartao numero: %s", ptrAssistencia_Temp->nomeAssUtente);
printf("Tipo de Assistencia Medica: %s \n", ptrAssistencia_Temp->descAssUtente);
}
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA VERIFICAR SE JA FORAM GRAVADOS OS DADOS EM MEMORIA PARA FICHEIRO */
void verificaFicheiro(){
system("cls");
char grava_Ficheiro[3];
if (listaFicheiroAlterado==TRUE) {
printf("\nExistem dados na Memoria que nao foram gravados, deseja garda-los (s/n)?:");
fflush(stdin);
fgets(grava_Ficheiro, 3, stdin);
if(grava_Ficheiro[0] == '\r' || grava_Ficheiro[0] == '\n' || grava_Ficheiro[0] != 's'){
printf("\nA informacao existente vai ser descartada e carregada a do Ficheiro de Backup" );
leFicheiro();
}
else {
gravaFicheiro(&cabecaEspecialidade, &cabecaMedico, &cabecaAssistenciamedica, &cabecaUtente, &cabecaAgendaConsultas);
}
}
else {
leFicheiro();
}
}
/* Inserir utentes*/
void insereUtente(){
system("cls");
PNO ptrTempUtente;
PUTENTES pUtentes;
char nomeUtenteTemp [20+1];
//char tipoAssitenciaTemp[30+1];
printf("\n Insira Nome do Utente: ");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
pUtentes = (PUTENTES) malloc (sizeof(UTENTES));
strcpy(pUtentes->nomeUtente,nomeUtenteTemp);
printf("\n\nIndique o tipo de Assistencia:");
fflush(stdin);
/* fgets(ptrTempUtente->tipoAssistencia, 40+1, stdin );
if(ptrTempUtente->tipoAssistencia[0] == '\r' || ptrTempUtente->tipoAssistencia[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
//fgets(tipoAssistenciaTemp, 30+1, stdin );
//if(pUtentes->tipoAssistenciaTemp[0] == '\r' || pUtentes->tipoAssistenciaTemp[0] == '\n'){
// printf("\nAtencao, deixou o campo vazio" );
//}
ptrTempUtente = criarNO(pUtentes);
insereAcabeca(&cabecaUtente,ptrTempUtente);
listaFicheiroAlterado=TRUE;
getch();
}
}
/* FUNCAO PARA PESQUISAR Utentes POR NOME */
int pesquisarUtente(PNO *cabeca, char pesquisaNomeUtente [20+1]){
PNO ptr;
PUTENTES ptrTempUtente;
int encontrado = FALSE;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return encontrado;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
if (strcmp(ptrTempUtente->nomeUtente, pesquisaNomeUtente)==0)
printf("\nFoi encontrado e tem a Descricao:%s \n", ptrTempUtente->tipoAssistencia);
encontrado=TRUE;
}
printf("\nPressione uma tecla para continuar");
getch();
return encontrado;
}
/*ªFUNCAO PARA ALTERAR utente NUM REGISTO ExISTENTE */
void alterarUtente(PNO *cabeca){
system("cls");
char nomeUtenteTemp [20+1];
PNO ptr;
PUTENTES ptrTempUtente;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome do Utente: ");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){ /* Se não colocou nada */
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu anterior" );
printf("\n\tPressione uma tecla para continuar...");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
if (strcmp(ptrTempUtente->nomeUtente, nomeUtenteTemp)==0) {
printf("\nFoi encontrado com o tipo de Assistencia:%s \n", ptrTempUtente->tipoAssistencia);
printf("\nNovo nome: ");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao" );
}
else {
strcpy(ptrTempUtente->nomeUtente,nomeUtenteTemp);
printf("\nIndique otipo de Assistencia:");
fflush(stdin);
fgets(ptrTempUtente->tipoAssistencia, 40+1, stdin );
if(ptrTempUtente->tipoAssistencia[0] == '\r' || ptrTempUtente->tipoAssistencia[0] == '\n')
printf("\nAtencao, deixou o campo vazio" );
}
listaFicheiroAlterado=TRUE;
}
}
printf("\nPressione uma tecla para continuar...");
getch();
}
}
/* FUNCAO PARA APAGAR Utente PELO REGISTO DO NOME */
void apagarUtente(PNO *cabeca){
system("cls");
char apagar_Utente[3];
char nomeUtenteTemp [20+1];
PNO ptr;
PUTENTES ptrTempUtente;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return;
}
printf("\nQual o Nome do Utente:");
fflush(stdin);
fgets(nomeUtenteTemp, 20+1, stdin);
if(nomeUtenteTemp[0] == '\r' || nomeUtenteTemp[0] == '\n'){
printf("\nNao Introduziu nenhuma informacao. Vai regressar ao menu" );
printf("\nPressione uma tecla para continuar");
getch();
}
else {
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
if (strcmp(ptrTempUtente->nomeUtente, nomeUtenteTemp)==0) {
printf("\nFoi encontrado com o tipo de Assistencia: %s \n", ptrTempUtente->tipoAssistencia);
printf("\nTem a certeza que deseja apagar (s/n)? :");
fflush(stdin);
fgets(apagar_Utente, 3, stdin);
if(apagar_Utente[0] == '\r' || apagar_Utente[0] == '\n' || apagar_Utente[0] != 's'){
printf("\nA informacao existente nao sera alterada" );
}
else {
if(ptr->ant) ptr->ant->prox = ptr->prox;
else *cabeca = ptr->prox;
if(ptr->prox) ptr->prox->ant = ptr->ant;
ptr->ant = ptr->prox = NULL;
listaFicheiroAlterado=TRUE;
printf("\nA Utente foi apagada com Sucesso\n");
}
}
}
printf("\nPressione uma tecla para continuar");
getch();
}
}
/* FUNCAO PARA LISTAR Utentes , MOSTRA O NOME E DESCRICAO */
void listarUtentes(PNO *cabeca){
system("cls");
PNO ptr;
PUTENTES ptrTempUtente;
if(!*cabeca) {
printf("\nNao Existem Utentes na Memoria. Qualquer tecla para continuar");
getch();
return;
}
for (ptr=*cabeca; ptr; ptr = ptr->prox ){
ptrTempUtente=ptr->dados;
printf("\n:Utente %s", ptrTempUtente->nomeUtente);
printf("Assistencia: %s \n", ptrTempUtente->tipoAssistencia);
}
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA LER DADOS DO FICHEIRO EM DISCO */
void leFicheiro(){
system("cls");
int i, Registos_Especialidades=0, Registos_Assistencia=0;
char ficheiro[LEN_FICHEIRO+3];
PESPECIALIDADES ptrEspecialidadeMedica_Temp;
PMEDICOS ptrMedico_Temp;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
PUTENTES pTempUtente;
FILE *fp;
puts( "\n\tLer dados.\n"
"Qual o nome do ficheiro a Ler? (vazio para \"" FICHEIRO_DEFAULT "\"):");
fflush(stdin);
fgets( ficheiro, sizeof(ficheiro), stdin );
if(ficheiro[0] == '\r' || ficheiro[0] == '\n')
strcpy(ficheiro, FICHEIRO_DEFAULT);
fp = fopen( ficheiro, "rb" );
if( fp == NULL ) {
puts( "\nNao foi possivel abrir o ficheiro" );
getch();
return;
}
fread (&Registos_Especialidades, sizeof(int), 1, fp);
for(i=0; i<Registos_Especialidades;i++) {
ptrEspecialidadeMedica_Temp = (PESPECIALIDADES*) malloc (sizeof(ESPECIALIDADES));
fread(ptrEspecialidadeMedica_Temp, sizeof(ESPECIALIDADES), 1, fp);
insereAcabeca(&cabecaUtente,ptrEspecialidadeMedica_Temp);
}
fread (&Registos_Assistencia, sizeof(int), 1, fp);
for(i=0; i<Registos_Assistencia;i++) {
ptrAssistencia_Temp = (PASSISTENCIAMEDICA*) malloc (sizeof(ASSISTENCIAMEDICA));
fread(ptrAssistencia_Temp, sizeof(ASSISTENCIAMEDICA), 1, fp);
insereAcabeca(&cabecaAssistenciamedica,ptrAssistencia_Temp);
}
fclose(fp);
printf("\nO Ficheiro foi carregado correctamente");
listaFicheiroAlterado=FALSE;
printf("\nPressione uma tecla para continuar");
getch();
}
/* FUNCAO PARA GRAVAR DADOS NO FICHEIRO EM DISCO */
void gravaFicheiro(PNO *cabecaEspMedicaTemp, PNO *cabecaMedicoTemp, PNO *cabecaAssUtenteTemp, PNO *cabecaUtenteTemp, PNO *cabecaAgendaConsultasTemp){
system("cls");
int Registos_Especialidades=0, Registos_Assistencia=0;
char ficheiro[LEN_FICHEIRO+3];
PNO ptr;
PESPECIALIDADES ptrEspecialidadeMedica_Temp;
PMEDICOS ptrMedico_Temp;
PASSISTENCIAMEDICA ptrAssistencia_Temp;
PUTENTES pTempUtente;
FILE *fp;
puts( "\n\tGravar dados.\n"
"Qual o nome do ficheiro a gravar? (vazio para \"" FICHEIRO_DEFAULT "\"):");
fflush(stdin);
fgets( ficheiro, sizeof(ficheiro), stdin );
if(ficheiro[0] == '\r' || ficheiro[0] == '\n')
strcpy(ficheiro, FICHEIRO_DEFAULT);
/* Grava os dados */
fp = fopen( ficheiro, "wb" );
if( fp == NULL ) {
puts( "\n\tNao foi possivel criar o ficheiro. Processo interrompido..." );
getch();
return;
}
if(!*cabecaEspMedicaTemp) fwrite(&Registos_Especialidades, sizeof(int), 1, fp);
else {
for (ptr=*cabecaEspMedicaTemp; ptr; ptr = ptr->prox, Registos_Especialidades++);
fwrite(&Registos_Especialidades, sizeof(int), 1, fp);
for (ptr=*cabecaEspMedicaTemp; ptr; ptr = ptr->prox) fwrite(ptr, sizeof(ESPECIALIDADES), 1, fp);
}
if(!*cabecaAssUtenteTemp) fwrite(&Registos_Assistencia, sizeof(int), 1, fp);
else {
for (ptr=*cabecaAssUtenteTemp; ptr; ptr = ptr->prox, Registos_Assistencia++);
fwrite(&Registos_Assistencia, sizeof(int), 1, fp);
for (ptr=*cabecaAssUtenteTemp; ptr; ptr = ptr->prox) fwrite(ptr, sizeof(ASSISTENCIAMEDICA), 1, fp);
}
fclose(fp);
printf("\n\tA BD foi salva em Ficheiro correctamente...");
listaFicheiroAlterado=FALSE;
printf("\n\n\tPressione uma tecla para continuar...");
getch();
}
/* A PARTIR DAQUI TEMOS A PARTE PRINCIPAL DO PROGRAMA, ONDE CHAMA AS FUNCOES NECESSARIAS PARA
RESPONDER AO SOLICITADO PELO UTILIZADOR , ATRAVEZ DOS MENUS */
int main()
{
char escolha;
do {
system("cls");
printf("\n Menu Principal\n");
printf("\n 1 - Menu Especialidades\n");
printf("\n 2 - Menu Medicos\n");
printf("\n 3 - Menu Assistencia\n");
printf("\n 4 - Menu Utentes\n");
printf("\n 5 - Menu Consultas\n");
printf("\n 6 - Menu Pesquisa\n");
printf("\n 7 - Menu Ordenar\n");
printf("\n 8 - Ler Ficheiro\n");
printf("\n 9 - Gravar Ficheiro\n");
printf("\n 0 - Sair do Programa\n");
printf("\n Escolha a Opcao:");
escolha=getch();
switch(escolha)
{
case '1':
MenuEspecialidades();
break;
case '2':
MenuMedicos();
break;
case '3':
MenuAssistenciaMedica();
break;
case '4':
MenuUtentes();
break;
case '5':
MenuConsultas();
break;
case '6':
MenuPesquisas();
break;
case '7':
MenuOrdenar();
break;
case '8':
verificaFicheiro();
break;
case '9':
gravaFicheiro(&cabecaEspecialidade, &cabecaMedico, &cabecaAssistenciamedica, &cabecaUtente, &cabecaAgendaConsultas);
break;
case '0':
fim();
break;
default:
getch();
break;
}
} while (escolha!='0');
}
void MenuEspecialidades(){
char escolhaE;
do {
system("cls");
printf("\n Menu Especialidades\n");
printf("\n 1 - Inserir Especialidade\n");
printf("\n 2 - Alterar Especialidade\n");
printf("\n 3 - Apagar Especialidade\n");
printf("\n 4 - Listar Especialidades\n");
printf("\n 0 - Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaE=getch();
switch(escolhaE) {
case '1':
insereEspecialidade();
break;
case '2':
alterarEspecialidade(&cabecaEspecialidade);
break;
case '3':
apagarEspecialidade(&cabecaEspecialidade);
break;
case '4':
listarEspecialidades(&cabecaEspecialidade);
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaE!='0');
}
void MenuMedicos(){
char escolhaM;
do {
system("cls");
printf("\n Menu Medicos\n");
printf("\n 1 - Inserir Medico\n");
printf("\n 2 - Alterar Medico\n");
printf("\n 3 - Apagar Medico\n");
printf("\n 4 - Listar Medicos\n");
printf("\n 5 - Ordenar Modicos por Nome\n");
printf("\n 6 - Ordenar Modicos por Especialidade\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaM=getch();
switch(escolhaM) {
case '1':
insereMedico();
break;
case '2':
break;
case '3':
break;
case '4':
listarMedicos(&cabecaMedico);
break;
case '5':
break;
case '6':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaM!='0');
}
void MenuAssistenciaMedica(){
char escolhaA;
do {
system("cls");
printf("\n Menu Assistencia\n");
printf("\n 1 - Inserir nova Assistencia\n");
printf("\n 2 - Alterar Assistencia\n");
printf("\n 3 - Apagar Assistencia\n");
printf("\n 4 - Listar Assistencias existentes\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaA=getch();
switch(escolhaA) {
case '1':
insereAssistencia();
break;
case '2':
alterarAssistencia(&cabecaAssistenciamedica);
break;
case '3':
apagarAssistencia(&cabecaAssistenciamedica);
break;
case '4':
listarAssistencia(&cabecaAssistenciamedica);
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaA!='0');
}
void MenuUtentes(){
char escolhaU;
do {
system("cls");
printf("\n Menu Utentes\n");
printf("\n 1 - Inserir Utente\n");
printf("\n 2 - Alterar Utente\n");
printf("\n 3 - Apagar Utente\n");
printf("\n 4 - Listar Utente\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaU=getch();
switch(escolhaU) {
case '1':
insereUtente();
break;
case '2':
alterarUtente(&cabecaUtente);
break;
case '3':
apagarUtente(&cabecaUtente);
break;
case '4':
// listarUtente(&cabecaUtente);
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaU!='0');
}
void MenuConsultas(){
char escolhaC;
do {
system("cls");
printf("\n Menu Consultas\n");
printf("\n 1 - Marcar consulta\n");
printf("\n 2 - Alterar marcacao de consulta\n");
printf("\n 3 - Apagar consulta\n");
printf("\n 4 - Listar consultas\n");
printf("\n 5 - Pesquisar consultas por data\n");
printf("\n 6 - Pesquisar consultas por Medico\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaC=getch();
switch(escolhaC) {
case '1':
break;
case '2':
break;
case '3':
break;
case '4':
break;
case '5':
break;
case '6':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaC!='0');
}
void MenuPesquisas(){
char escolhaP;
do {
system("cls");
printf("\n Menu Pesquisas\n");
printf("\n 1 - Pesquisar MEDICOS por Especialidade/Nome\n");
printf("\n 2 - Pesquisar Utente por Nome/numero de cartao\n");
printf("\n 3 - Pesquisar Consultas por Data/Medico\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaP=getch();
switch(escolhaP) {
case '1':
break;
case '2':
break;
case '3':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaP!='0');
}
void MenuOrdenar()
{
char escolhaP;
do {
system("cls");
printf("\n Menu Ordenar\n");
printf("\n 1 - Ordenar MEDICOS por Especialidade/Nome\n");
printf("\n 2 - Ordenar Utente por Nome/Data de nascimento\n");
printf("\n 3 - Ordenar Consultas por Data/hora\n");
printf("\n 0 - Voltar ao Menu principal\n");
printf("\n Escolha a Opcao:");
escolhaP=getch();
switch(escolhaP)
{
case '1':
break;
case '2':
break;
case '3':
break;
case '0':
return;
break;
default:
getch();
break;
}
} while (escolhaP!='0');
return 0;
}