Добавил:
Diryabuh
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <stdio.h>
#include <conio.h>
#include <string.h>
class Doctor
{
public:
Doctor()
{
printf("Enter name: ");
scanf("%s", m_name);
printf("Enter profession: ");
scanf("%s", m_profession);
m_pNext = NULL;
}
Doctor(char *name, char *profession)
{
strcpy(m_name, name);
strcpy(m_profession, profession);
m_pNext = NULL;
}
~Doctor() { m_pNext = NULL; };
char *GetName(void) { return m_name; }
char *GetProfession(void) { return m_profession; }
void SetName(char *name) { strcpy(m_name, name); }
void SetProfession(char *profession) { strcpy(m_profession, profession); }
Doctor *m_pNext;
private:
char m_name[16];
char m_profession[16];
};
class Polyclinic
{
public:
Polyclinic() { m_pFirst = NULL; }
Polyclinic(int number, int phone, char *administrator)
{
m_number = number;
m_phone = phone;
strcpy(m_administrator, administrator);
m_pFirst = NULL;
};
~Polyclinic() { RemoveAllDoctors(); };
void AddDoctor(Doctor *pDoctor);
void RemoveDoctor(Doctor *pDoctor);
void RemoveAllDoctors(void);
void PrintDoctors(void);
void SortDoctors(void);
int CountDoctors(void);
Doctor *FindDoctorByName(char *name);
inline Doctor operator=(Doctor &a) { AddDoctor(&(a)); return a; }
private:
int m_number;
int m_phone;
char m_administrator[16];
Doctor *m_pFirst;
};
void Polyclinic::AddDoctor(Doctor *pDoctor)
{
if (pDoctor)
{
printf("Polyclinic: adding Doctor: %s %s\n", pDoctor->GetName(), pDoctor->GetProfession());
if (m_pFirst)
pDoctor->m_pNext = m_pFirst;
m_pFirst = pDoctor;
}
}
void Polyclinic::RemoveDoctor(Doctor *pDoctor)
{
Doctor *pObj = m_pFirst;
Doctor *pLast = NULL;
while (pObj)
{
if (pObj == pDoctor)
{
if (pLast)
pLast->m_pNext = pObj->m_pNext;
else
m_pFirst = pObj->m_pNext;
delete pObj;
return;
}
else
{
pLast = pObj;
pObj = pObj->m_pNext;
}
}
}
void Polyclinic::RemoveAllDoctors(void)
{
printf("Polyclinic: removing all Doctors\n");
Doctor *pObj = m_pFirst;
Doctor *pNext = NULL;
while (pObj)
{
pNext = pObj->m_pNext;
printf("Polyclinic: removing Doctor: %s %s\n", pObj->GetName(), pObj->GetProfession());
delete pObj;
pObj = pNext;
}
m_pFirst = NULL;
}
void Polyclinic::PrintDoctors(void)
{
int i=0;
for (Doctor *pObj = m_pFirst; pObj; pObj = pObj->m_pNext)
{
printf("Doctor %d: %s %s\n", i, pObj->GetName(), pObj->GetProfession());
i++;
}
}
void Polyclinic::SortDoctors(void)
{
/* if (!m_pFirst || !m_pFirst->m_pNext)
return;
Doctor *pObj = m_pFirst;//->m_pNext;
while (pObj)
{
if (pObj->m_pPrev && (pObj->GetData() < pObj->m_pPrev->GetData()))
{
// swap start
Doctor *o1 = pObj->m_pPrev->m_pPrev;
Doctor *o2 = pObj->m_pPrev;
Doctor *n = pObj->m_pNext;
if (o1)
o1->m_pNext = pObj;
pObj->m_pPrev = o1;
pObj->m_pNext = o2;
o2->m_pPrev = pObj;
o2->m_pNext = n;
n->m_pPrev = o2;
// swap end
// swap start
pObj = pObj->m_pPrev;// move back
}
else
pObj = pObj->m_pNext;
}*/
}
int Polyclinic::CountDoctors(void)
{
int c = 0;
Doctor *pObj = m_pFirst;
while (pObj)
{
pObj = pObj->m_pNext;
c++;
}
return c;
}
Doctor *Polyclinic::FindDoctorByName(char *name)
{
Doctor *pObj = m_pFirst;
while (pObj)
{
if (!stricmp(pObj->GetName(), name))
return pObj;
pObj = pObj->m_pNext;
}
return NULL;
}
void main()
{
Polyclinic p(100, 3425345, "Petrova E N");
int n = 1;
printf("Enter number of doctors: ");
scanf("%d", &n);
printf("\n%d doctors\n\n", n);
for (int i=0; i<n; i++)
p.AddDoctor(new Doctor);
printf("\n\n");
p.PrintDoctors();
printf(" %d doctors total\n\n", p.CountDoctors());
char nm[16];
printf("Enter name to search: ");
scanf("%s", &nm);
Doctor *pDoctor = p.FindDoctorByName(nm);
if (pDoctor)
printf("Found: %s profession: %s\n", pDoctor->GetName(), pDoctor->GetProfession());
getch();
}
