Baixe o app para aproveitar ainda mais
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; }
Compartilhar