Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 1
Регистрация: 07.05.2010
Сообщений: 55
1

ООП и все такое

10.09.2011, 15:24. Показов 1990. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно сама задача:
Необходимо описать класс "Студенческая группа". Предусмотреть возможность работы с переменным числом студентов, поиском студентов по фамилии или номеру телефона и вывод списка студентов.

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

Нужна помощь с решением данной задачи.
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2011, 15:24
Ответы с готовыми решениями:

Что такое ООП.
"Объе́ктно-ориенти́рованное программи́рование (ООП) — парадигма программирования, в которой...

Что такое ООП?Зачем?Почему?Где?
Ув. программисты,я немало наслышан о важности знания ООП.О том что с ним легче программировать и...

Что такое разрешение монитора, рабочего стола и изображения, HD, Full HD и всё такое
Вопрос такой начал истекать из того, что заметил я: Ставишь разрешение 1920x1080 (Full HD) а размер...

Начинаю изучать ООП. Объясните, что такое интерфейс?
Всем привет. Начинаю изучать ООП. Объясните,что такое интерфейс?для чего он нужен и чем он...

15
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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;
};
1
1 / 1 / 1
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:19  [ТС] 3
Большое спасибо, но немогли бы вы пояснить эту строку?
Цитата Сообщение от Jupiter Посмотреть сообщение
student = new Student [amount_of_students]();
Я так понимаю она выделяет память для какого-то количества обьектов, как тогда получить доступ к конкретному?
0
Заблокирован
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]);
1
1 / 1 / 1
Регистрация: 07.05.2010
Сообщений: 55
10.09.2011, 16:58  [ТС] 5
А вот допустим я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов, то как тут быть? только очередью реализовать?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
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
0
Заблокирован
10.09.2011, 17:17 7
Цитата Сообщение от stark91 Посмотреть сообщение
я создал динамический массив на 10 элементов, заполнил их, и нужно добавить еще несколько элементов
я бы тоже хотел это узнать. в Си есть для этого
C
1
realloc()
а как это сделать средствами плюсов...
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
10.09.2011, 17:18 8
Цитата Сообщение от alkagolik Посмотреть сообщение
а как это сделать средствами плюсов...
vector.resize()
0
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 573
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]
0
Заблокирован
10.09.2011, 17:26 10
Цитата Сообщение от diagon Посмотреть сообщение
vector.resize()
а минуя vector и вообще контейнеры?
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
10.09.2011, 17:31 11
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
в С++ нет аналога Си-шного realloc
0
1 / 1 / 1
Регистрация: 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";
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
23.09.2011, 17:26 13
Цитата Сообщение от alkagolik Посмотреть сообщение
а минуя vector и вообще контейнеры?
Так они (контейнеры) как-раз для таких случаев и созданы, зачем велосипеды-то изобретать?

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

Добавлено через 2 часа 36 минут
Не у кого нету идей почему не копилится? помогите пожалуйста) хочется побыстрей разобраться с этой лабой
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
23.09.2011, 20:13 15
stark91, может лог ошибок покажешь? взрослый парень, а в телепатов веришь
0
1 / 1 / 1
Регистрация: 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();
непонятно почему...
0
24.09.2011, 19:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2011, 19:12
Помогаю со студенческими работами здесь

Почему солнце круглое, а небо зеленое. Почему ооп такое странное?
Учил я пхп. Самоучитель PHP 5/6 и сайт метанит. И все было хорошо. Чтобы закрепить основы решил...

Что такое "глубокие знания ООП"?
В вакансиях на работу часто вижу требование типа &quot;глубокие познания в области ООП&quot;. А что это...

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

Можно ли написать программу соблюдая все принципы ООП
Накипело... Вопрос наверно философский =)) Хочу спросить у бывалых... Все ли Ваши программы...

OOP (все принципы ООП и основные отношения между классами)
Здравствуйте, помогите пожалуйста. Стоит задача показать все принципы ООП и основные отношения...

сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять?
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru