#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;
}
}
Закомментировать
Описать класс для реализации работы с динамической структурой данных, которая хранит список студентов группы. Класс должен содержать следующие, доступные пользователю интерфейсы:
- добавить элемент в используемую динамическую структуру данных;
- удалить элемент из используемой динамической структуры данных;
- найти элемент в используемой динамической структуре данных;
- распечатать полную информацию о найденном элементе;
- удалить все элементы из используемой динамической структуры данных;
- распечатать полную информацию обо всех элементах используемой динамической структурой данных;
- отсортировать элементы в используемой динамической структуре данных .
Класс должен содержать указатель(и), необходимые для работы с используемой динамической структурой данных, который(е) не должны быть доступны пользователю.
Элемент, как правило, определяется (задается) своей информационной частью (полезной информационной нагрузкой). При работе этот класс не должен предоставлять пользователю доступ к элементу используемой динамической структуры данных. Пользователь может получить только копию информационной части элемента списка или указатель на нее.
Информационная часть, в свою очередь, представляется в виде структуры, которая хранит следующую информацию для каждого студента:
- фамилия;
- имя;
- отчество;
- год рождения:
- средний балл;
- учебная группа;
Все строковые данные представляются через указатели.
Код: