Oi pessoal, queria pedir a ajuda de vocês para resolver meu problema.
Estou fazendo um trabalho para a faculdade que consiste em uma simulação de atendimento de hospital.
Estou fazendo uma lista ordenada para o cadastro dos pacientes.
Cada paciente tem ID de identificação, string Nome e SobreNome e grau de Prioridade para atendimento.
Fiz uma classe Paciente para criar os pacientes e uma classe Lista(com herança de paciente) para tratar a inserção dos pacientes nele.
Estou com problema na função cadastro. Consigo cadastrar pacientes no inicio da lista, esteja ela vazia ou sendo o ID a ser inserido menor que o primeiro ID cadastrado.
Porém, não estou conseguindo cadastrar no meio dela. Fiz um while para posicionar poonteiros para indicar a posição correta para o cadastro, mas sempre que tento adicionar um paciente da erro de execução quando ele esta antes deste while.
Vou passar os códigos que fiz, espero que alguém possa me ajudar.
Paciente: (deixei tudo na Paciente.h porque não teria muito código para inserir na .cpp)
/*
* File: Paciente.h
* Author: mutiley
*
* Created on 11 de Junho de 2012, 22:11
*/
#ifndef PACIENTE_H
#define PACIENTE_H
#include "string.h"
#include "iostream"
using namespace std;
class Paciente {
private:
string Nome;
string SobreNome;
int Prioridade; //prioridade de atendimento
int ID; //código de cadastro do paciente; todo cliente possui um código diferente.
// Usado para ordenação na lista de cadastro de atendimento
public:
Paciente() {
};
Paciente(int id, string nome, string sobrenome, int prioridade) {
this->Nome = nome;
this->ID = id;
this->SobreNome = sobrenome;
this->Prioridade = prioridade;
}
string GetNome() {
return Nome;
}
void SetNome(string Nome) {
this->Nome = Nome;
}
string GetSobreNome() {
return SobreNome;
}
void SetSobreNome(string SobreNome) {
this->SobreNome = SobreNome;
}
int GetID() {
return ID;
}
void SetID(int ID) {
this->ID = ID;
}
int GetPrioridade() {
return Prioridade;
}
void SetPrioridade(int Prioridade) {
this->Prioridade = Prioridade;
}
void imprimirPaciente() {
cout << "ID: " << GetID();
cout << " Nome: " << GetNome() << " " << GetSobreNome();
cout << " Prioridade: " << GetPrioridade() << endl;
}
};
#endif /* PACIENTE_H */
Lista.h:
/*
* File: Lista.h
* Author: mutiley
*
* Created on 11 de Junho de 2012, 22:19
*/
#ifndef LISTA_H
#define LISTA_H
#include "Paciente.h"
#include "string.h"
#include "iostream"
using namespace std;
//classe que representa uma lista com a relação de
//todos os atendimentos do hospital, portanto todo
//paciente cadastrado deve ser atendido.
class Lista : public Paciente{
private:
Paciente info;
Lista *next;
public:
Lista() {
Paciente p0(0,"null", "null", 0);
this->info = p0;
this->next = NULL;
}
void remover(Paciente, bool&);//remove um paciente
void cadastrar(Paciente, bool&); //cadastra um novo paciente
bool consultar(Paciente); //consulta se o paciente está cadastrado
void imprimir(); //imprime toda a lista
bool listaVazia(); //verifica se a lista está vazia
void buscaLocalParaInsercao(); //encontra o local apropriado para cadastrar um novo paciente de acordo com a ID;
};
#endif /* LISTA_H */
Lista.cpp:
#include "Lista.h"
#include "Paciente.h"
bool Lista::listaVazia() {
if (this->info.GetID() == 0) {
return true;
} else
return false;
}
void Lista::cadastrar(Paciente P, bool &deuCerto) {
Lista *aux, *proximo; //aux é o novo elemento a ser cadastrado e proximo um ponteiro para elementos da lista
aux = new Lista();
aux->info = P;
aux->next = NULL;
if (listaVazia()) {//lista vazia, insere na primeira posição
this->info = aux->info;
this->next = NULL;
deuCerto = true;
} else {
proximo = this; //proximo aponta para primeiro elemento
if (aux->info.GetID() < proximo->info.GetID()) {//id a ser inserido é menor do que o primeiro id da lista
aux->next = proximo;
proximo = aux;
deuCerto = true;
} else {//enquanto ID da lista for maior que ID a ser inserido, percorre a lista
Lista *anterior = NULL;
while (aux->info.GetID() > proximo->info.GetID()) {
cout<<"asd"<<endl;
anterior = proximo;
proximo = proximo->next;
}
if (proximo != NULL) {//ou seja, achou a posição e ela não é a última
//verifica se são iguais. Se forem não cadastra
if (aux->info.GetID() == proximo->info.GetID()) {
cout << "já esta cadastrado." << endl;
deuCerto = false;
} else { //caso contrário cadastra
aux->next = proximo;
anterior->next = aux;
deuCerto = true;
}
} else {//insere na última posição da lista
anterior->next = aux;
proximo = aux;
deuCerto = true;
}
}
}
if (deuCerto)
cout << "true" << endl;
else
cout << "false" << endl;
}
bool Lista::consultar(Paciente P) {
bool achou = false;
Lista *aux, *auxLista;
aux->info = P;
aux->next = NULL;
auxLista = this;
cout << "con" << endl;
if (listaVazia())
cout << "Nenhum paciente cadastrado na lista." << endl;
else {
cout << "else cons" << endl;
while ((auxLista->next != NULL) && (aux->info.GetID() != auxLista->info.GetID()))
aux = aux->next;
if (aux->info.GetID() == auxLista->info.GetID()) {
achou = true;
cout << "Achou" << endl;
}
}
return achou;
}
void Lista::remover(Paciente P, bool &deuCerto) {
Lista *aux;
aux->info = P;
if (!consultar(P))//não encontrou o ID na lista.
cout << "ID não encontrada -> paciente não cadastrado." << endl;
else {
}
}
void Lista::imprimir() {
Lista *aux;
aux = this;
if (!listaVazia()) {
while (aux != NULL) {
cout << "as" << endl;
cout << "ID: " << aux->info.GetID();
cout << " Prioridade: " << aux->info.GetPrioridade();
cout << " Nome: " << aux->info.GetNome();
cout << " " << aux->info.GetSobreNome();
aux = aux->next;
}
} else
cout << "lista vazia" << endl;
}
Main:
/*
* File: main.cpp
* Author: mutiley
*
* Created on 11 de Junho de 2012, 22:11
*/
#include <cstdlib>
#include "Lista.h"
#include "Paciente.h"
using namespace std;
int main(int argc, char** argv) {
bool deuCerto;
Paciente p1(1, "Arthur", "Giovanini", 1);
Paciente p2(2, "Nome", "Sobrenome", 0);
Paciente p3(3, "Nome", "Sobrenome", 0);
Paciente p4(4, "Nome", "Sobrenome", 0);
cout << "fez paciente" << endl;
p1.imprimirPaciente();
p2.imprimirPaciente();
Lista *l = new Lista();
l->cadastrar(p1, deuCerto);
cout << "asm" << endl;
l->cadastrar(p2, deuCerto);
cout << "asmm" << endl;
l->cadastrar(p3, deuCerto);
l->cadastrar(p4, deuCerto);
l->imprimir();
return 0;
}
Pergunta
muttleydm
Oi pessoal, queria pedir a ajuda de vocês para resolver meu problema.
Estou fazendo um trabalho para a faculdade que consiste em uma simulação de atendimento de hospital.
Estou fazendo uma lista ordenada para o cadastro dos pacientes.
Cada paciente tem ID de identificação, string Nome e SobreNome e grau de Prioridade para atendimento.
Fiz uma classe Paciente para criar os pacientes e uma classe Lista(com herança de paciente) para tratar a inserção dos pacientes nele.
Estou com problema na função cadastro. Consigo cadastrar pacientes no inicio da lista, esteja ela vazia ou sendo o ID a ser inserido menor que o primeiro ID cadastrado.
Porém, não estou conseguindo cadastrar no meio dela. Fiz um while para posicionar poonteiros para indicar a posição correta para o cadastro, mas sempre que tento adicionar um paciente da erro de execução quando ele esta antes deste while.
Vou passar os códigos que fiz, espero que alguém possa me ajudar.
Paciente: (deixei tudo na Paciente.h porque não teria muito código para inserir na .cpp)
Lista.h: Lista.cpp: Main:Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.