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

Лабы / var09 my / 06nm

.cpp
Скачиваний:
24
Добавлен:
30.04.2013
Размер:
4.08 Кб
Скачать
#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();
}
Соседние файлы в папке var09 my