Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

70K
17 апреля 2011 года
zulya
2 / / 17.04.2011
ошибка в конструкторе элемента списка. как можно передать туда значение всего, что необходимо

Код:
#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";


            }
        }

    }
}
242
17 апреля 2011 года
Оlga
2.2K / / 04.02.2006
..... [/cоde] и уберите большие буквы. дубликаты тем не создавайте, одну сейчас уберу.

модератор.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог