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

Ваш аккаунт

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

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

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

Закомментировать

16K
19 мая 2008 года
Воин света
5 / / 16.06.2006
Условие:
Описать класс для реализации работы с динамической структурой данных, которая хранит список студентов группы. Класс должен содержать следующие, доступные пользователю интерфейсы:
- добавить элемент в используемую динамическую структуру данных;
- удалить элемент из используемой динамической структуры данных;
- найти элемент в используемой динамической структуре данных;
- распечатать полную информацию о найденном элементе;
- удалить все элементы из используемой динамической структуры данных;
- распечатать полную информацию обо всех элементах используемой динамической структурой данных;
- отсортировать элементы в используемой динамической структуре данных .
Класс должен содержать указатель(и), необходимые для работы с используемой динамической структурой данных, который(е) не должны быть доступны пользователю.
Элемент, как правило, определяется (задается) своей информационной частью (полезной информационной нагрузкой). При работе этот класс не должен предоставлять пользователю доступ к элементу используемой динамической структуры данных. Пользователь может получить только копию информационной части элемента списка или указатель на нее.
Информационная часть, в свою очередь, представляется в виде структуры, которая хранит следующую информацию для каждого студента:
- фамилия;
- имя;
- отчество;
- год рождения:
- средний балл;
- учебная группа;
Все строковые данные представляются через указатели.

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

struct MyCourse
{
    char *surname;
    char *name;
    char *patronomic;
    int year;
    int grade;
    char *group;
    MyCourse();
    ~MyCourse();
    void print();
    MyCourse(const MyCourse & );
    MyCourse & operator=(const MyCourse & );
    friend bool operator==(const MyCourse & s, const MyCourse & s1);
    friend bool operator!=(const MyCourse & s, const MyCourse & s1);
    friend bool operator>(const MyCourse & s, const MyCourse & s1);
    friend bool operator<(const MyCourse & s, const MyCourse & s1);
    friend bool operator>=(const MyCourse & s, const MyCourse & s1);
    friend bool operator<=(const MyCourse & s, const MyCourse & s1);
    friend bool operator==(const MyCourse & s, const char * str);
}; 

MyCourse::MyCourse()
{
    surname = new char[1];
    surname[0] = '\0';
    name = new char[1];
    name[0] = '\0';
    patronomic = new char[1];
    patronomic[0] = '\0';
    year = 0;
    grade = 0;
    group = new char[1];
    group[0] = '\0';
}

MyCourse::~MyCourse()
{
    delete [] surname;
    delete [] name;
    delete [] patronomic;
    delete [] group;
}

void MyCourse::print()
{
    cout<<"Informacia o MyCoursee: \n";
    cout<<"Familiya: "<<surname<<"\n";
    cout<<"Imya: "<<name<<"\n";
    cout<<"Ot4estvo: "<<patronomic<<"\n";
    cout<<"Rodilsya v "<<year<<" godu\n";
    cout<<"Poluchil "<<grade<<" gradeov\n\n";
}

MyCourse::MyCourse(const MyCourse & s)
{
    surname = new char[strlen(s.surname) + 1];
    strcpy(surname,s.surname);
    name = new char[strlen(s.name) + 1];
    strcpy(name,s.name);
    patronomic = new char[strlen(s.patronomic) + 1];
    strcpy(patronomic,s.patronomic);
    year = s.year;
    grade = s.grade;
    group = new char[strlen(s.group) + 1];
    strcpy(group,s.group);
}

MyCourse & MyCourse::operator=(const MyCourse & s)
{
    if (this == &s) return *this;
    delete [] surname;
    delete [] name;
    delete [] patronomic;
    delete [] group;

    surname = new char[strlen(s.surname) + 1];
    strcpy(surname,s.surname);
    name = new char[strlen(s.name) + 1];
    strcpy(name,s.name);
    patronomic = new char[strlen(s.patronomic) + 1];
    strcpy(patronomic,s.patronomic);
    year = s.year;
    grade = s.grade;
    group = new char[strlen(s.group) + 1];
    strcpy(group,s.group);
   
    return *this;
}

bool operator==(const MyCourse & s, const MyCourse & s1)
{
  if (strcmp(s.surname,s1.surname) == 0)
      return true;
  else
      return false;
}

bool operator==(const MyCourse & s, const char * str)
{
    if (strcmp(s.surname,str) == 0)
        return true;
    else
        return false;
}

bool operator!=(const MyCourse & s, const MyCourse & s1)
{
    if (strcmp(s.surname,s1.surname) != 0)
        return true;
    else
        return false;
}

bool operator>(const MyCourse & s, const MyCourse & s1)
{
    if (strcmp(s.surname,s1.surname) > 0)
        return true;
    else
        return false;
}

bool operator<(const MyCourse & s, const MyCourse & s1)
{
    if (strcmp(s.surname,s1.surname) < 0)
        return true;
    else
        return false;
}

bool operator>=(const MyCourse & s, const MyCourse & s1)
{
    if (strcmp(s.surname,s1.surname) >= 0)
        return true;
    else
        return false;
}

bool operator<=(const MyCourse & s, const MyCourse & s1)
{
    if (strcmp(s.surname,s1.surname) <= 0 )
        return true;
    else
        return false;
}

struct Telem
{
    MyCourse inf;
    Telem *sled;
    Telem *pred;
};

class Spisok
{
private:
    Telem *nsp,*ksp;
public:
    Spisok() {nsp=ksp=NULL;}
    void Postroenie ();
    void InsElem();
    void PrintElem(char *);
    void DeleteAll();
    void PrintAll();
    void Sortirovka();
    Telem *Poisk(MyCourse & );
};
void Spisok::Postroenie()
{
    int i=0;
    int b;
    char str[80];
    Telem *rsp;
   

    nsp = new(Telem);
    rsp = nsp;
    (*nsp).pred = NULL;
    (*nsp).sled = NULL;
    cout<<"Vvodite spisok MyCourseov: \n";

    for(i=0;i<50;i++)
    {
        (*rsp).sled = new(Telem);
        (*((*rsp).sled)).pred = rsp;
        rsp = (*rsp).sled;
        (*rsp).sled = NULL;

        cout<<"First name: ";
        cin>>str;
   
        (*rsp).inf.name = new char[strlen(str)+1];
        strcpy((*rsp).inf.name,str);
        cout<<"Second name: ";
        cin>>str;
   
        (*rsp).inf.patronomic = new char[strlen(str)+1];
        strcpy((*rsp).inf.patronomic,str);
        cout<<"Last name: ";
        cin>>str;
       
        (*rsp).inf.surname = new char[strlen(str)+1];
        strcpy((*rsp).inf.surname,str);
        cout<<"Group: ";
        cin>>str;
       
        (*rsp).inf.group = new char[strlen(str)+1];
        strcpy((*rsp).inf.group,str);
        cout<<"Gradel: ";
        cin>>b;
       
        (*rsp).inf.grade = b;
        cout<<"Year: ";
        cin>>b;
       
        (*rsp).inf.year = b;
       
        cout<<"Vse (Y or N)\n";
        cin>>str;
        if (str[0]=='Y') break;
    }
    ksp = rsp;
}
void Spisok::InsElem()
{
    //Telem *ksp;
    int b;
    char str[80];

    (*ksp).sled = new(Telem);
    (*((*ksp).sled)).pred = ksp;
    ksp = (*ksp).sled;
    (*ksp).sled = NULL;

    cout<<"First name: ";
    cin>>str;
    (*ksp).inf.name = new char[strlen(str)+1];
    strcpy((*ksp).inf.name,str);
    cout<<"Second name: ";
    cin>>str;
    (*ksp).inf.patronomic = new char[strlen(str)+1];
    strcpy((*ksp).inf.patronomic,str);
    cout<<"Last name: ";
    cin>>str;
    (*ksp).inf.surname = new char[strlen(str)+1];
    strcpy((*ksp).inf.surname,str);
    cout<<"Group: ";
    cin>>str;
    (*ksp).inf.group = new char[strlen(str)+1];
    strcpy((*ksp).inf.group,str);
    cout<<"Gradel: ";
    cin>>b;
    (*ksp).inf.grade = b;
    cout<<"Year: ";
    cin>>b;
    (*ksp).inf.year = b;
}

Telem *Spisok::Poisk(MyCourse & el)
{
    Telem *q;
    Telem *Res;
   
    Res = NULL;
    q = (*nsp).sled;

    while  (q!=NULL && Res==NULL)
    {
    if (el == (*q).inf) Res = q;
    else  q = (*q).sled;
    }
    return Res;
}

void Spisok::PrintElem(char * st)
{
    Telem *q;
   
    q = (*nsp).sled;

    while  (q!=NULL)
    {
    if  ((*q).inf == st)
        {
            (*q).inf.print();
            q = (*q).sled;
        }
        else q = (*q).sled;
    }  
}
void Spisok::DeleteAll()
{

 Telem *q,*q1;

  q  = nsp; q1 = (*q).sled;
  while  (q1!=NULL)
  {
    q = q1; q1 = (*q1).sled; delete q;
  }
  delete nsp; nsp = ksp = NULL;

}
void Spisok::PrintAll()
{

    Telem *q;

    q = (*nsp).sled;
    cout<<"Spisok sodergit takie elementi\n";
    while  (q!=NULL)
    {  
            (*q).inf.print();
            q = (*q).sled;
    }
}
void Spisok::Sortirovka()
{
    Telem *q;
    Telem *rezerv;
    Telem *q1;
    int n,i;
    bool end;
   
    n=0;
    i=0;
    end = false;
    while (n==0)
    {
        q = (*nsp).sled;
   
        while  (q!=NULL)
        {
            i++;
            if ((*q).sled != 0)
            {
                if ((*q).inf>(*((*q).sled)).inf)
                {
                    q1 = (*q).sled;
                    end = true;
                    rezerv = new(Telem);
               
                    (*rezerv).inf = (*((*q).sled)).inf;
                    (*rezerv).sled = q;
                    (*rezerv).pred = (*q).pred;
                    (*((*q).pred)).sled = rezerv;
                    (*q).pred = rezerv;
                    (*q).sled = (*((*q).sled)).sled;

                    delete q1;
                    if ((*q).sled != NULL)
                    {
                    (*((*q).sled)).pred = q;
                    }
                }
            }
            if (end == true)
            {
                end = false;
                break;
            }
            q = (*q).sled;     
        }  
        if(q==NULL) n=1;
    }
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог