Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
klimenko
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 17
#1

Динамический массив структур - C++

13.09.2012, 04:58. Просмотров 830. Ответов 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
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
using namespace std;
 
struct writer {
    char name[100];
    int d,m,y;
};
 
struct reader {
    char name[100];
    int kol;
};
const int SIZE = 100;
struct book {
    char name[100];
    char genre[100];
    writer a;
    reader b;
    int number_of_pages;
} BD[SIZE];
 
int menu();
void enter();
void show();
void add();
void delet();
void input(int);
 
int main()
{
    char choise;
 
    for(;;) {
        choise = menu();
        switch(choise) {
            case 'e': enter();
            case 's': show();
            case 'a': add();
            case 'd':delet();
            case 'q': return 0;
        }
    }
}
 
int menu()
{
    char ch;
    cout << '\n';
    do {
        cout << "(E)nter\n";
        cout << "(S)how\n";
        cout << "(A)dd\n";
        cout << "(D)elete\n";
        cout << "(Q)uit\n";
        cout << "select: ";
        cin >> ch;
    } while(!strchr("eduq", tolower(ch)));
    return tolower(ch);
}
 
void enter()
{
    int i;
    for(i=0;i<SIZE; i++)
        if(!*BD[i].name) break;
    if(i==SIZE) {
        cout << "list is full.\n";
        return;
    }
    input(i);
}
 
void input(int i)
{
    int j,k=0;
    cout << "book title: ";
    cin >> BD[i].name;
    cout << "genre of the book: ";
    cin >> BD[i].genre;
    cout << "the name of the author: ";
    cin >> BD[i].a.name;
    cout << "type the date author's birthday in the format dd.mm.yyyy: ";
    cin>>setw(2)>>BD[i].a.d; //дата
    cin.ignore();    //точка
    cin>>setw(2)>>BD[i].a.m; //месяц
    cin.ignore();    //точка
    cin>>setw(4)>>BD[i].a.y; //год
    cout<<"\n\n"<<BD[i].a.d<<'\t'<<BD[i].a.m<<'\t'<<BD[i].a.y;
    cout << "the number of readers who took the book: ";
    cin >> BD[i].b.kol;
    k=BD[i].b.kol;
    if(k!=0){
        for(j=0;j<k;j++){
            cout << "the name of reader: ";
            cin >> BD[i].b.name;
        }
    }
}
 
void show()
{
    int t;
    for(t=0;t<SIZE;t++){
        if(*BD[t].name){
            cout << "book title: ";
            cout << BD[t].name << '\n';
            cout << "\ngenre of the book: ";
            cout << BD[t].genre;
            cout << "\n\nthe name of the author: ";
            cout << BD[t].a.name;
            cout << "\n\nthe date of author's birthday: ";
            cout <<BD[t].a.d<<'\t'<<BD[t].a.m<<'\t'<<BD[t].a.y;
            cout << "\n\nthe number of readers who took the book: ";
            cout << BD[t].b.kol;
        }
    }
}
Меня интересует, как из того, что у меня есть, сделать динамический массив структур.
Изменится ли при этом функция ввода/вывода, если да, то как?
Как реализовать ф-цию удаления?

Вроде пока все...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2012, 04:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический массив структур (C++):

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю? - C++
Ребята подскажите как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю.

Динамический массив структур - C++
Необходимо создать структуру, и сделать динамический массив структур. Фиксированный массив получается сделать, а вот с динамическим...

Динамический массив структур - C++
Добрый день. Недавно начал изучать С++. В книге попалась задача в которой требуется сохранение информации в динамически выделяемом массиве...

Динамический массив структур - C++
Здравствуйте. Нужна помощь. Не получается записать данные в массив структур. По логике вроде все правильно. 1. Создаем динамический...

Динамический массив структур - C++
Структура «Сотрудник» хранит имя, должность и возраст сотрудника. Структура «Компания» хранит название и массив сотрудников. Программа...

Динамический массив структур - C++
Помогите пожалуйста с заданием Создать динамический массив структур (не менее 10 записей) со следующими полями: -шифр поезда -пункт...

4
miron_arhimedov
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 5
13.09.2012, 09:04 #2
В качестве динамического массива хорошо подойдёт SLT контейнер vector.
Чтоб долго не распространятся на тему того что это и как в коде ниже показано как приблизительно всё должно выглядеть. Но предуперждаю, что не всех жуков в коде выловил Ну и по возможности замените массивы символов строками, а то как то некрасивенько
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
#include <iostream>
#include <iomanip>
#include <cstring>
#include <vector>
using namespace std;
 
struct writer {
    char name[100];
    int d,m,y;
};
 
struct reader {
    char name[100];
    int kol;
};
 
const int SIZE = 100;
/*struct book {
    char name[100];
    char genre[100];
    writer a;
    reader b;
    int number_of_pages;
} BD[SIZE];*/
struct book {
    char name[100];
    char genre[100];
    writer a;
    reader b;
    int number_of_pages;
};
 
book shtuke;
vector < book > BD;
vector < book >::iterator It;
 
int menu();
void enter();
void show();
void add();
void delet();
void input(int);
 
int main()
{
    char choise;
 
    for(;;) {
        choise = menu();
        switch(choise) {
            case 'e': enter(); break;
            case 's': show(); break;
            case 'a': add(); break;
            case 'd': delet(); break;
            case 'q': return 0;
        }
    }
}
 
int menu()
{
    char ch;
    cout << '\n';
    do {
        cout << "(E)nter\n";
        cout << "(S)how\n";
        cout << "(A)dd\n";
        cout << "(D)elete\n";
        cout << "(Q)uit\n";
        cout << "select: ";
        cin.clear();
        cin >> ch;
    } while(!strchr("esadq", tolower(ch)));
    return tolower(ch);
}
 
void enter()
{
    int i;
    for(i=0;i<SIZE; i++)
        if(!*BD[i].name) break;
    if(i==SIZE) {
        cout << "list is full.\n";
        return;
    }
    input(i);
}
 
void input(int i)
{
    int j,k = 0;
    cout << "book title: ";
    cin >> BD[i].name;
    cout << "genre of the book: ";
    cin >> BD[i].genre;
    cout << "the name of the author: ";
    cin >> BD[i].a.name;
    cout << "type the date author's birthday in the format dd.mm.yyyy: ";
    cin>>setw(2)>>BD[i].a.d; //дата
    cin.ignore();    //точка
    cin>>setw(2)>>BD[i].a.m; //месяц
    cin.ignore();    //точка
    cin>>setw(4)>>BD[i].a.y; //год
    cout<<"\n\n"<<BD[i].a.d<<'\t'<<BD[i].a.m<<'\t'<<BD[i].a.y;
    cout << "the number of readers who took the book: ";
    cin >> k;
    BD[i].b.kol = k;
    if(k!=0){
        for(j=0;j<k;j++){
            cout << "the name of reader: ";
            cin >> BD[i].b.name;
        }
    }
}
 
void show()
{
    int t=0;
//    for(t=0;t<SIZE;t++){
    for(It=BD.begin();It!=BD.end();It++){
        cout<<"book number: "<<t<<endl;
        //if(*BD[t].name){
            cout << "book title: ";
//            cout << BD[t].name << '\n';
            cout << It->name << '\n';
            cout << "\ngenre of the book: ";
//            cout << BD[t].genre;
            cout << It->genre;
            cout << "\n\nthe name of the author: ";
//            cout << BD[t].a.name;
            cout << It->a.name;
            cout << "\n\nthe date of author's birthday: ";
//            cout <<BD[t].a.d<<'\t'<<BD[t].a.m<<'\t'<<BD[t].a.y;
            cout <<It->a.d<<'\t'<<It->a.m<<'\t'<<It->a.y;
            cout << "\n\nthe number of readers who took the book: ";
//            cout << BD[t].b.kol;
            cout << It->b.kol;
        //}
        t++;
    }
}
 
void add(){
    int sz;
    BD.push_back(shtuke);
    sz = BD.size();
    cout<<"add book number "<<sz-1<<endl;
    input(sz-1);
}
 
void delet(){
    int pos;
    cout<<"book number to delete:";cin>>pos;
    BD.erase(BD.begin()+pos);
}
0
klimenko
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 17
13.09.2012, 21:05  [ТС] #3
Спасибо, вчера пытался разобраться с контейнером vector, но в 3 часа ночи это вышло не очень успешно.

Только сейчас когда ввожу 'e', выкидывает и пишет:

Debug Assertion Failed!

Program: ...s\1\documents\visual studio
2010\Projects\lb_1\Debug\lb_1.exe
File: c:\program files\microsoft visual studio 10.0\vc\include\vector
Line: 932

Express: vector subscript out of range

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

(Press Retry to debug the application)


Добавлено через 7 часов 28 минут
Кстати, при вызове функции add вроде все в порядке.
0
miron_arhimedov
0 / 0 / 0
Регистрация: 31.10.2011
Сообщений: 5
14.09.2012, 05:18 #4
Я немного не понимаю какую смысловую нагрузку в программе несёт это поле меню. Я про e - (E)nter. В исходном варианте программы, насколько я понимаю, это действие добавляло книгу к базе данных. В новом варианте программы для этого предусмотрена функция add() с соответствующим пунктом меню (A)dd.

Добавлено через 19 минут
вот как то так по идее должно выглядеть...
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
#include <iostream>
#include <iomanip>
#include <cstring>
#include <vector>
using namespace std;
 
struct writer {
    char name[100];
    int d,m,y;
};
 
struct reader {
    char name[100];
    int kol;
};
 
struct book {
    char name[100];
    char genre[100];
    writer a;
    reader b;
    int number_of_pages;
};
 
book shtuke;
vector < book > BD;
vector < book >::iterator It;
 
int menu();
void enter();
void show();
void add();
void delet();
void input(int);
 
int main()
{
    char choise;
 
    for(;;) {
        choise = menu();
        switch(choise) {
            case 's': show(); break;
            case 'a': add(); break;
            case 'd': delet(); break;
            case 'q': return 0;
        }
    }
}
 
int menu()
{
    char ch;
    cout << '\n';
    do {
        cout << "(S)how\n";
        cout << "(A)dd\n";
        cout << "(D)elete\n";
        cout << "(Q)uit\n";
        cout << "select: ";
        cin.clear();
        cin >> ch;
    } while(!strchr("esadq", tolower(ch)));
    return tolower(ch);
}
  
void input(int i)
{
    int j,k = 0;
    cout << "book title: ";
    cin >> BD[i].name;
    cout << "genre of the book: ";
    cin >> BD[i].genre;
    cout << "the name of the author: ";
    cin >> BD[i].a.name;
    cout << "type the date author's birthday in the format dd.mm.yyyy: ";
    cin>>setw(2)>>BD[i].a.d; //дата
    cin.ignore();    //точка
    cin>>setw(2)>>BD[i].a.m; //месяц
    cin.ignore();    //точка
    cin>>setw(4)>>BD[i].a.y; //год
//    cout<<"\n\n"<<BD[i].a.d<<'\t'<<BD[i].a.m<<'\t'<<BD[i].a.y;
    cout << "the number of readers who took the book: ";
    cin >> k;
    BD[i].b.kol = k;
    if(k!=0){
        for(j=0;j<k;j++){
            cout << "the name of reader: ";
            cin >> BD[i].b.name;
        }
    }
}
 
void show()
{
    for(It=BD.begin();It!=BD.end();It++){
        cout<<"Book number : "<<t<<endl;
        cout <<"\t book title: ";
        cout << It->name << '\n';
        cout << "\t genre of the book: ";
        cout << It->genre<< '\n';
        cout << "\t the name of the author: ";
        cout << It->a.name<< '\n';
        cout << "\t the date of author's birthday: ";
        cout <<It->a.d<<"."<<It->a.m<<"."<<It->a.y<< '\n';
        cout << "\t the number of readers who took the book: ";
        cout << It->b.kol<< '\n';
    }
}
 
void add(){
    int sz;
    BD.push_back(shtuke);
    sz = BD.size();
    cout<<"add book number "<<sz-1<<endl;
    input(sz-1);
}
 
void delet(){
    int pos;
    cout<<"book number to delete:";cin>>pos;
    if(BD.size()<=pos) cout<<"there is no such a book in database."<<endl;
    else BD.erase(BD.begin()+pos);
}
0
klimenko
0 / 0 / 0
Регистрация: 15.04.2012
Сообщений: 17
15.09.2012, 12:52  [ТС] #5
Спасибо.
0
15.09.2012, 12:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2012, 12:52
Привет! Вот еще темы с ответами:

Динамический массив структур - C++
Нужно сделать динамический массив структур. Задание составить перечень стран и количество автомобилей выпущенных этими странами. ...

Динамический массив структур С++ - C++
Мне нужно сделать добавление экземпляра структуры в массив. Для этого нужно расширить динамический массив, я нашел для этого метод...

Динамический массив структур ... - C++
Как создать дин. массив структур....пользователь должен ввести число этих массивов. вот что-то пробовал , но много ошибок выпрыгивает ...

Динамический массив структур - C++
Прога почти готова интересует как сделать вот это добавление и удаление элемента из списка?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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