Ребят , помогите доделать лабу , пожалуйста. Вот такое задание :
Создать динамический класс Univer , что базируется на связанном списке , где каждый элемент содержит информацию про факультеты :
название факультета , имя декана , кол-во групп на факультете , общее кол-во студентов на факультете. Класс должен иметь такие функции :
-добовление группы
-удаление группы
-подсчет всех студентов в универе
Вот мои наработки :
Код:
#include <iostream>
#include <string>
#include <stdlib.h>
#include <cstring>
using namespace std;
/*СТРУКТУРА univer*/
struct Univer{
char Name[20]; //Имя
char Name_dec[30]; //Имя декана
int count_group; //Кол-во групп
int count_stud; //Кол-во студентов
string name_group[10];
void Input(Univer &univer); //Функция ввода данных в структуру
Univer *Next; //Адрес на следующий элемент
};
class List
{
Univer *Head; //Указатель на начало списка
public:
List():Head(NULL){}; //Конструктор по умолчанию (Head=NULL)
~List();//Деструктор
void Add(Univer &univer);
void Show();
};
/*ФУНКЦИЯ ЗАПОЛНЕНИЯ ДАННЫХ ПО ФАКУЛЬТЕТУ*/
void Univer::Input(Univer &univer)
{
cout<<endl; //Небольшой разрыв при каждом новом вводе
cout<<"Name: "; cin.getline(Name,20); //Ввод имени
cout<<"Name of decan: ";cin.getline(Name_dec,30); //Ввод имени декана
cout<<"Count group ";cin>>count_group; //Ввод кол-ва групп
for (int i=0;i<count_group;i++){
cout <<"Name group["<<i<<"] : ";cin>>name_group[i];
}
cout<<"Count stud ";cin>>count_stud; //Ввод кол-ва студентов
cin.ignore(); //Игнорируем символ
}
List::~List() //Деструктор класса List
{
while (Head!=NULL) //Пока по адресу есть хоть что-то
{
Univer *temp=Head->Next; //Сразу запоминаем указатель на адрес следующего элемента структуры
delete Head; //Освобождаем память по месту начала списка
Head=temp; //Меняем адрес начала списка
}
}
/*ФУНКЦИЯ ДОБАВЛЕНИЯ НОВОЙ СТРУКТУРЫ В СПИСОК*/
void List::Add(Univer &univer) {
Univer *temp=new Univer; //Выделение памяти под новую структуру
temp->Next=Head; //Указываем, что адрес следующего элемента это начало списка
//Копирование содержимого параметра univer в только что созданную переменную
strcpy(temp->Name,univer.Name);
strcpy(temp->Name_dec,univer.Name_dec);
temp->count_group=univer.count_group;
for (int i=0;i<univer.count_group;i++)
temp->name_group[i]=univer.name_group[i];
temp->count_stud=univer.count_stud;
Head=temp; //Смена адреса начала списка
}
/*ФУНКЦИЯ КЛАССА LIST ДЛЯ ВЫВОДА СПИСКА НА ЭКРАН*/
void List::Show()
{
Univer *temp=Head; //Объявляем указатель и изначально он указывает на начало
while (temp!=NULL) //Пока по адресу на начало хоть что-то есть
{
//Выводим все элементы структуры
cout<<temp->Name<<" "; //Вывод имени
cout<<temp->Name_dec<<" "; //Вывод имени декана
cout<<temp->count_group<<" "<<endl; //Вывод кол-ва групп
for (int i=0;i<temp->count_group;i++){
cout <<"Name group["<<i<<"] : "<<temp->name_group[i]<<endl;
}
cout<<temp->count_stud<<endl; //Вывод кол-ва студентов
temp=temp->Next; //Указываем на следующий адрес из списка
}
cout<<endl;
}
int main (){
Univer univer; //Обяъвили переменную, тип которой Univer
int N; //Объявили переменную - число студентов
List lst; //Объявили переменную типа Список. Она выступает как контейнер данных
cout<<"N = ";cin>>N; //Ввели число факультетов
cin.ignore(); //Игнорируем клавишу Enter
for (int i=0;i<N;i++)
{
univer.Input(univer); //Передаем в функцию заполнения переменную univer
lst.Add(univer); //Добавляем заполненную структуру в список
}
cout<<endl;
lst.Show(); //Показываем список на экране
system("PAUSE");
}
Тщательно все закоменченно , надеюсь понятно. Конкретная проблема : не могу сделать добавление группы. Буду очень признателен за помощь.