Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Mari_ly
3 / 3 / 3
Регистрация: 13.02.2016
Сообщений: 158
#1

Класс книга. Работа с произвольным количеством книг

18.06.2016, 00:14. Просмотров 630. Ответов 7
Метки нет (Все метки)

Помогите доделать
Создать класс Книга.Информация о книге: название, автор, год издания.
Предусмотреть возможность работы с произвольным количеством книг, поиска книги произнаку(по автору/названию или по году издания), добавление книги в библиотеку, удаление книги из нее (удаляемая книга определяется по названию), сортировку книг по одному из полей.
Функционал класса:
конструкторы (по умолчанию, параметризированный, копирования)
деструктор
перегрузка операторов =,!=, ввода >>, вывода <<
методы ассесоры
распечатка информации об объекте
добавить в класс статическое поле(закрытое) - для определения количества реально существующих в данный момент объектов и статическую функцию, которая будет возвращать значение этого поля.
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
#include "stdafx.h"
#include <iostream>  
#include <cstring> 
#include <cassert> 
#include <stdio.h> 
#include "conio.h" 
 
using namespace std;               
 
class Book{ 
public: 
  Book(char *au, char *nb, char *jr, int yr); // Конструктор 
//  void UserFromKeyboard(); 
  //void setBook(char au, char nb, char *jr, int yr); 
  // Функции "set", установки значений полей книги 
  void setAuthorBook(char *au); // Установка имени автора книги 
  void setNameBook(char *nb);   // Установка названия книги 
  void setJanreBook(char *jr);  // Установка жанра книги 
  void setYearBook(int yr);   // Установка года выпуска книги 
 
  // Функции "get", возвращение значений полей книги 
  char *getAuthorBook() { return author; } // Возвращение имени автора книги 
  char *getNameBook()  { return nameBook; }   // Возвращение названия книги 
  char *getJanreBook()  { return janr; }  // Возвращение жанра книги 
  int getYearBook()   { return year; }// Возвращение года выпуска книги 
 
  void printBook();  // Печать значений книги 
  void CalculateYearBook(); 
  ~Book(); // Деструктор 
private: 
    char *author; 
    char *nameBook; 
    char *janr; 
    int year; 
}; 
// Конструктор---------------------------------------------------------------- 
Book::Book(char *au, char *nb, char* jr, int yr) 
{ 
   setAuthorBook(au); 
   setNameBook(nb); 
   setJanreBook(jr); 
   setYearBook(yr); 
} 
// Функция установки Автора Книги  //Значит вот с этого места препод хочет все это добро перенести в констурктор см. выше, но тогда придется менять всё или нет? Помогите кто знает(Говорит, что это лишний код, а проверка вообще не нужна) 
void Book::setAuthorBook(char *au) 
{ 
  // Проверка и выделение памяти для поля - Автор 
  int len = strlen(au); 
  if( 0 <= len && len < 256){ // Проверка диапазона, должен быть меньше 255 
    author = new char[strlen(au) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
    assert(author != 0);  // Проверка выделения памяти 
    strcpy(author, au);  // Копирование... 
   } 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Lenght > 256 bytes!"; 
} 
// Функция установки Названия книги 
void Book::setNameBook(char *nb) 
{ 
  // Проверка и выделение памяти для поля - Имя Книги 
  int len = strlen(nb); 
  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255 
    nameBook = new char[strlen(nb) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
    assert(nameBook != 0);  // Проверка выделения памяти 
    strcpy(nameBook, nb);  // Копирование... 
   } 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Lenght > 256 bytes!"; 
} 
// Функция установки Жанра Книги 
void Book::setJanreBook(char *jr) 
{ 
  // Проверка и выделение памяти для поля - Жанр 
  int len = strlen(jr); 
  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255 
    janr = new char[strlen(jr) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
    assert(janr != 0);  // Проверка выделения памяти 
    strcpy(janr, jr);  // Копирование... 
   } 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Lenght > 256 bytes!"; 
} 
// Функция установки Года Книги 
void Book::setYearBook(int yr) 
{ 
  // Проверка значений поля - Год Книги 
  if(yr < 2016) // Проверка диапазона, должен быть меньше 255 
    year = yr; 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Year > 2016 !"; 
} 
// Расчёт возраста Книги 
void Book::CalculateYearBook() 
{ 
   int MyYear = 2016,  // Текущий год 
       resultYear;  // Результат расчёта возраста книги 
 
   resultYear = MyYear - year; 
 
   cout<<"\n This Book "<<resultYear<<" Years! \n"<<endl; 
} 
// Печать объекта------------------------------------------------------------- 
void Book::printBook() 
{ 
   cout<<" Author Book: "<<author<<endl; 
   cout<<" Name Book: "<<nameBook<<endl; 
   cout<<" Janre Book: "<<janr<<endl; 
   cout<<" Year Book: "<<year<<endl; 
} 
// Деструктор----------------------------------------------------------------- 
Book::~Book() 
{ 
} 
//--------------------------------------------------------------------------- 
int main() 
{
   int z; 
   Book b("Servantes", "Don Kixot", "Romantic", 1550); 
 
   b.printBook(); 
   b.CalculateYearBook(); 
 
   b.setAuthorBook("Pushkin"); 
   b.setNameBook("Eugeny Onegin"); 
   b.setJanreBook("Roman"); 
   b.setYearBook(1834); 
   b.printBook(); 
   b.CalculateYearBook(); 
 
   cin>>z; 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2016, 00:14
Ответы с готовыми решениями:

Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги
Друзья, не работает функция add. Программа крашится. Я понимаю, что он как бы...

Функции с произвольным количеством и типом аргументов.
Начал изучать ф-ции с определенным количеством параметров и при изучении возник...

Создание функций, с произвольным количеством аргументов
Всем доброго. Мне нужно создать функцию(с произвольным количеством...

Строковый двумерный массив с произвольным количеством элементов
Здравствуйте. К примеру, в текстовом файле буду слова, которыми нужно...

Посчитать в строке количество слов с одним пробелом и с произвольным их количеством
Запросить у пользователя строку с символами, и посчитать в ней количество слов...

7
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
18.06.2016, 18:17 #2
С деструктора начни или не используй указатели вообще.
0
Mari_ly
3 / 3 / 3
Регистрация: 13.02.2016
Сообщений: 158
18.06.2016, 21:27  [ТС] #3
Помогите пожалуйста исправить ошибки. Очень нужно

book.h
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
#include <iostream>
#include <string>
using namespace std;
class Biblos
{
string Title; 
string Autor; 
int Year; 
public:
 
   int yy(){return Year;} 
 
     string tt(){return Title;}
   string aa(){return Autor;}
Biblos(string="",string="",int=0);
 
friend istream& operator>>(istream& input, Biblos &B); 
 
friend ostream& operator<<(ostream & out, Biblos &B); 
 
};
 
 
Biblos::Biblos (string a,string b,int c) :
Title(a),
   Autor(b),
      Year(c) {}
 
 
istream & operator>>(istream& input, Biblos & B)
{
 cout<<"Input Title of the Book:"<<endl;
input>>B.Title;
 
cout<<"Input Autor of the book:"<<endl;
 input>>B.Autor;
cout<<"Input the Publishing Year:"<<endl;
 input >>B.Year;
return input;
}
 
ostream& operator<<(ostream& out, Biblos & B)
{
      out<<B.Title;
      out<<B.Autor;
   out<<B.Year<<endl;
      return out;
}
book.cpp
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
#include "book.h"
#include <iostream>
#include <string>
#include "cstdlib" // library to clear the screen</p>
#include <iomanip> // there is setw ()</p>
#include<fstream>
using namespace std;
class Matrix
{         
int n; 
Biblos* Massiv;
public:
int nn() {return n;}
 Biblos* mm() {return Massiv;} 
Matrix(int=1); 
~Matrix(); 
friend istream& operator>>(istream& ccin, Matrix & B); // override operation
 
friend ostream& operator<<(ostream& out, Matrix & B); 
int operator!(); 
};
 
 
int Matrix::operator!()
{
  int old = Massiv[0].yy();
 for (int i = 1; i<n; ++i)
     if(Massiv[i].yy()<old) old = Massiv[i].yy();
return old;
}
Matrix::Matrix(int a) : n(a)
{
   if (a>0)
 Massiv = new Biblos [a];
else 
    cout<<"ERROR!"<<endl;
}
 
 
Matrix::~Matrix()
{
    if (n>0)
delete[]Massiv;
}
 
 
istream& operator>>(istream& ccin, Matrix & B)
{
cout<<"Enter the number of books you want to add to the database:";
    ccin>>B.n;
   if (B.n>0) 
    {
B.Massiv = new Biblos [B.n];
for (int i = 0; i<B.n;i++)
{
  ccin>>B.Massiv[i];
  system("cls"); 
}
      } 
    return ccin;
}
 
 
ostream& operator<<(ostream& out, Matrix & B)
{
 out<<"Title of the Book:"<<setw(30);
    out<<"Autor of the Book:"<<setw(30);
     out<<"The Publishing Year:"<<endl;
   for (int i=0; i<B.n; i++)
 {
        int dif;
 dif =B.Massiv[i].tt().length()-B.Massiv[0].tt().length();
out<<B.Massiv[i].tt()<<setw(30-dif);
    out<<B.Massiv[i].aa()<<setw(30);
         out<<B.Massiv[i].yy()<<endl;
     }
   out<<"The oldest edition: "<<!B;
     return out;
}
main/cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <iomanip> 
#include "book.h"
#include"book.cpp"
using namespace std;
int main()
{ 
      setlocale(LC_ALL,"rus");
      Matrix M;
       cin>>M;
      system("cls");
      cout<<M<<endl;
     
         
}
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
18.06.2016, 21:50 #4
Какие ошибки? Текст где?
0
Mari_ly
3 / 3 / 3
Регистрация: 13.02.2016
Сообщений: 158
19.06.2016, 01:44  [ТС] #5
В самом коде ошибки.

Создать класс Книга.Информация о книге: название, автор, год издания.
Предусмотреть возможность работы с произвольным количеством книг, поиска книги произнаку(по автору/названию или по году издания), добавление книги в библиотеку, удаление книги из нее (удаляемая книга определяется по названию), сортировку книг по одному из полей.
Функционал класса:
конструкторы (по умолчанию, параметризированный, копирования)
деструктор
перегрузка операторов =,!=, ввода >>, вывода <<
методы ассесоры
распечатка информации об объекте
добавить в класс статическое поле(закрытое) - для определения количества реально существующих в данный момент объектов и статическую функцию, которая будет возвращать значение этого поля.

Добавлено через 1 час 49 минут
Помогите пожалуйста, очень срочно нужно
0
Mari_ly
3 / 3 / 3
Регистрация: 13.02.2016
Сообщений: 158
19.06.2016, 01:45  [ТС] #6
Помогите пожалуйста сделать вот это задание
Предусмотреть возможность работы с произвольным количеством книг, поиска книги произнаку(по автору/названию или по году издания), добавление книги в библиотеку, удаление книги из нее (удаляемая книга определяется по названию), сортировку книг по одному из полей.

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
#include "stdafx.h"
#include <iostream>  
#include <cstring> 
#include <cassert> 
#include <stdio.h> 
#include "conio.h" 
 
using namespace std;               
 
class Book{ 
public: 
  Book(char *au, char *nb, char *jr, int yr); // Конструктор 
//  void UserFromKeyboard(); 
  //void setBook(char au, char nb, char *jr, int yr); 
  // Функции "set", установки значений полей книги 
  void setAuthorBook(char *au); // Установка имени автора книги 
  void setNameBook(char *nb);   // Установка названия книги 
  void setJanreBook(char *jr);  // Установка жанра книги 
  void setYearBook(int yr);   // Установка года выпуска книги 
 
  // Функции "get", возвращение значений полей книги 
  char *getAuthorBook() { return author; } // Возвращение имени автора книги 
  char *getNameBook()  { return nameBook; }   // Возвращение названия книги 
  char *getJanreBook()  { return janr; }  // Возвращение жанра книги 
  int getYearBook()   { return year; }// Возвращение года выпуска книги 
 
  void printBook();  // Печать значений книги 
  void CalculateYearBook(); 
  ~Book(); // Деструктор 
private: 
    char *author; 
    char *nameBook; 
    char *janr; 
    int year; 
}; 
// Конструктор---------------------------------------------------------------- 
Book::Book(char *au, char *nb, char* jr, int yr) 
{ 
   setAuthorBook(au); 
   setNameBook(nb); 
   setJanreBook(jr); 
   setYearBook(yr); 
} 
// Функция установки Автора Книги  //Значит вот с этого места препод хочет все это добро перенести в констурктор см. выше, но тогда придется менять всё или нет? Помогите кто знает(Говорит, что это лишний код, а проверка вообще не нужна) 
void Book::setAuthorBook(char *au) 
{ 
  // Проверка и выделение памяти для поля - Автор 
  int len = strlen(au); 
  if( 0 <= len && len < 256){ // Проверка диапазона, должен быть меньше 255 
    author = new char[strlen(au) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
    assert(author != 0);  // Проверка выделения памяти 
    strcpy(author, au);  // Копирование... 
   } 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Lenght > 256 bytes!"; 
} 
// Функция установки Названия книги 
void Book::setNameBook(char *nb) 
{ 
  // Проверка и выделение памяти для поля - Имя Книги 
  int len = strlen(nb); 
  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255 
    nameBook = new char[strlen(nb) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
    assert(nameBook != 0);  // Проверка выделения памяти 
    strcpy(nameBook, nb);  // Копирование... 
   } 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Lenght > 256 bytes!"; 
} 
// Функция установки Жанра Книги 
void Book::setJanreBook(char *jr) 
{ 
  // Проверка и выделение памяти для поля - Жанр 
  int len = strlen(jr); 
  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255 
    janr = new char[strlen(jr) + 1]; // Выделение памяти в 255 байт плюс завершающий символ 
    assert(janr != 0);  // Проверка выделения памяти 
    strcpy(janr, jr);  // Копирование... 
   } 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Lenght > 256 bytes!"; 
} 
// Функция установки Года Книги 
void Book::setYearBook(int yr) 
{ 
  // Проверка значений поля - Год Книги 
  if(yr < 2016) // Проверка диапазона, должен быть меньше 255 
    year = yr; 
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт... 
    cout<<" Error! Year > 2016 !"; 
} 
// Расчёт возраста Книги 
void Book::CalculateYearBook() 
{ 
   int MyYear = 2016,  // Текущий год 
       resultYear;  // Результат расчёта возраста книги 
 
   resultYear = MyYear - year; 
 
   cout<<"\n This Book "<<resultYear<<" Years! \n"<<endl; 
} 
// Печать объекта------------------------------------------------------------- 
void Book::printBook() 
{ 
   cout<<" Author Book: "<<author<<endl; 
   cout<<" Name Book: "<<nameBook<<endl; 
   cout<<" Janre Book: "<<janr<<endl; 
   cout<<" Year Book: "<<year<<endl; 
} 
// Деструктор----------------------------------------------------------------- 
Book::~Book() 
{ 
} 
//--------------------------------------------------------------------------- 
int main() 
{
   int z; 
   Book b("Servantes", "Don Kixot", "Romantic", 1550); 
 
   b.printBook(); 
   b.CalculateYearBook(); 
 
   b.setAuthorBook("Pushkin"); 
   b.setNameBook("Eugeny Onegin"); 
   b.setJanreBook("Roman"); 
   b.setYearBook(1834); 
   b.printBook(); 
   b.CalculateYearBook(); 
 
   cin>>z; 
}
Добавлено через 5 часов 27 минут
Помогите пожалуйста, очень срочно нужно
0
zss
Модератор
Эксперт С++
7083 / 6619 / 4190
Регистрация: 18.12.2011
Сообщений: 17,450
Завершенные тесты: 1
19.06.2016, 06:00 #7
Посмотрите тему
Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги
Только функции не надо делать членами класса.
1
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
19.06.2016, 09:02 #8
Лучший ответ Сообщение было отмечено Mari_ly как решение

Решение

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
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
using namespace std;
 
 
class Biblos
{
    string Title;
    string Autor;
    int Year;
public:
    Biblos(string T = string(), string A = string(), int Y = 0);
 
    int year() { return Year; }
    string title() { return Title; }
    string author() { return Autor; }
 
    friend istream& operator >> (istream& input, Biblos &B);
    friend ostream& operator << (ostream & out, Biblos &B);
};
 
Biblos::Biblos(string T, string A, int Y): Title(T), Autor(A), Year(Y) {}
 
istream & operator >> (istream& input, Biblos & B)
{
    cout << "Input Title of the Book: ";
    getline(input, B.Title);
    cout << "Input Autor of the book: ";
    getline(input, B.Autor);
    cout << "Input the Publishing Year: ";
    (input >> B.Year).get();
 
    return input;
}
 
ostream& operator << (ostream& out, Biblos & B)
{
    out << B.Title << ", " << B.Autor << ", " << B.Year << endl;
 
    return out;
}
 
 
class Matrix
{
    int n;
    Biblos* Massiv;
public:
    Matrix(int nn = 1);
    ~Matrix();
 
    Biblos* mm() { return Massiv; }
    int nn() { return n; }
 
    friend istream& operator >> (istream& ccin, Matrix & B);
    friend ostream& operator << (ostream& out, Matrix & B);
 
    int operator!();
};
 
Matrix::Matrix(int nn) : n(nn), Massiv(NULL)
{
    if (n > 0) Massiv = new Biblos[n];
}
 
Matrix::~Matrix()
{
    delete[] Massiv;
}
 
istream& operator >> (istream& ccin, Matrix & B)
{
    cout << "Enter the number of books you want to add to the database: ";
    (ccin >> B.n).get();
    if (B.n > 0)
    {
        B.Massiv = new Biblos[B.n];
        for (int i = 0; i < B.n; i++)
        {
            cout << "\nBook #" << i + 1 << "\n\n";
            ccin >> B.Massiv[i];
        }
    }
    return ccin;
}
 
ostream& operator << (ostream& out, Matrix & B)
{
    out << setw(30) << left << "Title of the Book:";
    out << setw(28) << left << "Autor of the Book:";
    out << "The Publishing Year:" << endl;
    for (int i = 0; i < B.n; i++)
        out << setw(30) << left << B.Massiv[i].title()
            << setw(28) << left << B.Massiv[i].author()
            << B.Massiv[i].year() << endl;
 
    out << "\nThe oldest edition: " << !B << endl;
    return out;
}
 
int Matrix::operator ! ()
{
    int old = Massiv[0].year();
    for (int i = 1; i < n; ++i)
        if (Massiv[i].year() < old) old = Massiv[i].year();
    return old;
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    Matrix M;
    cin >> M;
    system("cls");
    cout << M << endl;
 
    system("pause");
}
1
19.06.2016, 09:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2016, 09:02

Посчитать количество столбцов в строке, разделённых произвольным количеством белых знаков
Необходимо посчитать количество столбцов в строке, разделённых произвольным...

Найти слова строки, если они отделяются друг от друга произвольным количеством пробелов или знаков препинания
Выведите на экран все слова строки,если они отделяются друг от друга...

Перегрузить оператор вывода, чтобы заданный пользовательский класс выводился в файл произвольным образом
Добрый вечер. Помогите, пожалуйста. Есть класс class chelovek { private:...


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

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

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