Я пытаюсь решить проблему домашнего задания для моей структуры данных класса. Мы должны составить список больничных пациентов, у каждого пациента есть имя, возраст, пол и список посещений. У каждого визита есть свидание и врач.Как перебрать связанные элементы списка
Программа должна иметь возможность добавлять новых пациентов, а затем отдельно добавлять новые визиты в запись пациента, введя имя пациента (проблема предполагает, что имена каждого пациента уникальны). Программа также должна иметь возможность удалять пациентов, удалять посещения, искать пациентов по имени, искать врачи и отображать все данные пациентов.
Для связанного списка, мы должны сделать наш собственный линейный односвязный список с классом узла (не допускается использование существующих структур данных). Мой полный код:
#include<iostream>
using namespace std;
template<class T>
class node
{
public:
T data;
node<T> *link;
};
template<class T>
class list
{
private:
node<T> *first;
public:
list()
{
first=NULL;
}
~list()
{
node<T> *next;
while(first)
{
next=first->link;
delete first;
first=next;
}
}
void insertion(T insert)
{
node<T> *cur,*ptr;
ptr=first;
cur=new node<T>;
cur->data=insert;
//cur->link=NULL;
cur->link=first;
first=cur;
}
void display()
{
node<T> *ptr;
if(first==NULL)
{
cout<<"List is empty"<<endl;
}
else
{
ptr=first;
while(ptr!=NULL)
{
cout<<ptr->data<<endl<<endl;
ptr=ptr->link;
}
}
}
};
class visit
{
private:
char date[100];
char doctor[100];
bool filled;
public:
healthrecord()
{
filled=false;
}
void FillVisit()
{
char temp[100];
cout<<"Enter date: ";
cin>>temp;
strcpy(date,temp);
fflush(stdin);
cout<<"Enter doctor: ";
cin>>temp;
strcpy(doctor,temp);
fflush(stdin);
filled=true;
}
void PrintVisit()
{
if(filled)
{
cout<<"PATIENT VISIT"<<endl;
cout<<"Date: "<<date<<endl;
cout<<"Doctor: "<<illness<<endl<<endl;
}
}
char*GetDoctorName()
{
return doctor;
}
};
ostream& operator<<(ostream& os,visit &object)
{
object.PrintVisit();
os<<"";
return os;
}
class patient
{
private:
char name[100];
int age;
char gender[100];
list<visit> visits;
public:
patient(){}
void FillPatientRecords()
{
char temp[100];
int tmp;
cout<<"Enter patient's name: ";
cin>>temp;
strcpy(name,temp);
fflush(stdin);
cout<<"Enter patient's age: ";
cin>>tmp;
age=tmp;
fflush(stdin);
cout<<"Enter patient's gender: ";
cin>>temp;
strcpy(gender,temp);
fflush(stdin);
}
void PrintPatientRecords()
{
cout<<endl<<"Name: "<<name<<endl;
cout<<"Age: "<<age<<endl;
cout<<"Gender: "<<gender<<endl;
healthrecords.display();
}
char*GetPatientName()
{
return name;
}
void AddVisit()
{
healthrecord temp;
temp.FillHealthRecord();
healthrecords.insertion(temp);
}
};
ostream& operator<<(ostream& os,patient &object)
{
object.PrintPatientRecords();
os<<"";
return os;
}
int main()
{
list<patient> patients;
char src[100];
int ch=0;
while(ch!=8)
{
cout<<".:Menu:."<<endl<<"1. Add new patient"<<endl<<"2. Add new visit"<<endl<<"3. Delete a visit"<<endl<<"4. Delete a patient"<<endl;
cout<<"5. Display all patients"<<endl<<"6. Search patients"<<endl<<"7. Search visit"<<endl<<"8. Exit"<<endl<<"Enter a choice: ";
cin>>ch;
if(ch==1)
{
//add patient data
patient temp;
temp.FillPatientRecords();
patients.insertion(temp);
}
else if(ch==2)
{
//add new visit
cout<<"Enter patient's name: ";
cin>>src;
patient temp;
}
else if(ch==3)
{
//delete a visit
cout<<"Enter patient's name: ";
cin>>src;
}
else if(ch==4)
{
//delete a patient
cout<<"Enter patient's name: ";
cin>>src;
}
else if(ch==5)
{
//display all patients
patients.display();
}
else if(ch==6)
{
//search patients
cout<<"Enter patient's name: ";
cin>>src;
}
else if(ch==7)
{
//search visits (print all matching ones)
cout<<"Enter doctor's name: ";
cin>>src;
}
cout<<endl;
}
return 0;
}
Это работает отлично, если все, что я сделал, это добавить новых пациентов. Однако я не знаю, как добавлять новые визиты к пациенту, так как мне придется искать имя пациента и добавлять новый визит к этому пациенту. Метод поиска Я имею в виде, чтобы перебирать каждый пациент в списке в основном(), а затем сравнить его с поисковым запросом так:
patient temp=(element of linked list)
if(temp.GetPatientName()==src)
...
Как перебирать каждый пациент в связанном списке так Я могу получить доступ к их именам?
Не зная остальную часть мяса в вашем шаблон 'list' (очень плохой выбор имен там, кстати, особенно если вы использовали' using namespace std; ', [который вы не должны делать] (https://stackoverflow.com/questions/1452721/why-is- используя-namespace-std-рассмотренную-плохую практику), но, по-видимому, есть), мы должны предположить, что вы предоставили способ ссылаться на пациента (singluar) в списке пациентов по результатам вашего поиска. Учитывая эту рекомендацию, управление/доступ к списку посещений этого пациента должно быть достигнуто с помощью методов, выявленных в вашем классе пациентов. Короче говоря, вы должны закодировать его в конце концов. – WhozCraig
@WhozCraig Вы могли бы использовать немного меньше sass в своем ответе; некоторые люди новы к программированию. – gowrath
@WhozCraig Но есть улов: для поиска пациента по имени мне кажется, что мне нужно получить доступ к имени каждого пациента из объекта списка в main(), а затем сравнить его с поисковым запросом пользователя, чтобы найти матч. Как получить доступ к имени каждого пациента из объекта списка? – Penny