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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
#1

Добавление данных в массив объектов - C++

28.05.2012, 15:45. Просмотров 774. Ответов 14
Метки нет (Все метки)

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
void main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
    int kol;
    Group *gr=new Group[10];
    int n=0;
    
    
   do
   {
    cout<<" 1-создать список студентов \n 2-показать список \n 3-добавить студента \n 0-выход\n";
    cin>>n;
    switch(n)
    {
    case 1:
    cout<<"Введите количество студентов в группе:\n";
           cin>>kol;
 
            for(int i=0;i<kol;i++)
                {
                 gr[i].Info();
                gr[i].Info_gr ();
                }
            
            break;
 
    case 2:
        for(int i=0;i<kol;i++)
        {
        cout<<"Студент N"<<i+1<<"\n";
        gr[i].show();
        gr[i].Show_gr();
        }
        break;
    case 3:
        int dob;
        cout<<"Введите количество студентов которое необходимо добавить "<<endl;
        cin>>dob;
        for (int i=kol;i<kol+dob;i++)
        {  
                gr[i].Info();
                gr[i].Info_gr ();
        }
 
    }
    }
    while(n!=0);
}
Проблема в том, что при добавлении новых объектов (case 3) все вроде как добавляется, но при показе (case 2) показываются только те объекты, которые были созданы ранее
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 15:45     Добавление данных в массив объектов
Посмотрите здесь:
C++ Добавление нового элемента в массив объектов C++
Добавление данных в двумерный массив из файла C++
Как запретить добавление данных в массив при повторении? С++ C++
C++ Добавление объектов в вектор
C++ Добавление и удаление объектов с перегрузкой операторов '+' и '-'
Написать класс Матрица. Массив объектов класса Массив C++
C++ Организовать добавление данных в файл, просмотр, поиск и очистку данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
28.05.2012, 15:50     Добавление данных в массив объектов #2
Для ответа требуется знать интерфейс структуры и реализацию этих методов:
C
1
2
gr[i].Info();
gr[i].Info_gr ();
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
28.05.2012, 18:35  [ТС]     Добавление данных в массив объектов #3
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
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include<stdio.h>
#include<windows.h>
using namespace std;
struct  date
{
    int day;
    char month [10];
    int  year;
};
class Student
{
    private:
    char *fam;
    char *name;
    int contact;
    date br;
    public:
    Student()
    {
        fam=new char[20];
        name=new char[20];
        date br1={1,"Января",1980};
        contact=0;
    }
    
void Info ()
{
    cout<<"Введите фамилию:\n";
    cin>>fam;
    cout<<"Введите имя:\n";
    cin>>name;
    cout<<"Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:\n";
    cin>>br.day;
    cin>>br.month;
    cin>>br.year;
    cout<<"Введите номер телефона:\n";
    cin>>contact;
}
 
void show ()
{
    cout<<"фамилия:\t"<<fam<<endl;
    cout<<"имя:\t\t"<<name<<endl;
    cout<<"дата рождения:\t"<<br.day<<"/"<<br.month<<"/"<<br.year<<endl;
    cout<<"телефон:\t"<<contact<<endl;
}
~Student()
    {
        delete[]fam;
        delete[]name;
    }
};
class Group: public Student
{
private:
 char* Name;
 char* Specializ;
 Student st[30];
public:
 Group()
    {
       
        Name=new char[25];
        Specializ=new char[25];
    }
 
  void Info_gr ()
{
    cout<<"Введите имя группы:\n";
    cin>>Name;
    cout<<"Введите специальность:\n";
    cin>>Specializ;
}
 
void Show_gr ()
{
    cout<<"имя группы::\t"<<Name<<endl;
    cout<<"специальность:\t"<<Specializ<<endl;
}
~Group()
    {
        delete[]Name;
        delete[]Specializ;
    }
};
Добавлено через 40 минут
добавил класс

Добавлено через 45 минут
up////

Добавлено через 1 час 16 минут
неужто никто не знает в чем трабла?

попробовал case 3 переделать в

case 3:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    
        int TEMP;
        Group *temp=new Group[10];
        for (int i=0;i<kol;i++)
        {
        temp[i]=gr[i];
         TEMP=i;
        }
        temp[TEMP+1].Info();
        temp[TEMP+1].Info_gr();
        delete[] gr;
 
        Group *gr=new Group[10];
 
        for(int i=0;i<kol;i++)
         gr[i]=temp[i];
        
        delete[] temp;
Но тогда после добавления вылетает окно с ошибкой
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
29.05.2012, 07:03     Добавление данных в массив объектов #4
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
#include <iostream>
#include <clocale>
#include <string>
#include <vector>
#include <wincon.h>
 
using namespace std;
 
struct date {
    short day;
    string month;
    short year;
};
 
class Student {
    string surname, name;
    int contact;
    date br;
public:
    Student(): br( { 1, "Января", 1980 } ) {
        contact = 0;
    }
 
    void Scan() {
        cout << "Введите фамилию:\n";
        cin >> surname;
        cout << "Введите имя:\n";
        cin >> name;
        cout << "Введите дату в формате \"00{ENTER}/месяц{ENTER}/0000\":\n";
        cin >> br.day >> br.month >> br.year;
        cout << "Введите номер телефона:\n";
        cin >> contact;
    }
 
    void Print() const {
        cout << "Фамилия:\t" << surname << "\nИмя:\t\t" << name << "\nДата рождения:\t"
            << br.day << '/' << br.month << '/' << br.year << "\nТелефон:\t" << contact << endl;
    }
};
 
class Group {
    string name, special;
    vector<Student*> st;
public:
    void Scan() {
        cout << "Введите название группы:\n";
        cin >> name;
        cout << "Введите специальность:\n";
        cin >> special;
    }
 
    void Print() const {
        cout << "Название группы:\t" << name << "\nСпециальность:\t" << special << "\n\n";
        for (unsigned short i = 0; i < st.size(); i++) {
            cout << "Студент №" << i << endl;
            st[i]->Print();
            cout << endl;
        }
    }
 
    void Add(Student* s) {
        st.push_back(s);
    }
 
    int Remove(const Student* s) {
        return st.erase(s);
    }
 
    void Clear() {
        st.clear();
    }
};
 
 
int main() {
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    Group g;
    vector<Student*> allStudents;
    cout << " 1 - создать список студентов\n"
        " 2 - показать список\n 3 - добавить студента\n 0-выход\n\n";
    short i;
    char n;
    while ((n = cin.get()) != '0')
        switch (n) {
            case 1:
                g.Clear();
                g.Scan();
            case 3:
                cout << "Введите количество студентов, которых необходимо добавить:\n";
                cin >> i;
                while (i--) {
                    allStudents.push_back(new Student);
                    allStudents[allStudents.size() - 1]->Scan();
                    g.Add(allStudents[allStudents.size() - 1]);
                }
                break;
 
            case 2:
                g.Print();
        }
    for (i = 0; i < allStudents.size(); i++)
        delete allStudents[i];
}
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 09:43  [ТС]     Добавление данных в массив объектов #5
спасибо...но я как бы не совсем вкурсе о векторах и не понимаю код. Так же не пойму что есть
st.size()
st.push_back(s);
st.erase(s);
st.clear();
и для чего служат три последних метода. в которых используются эти функции
alex_bojik
Заблокирован
29.05.2012, 09:48     Добавление данных в массив объектов #6
Если не ошибаюсь, при добавлении переменная kol не увеличивается и цикл вывода просто не доходит до новых введенных строк
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 10:00  [ТС]     Добавление данных в массив объектов #7
Цитата Сообщение от alex_bojik Посмотреть сообщение
Если не ошибаюсь, при добавлении переменная kol не увеличивается и цикл вывода просто не доходит до новых введенных строк
угу....case 3 у меня уже выглядит следующим образом

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
case 3:
        cout<<"Введите количество студентов которое необходимо добавить "<<endl;
        cin>>size;
        Group *temp=new Group[kol+size];
        for (int i=0;i<kol;i++)
        {
        temp[i]=gr[i];
        
        }
        for (int i=kol;i<kol+size;i++)
        {
        temp[i].Info();
        temp[i].Info_gr();
        }
        delete[] gr;
        kol=kol+size;
        cout<<"количество элементов "<<kol;
 
        Group *gr=new Group[kol];
 
        for(int i=0;i<kol;i++)
         gr[i]=temp[i];
        
        delete[] temp;
 
        break;
Но после добавления объектов окно http://s004.***********/i208/1205/a4/00be3fe2e336.jpg все равно вылетает
alex_bojik
Заблокирован
29.05.2012, 10:08     Добавление данных в массив объектов #8
Цитата Сообщение от Alt_Shift Посмотреть сообщение
Group *gr=new Group[kol];
тут заново объявляется gr... по-моему достаточно просто gr = new...
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 10:16  [ТС]     Добавление данных в массив объектов #9
Цитата Сообщение от alex_bojik Посмотреть сообщение
тут заново объявляется gr... по-моему достаточно просто gr = new...
действительно достаточно Но проблему это не решило
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,662
29.05.2012, 12:14     Добавление данных в массив объектов #10
Alt_Shift,

Вы когда создаете новый объект, вы не инструктируете компилятор о том, чтобы он увеличил счетчик объектов, поэтому отображается ровно столько, сколько объектов было изначально создано. Я дам вам ваш же код, вы все наверное поймете. Только уберите ненужные setlocale (я понаписал и где не надо просто)

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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
struct  date
{
    int day;
    char month [10];
    int  year;
};
class Student
{
    private:
    char *fam;
    char *name;
    int contact;
    date br;
    public:
    Student()
    {     
        fam=new char[20];
        name=new char[20];
        date br1={1,"Января",1980};
        contact=0;
    }
    
void Info ()
{
    cout<<"\n";
    cout<<"Введите фамилию: "; cin>>fam;
    cout<<"Введите имя: ";     cin>>name;
    cout<<"Введите дату в формате 00 (ENTER)/месяц(ENTER)/0000:\n ";
    cin>>br.day;
    cin>>br.month;
    cin>>br.year;
    cout<<"Введите номер телефона: "; cin>>contact;
}
 
void show ()
{
    setlocale(LC_ALL, "Russian");
    cout<<"фамилия:\t"<<fam<<endl;
    cout<<"имя:\t\t"<<name<<endl;
    cout<<"дата рождения:\t"<<br.day<<"/"<<br.month<<"/"<<br.year<<endl;
    cout<<"телефон:\t"<<contact<<endl;
}
~Student()
    {
        delete[]fam;
        delete[]name;
    }
};
class Group: public Student
{
private:
 char* Name;
 char* Specializ;
 Student st[30];
public:
 Group()
    {
        
        Name=new char[25];
        Specializ=new char[25];
    }
 
  void Info_gr ()
{
    setlocale(LC_ALL, "Russian");
    cout<<"Введите имя группы: ";   cin>>Name;
    cout<<"Введите специальность: ";cin>>Specializ;
}
 
void Show_gr ()
{
    cout<<"имя группы::\t"<<Name<<endl;
    cout<<"специальность:\t"<<Specializ<<endl;
}
 
~Group()
    {
        delete[]Name;
        delete[]Specializ;
    }
};
 
void main()
{
    setlocale(LC_ALL, "Russian");
 
    int kol;
    Group *gr=new Group[10];
    int n=0;
    
    
   do
   {
    cout<<" 1-создать список студентов \n 2-показать список \n 3-добавить студента \n 0-выход\n";
    cin>>n;
    switch(n)
    {
    case 1:
    cout<<"Введите количество студентов в группе: ";
           cin>>kol;
 
            for(int i=0;i<kol;i++)
                {
                 gr[i].Info();
                 gr[i].Info_gr ();
                }
            
            break;
 
    case 2:
        for(int i=0;i<kol;i++)
        {
        cout<<"Студент N"<<i+1<<"\n";
        gr[i].show();
        gr[i].Show_gr();
        }
        break;
    case 3:
        int dob; int temp=kol;  //temp - Изначальное число объектов
        cout<<"Введите количество студентов которое необходимо добавить "<<endl;
        cin>>dob; kol=kol+dob; //Вычисляете сколько объектов будет и обновляете kol
 
        for (int i=temp;i<kol;i++)  
        {  
                gr[i].Info();
                gr[i].Info_gr ();
        }
 
    }
    }
    while(n!=0);
}
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 13:09  [ТС]     Добавление данных в массив объектов #11
Цитата Сообщение от daslex Посмотреть сообщение
Alt_Shift,

Вы когда создаете новый объект....
Спасибо Все заработало.

Добавлено через 9 минут
и еще вопрос...каким образом описать case 4 для удаления объекта номер которого введен с клавиатуры?Как то так я понимаю

int del;
cin>>del;
for (int i=0;i<kol;i++)
{
if (i+1==del)

но дальше стопорюсь
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
29.05.2012, 13:14     Добавление данных в массив объектов #12
Если честно, я не совсем понимаю, зачем наследовать группу от студента.
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 14:06  [ТС]     Добавление данных в массив объектов #13
в задании указано что бы было наследование, так то оно там лишнее, согласен.

Добавлено через 19 минут
повторюсь...
каким образом описать case 4 для удаления объекта номер которого введен с клавиатуры?Как то так я понимаю

C++
1
2
3
4
5
int del;
 cin>>del;
 for (int i=0;i<kol;i++)
 {
 if (i+1==del)
но дальше стопорюсь
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,662
29.05.2012, 14:08     Добавление данных в массив объектов #14
C++
1
2
3
4
5
int kol=0;
    Group *gr=new Group[10];
    int n=0;
    int dob; int temp=kol;
    int number;
C++
1
2
3
4
5
6
7
case 4:
        cout<<"Удалить N "; cin>>number; //number - номер удаляемого объекта
        temp=kol; kol--; //как и ранее говорил, инструктируем компилятор об уменьшении объектов
        for (int i=number-1;i<temp;i++) //Отсчет массива идет с нуля, поэтому Number указан как на единицу меньше
        {
            gr[i]=gr[i+1];  //Обновление элементов      
        }
В отредактированном вам мною коде я объявлял переменные внутри case чтоб вы видели что и зачем добавляется. Но такое объявление переменных не есть хорошо. Нужно их вынести к общей группе переменных (надеюсь разберетесь).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2012, 14:31     Добавление данных в массив объектов
Еще ссылки по теме:
C++ Массив объектов
C++ С++ массив объектов
C++ массив объектов
Массив объектов C++
C++ массив объектов

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

Или воспользуйтесь поиском по форуму:
Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 14:31  [ТС]     Добавление данных в массив объектов #15
Цитата Сообщение от daslex Посмотреть сообщение
В отредактированном вам мною коде я объявлял переменные внутри case чтоб вы видели что и зачем добавляется. Но такое объявление переменных не есть хорошо. Нужно их вынести к общей группе переменных (надеюсь разберетесь).
ну это я понял сразу, как только оно начало матерится на переменную внутри case 3 при попытке ее использовать в case 4 Спасибо
Yandex
Объявления
29.05.2012, 14:31     Добавление данных в массив объектов
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru