Buscar

hospital

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/***
 * Relatorio de atendimentos
 * total de atendimentos por dia
 * por medico
 * */
int id_paciente = 0;
int id_medico = 0;
int id_agenda = 0;
int id_atendimento = 0;
int id_usuario = 0;
char c;
struct Usuario
{
 char nome[100];
 int cpf;
 char senha[15];
} usuarios[1000];
struct Paciente
{
 char nome[100];
 char cidade[100];
 char estado[40];
 int cpf;
} pacientes[1000];
struct Medico
{
 char nome[100];
 int crm;
 char senha[15];
} medicos[1000];
struct Atendimento
{
 int id_paciente;
 int id_medico;
 int id_funcionario;
 int dia; //AnoMesDia Ex 20200101
 int hora; //HoraMinuto Ex: 13
 int status; // -1 cancelado - 0 não realizado - 1 realizado
} atendimentos[1000];
struct Agenda
{
 int id_medico;
 int dia; //AnoMesDia Ex 20200101
 int hora_inicio; //HoraMinuto Ex: 1330
 int hora_fim; //HoraMinuto Ex: 1330
 int agendado; // 0 - nao ou 1 - sim
} agendas[1000];
void clear_cache()
{
 while ((c = getchar()) != '\n' && c != EOF)
 ;
}
void grava_dados();
void le_dados();
void cabecalho(char *texto);
int login();
void menu_paciente();
int cadastro_paciente();
int pesquisar_paciente(int cpf);
void menu_medico();
int cadastro_medico();
int pesquisar_medico(int crm);
int agendar_consulta(int id_paciente);
int agenda_medico(int id_medico);
int verifica_disponibilidade_agenda(int id_medico, int dia);
int formata_dia(int dia, int mes, int ano);
int lista_agendamentos_medico(int id_medico);
void menu_funcionarios();
void cadastro_funcionario();
int main()
{
 le_dados();
 int op = 0;
 while (!login())
 {
 printf("Erro ao fazer login, tente novamente");
 };
 do
 {
 cabecalho("MENU");
 printf("1 - Pacientes\n");
 printf("2 - Medicos\n");
 printf("3 - Funcionarios\n");
 printf("0 - Sair\n");
 scanf("%d", &op);
 switch (op)
 {
 case 1:
 menu_paciente();
 break;
 case 2:
 menu_medico();
 break;
 }
 } while (op != 0);
 return 0;
}
void grava_dados()
{
 FILE *arquivo;
 arquivo = fopen("pacientes.dat", "wb");
 if (!arquivo)
 return;
 fwrite(pacientes, sizeof(struct Paciente), 1000, arquivo);
 fclose(arquivo);
 arquivo = fopen("usuarios.dat", "wb");
 if (!arquivo)
 return;
 fwrite(usuarios, sizeof(struct Usuario), 1000, arquivo);
 fclose(arquivo);
 arquivo = fopen("medicos.dat", "wb");
 if (!arquivo)
 return;
 fwrite(medicos, sizeof(struct Medico), 1000, arquivo);
 fclose(arquivo);
 arquivo = fopen("agendas.dat", "wb");
 if (!arquivo)
 return;
 fwrite(agendas, sizeof(struct Agenda), 1000, arquivo);
 fclose(arquivo);
 arquivo = fopen("atendimentos.dat", "wb");
 if (!arquivo)
 return;
 fwrite(atendimentos, sizeof(struct Atendimento), 1000, arquivo);
 fclose(arquivo);
}
void le_dados()
{
 int n = 0;
 FILE *arquivo;
 arquivo = fopen("pacientes.dat", "rb");
 if (!arquivo)
 return;
 for (n = 0; !feof(arquivo); ++n)
 {
 if (fread(&pacientes[n], sizeof(struct Paciente), 1, arquivo) != 1)
 break;
 }
 fclose(arquivo);
 arquivo = fopen("usuarios.dat", "rb");
 if (!arquivo)
 return;
 for (n = 0; !feof(arquivo); ++n)
 {
 if (fread(&usuarios[n], sizeof(struct Usuario), 1, arquivo) != 1)
 break;
 }
 fclose(arquivo);
 arquivo = fopen("medicos.dat", "rb");
 if (!arquivo)
 return;
 for (n = 0; !feof(arquivo); ++n)
 {
 if (fread(&medicos[n], sizeof(struct Medico), 1, arquivo) != 1)
 break;
 }
 fclose(arquivo);
 arquivo = fopen("agendas.dat", "rb");
 if (!arquivo)
 return;
 for (n = 0; !feof(arquivo); ++n)
 {
 if (fread(&agendas[n], sizeof(struct Agenda), 1, arquivo) != 1)
 break;
 }
 fclose(arquivo);
 arquivo = fopen("atendimentos.dat", "rb");
 if (!arquivo)
 return;
 for (n = 0; !feof(arquivo); ++n)
 {
 if (fread(&atendimentos[n], sizeof(struct Atendimento), 1, arquivo) != 1)
 break;
 }
 fclose(arquivo);
}
int formata_dia(int dia, int mes, int ano)
{
 char str1[20];
 char str2[20];
 char str3[20];
 sprintf(str1, "%d", dia);
 sprintf(str2, "%d", mes);
 sprintf(str3, "%d", ano);
 strcat(str3, str2);
 strcat(str3, str1);
 return atoi(str3);
}
void cadastro_funcionario()
{
 cabecalho("CADASTRAR FUNCIONARIO");
 printf("Nome:");
 clear_cache();
 scanf("%100[^\n]", usuarios[id_usuario].nome);
 printf("CPF:\n");
 clear_cache();
 scanf("%d", &usuarios[id_usuario].cpf);
 printf("Senha:");
 clear_cache();
 scanf("%100[^\n]", usuarios[id_usuario].senha);
 printf("Cadastro concluido");
 getchar();
 getchar();
 id_usuario++;
 grava_dados();
}
void menu_funcionarios()
{
 int op;
 printf("1 - Listar\n");
 printf("2 - Cadastrar\n");
 printf("0 - Sair\n");
 scanf("%d", &op);
 switch (op)
 {
 case 1:
 for (int i = 0; i < 1000; i++)
 {
 if (usuarios[i].cpf > 0)
 {
 printf("CPF: %d - %s", usuarios[i].cpf, usuarios[i].nome);
 }
 }
 break;
 case 2:
 cadastro_funcionario();
 break;
 }
}
int lista_agendamentos_medico(int id_medico)
{
 int tem = 0;
 for (int i = 0; i < 1000; i++)
 {
 if (atendimentos[i].id_medico == id_medico && atendimentos[i].dia)
 {
 tem = 1;
 printf("[%d] %d - Hora: %2d Paciente: %s\n", i, atendimentos[i].dia, atendimentos[i].hora, pacientes[atendimentos[i].id_paciente].nome);
 }
 }
 if (tem == 0)
 {
 printf("Nenhum agendamento encontrado");
 }
 getchar();
 getchar();
}
/**
 * Imprime um cabeçalho
 */
void cabecalho(char *texto)
{
 int largura = 50;
 int i = 0;
 system("clear");
 printf("#");
 for (int i = 0; i < largura; i++)
 printf("-");
 printf("#\n");
 for (int i = 0; i < (largura / 2 - strlen(texto) / 2); i++)
 printf(" ");
 puts(texto);
 printf("#");
 for (int i = 0; i < largura; i++)
 printf("-");
 printf("#\n\n");
}
int login()
{
 int cpf = 0;
 char senha[15];
 cabecalho("LOGIN");
 printf("CPF: ");
 scanf("%d", &cpf);
 printf("SENHA: ");
 clear_cache();
 scanf("%15[^\n]", senha);
 return 1;
}
void menu_paciente()
{
 int op = 0;
 int existe = pesquisar_paciente(0);
 if (existe == -1)
 {
 printf("Paciente não encontrado...\n");
 existe = cadastro_paciente();
 }
 if (existe == -1)
 return;
 cabecalho(pacientes[existe].nome);
 printf("1 - Agendar consulta\n");
 printf("2 - Editar cadastro\n");
 scanf("%d", &op);
 switch (op)
 {
 case 1:
 agendar_consulta(existe);
 break;
 case 2:
 cadastro_paciente();
 break;
 }
}
/**
 * Pesquisa por um paciente através do cpf,
 * se existir retorna o indice do paciente,
 * se não existir retorna -1;
 */
int pesquisar_paciente(int cpf)
{
 if (!cpf)
 {
 cabecalho("PESQUISAR PACIENTE");
 printf("CPF: ");
 scanf("%d", &cpf);
 }
 for (int i = 0; i < 1000; i++)
 {
4 if (cpf > 0 && pacientes[i].cpf == cpf)
 {
 return i;
 }
 }
 return -1;
}
/**
 * Retorna o indice do paciente caso o cadastro seja concluído
 * ou -1 caso tenha cancelado
 * se o paciente já existir, ele atualiza os dados antigos
 * pelos novos passados.
 */
int cadastro_paciente()
{
int cpf = 0;
 int id = 0;
 cabecalho("CADASTRO DE PACIENTE");
 printf("\nCPF (digite 0 para cancelar):");
 scanf("%d", &cpf);
 // verifica se cancelou
 if (!cpf)
 return -1;
 /**
 * verifica se o cpf já esta cadastrado na base
 */
 id = pesquisar_paciente(cpf);
 if (id == -1)
 {
 id = id_paciente++;
 }
 else
 {
 cabecalho("Paciente já cadastrado");
 printf("Atualizando dados do paciente...");
 }
 pacientes[id]
 .cpf = cpf;
 printf("\nNOME:");
 clear_cache();
 scanf("%100[^\n]", pacientes[id].nome);
 printf("\nCIDADE:");
 clear_cache();
 scanf("%100[^\n]", pacientes[id].cidade);
 printf("\nESTADO:");
 clear_cache();
 scanf("%40[^\n]", pacientes[id].estado);
 grava_dados();
 return id;
}
int agendar_consulta(int id_paciente)
{
 int crm, hora;
 int dia, mes, ano;
 cabecalho("AGENDAR CONSULTA");
 printf("Selecione o medico\n");
 for (int i = 0; i < 1000; i++)
 {
 if (medicos[i].crm)
 {
 printf("CRM: %d - %s\n", medicos[i].crm, medicos[i].nome);
 }
 }
 scanf("%d", &crm);
 // agenda_medico();
 printf("\nInforme em sequencia Dia (enter) Mes (enter) Ano (enter):\n");
 scanf("%d%d%d", &dia, &mes, &ano);
 if (verifica_disponibilidade_agenda(pesquisar_medico(crm), formata_dia(dia, mes, ano)))
 {
 printf("\nInforme a hora (somente numeros): ");
 scanf("%d", &hora);
 atendimentos[id_atendimento].id_medico = pesquisar_medico(crm);
 atendimentos[id_atendimento].id_paciente = id_paciente;
 atendimentos[id_atendimento].hora = hora;
 atendimentos[id_atendimento].dia = formata_dia(dia, mes, ano);
 id_atendimento++;
 }
 else
 {
 printf("Agenda indisponivel neste dia");
 }
 grava_dados();
}
int verifica_disponibilidade_agenda(int id_medico, int dia)
{
 for (int i = 0; i < 1000; i++)
 {
 if (agendas[i].id_medico == id_medico &&
 agendas[i].dia == dia && agendas[i].dia < 0)
 {
 return !agendas[i].agendado;
 }
 }
 return 1; //disponivel
}
int agenda_medico(int id_medico)
{
 int dia, mes, ano;
 int op;
 int tmp;
 char titulo[200];
 sprintf(titulo, "AGENDA - %s", medicos[id_medico].nome);
 do
 {
 cabecalho(titulo);
 printf("1 - Ver Horarios\n");
 printf("2 - Adicionar Horario\n");
 printf("3 - Remover Horario\n");
 printf("0 - Sair\n");
 scanf("%d", &op);
 switch (op)
 {
 case 1:
 //Ver horarios
 for (int i = 0; i < 1000; i++)
 {
 if (agendas[i].id_medico == id_medico && agendas[i].dia)
 {
 printf("%d - %2d:00 %2d:00\n", agendas[i].dia, agendas[i].hora_inicio, agendas[i].hora_fim);
 }
 }
 getchar();
 getchar();
 break;
 case 2:
 //adicionar horario
 printf("\nInforme em sequencia Dia (enter) Mes (enter) Ano (enter):\n");
 scanf("%d%d%d", &dia, &mes, &ano);
 // scanf("%d", &dia);
 // scanf("%d", &mes);
 // scanf("%d", &ano);
 if (verifica_disponibilidade_agenda(id_medico, formata_dia(dia, mes, ano)))
 {
 tmp = 0; //encontrou
 for (int i = 0; i < 1000; i++)
 {
 if (agendas[i].id_medico == id_medico && agendas[i].dia == formata_dia(dia, mes, ano))
 {
 tmp = 1;
 }
 }
 //se não tiver cadastrado na agenda antes, adiciona
 if (tmp == 0)
 {
 agendas[id_agenda].id_medico = id_medico;
 agendas[id_agenda].dia = formata_dia(dia, mes, ano);
 agendas[id_agenda].agendado = 0;
 printf("\nHora de incio (somente numeros): ");
 scanf("%2d", &agendas[id_agenda].hora_inicio);
 printf("\nHora de termino: ");
 scanf("%2d", &agendas[id_agenda].hora_fim);
 id_agenda++;
 }
 else
 {
 printf("Horario há cadastrado anteriormente\n");
 }
 }
 break;
 case 3:
 //remover horario
 printf("\nInforme em sequencia Dia (enter) Mes (enter) Ano (enter):");
 scanf("%d", &dia);
 scanf("%d", &mes);
 scanf("%d", &ano);
 for (int i = 0; i < 1000; i++)
 {
 if (agendas[i].id_medico == id_medico && agendas[i].dia == formata_dia(dia, mes, ano))
 {
 agendas[i].id_medico = 0;
 agendas[i].dia = 0;
 agendas[i].agendado = 0;
 }
 }
 break;
 }
 grava_dados();
 } while (op != 0);
}
void menu_medico()
{
 int crm;
 int existe;
 int op;
 int i;
 printf("\nInforme o CRM: ");
 scanf("%d", &crm);
 existe = pesquisar_medico(crm);
 if (existe == -1)
 {
 existe = cadastro_medico();
 }
 /**
 * caso o cadastro do medico nao exista
 * verifica se o cadastro foi cancelado
 */
 if (existe == -1)
 {
 return;
 }
 do
 {
 cabecalho(medicos[existe].nome);
 printf("1 - Agenda\n");
 printf("2 - Ver agendamentos\n");
 printf("3 - Cancelar consulta\n");
 printf("0 - Sair\n");
 scanf("%d", &op);
 switch (op)
 {
 case 1:
 agenda_medico(existe);
 break;
 case 2:
 lista_agendamentos_medico(existe);
 break;
 case 3:
 lista_agendamentos_medico(existe);
 printf("\nInforme o codigo do agendamento: ");
 scanf("%d", &i);
 atendimentos[i].status = -1;
 break;
 }
 } while (op != 0);
}
int cadastro_medico()
{
 int crm;
 int id;
 cabecalho("CADASTRAR MEDICO");
 printf("Informe o CRM (deixe em branco para cancelar): ");
 scanf("%d", &crm);
 if (!crm)
 {
 return -1;
 }
 id = pesquisar_medico(crm);
 if (id == -1)
 {
 id = id_medico;
 }
 else
 {
 cabecalho("Medico já cadastrado");
 printf("Atualizando dados...");
 }
 medicos[id].crm = crm;
 printf("\nNome: ");
 clear_cache();
 scanf("%100[^\n]", medicos[id].nome);
 // printf("\nSenha: ");
 // clear_cache();
 // scanf("%15[^\n]", medicos[id].senha);
 grava_dados();
 return id;
}
int pesquisar_medico(int crm)
{
 if (!crm)
 {
 cabecalho("PESQUISAR MEDICO");
 printf("CRM:\n");
 scanf("%d", &crm);
 }
 for (int i = 0; i < 1000; i++)
 {
 if (medicos[i].crm == crm)
 {
 return i;
 }
 }
 return -1;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando