1 / 1 / 0
Регистрация: 30.09.2017
Сообщений: 30
1

Создать динамический класс catalogue

15.04.2018, 13:00. Показов 967. Ответов 7

Author24 — интернет-сервис помощи студентам
Создать динамический класс catalogue, который базируется на связном списке, где каждый элемент списка - структура типа book.
Класс должен содержать следующие операции:
add_book() – добавление книги в каталог;
del_book() – удаление книги из каталога;
find_by_autor() – поиск книги по автору;
show_cataloque() - вывод каталога.

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

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 <string>
#include <stdio.h>
using namespace std;
 
class book
{
    public:
        string name;
        string author;
        void input(); 
};
 
class catalogue: public book
{
        catalogue *arr;
        int amount;
        int number;
        string author1;
    public:
        void add_book(catalogue &obj1, int amount);
        void del_book(catalogue &obj1, int number);
        void find_by_author(catalogue &obj1);
        void show_catalogue(catalogue &obj1);       
};
 
    void book::input() 
    {
        cout<<"Name of the book:";
        getline(cin,name);
        cout<<endl;
        cout<<"Author:";
        getline(cin,author);
        cout<<endl;
    }
    
    void catalogue::add_book(catalogue &obj1, int amount)
    {
        catalogue *arr = new catalogue[amount];
        for(int i=0; i < amount; i++)
        {
            cout<<"Book"<<i<<":";
            arr[i].input();
        }
    }
    
    void catalogue::del_book(catalogue &obj1, int number)
    {
        for(int i=number; i < amount; i++)
        {
            arr[i]=arr[i+1];
        }
    }
    
    void catalogue::find_by_author(catalogue &obj1)
    {
        cout<<"Input author:";
        getline(cin,author1);
        for(int i=0; i < amount; i++)
        {
            if (arr[i].author == author1) cout<<arr[i].name<<arr[i].author;
        }
        
    }
    
    void catalogue::show_catalogue(catalogue &obj1)
    {
        for(int i=0; i < amount; i++)
        {
            cout<<arr[i].name<<arr[i].author;
        }
    }
    
    int main()
    {
        int amount;
        int number;
        cout<<"Set number of books:";
        cin>>amount;
        catalogue obj1;
        add_book(obj1, amount); /*изначально было написано obj1.add_book(amount); но в принципе ни то ни то компилятор не устраивает*/
        obj1.show_catalogue();
        cout<<"Set number of book you want to delete:";
        cin>>number;
        obj1.del_book(number);
        obj1.find_by_author();
        system("pause");
        return 0;
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2018, 13:00
Ответы с готовыми решениями:

Создать динамический класс Book, содержащий динамический массив Authors
Мне нужно написать программу,а я не знаю как ее написать. Знаю, тут люди за кого-то не делают,...

Создать динамический класс Book, содержащей динамический массив Authors
всем привет. может кто-то набросать код для такой вот задачи: Создать динамический класс Book,...

Создать класс-динамический массив
Помогите, пожалуйста!! не могу решить задачу, очень важно! Условие:создайте класс – динамический...

Создать класс содержащий динамический массив
Создать класс, содержащий динамический массив и количество элементов в нем. Добавить конструктор,...

7
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
15.04.2018, 13:12 2
Sasha0001, amount это количество страниц? а зачем номер вводить книги, если можно счетчик, который и индексом будет служить заодно, организовать?
0
1 / 1 / 0
Регистрация: 30.09.2017
Сообщений: 30
15.04.2018, 13:17  [ТС] 3
Цитата Сообщение от perevertysh Посмотреть сообщение
Sasha0001, amount это количество страниц?
amount это кол-во книг, которые нужно ввести в массив
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
15.04.2018, 13:34 4
Sasha0001, а что мешает функции внутри классов определить, чтобы путаницы не было? а класс book внутренним классом catalogue сделать?
0
1 / 1 / 0
Регистрация: 30.09.2017
Сообщений: 30
15.04.2018, 13:35  [ТС] 5
Цитата Сообщение от perevertysh Посмотреть сообщение
Sasha0001, а что мешает функции внутри классов определить, чтобы путаницы не было? а класс book внутренним классом catalogue сделать?
В универе требуют такое оформление
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
15.04.2018, 13:43 6
Sasha0001, работает:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
#include <stdio.h>
#include <windows.h>
 
using namespace std;
 
class book
{
    public:
        string name;
        string author;
        void input();
};
 
class catalogue: public book
{
        catalogue *arr;
        int amount;
        int number;
        string author1;
    public:
        void add_book(catalogue &obj1, int amount);
        void del_book(catalogue &obj1, int number);
        void find_by_author(catalogue &obj1);
        void show_catalogue(catalogue &obj1);
};
 
    void book::input()
    {
        cout<<"Name of the book:";
        getline(cin,name);
        cout<<endl;
        cout<<"Author:";
        getline(cin,author);
        cout<<endl;
    }
 
    void catalogue::add_book(catalogue &obj1, int amount)
    {
        catalogue *arr = new catalogue[amount];
        for(int i=0; i < amount; i++)
        {
            cout<<"Book"<<i<<":";
            arr[i].input();
        }
    }
 
    void catalogue::del_book(catalogue &obj1, int number)
    {
        for(int i=number; i < amount; i++)
        {
            arr[i]=arr[i+1];
        }
    }
 
    void catalogue::find_by_author(catalogue &obj1)
    {
        cout<<"Input author:";
        getline(cin,author1);
        for(int i=0; i < amount; i++)
        {
            if (arr[i].author == author1) cout<<arr[i].name<<arr[i].author;
        }
 
    }
 
    void catalogue::show_catalogue(catalogue &obj1)
    {
        for(int i=0; i < amount; i++)
        {
            cout<<arr[i].name<<arr[i].author;
        }
    }
 
    int main()
    {
        int amount;
        int number;
        cout<<"Set number of books:";
        cin>>amount;
        catalogue obj1;
        obj1.add_book(obj1, amount); /*изначально было написано obj1.add_book(amount); но в принципе ни то ни то компилятор не устраивает*/
        obj1.show_catalogue(obj1);
        cout<<"Set number of book you want to delete:";
        cin>>number;
        obj1.del_book(obj1,number);
        obj1.find_by_author(obj1);
        system("pause");
        return 0;
    }

но там из-за конструкции самого кода ошибки потом, в ходе.

Не по теме:

зачем огороды городить, непонятно

0
_stanislav
15.04.2018, 13:52
  #7

Не по теме:

не по теме

0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
16.04.2018, 07:11 8
Sasha0001, вот про списки

Добавлено через 1 час 11 минут
и тут пример есть

Добавлено через 33 минуты
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
#include <iostream>
 
using namespace std;
 
class Book{
 
    public:
 
        string name;
        string author;
 
        void setBook(){
            cin>>name;
            cin>>author;
        }
 
};
 
class Ctlg{
 
    public:
 
        Book ex;
 
        Ctlg* next;
 
};
 
    Ctlg* previous= NULL;
 
    void add_ex(Book el){
 
        Ctlg* bk= new Ctlg;
        bk->ex=el;
        bk->next=previous;
        previous=bk;
 
    }
 
    void show_Ctlg(){
 
        Ctlg* base=previous;
 
        while (base){
 
            cout<<base->ex.name<<endl;
            cout<<base->ex.author<<endl;
            
            base=base->next;
        }
 
    }
    
 
int main() {
 
    Ctlg ct;
    
    Book bk;
    
    bk.setBook();
    
    add_ex(bk);
    
    show_Ctlg();
 
    return 0;
}
Добавлено через 7 часов 22 минуты
и еще одна итерация, тоже чему-то новому научился:

Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
class Book{
 
    public:
 
        string name;
        string author;
 
        void setBook(){
            cout<<"Name of book: "<<endl;
            cin>>name;
            cout<<"Author: "<<endl;
            cin>>author;
        }
 
};
 
class Ctlg{
 
    public:
 
        Book ex;
 
        Ctlg* next;
 
        Ctlg* previous= NULL;
 
        void add_ex(){
 
            int num_of_addings;
 
            cout<<"how many books you wanna add?"<<endl;
 
            cin>>num_of_addings;
 
            while(num_of_addings--){
 
                Book el;
                el.setBook();
 
                Ctlg* bk= new Ctlg;
                bk->ex=el;
                bk->next=previous;
                previous=bk;
            }
 
        }
 
        void show_Ctlg(){
 
            Ctlg* base=previous;
 
            while (base){
 
                cout <<"Books's name: "
                        <<base->ex.name
                        <<" "
                        <<"Author: "
                        <<base->ex.author
                        <<endl;
 
                base=base->next;
            }
 
        }
};
 
int main() {
 
    Ctlg ct;
 
    ct.add_ex();
 
    ct.show_Ctlg();
 
    return 0;
}


Добавлено через 8 часов 9 минут
и еще пример с SoloLearn:
Кликните здесь для просмотра всего текста
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
#include <iostream>
using namespace std;
 
class node {
    public:
        int data; //data
        node *next; //pointer
    node(int x) {
        data = x;
        next = NULL;
    }
};
 
class LinkedList {
    public:
    node *head;
    //function to add node at front
    void addAtFront(node *n) {
        n->next = head;
        head = n;
    }
    //function to check whether the list is empty
    bool isEmpty() {
        if(head == NULL) { return 1; }
        else { return 0; }
    }
    //function to add node at the end
    void addAtEnd(node *n) {
        if(head == NULL) {
            head = n;
            n->next = NULL;
        }
        else {
            node *n2 = getLastNode();
            n2->next = n;
        }
    }
    //function to get the last node
    node* getLastNode() {
        node* ptr = head;
        while(ptr->next!=NULL) {
            ptr = ptr->next;
        }
        return ptr;
    }
    //function to search a value
    node* search(int k) {
        node *ptr = head;
        while(ptr != NULL && ptr->data != k) {
            ptr = ptr->next;
        }
        return ptr;
    }
    //function to delete any node
    node* deleteNode(int x) {
        node *n = search(x);
        node *ptr = head;
        if(ptr == n) {
            ptr->next = n->next;
            return n;
        }
        else {
            while(ptr->next != n) {
                ptr = ptr->next;
            }
            ptr->next = n->next;
            return n;
        }
    }
    //function to print the list nodes
    void printList() {
        node *ptr = head;
        while(ptr !=NULL) {
            cout << ptr->data<<" -> ";
            ptr = ptr->next;
        }
    }
 
    LinkedList() {
        head = NULL;
    }
};
 
int main() {
    LinkedList L;
    
    node *n1 = new node(5);
    node *n2 = new node(8);
    node *n3 = new node(12);
    
    L.addAtFront(n1);
    L.addAtFront(n2);
    L.addAtEnd(n3);
    
    L.printList();
    
    delete [] n1;
    delete [] n2;
    delete [] n3;
    
    return 0;
}
0
16.04.2018, 07:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2018, 07:11
Помогаю со студенческими работами здесь

Создать динамический класс Матрица и найти А+В, А-В, А*В
Всем добрый день! Мне нужно создать динамический класс Матрица и найти А+В, А-В, А*В. У меня...

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

Создать шаблонный класс - двумерный динамический массив
Задание:Создать шаблонный класс - двумерный динамический массив. Тип элементов массива определяется...

Создать класс с 1 полем: динамический массив char
Необходимо создать класс с 1 полем: динамический массив char. С конструктором, куда передавать...

Создать класс который реализует динамический массив
Доброго времени суток! Помогите с такой задачей - Создать класс который реализует динамический...

Как создать динамический массив типа string? Как создать класс такого массива?
Как создать динамический массив типа string? Как создать класс такого массива? =-O Помогите,...


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

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

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