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

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

Восстановить пароль Регистрация
 
Alt_Shift
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
28.05.2012, 15:45     Добавление данных в массив объектов #1
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) показываются только те объекты, которые были созданы ранее
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
28.05.2012, 15:50     Добавление данных в массив объектов #2
Для ответа требуется знать интерфейс структуры и реализацию этих методов:
C
1
2
gr[i].Info();
gr[i].Info_gr ();
Alt_Shift
 Аватар для 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 / 37
Регистрация: 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
 Аватар для 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
 Аватар для 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
 Аватар для Alt_Shift
50 / 50 / 2
Регистрация: 28.05.2012
Сообщений: 161
29.05.2012, 10:16  [ТС]     Добавление данных в массив объектов #9
Цитата Сообщение от alex_bojik Посмотреть сообщение
тут заново объявляется gr... по-моему достаточно просто gr = new...
действительно достаточно Но проблему это не решило
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
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
 Аватар для 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 / 37
Регистрация: 24.05.2012
Сообщений: 629
29.05.2012, 13:14     Добавление данных в массив объектов #12
Если честно, я не совсем понимаю, зачем наследовать группу от студента.
Alt_Shift
 Аватар для 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
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
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++

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

Или воспользуйтесь поиском по форуму:
Alt_Shift
 Аватар для 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     Добавление данных в массив объектов
Ответ Создать тему
Опции темы

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