Форум программистов, компьютерный форум CyberForum.ru

ООП и все такое - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 15:24     ООП и все такое #1
Собственно сама задача:
Необходимо описать класс "Студенческая группа". Предусмотреть возможность работы с переменным числом студентов, поиском студентов по фамилии или номеру телефона и вывод списка студентов.

Я начал решать с того что создал класс "Студент". Но так как нужно описать класс "Студ. Группа", я немного заступорился и не знаю что сделать. Есть идея создать еще один класс, и в него запихнуть класс "Студент" и методы работы с очередью, только сделать это труднее чем сказать=)

Нужна помощь с решением данной задачи.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 15:24     ООП и все такое
Посмотрите здесь:

Что такое ООП. C++
ООП C++
C++ по ООП .
C++ ООП
C++ ООП
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 15:57     ООП и все такое #2
примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Student {
//...  
};
 
class AcademicGroup {
public:
    AcademicGroup(unsigned amount_of_students = 0)
    {
        students = amount_of_students;
        student = new Student [amount_of_students]();
    }
 
    ~AcademicGroup()
    {
        delete [] student;
    }
private:
    Student* student;
    unsigned students;
};
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:19  [ТС]     ООП и все такое #3
Большое спасибо, но немогли бы вы пояснить эту строку?
Цитата Сообщение от Jupiter Посмотреть сообщение
student = new Student [amount_of_students]();
Я так понимаю она выделяет память для какого-то количества обьектов, как тогда получить доступ к конкретному?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
10.09.2011, 16:31     ООП и все такое #4
Цитата Сообщение от stark91 Посмотреть сообщение
как тогда получить доступ к конкретному?
C++
1
student = new Student [amount_of_students]();//динамический массив объектов типа Student
C++
1
for(int i=0; i!=amount_of_students; ++i) function(student[i]);
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:58  [ТС]     ООП и все такое #5
А вот допустим я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов, то как тут быть? только очередью реализовать?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:08     ООП и все такое #6
C++
1
2
3
4
5
6
7
student = new Student [10]();
Student* tmp = new Student [20]();
for (int i = 0; i < 10; ++i)
    tmp[i] = student[i];
delete [] student;
student = tmp;
//дальше работаем со student
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
10.09.2011, 17:17     ООП и все такое #7
Цитата Сообщение от stark91 Посмотреть сообщение
я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов
я бы тоже хотел это узнать. в Си есть для этого
C
1
realloc()
а как это сделать средствами плюсов...
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.09.2011, 17:18     ООП и все такое #8
Цитата Сообщение от alkagolik Посмотреть сообщение
а как это сделать средствами плюсов...
vector.resize()
TheAthlete
 Аватар для TheAthlete
151 / 151 / 12
Регистрация: 31.08.2010
Сообщений: 529
10.09.2011, 17:19     ООП и все такое #9
на мой вгляд лучше всего реализовать следующим образом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <vector>
class Student {
//...  
};
 
int main() {
  std::vector<Student> AcademicGroup;
  Student stud1; // здесь еще добавляем нужные данные в объект класса Student
  Student stud2; // здесь еще добавляем нужные данные в объект класса Student
  AcademicGroup.push_back(stud1);
  AcademicGroup.push_back(stud2);
}
для доступа к вектору можно использовать индексирование, т.е.
для доступа к stud1 нужно набрать AcademicGroup[0],
для доступа к stud2 нужно набрать AcademicGroup[1]
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
10.09.2011, 17:26     ООП и все такое #10
Цитата Сообщение от diagon Посмотреть сообщение
vector.resize()
а минуя vector и вообще контейнеры?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:31     ООП и все такое #11
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
в С++ нет аналога Си-шного realloc
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
23.09.2011, 17:20  [ТС]     ООП и все такое #12
написал код, не скомпилировать, не знаю в чем ошибка.
Компилировал на VS10.
Помогите пожалуйста.

вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#include <iostream>
#include <conio.h>
#define and &&
#define or ||
#define name_length 20
//#define mobile_length 11
using namespace std;
 
//____________________GLOBAL DATA___________________|
 
//Class Student
class STUDENT
{
private:
    char chFirstName[name_length];
    char chLastName[name_length];
    char chMobileNumber[mobile_length];
public:
    STUDENT();
    STUDENT *p;
    void vPrintStudent();
    bool bCompare(char str[name_length]);
//  bool bCompare(int num[mobile_length]);
    void vSetStudent(/*char FirstName[name_length], char LastName[name_length], int MobileNumber[mobile_length]*/);
    ~STUDENT();
};
 
//class Group
class GROUP
{
private:
    int iStudentNumber; //Number of Students in a group
    STUDENT *pHead;
    STUDENT *pTail; 
public:
    GROUP();
    void vSearchStudent(bool select); //Search student [1-via Last name] [0-via Phone number]
    void vPrintList(); //Print list of students
    void vAddStudent(); //Add new student
    void vRemoveStudent(); //Delete Student
    ~GROUP();
};
 
//Objects
STUDENT student;
GROUP group;
 
 
//_____________________FUNCTIONS_____________________|
 
//Work program
void Work();
 
//Print operations
void PrintOperations();
 
 
 
 
 
 
 
 
//_______________________MAIN________________________|
 
int main()
{
    Work();
    return 0;
}
 
 
 
 
 
 
//_________________FUNCTION DEFINE___________________|
 
void Work()
{
    char choice;
 
//  GROUP();
    do
    {
        system("cls");
        PrintOperations();
        cin >> choice;
        
        switch (choice)
        {
            case '1': group.vAddStudent(); break;
            case '2': group.vSearchStudent(1); break;
            case '3': group.vSearchStudent(0); break;
            case '4': group.vPrintList(); break;
        }
    }
    while (choice != '5');
//  group.~GROUP();
}
 
 
void PrintOperations()
{
    system("cls");
    cout << "Chose the operation:\n";
    cout << "1. Add student\n";
    cout << "2. Find student(via phone number)\n";
    cout << "3. Find student(via Last name)\n";
    cout << "4. Print group\n";
    cout << "5. Exit\n";
}
 
 
GROUP::GROUP()
{
    cout << "Enter the student data for list formation:\n";
    STUDENT *pv = new STUDENT;
    pv->vSetStudent();  //3aMEHa need
    pv->p = NULL;
    pHead = pTail = pv;
}
 
void GROUP::vAddStudent() //re-define
{
    system("cls");
    STUDENT *pv = new STUDENT;
    pv->vSetStudent();
    pv->p = NULL;
    pTail->p = pv;
    pTail = pv;
}
 
void GROUP::vPrintList()
{
    system("cls");
    cout << "Group list\n";
    STUDENT *pv = pHead;
    pv->vPrintStudent();
    while (pv->p!=NULL)
    {
        pv = pv->p;
        pv->vPrintStudent();
    }
    getch();
}
 
void GROUP::vSearchStudent(bool select)
{
    char number[name_length];
    char name[name_length];
    
    system("cls");
    STUDENT *pv = pHead;
    if (select)
    {
        cout <<"Enter the Last name of Student:";
        cin >> name;
        if (pv->bCompare(name)) pv->vPrintStudent();
        while (pv->p!=NULL)
        {
            pv = pv->p;
            if (pv->bCompare(name)) pv->vPrintStudent();
        }
    }
    else
    {
        cout << "Enter the phone number of Student";
        cin >> number[mobile_length];
        if (pv->bCompare(number)) pv->vPrintStudent();
        while (pv->p!=NULL)
        {
            pv = pv->p;
            if (pv->bCompare(number)) pv->vPrintStudent();
        }
    }
    system("cls");
    cout << "results:\n";
}
 
void STUDENT::vPrintStudent()
{
    cout << chFirstName[name_length] <<"  ";
    cout << chLastName[name_length] << "  ";
    cout << chMobileNumber[mobile_length] << "\n";
}
 
void STUDENT::vSetStudent()
{
    system("cls");
 
    cout << "\nEnter name of student:";
    cin >> chFirstName;
 
    cout << "\nEnter last Name of Student";
    cin >> chLastName;
 
    cout << "\nEnter mobile number of student";
    cin >> chMobileNumber;
}
 
bool STUDENT::bCompare(char str[name_length])
{
    if (!strcmp(str,chFirstName)) 
        return 1;
    else 
        return 0;
}
 
GROUP::~GROUP()
{
    STUDENT *temp = pHead;
    while (pHead->p!=NULL)
    {
            pHead = pHead->p;
            delete temp;
            temp = pHead;
    }
    cout << "\nThe memory is free";
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.09.2011, 17:26     ООП и все такое #13
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
Так они (контейнеры) как-раз для таких случаев и созданы, зачем велосипеды-то изобретать?

Цитата Сообщение от stark91 Посмотреть сообщение
Я начал решать с того что создал класс "Студент". Но так как нужно описать класс "Студ. Группа", я немного заступорился и не знаю что сделать.
Ну начало правильное. Следующим шагом создать класс "группа" на основе стандартного контейнера (того же vector к примеру), который и будет содержать некоторый набор объектов класса "студент" ну и сортировать/изменять/печатать их по мере надобности...
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
23.09.2011, 20:08  [ТС]     ООП и все такое #14
Так как я с контейнерами еще не знаком, то я выполнил без них.

Добавлено через 2 часа 36 минут
Не у кого нету идей почему не копилится? помогите пожалуйста) хочется побыстрей разобраться с этой лабой
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.09.2011, 20:13     ООП и все такое #15
stark91, может лог ошибок покажешь? взрослый парень, а в телепатов веришь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2011, 19:12     ООП и все такое
Еще ссылки по теме:

C++ OOP (все принципы ООП и основные отношения между классами)
Переставить элементы массива так, чтобы сначала располагались все нули, затем все двойки и, наконец, все единицы C++
C++ Нормальная девиация и все такое

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
stark91
1 / 1 / 0
Регистрация: 07.05.2010
Сообщений: 55
24.09.2011, 19:12  [ТС]     ООП и все такое #16
=)
вот лог:

1>------ Построение начато: проект: oop_lab1, Конфигурация: Debug Win32 ------
1>Построение начато 24.09.2011 12:52:17.
1>InitializeBuildStatus:
1> Обращение к "Debug\oop_lab1.unsuccessfulbuild".
1>ClCompile:
1> Для всех выходных данных обновления не требуется.
1>ManifestResourceCompile:
1> Для всех выходных данных обновления не требуется.
1>oop_lab1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall STUDENT::STUDENT(void)" (??0STUDENT@@QAE@XZ) в функции "public: __thiscall GROUP::GROUP(void)" (??0GROUP@@QAE@XZ)
1>oop_lab1.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall STUDENT::~STUDENT(void)" (??1STUDENT@@QAE@XZ) в функции "public: void * __thiscall STUDENT::`scalar deleting destructor'(unsigned int)" (??_GSTUDENT@@QAEPAXI@Z)
1>C:\Users\Stark\documents\visual studio 2010\Projects\oop_lab1\Debug\oop_lab1.exe : fatal error LNK1120: 2 неразрешенных внешних элементов
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.48
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Добавлено через 6 часов 18 минут
Вообщем я нашел что надо убрать что бы запустить компиляцию и запуск программы, но после запуска идет выполнение функции, которая не должна выполняться первой.

Вот каким получился код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#include <iostream>
#include <conio.h>
#define and &&
#define or ||
#define name_length 20
using namespace std;
 
//____________________GLOBAL DATA___________________|
 
//Class Student
class STUDENT
{
private:
    char chFirstName[name_length];
    char chLastName[name_length];
    char chMobileNumber[mobile_length];
public:
    STUDENT *p;
    void vPrintStudent();
    bool bCompare(char str[name_length]);
//  bool bCompare(int num[mobile_length]);
    void vSetStudent(/*char FirstName[name_length], char LastName[name_length], int MobileNumber[mobile_length]*/);
};
 
//class Group
class GROUP
{
private:
    int iStudentNumber; //Number of Students in a group
    STUDENT *pHead;
    STUDENT *pTail; 
public:
    GROUP();
    void vSearchStudent(bool select); //Search student [1-via Last name] [0-via Phone number]
    void vPrintList(); //Print list of students
    void vAddStudent(); //Add new student
    void vRemoveStudent(); //Delete Student
    ~GROUP();
};
 
//Objects
STUDENT student;
GROUP group;
 
 
//_____________________FUNCTIONS_____________________|
 
//Work program
void Work();
 
//Print operations
void PrintOperations();
 
 
 
 
 
 
 
 
//_______________________MAIN________________________|
 
int main()
{
    Work();
    return 0;
}
 
 
 
 
 
 
//_________________FUNCTION DEFINE___________________|
 
void Work()
{
    char choice;
 
    do
    {
        PrintOperations();
        cin >> choice;
        
        switch (choice)
        {
            case '1': group.vAddStudent(); break;
            case '2': group.vSearchStudent(1); break;
            case '3': group.vSearchStudent(0); break;
            case '4': group.vPrintList(); break;
        }
    }
    while (choice != '5');
}
 
 
void PrintOperations()
{
    system("cls");
    cout << "Chose the operation:\n";
    cout << "1. Add student\n";
    cout << "2. Find student(via phone number)\n";
    cout << "3. Find student(via Last name)\n";
    cout << "4. Print group\n";
    cout << "5. Exit\n";
}
 
 
GROUP::GROUP()
{
    cout << "Enter the student data for list formation:\n";
    STUDENT *pv = new STUDENT;
    pv->vSetStudent();
    pv->p = NULL;
    pHead = pTail = pv;
}
 
void GROUP::vAddStudent() 
{
    system("cls");
    STUDENT *pv = new STUDENT;
    pv->vSetStudent();
    pv->p = NULL;
    pTail->p = pv;
    pTail = pv;
}
 
void GROUP::vPrintList()
{
    system("cls");
    cout << "Group list\n";
    STUDENT *pv = pHead;
    pv->vPrintStudent();
    while (pv->p!=NULL)
    {
        pv = pv->p;
        pv->vPrintStudent();
    }
    getch();
}
 
void GROUP::vSearchStudent(bool select)
{
    char number[name_length];
    char name[name_length];
    
    system("cls");
    STUDENT *pv = pHead;
    if (select)
    {
        cout <<"Enter the Last name of Student:";
        cin >> name;
        if (pv->bCompare(name)) pv->vPrintStudent();
        while (pv->p!=NULL)
        {
            pv = pv->p;
            if (pv->bCompare(name)) pv->vPrintStudent();
        }
    }
    else
    {
        cout << "Enter the phone number of Student";
        cin >> number[mobile_length];
        if (pv->bCompare(number)) pv->vPrintStudent();
        while (pv->p!=NULL)
        {
            pv = pv->p;
            if (pv->bCompare(number)) pv->vPrintStudent();
        }
    }
    system("cls");
    cout << "results:\n";
}
 
void STUDENT::vPrintStudent()
{
    cout << chFirstName[name_length] <<"  ";
    cout << chLastName[name_length] << "  ";
    cout << chMobileNumber[mobile_length] << "\n";
}
 
void STUDENT::vSetStudent()
{
    system("cls");
 
    cout << "\nEnter name of student:";
    cin >> chFirstName;
 
    cout << "\nEnter last Name of Student";
    cin >> chLastName;
 
    cout << "\nEnter mobile number of student";
    cin >> chMobileNumber;
}
 
bool STUDENT::bCompare(char str[name_length])
{
    if (!strcmp(str,chFirstName)) 
        return 1;
    else 
        return 0;
}
 
GROUP::~GROUP()
{
    STUDENT *temp = pHead;
    while (pHead->p!=NULL)
    {
            pHead = pHead->p;
            delete temp;
            temp = pHead;
    }
    cout << "\nThe memory is free";
}
Вместо PrintOperations();
выполняется vAddStudent();
непонятно почему...
Yandex
Объявления
24.09.2011, 19:12     ООП и все такое
Ответ Создать тему
Опции темы

Текущее время: 00:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru