#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
/*
autor: Luiz Otávio da Silva Pereira
Curso: Sistema de Inf. 4º Período, noturno.
*/
//criando registros
typedef struct Funcionario{
char nome[20], email[25];
int tel, mat;
} Funcionario;
typedef struct Medico{
char nome[20], especialidadem[25];
int cpf,cod,CRM;
} Medico;
typedef struct Paciente{
char nome[20], email[25], endereco[40];
int telefone;
} Paciente;
typedef struct Login {
char login[10];
int senha;
} Login;
FILE *p;
//declaracao das funcoes
void Loginadm();
void LoginFuncionario();
void Menuadm();
void MenuFuncionario();
void MenuPrincipal();
void MenuFuncionario();
void CadFuncionario();
void CadEspecialidade();
void CadPaciente();
void CadMedico();
void ExibirFuncionario();
void ExibirMedico();
void ExibirPaciente();
//declarando variavies globais
Funcionario funcionario[2];
Paciente paciente[2];
Medico medico[2];
int cont = 0;
main(){
MenuPrincipal(); //chamando a funcao dentro da main
}//fim da main
void MenuPrincipal(){
int op1; //variavei para opcao de mnu
do {
system("cls");
system("title Menu Principal"); //setando nome para aparecer no console
system("color 30"); //setando uma cor para o console
printf("1-Logar como Administrador\n");
printf("2-Logar como Funcionario\n");
printf("3-Funcionarios Cadastrados\n");
printf("4-Medicos Cadastrados\n");
printf("5-Pacientes Cadastrados\n");
printf("0-Sair\n");
scanf("%i",&op1);
system("cls");
switch(op1) { //opcao para menu
case 1:
system("title LOGIN ADMINISTRADOR");
Loginadm();
break;
case 2:
LoginFuncionario();
break;
case 3:
ExibirFuncionario();
break;
case 4:
ExibirMedico();
break;
case 5:
ExibirPaciente();
break;
case 0:
exit(0);
break;
default:
system("title ERROR");
system("color 40");
printf("\n-------------Opcao invalida-------------\n");
}//fim switch
system("pause");
} while(op1!=0);
}//fim menu principal
void Menuadm(){
int op1;
do {
system("cls");
system("title MENU DE GERENCIAMENTO");
system("color 20");
printf("1-CADASTRAR FUNCIONARIO\n");
printf("2-CADASTRAR MEDICO\n");
printf("3-CADASTRAR PACIENTE\n");
printf("0-VOLTAR\n");
scanf("%i",&op1);
system("cls");
switch(op1) {
case 1:
system("color 30");
system("title Cadastrar funcionario");
CadFuncionario();
break;
case 2:
system("color 30");
system("title Cadastrar Medico");
CadMedico();
break;
case 3:
system("color 30");
system("title Cadastrar Paciente");
CadPaciente();
break;
case 0:
MenuPrincipal();
break;
default:
system("color 40");
system("title ERROR");
printf("\n-------------Opcao invalida-------------\n");
}//fim swhitch
system("pause");
} while(op1!=0);
}//fim do menu
void Loginadm(){
int op;
Login aux,a;
//atribuicao de valores para administrador geral
strcpy(aux.login,"adm");
aux.senha=123;
do {
printf("\nLogin: ");
fflush(stdin);
gets(a.login);
printf("\nSenha: ");
scanf("%i",&a.senha);
system("cls");
if(strcmp(aux.login,a.login)==0 && aux.senha==a.senha) {
system("color 20");
printf("Bem vindo ADM\n");
Sleep(1000);
Menuadm();
}
else
system("color 40");
system("ERRO DE LOGIN");
printf("\n------------Login ou Senha Errado!------------\n");
Sleep(1000);
MenuPrincipal();
} while(op!=0);
}//fim login adm
void MenuFuncionario(){
int op1;
do {
system("cls");
system("title Menu Funcionario");
system("color 20");
printf("1-CADASTRAR PACIENTE\n");
printf("0-VOLTAR\n");
scanf("%i",&op1);
system("cls");
switch(op1) {
case 1:
system("title Cadastrar Paciente");
CadPaciente();
break;
case 0:
MenuPrincipal();
break;
default:
system("color 40");
system("title ERROR");
printf("\n------------Opcao invalida------------\n");
}//fim swhitch
system("pause");
} while(op1!=0);
}//fim do menu funcionario
void LoginFuncionario(){
int op3,m;
char name[30];
int achou;
achou=0;
do {
printf("\nLogin: ");
fflush(stdin);
gets(name);
printf("\nSenha: ");
scanf("%i",&m);
for(int f = 0 ; f < 2 ; f++)
{
if(strcmp(funcionario[f].nome,name)==0 && funcionario[f].mat==m )
{
achou=1;
system("cls");
MenuFuncionario();
}
}
if(achou==0)
{
system("color 40");
system("title ERRO DE LOGIN");
printf("Senha ou login invalido!\n");
Sleep(1000);
MenuFuncionario();
}
} while(op3!=0);
}//fim do login funcionario
void CadMedico(){
int op2;
do{
for(int f = 0 ; f < 2; f++) {
system("color e0");
system("title CADASTRAR");
Medico medico; //variavel e tipo
//abrindo arquivo.
p=fopen("HOSPITAL-Otavio.txt", "a+"); //"nome do arquivo" "modo do arquivo"
//entrada de dados
printf("Nome: \n");
fflush(stdin);
gets(funcionario.nome);
//escrevendo no arquivo
fwrite(&medico,sizeof(Medico),1,p);
//fechar
fclose(p);
}
Menuadm();
}while(op2!=2);
}//fim do cadastrar medico
void CadFuncionario(){
int op2;
do{
for(int i = 0 ; i < 2; i++) {
system("color e0");
system("title CADASTRAR");
Funcionario funcionario; //variavel e tipo
//abrindo arquivo.
p=fopen("HOSPITAL-Otavio.txt", "a+"); //"nome do arquivo" "modo do arquivo"
//entrada de dados
printf("Nome: \n");
fflush(stdin);
gets(funcionario.nome);
printf("Email: \n");
scanf("%c", &funcionario.email);
printf("Matricula: \n");
scanf("%i", &funcionario.mat);
printf("Telefone: \n");
scanf("%i", &funcionario.tel);
//escrevendo no arquivo
fwrite(&funcionario,sizeof(Funcionario),1,p);
//fechar
fclose(p);
}
Menuadm();
}while(op2!=2);
}//fim do cadastrar funcionario
void CadPaciente(){
int op2;
do{
for(int f = 0 ; f < 2; f++) {
system("color e0");
system("title CADASTRAR");
Paciente paciente; //variavel e tipo
//abrindo arquivo.
p=fopen("HOSPITAL-Otavio.txt", "a+"); //"nome do arquivo" "modo do arquivo"
//entrada de dados
printf("Nome: \n");
fflush(stdin);
gets(paciente.nome);
printf("Email: \n");
scanf("%c",&paciente.email);
printf("Endereco: \n");
scanf("%c",&paciente.endereco);
printf("Telefone: \n");
scanf("%i",&paciente.telefone);
//escrevendo no arquivo
fwrite(&paciente,sizeof(Paciente),1,p);
//fechar
fclose(p);
}
MenuPrincipal();
}while(op2!=2);
}//fim do cadastrar paciente
void ExibirFuncionario(){
char nome[25];
system("cls");
puts("Lista de Funcionarios");
for(int i = 0; i<2; i++){
Funcionario funcionario;
p=fopen("HOSPITA-Otavio.txt", "r");
rewind(p);//localizar ponteiro para o início do arquivo
while(!feof(p)){//estrutura para resgatar todos os dados.
fread(&funcionario,sizeof(Funcionario),1,p);//ler
if(!feof(p)){
printf("Nome: %c\tEmail: %c\tMatricula: %i\tTelefone: %i",funcionario.nome,funcionario.email,funcionario.mat,funcionario.tel);
printf("\n\n");
}//tratando erro de repetição do ultimo dado
}//fim do while
fclose(p);
}
}
//fim do listar funcionario
void ExibirMedico(){
system("cls");
puts("Lista de Medicos");
for(int i = 0; i<2; i++){
Medico medico;
p=fopen("HOSPITA-Otavio.txt", "r");
rewind(p);//localizar ponteiro para o início do arquivo
while(!feof(p)){//estrutura para resgatar todos os dados.
fread(&medico,sizeof(Medico),1,p);//ler
if(!feof(p)){
printf("Nome: %c\tEspecialidade: %i\tCPF: %i\tCRM: %i\tCodigo: %i",medico.nome,medico.especialidadem,medico.cpf,medico.CRM,medico.cod);
printf("\n\n");
}//tratando erro de repetição do ultimo dado
}//fim do while
fclose(p);
}
}//fim do exibir medico
void ExibirPaciente(){
system("cls");
puts("Lista de Pacientes");
for(int i = 0; i<2; i++){
Paciente paciente;
p=fopen("HOSPITA-Otavio.txt", "r");
rewind(p);//localizar ponteiro para o início do arquivo
while(!feof(p)){//estrutura para resgatar todos os dados.
fread(&paciente,sizeof(Paciente),1,p);//ler
if(!feof(p)){
printf("Nome: %s\tEmail: %c\tEndereco: %c\tTelefone: %i",paciente.nome,paciente.email,paciente.endereco,paciente.telefone);
printf("\n\n");
}//tratando erro de repetição do ultimo dado
}//fim do while
fclose(p);
}
}
//fim do exibir paciente
Ao listar/exibir os pacientes, funcionários e médicos, meu programa entra em loop infinito sem parar, como resolver ?