Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / var09 my / 06

.doc
Скачиваний:
27
Добавлен:
30.04.2013
Размер:
38.4 Кб
Скачать

Лабораторная работа №6

Востропятов Н. А.

Вар №9

Создать класс“Поликлиника”, состоящей из класса ”Врач”.

Класс “Поликлиника”:номер поликлиники, фамилия заведующей, телефон заведующей.

Класс “Врач”.: фамилия врача, специальность.

#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();

}

4

Соседние файлы в папке var09 my