Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2015, 19:50   #1
Namikan
 
Регистрация: 13.10.2014
Сообщений: 8
По умолчанию Односвязный список

Ребят , помогите доделать лабу , пожалуйста. Вот такое задание :

Создать динамический класс 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");
}
Тщательно все закоменченно , надеюсь понятно. Конкретная проблема : не могу сделать добавление группы. Буду очень признателен за помощь.
Namikan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязный список Indoles Паскаль, Turbo Pascal, PascalABC.NET 5 14.10.2012 15:08
Создать односвязный список и вывести его на экран. Из этого списка создать новый список по указанному ниже правилу и новый список San111 Паскаль, Turbo Pascal, PascalABC.NET 1 15.05.2012 22:08
Необходимо реализовать классы, односвязный список для хранения целых чисел, односвязный список для хранен lineico Помощь студентам 2 09.05.2011 17:45
односвязный список melkaya19 Помощь студентам 5 21.06.2010 12:36
C++. Односвязный список. Уничтожить список Olya90 Помощь студентам 2 10.06.2009 18:52