Форум программистов, компьютерный форум CyberForum.ru

класс студент ошибка. - C++

Восстановить пароль Регистрация
 
zulya
Сообщений: n/a
17.04.2011, 18:19     класс студент ошибка. #1
ошибка в конструкторе элемента списка. как можно передать туда значение всего, что необходимо

Код
#include<string.h>
#include <iostream>


using namespace std;


class Element
{
		// информационное поле списка
char info;
//// указатель на следующий элемент списка
Element * next;
public:
		// конструктор элемента списка
		Element(char,char,int ,int , Element* = NULL);
// метод получения информационного поля 
// элемента списка
		int GetValue();
		// метод установки нового значения 
// информационного поля 
void SetValue(char);
// метод получения указателя 
// на следующий элемент списка
		Element* GetPointer();
		// метод установки нового значения 
// адреса следующего элемента
		void SetPointer(Element*);
};

class Student
{
class Element 
{
	char Name [50];
	char Surname [60];
	int NumOfTkt;
	int Year;
	public:
		
// информационное поле списка
char  info;
//// указатель на следующий элемент списка
		Element * next;
public:
			// конструктор элемента списка
			Element(char,char,int ,int, Element* =NULL);
// метод получения информационного 
// поля элемента списка
			int GetValue();
			// метод установки нового значения 
// информационного поля 
void SetValue(char);
// метод получения указателя 
// на следующий элемент списка
			Element* GetPointer();
			// метод установки нового значения 
// адреса следующего элемента
			void SetPointer(Element*);
};

protected:
		// заголовок списка
		Element* head;
public:
		// конструктор создания пустого списка
		Student();
		// конструктор копирования
		Student(const Student&);
		// деструктор
		~Student();
		// метод проверки пустоты списка
		bool IsEmpty();
		// метод добавления элемента в заданную позицию
		void AddStudent(char, char, int, int, int);
		// метод удаления элемента из списка по ключу
		void DeleteByKey(char, char,int,int );
		// метод удаления элемента, 
// находящегося в заданной позиции
		int DeleteByPosition(int);
		// дружественная функция печати списка
		friend ostream& operator<<(ostream&, Student&);
		
}; 


// базовый класс иерархии исключений при работе со списком
class StudentException
{
public:
		virtual void ShowMessage() = 0;
};


// класс-исключение при попытке обращения 
// в некорректную позицию
class IncorrectPositionException : public StudentException 
{
public:
		void ShowMessage()
{
cout << "Некорректная позиция элемента в списке" << endl;
}
};



// класс-исключение при попытке извлечения 
// элемента из пустого списка
class StudentIsEmptyException : 
	
	public 
StudentException 
{
public:
		void ShowMessage()
{
cout << "Список пуст" << endl;
}
};

// конструктор элемента списка
Student::Element::Element(char x, Element* p)
{
info = x; 
next = p;
}
	
// метод получения информационного поля элемента списка
int Student::Element::GetValue()
{
return info;
}

// метод установки нового значения информационного поля 
void Student::Element::SetValue(char x)
{
info = x;
}
	
// метод получения указателя на следующий элемент списка 
Student::Element* Student::Element::GetPointer()
{
return next;
}

// метод установки нового значения 
// адреса следующего элемента
void Student::Element::SetPointer(Element* p)
{
next = p;
}



// конструктор по умолчанию для создания пустого списка
Student::Student()
{
head = NULL;
}

// конструктор копирования
Student::Student(const Student& Student1)
{
	head = NULL;
	Element* cur = Student1.head;
	int n = 1;
	// просмотр всех элементов списка Student1 и добавление 
// в новый список элементов с теми же 
// значениями информационного поля
	while(cur != NULL)
	{
		AddStudent(cur -> GetValue(),cur -> GetValue(),cur -> GetValue(),cur -> GetValue(), n++);
		cur = cur -> GetPointer();
	}
}

// деструктор – удаление всех элементов списка
Student::~Student()
{
	Element * cur, *help;
	cur = head;
	while(cur != NULL)
	{
		help = cur -> GetPointer();
		delete cur;
		cur = help;
	}
}

// метод проверки пустоты списка
bool Student::IsEmpty()
{
if(head == NULL) 
return true; 
return false;
}

// метод добавления элемента в заданную позицию
void Student::AddStudent(char Name ,
	char Surname,
	int NumOfTkt,
	int Year, int pos)
{
	Element* current,*help;
	// добавление в начало списка (приводит к изменению 
// адреса первого элемента списка)
if(pos == 1)
	{
		help = new Element( Name ,Surname,NumOfTkt,Year, head);
		head = help;
		return;
	}
	// поиск элемента, после которого 
// требуется вставить новый
current = head;
	int i = 1;
	while(i != pos - 1 && current != NULL)
	{
		i++;
		current = current -> GetPointer();
	}
	// генерация исключения для случая 
// некорректной позиции вставки
	if(current == NULL)
		throw IncorrectPositionException();
	// создание нового элемента и включение его в список
	help = new Element( Name , Surname,NumOfTkt, Year, current -> GetPointer());
	current -> SetPointer(help);
}

// метод удаления элементов списка по ключу
void Student::DeleteByKey(char Name,char Surname,int NumOfTkt,int Year)
{
		Element* current, *help;
		// удаление элементов с заданным ключом 
// из начала списка
while(head != NULL && head -> GetValue() == Name)
		{
			help = head;
			head = head -> GetPointer();
			delete help;
		}
		if(head != NULL)
		{
			// удаление элементов с заданным ключом из 
// середины и/или с конца списка 
current = head;
			while(current->GetPointer() != NULL)
		{
			help = current->GetPointer();
			if(help->GetValue() == Name)
			{
				current -> SetPointer
(help->GetPointer());
				delete help;
			}
			else
				current = current->GetPointer();
		}
	}
}

// метод удаления элемента списка с заданной позиции
int Student::DeleteByPosition(int pos)
{
	Element* current, *help;
	// генерация исключения в случае попытки 
// удаления из пустого списка
	if(IsEmpty())
		throw StudentIsEmptyException ();
	int key;
	// удаление из начала списка (приводит к изменению адреса первого элемента списка)
	if(pos == 1)
	{
		help = head;
		head = head -> GetPointer();
		key = help -> GetValue();
		delete help;
		return key;
	}
	// поиск элемента, после которого
// требуется удалить элемент
current = head;
	int i = 1;
	while(i != pos - 1 && current->GetPointer() != NULL)
{
			i++;
			current = current -> GetPointer();
}
// генерация исключения для случая 
// некорректной позиции удаления
if(current->GetPointer() == NULL)
			throw IncorrectPositionException();
// удаление элемента из списка
help = current->GetPointer();
		current -> SetPointer(help->GetPointer());
		key = help->GetValue();
		delete help;
		return key;
}

// дружественная функция печати списка
ostream& operator << (ostream& out, Student& Student)
{
	if(Student.IsEmpty())
		out << "Список пустой" << endl;
	else
	{
		Student::Element* current = Student.head;
		while(current != NULL)
		{
			out << current -> GetValue() << " ";
			current = current -> GetPointer();
		}
	}
	out << endl;
	return out;
}

	
void main()
{

	Student Student; 
	
	while (true)
	{
		
		cout<<"\n\t\t\t Menu\n\n1->1Add \n2->2udalenie po klu4y\n3->3udalenie po pos\n4->4Print\n5->Exit \n\"";
		int choice;
		char q;
		cin>>choice;
		cout<<"\n";
		switch(choice)
		{

		case 1:
			{int Year, NumOfTkt, pos;
			char Name , Surname; 
				cout<<"\nName\n";
				cin>>Name;
				cout<<"\name\n";
				cin>>Surname;
				cout<<"\nYear\n";
				cin>>Year;
				cout<<"\nNumOfTkt\n";
				cin>>NumOfTkt;
				cout<<"\nVv. nomer posicii na kot. dobavim\n";
				cin>>pos;
				
				Student.AddStudent(Name ,Surname,NumOfTkt,Year, pos);
		
		
			}


			break;

			case 2:
			{char* key;
			char Name;
			char Surname; 
			int NumOfTkt;
			int Year;
				cout<<"\nChto udalim key?\n";
				cin>>key;
				
				// метод удаления элемента из списка по ключу
				Student.DeleteByKey(Name ,Surname,NumOfTkt,Year);
		
				
			}
			break;

			case 3:
			{int key, pos;
				cout<<"\nChto udalim pos?\n";
	
				cin>>pos;
				    // метод удаления элемента, находящегося в заданной позиции
			Student.DeleteByPosition(pos);



			}
			break;

			case 4:
			{cout<<Student;
			}
			break;


			case 5:
			{
				return;
			}

		default:
			{
				cout<<"\nError!\n";


			}
		}

	}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2011, 18:19     класс студент ошибка.
Посмотрите здесь:

класс «Студент» C++
C++ класс Студент
[C++] Создать класс студент и классы бюджетный студент и коммерческий студент. C++
нужно описать класс Студент? подскажите в чем ошибка? C++
Класс Студент C++
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. C++
C++ НУжно Поправить класс студент
C++ Описать класс студент

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 18:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru