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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
#1

Курсовая: Домашняя библиотека - C++

09.05.2013, 11:51. Просмотров 2959. Ответов 21
Метки нет (Все метки)

Добрый день участники форума! На этом форуме видел программу к этому задание, но оно не удовлетворяет требованию курсовой, и хочу сам разобраться и написать) Напомню задание:

Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным количеством книг, поиска книги по какой-либо признаки (например, по автору или по году издания), добавления книг библиотеку, удаления книг из нее, сортировки книг по различным полей. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
ТРЕБОВАНИЯ К ПРОГРАММЕ
Программа должна отвечать следующим требованиям:
1. Количество классов не менее 6.
2. Наличие связей между классами, в том числе отношений наследования глубиной не менее 3.
3. Для инициализации объектов должны использоваться конструкторы разных видов.
4. В программе должны использоваться виртуальные функции.
5. Должен использоваться механизм перегрузки функций и операторов.
6. Используйте абстрактные классы.
7. В классах должны использоваться различные виды доступа к полям и методам (public, private, protected).

У меня вопрос : Наличие связей между классами, в том числе отношений наследования глубиной не менее 3 - это приблизительно так

C++
1
2
3
4
5
Class A {
};
class B{
};
Class C : public A, public B {};
то есть есть ли здесь наследование ни меньше 3?? Заранее спасибо, за ответы!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2013, 11:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Курсовая: Домашняя библиотека (C++):

Описать класс «домашняя библиотека» - C++
вот задание Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по...

Описать класс «домашняя библиотека» - C++
Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку...

Написать структуру «Домашняя библиотека» - C++
Написать структуру «Домашняя библиотека». Структура должна содержать не менее 5 полей (автор, название, жанр, издательство, год выпуска,...

Описать класс «домашняя библиотека» - C++
Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку...

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

Домашняя бухгалтерия - C++
Помогите, пожалуйста, создать домашнюю бухгалтерию) совсем не могу разобраться)) Требования: Человек туда заносит свои...

21
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 2
09.05.2013, 14:20 #2
C++
1
2
3
class A {};
class B : public A{};
class C : public B {};
1
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
10.05.2013, 22:37  [ТС] #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
90
91
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
 
class Book {
private:
    Book* Obj_Book;
    char *name;
    char *auzer;
    char *tupe;
    int god_v;
    int col_str;
public:
 
    Book ( char* , char* , char* , int& , int& ); // конструктор инициализации
    Book ();
    char *fname () { return name ; }
    char *fauzer () { return auzer ; }
    char *ftupe () { return tupe ; }
    int & fgod_v () { return god_v ; }
    int & fcol_str () { return col_str ; }
};
 
Book::Book (char* na, char* au, char* ty, int& god , int& col) {  // описания конструктора инициализации
    name = na;
    auzer = au;
    tupe = ty;
    god_v = god;
    col_str = col;
}
 
 
class Zapolnenie_Dan : public Book {
private:
 char *name, *auzer, *tupe, *fantastich, *naychnioe, *psihologicheskie, *dif_tupe, *prom ;
 int god_v , col_str, w;
public:
    
    void manu (){
    cout << "\nВведите название книги: " ;
    cin >> name;
    cout << "\nВведите автора: " ;
    cin >> auzer;
    cout << "\nБыберите тип книги: " ;
    cout << "\n 1 Фантастика \n 2 Научные \n 3 Психологические \n 4 Другой тип" ;
    cin >> w;
    switch (w) {
    case 1 : { fantastich = "Фантастика";
             prom = fantastich; }
    case 2 : { naychnioe = "Научные" ; 
             prom = naychnioe;
             }
    case 3 : { psihologicheskie = "Психологические";
             prom = psihologicheskie;
             }
    case 4 : { cin >> dif_tupe;  
             prom = dif_tupe;
             }
    default: { cout << "Введите правельный знак операции!!";  exit(0);  }
    }
    cout << "\nВведите год издания книги: ";
    cin >> god_v;
    cout << "\nВведите колличество страниц книги: ";
    cin >> col_str;
    Book::Book ( name, auzer, prom, god_v, col_str );
 
    }
};
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{ setlocale (LC_ALL, "rus");
     Zapolnenie_Dan Ob_Zap;
      cout << "   Меню" << endl;
      cout << "1 Добавления" << endl;
      cout << "2 Просмотр библиотеки" << endl;
      cout << "3 Удаление книг" << endl;
      cout << "4 Сортировка книг" << endl;
      cout << "5 Выход" << endl;
     int t;
     cin >> t;
      switch (t){
      case 1: {
              Ob_Zap.manu();
              }
      }
    system ("pause");
    return 0;
}
Добавлено через 1 час 17 минут
Очень нужна помощь!
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
11.05.2013, 01:09 #4
Цитата Сообщение от Sniti01 Посмотреть сообщение
отношений наследования глубиной не менее 3
Аж три уровнял глубины... Это, на минуточку, очень дофига. Будет чертовски сложно придумать, куда-б прикрутить такое.

STL использовать можно? Не хотелось бы велосипедить -- в разы увеличится сложность и без того непростого задания.
Хотя бы std::string, что-ли.
2
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.05.2013, 02:38 #5
Цитата Сообщение от Sniti01 Посмотреть сообщение
Описать класс «домашняя библиотека».
Цитата Сообщение от Sniti01 Посмотреть сообщение
1. Количество классов не менее 6.
Для класса "домашняя библиотека" достаточно одного дополнительного класса (или структуры): "книга".
Ещё "книжный шкаф", что-ли, придумать?

Добавлено через 5 минут
Класс Zapolnenie_Dan тут не к месту. Достаточно метода добавления книги в классе "домашняя библиотека".
1
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
11.05.2013, 09:31  [ТС] #6
STL использовать можно? Не хотелось бы велосипедить -- в разы увеличится сложность и без того непростого задания.
Хотя бы std::string, что-ли.
STL использовать можно, главно что бы требования к программе выполнить.

Цитата Сообщение от alsav22 Посмотреть сообщение
Для класса "домашняя библиотека" достаточно одного дополнительного класса (или структуры): "книга".
Ещё "книжный шкаф", что-ли, придумать?
буду рад любой помощи! Даже просто на словах, как создать три наследования в моём случае.
0
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
13.05.2013, 22:59  [ТС] #7
немного изменил, но не пойму что не так ,при провке компилятор пишет что ошибки нет . Когда я откомрилирую программу появляеся консоль ,после я выбираю скалько книг добавить в библиотеку., а после у меня на экране появляется crtexe.c ? это ведать какоето исключение если программа не правильно работает?? И Что не так с программой :
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
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
 
class Book {
private:
 
    char *name;
    char *auzer;
    char *tupe;
    int god_v;
    int col_str;
public:
    // ***** действия над книгами
void menu (int); //перегруженая функция добавления 
void menu (int , int); //перегруженая функция  сортировки
void menu (); //перегруженая функция  удаления 
Book (){};
    Book ( char* , char* , char* , int& , int& );// конструктор инициализации
    
    char *fname () { return name ; }
    char *fauzer () { return auzer ; }
    char *ftupe () { return tupe ; }
    int & fgod_v () { return god_v ; }
    int & fcol_str () { return col_str ; }
};
 
Book::Book (char* na, char* au, char* ty, int& god , int& col) {  // описания конструктора инициализации
    name = na;
    auzer = au;
    tupe = ty;
    god_v = god;
    col_str = col;
}
 
void Book::menu(int kolich_knig ){
    char *f, *st2, *st3;
    int ch = 0, ch1 = 0;
    for (int i = 0; i < kolich_knig; i++ ){
 cout << "\nВведите название книги: ";
 cin >> f;
 cout << "\nВведите автора книги: ";
 cin >> st2 ;
 cout << "\nВведите тип книги";
 cin >> st3;
 cout << "\nВведите год издания";
 cin >> ch;
 cout << "\nВведите количество страниц";
 cin >> ch1;
 cout << endl;
}
    Book(f, st2, st3, ch, ch1);
}
 
 
 
int main()
{ setlocale (LC_ALL, "rus");
      
      Book Objec;
      cout << "   Меню" << endl;
      cout << "1 Добавления" << endl;
      cout << "2 Просмотр библиотеки" << endl;
      cout << "3 Удаление книг" << endl;
      cout << "4 Сортировка книг" << endl;
      cout << "5 Выход" << endl;
      cout << "   Ваш выбор: ";
     int t;
     cin >> t;
      switch (t){
      case 1: {
          cout << " Введите сколько книг будет добавлно:";
          int k;
          cin >> k;
          Objec.menu(k);
              }
      }
    system ("pause");
    return 0;
}
Добавлено через 4 минуты
Подскажите пожалуйста, если не трудно!
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.05.2013, 23:25 #8
Тут всё неправильно. Используйте не указатели на char, а объекты класса string. Создайте класс Book, с данными о книге, и с методами получения и установки этих данных. Создайте класс Библиотека, который будет представлять из себя массив объектов класса Book. В качестве такого массива используйте vector <Book>. В нём реализуйте методы добавления книг, сортировки, поиска и пр.
1
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
27.05.2013, 09:50  [ТС] #9
Подскажите пожалуйста почему я не могу создать объект на класс Bibl, ведь я переопределил чистую виртуальную функцию в абстрактном кдассе Abstr
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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
 
class Abstr {
public:
    virtual void print (int) = 0;
  void input () ;
};
 
class Book {
public:
 string name;
 string auzer;
 string tupe;
 string god_v;
string col_str;
public:
Book (){}; // конструктор по умочанию   
};
 
class Bibl: public Book, public Abstr {  
public:
vector <string> bibl_book;
void input (int);
void print ();
void menu (int); //перегруженая функция добавления добавление
void menu (int , int); //перегруженая функция  сортировка
void menu (); //перегруженая функция  удаление 
 
};
 
void Bibl::input(int knig){
    string nol = " ";
    for (int i = 0; i < knig; i++){
    cout << "Введите название книги: ";
    cin >> name;
    cout << "Введите автора книги: ";
    cin >> auzer;
    cout << "Введите тип книги: ";
    cin >> tupe;
    cout << "Введите год издания: ";
    cin >> god_v;
    cout << "Введите количество страниц: ";
    cin >> col_str;
    cout << endl;
    
    // dobavlenie v vector
 
    bibl_book.push_back(name);
    bibl_book.push_back(auzer);
    bibl_book.push_back(tupe);
    bibl_book.push_back(god_v);
    bibl_book.push_back(col_str);
    }
}
 
 void Bibl::print () {
    
}
 
int main()
{ setlocale (LC_ALL, "rus");
     Bibl Objec;
    cout << "   Выберрите действие!"<< endl;
    cout << "   Меню" << endl;
    cout << "1 Добавления" << endl;
    cout << "2 Просмотр библиотеки" << endl;
    cout << "3 Удаление книг" << endl;
    cout << "4 Сортировка книг" << endl;
    cout << "5 Выход" << endl;
    cout << "   Ваш выбор: ";
     int t;
     cin >> t;
      switch (t){
      case 1: {
          cout << " Введите сколько книг будет добавлно:";
          int k;
          cin >> k;
          Objec.menu(k);
              }
      }
    system ("pause");
    return 0;
}
l

Добавлено через 10 минут
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
27.05.2013, 10:26 #10
А зачем вы наследуете класс библиотеки от класса книги?
Библиотека не является и не ведет себя как книга. Наследование неуместно.

У вас разное объявление функции print в классе abstr и в классе bibl. Это значит, что для компилятора это две абсолютно разные функции.
2
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.05.2013, 11:13 #11
Цитата Сообщение от Sniti01 Посмотреть сообщение
Подскажите пожалуйста почему я не могу создать объект на класс Bib
В Bibl нужно перегрузить чисто виртуальную функцию.
0
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,461
27.05.2013, 11:31 #12
Цитата Сообщение от alsav22 Посмотреть сообщение
В Bibl нужно перегрузить чисто виртуальную функцию.
Предлагаю сделать так.
1. Создаём класс Library, который моделирует библиотеку, хранит список объектов книг-журналов, вообще говоря предметов библиотеки и реализует операции добавления, удаления, поиска и т.д.
2. Создаём абстрактный класс Item, моделирующий предмет библиотеки. Вот тут то и будут виртуальные методы.
3. Создаём класс Book, наследник Item, который моделирует книгу и переопределяет виртуальные методы Item
4. Создаём класс Magazine, наследник Item, который моделирует журнал и тоже переопределяет.

Тут мы получим и инкапсуляцию, и наследование, и полиморфизм.

Откуда взять ещё два класса, ума не приложу. Придумать ещё одну сущность-наследник Item только если. Например газету, но газета суть тот же журнал
2
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
27.05.2013, 11:39 #13
Может как-нибудь так.
У книги может быть несколько жанров и несколько авторов...
Пять классов достаточно. Наследование запихать вообще некуда.
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
#include <iostream>
#include <string>
#include <vector>
 
class Author {
 public:
  Author() {}
  Author(const std::string &name) : name(name) {}
  const std::string &getName() const { return name; }
 private:
  std::string name;
};
 
class Genre {
 public:
  Genre() {}
  Genre(const std::string &name) : name(name) {}
  const std::string &getName() const { return name; }
 private:
  std::string name;
};
 
class Book {
 public:
  Book() {}
  Book(const std::string &name, std::vector<Author> &authors,
    std::vector<Genre> &genres) : name(name), authors(authors),
    genres(genres) {}
  const std::string &getName() const { return name; }
  const std::vector<Author> &getAuthors() const { return authors; }
  const std::vector<Genre> &getGenres() const { return genres; }
 private:
  std::string name;
  std::vector<Author> authors;
  std::vector<Genre> genres;
};
 
class BookBuilder {
 public:
  BookBuilder() {}
  BookBuilder(const std::string &name) : name(name) {}
  BookBuilder &setName(const std::string &name) {
    this->name = name;
    return *this;
  }
  BookBuilder &addAuthor(const Author &author) {
    authors.push_back(author);
    return *this;
  }
  BookBuilder &addGenre(const Genre &genre) {
    genres.push_back(genre);
    return *this;
  }
  Book getBook() {
    return Book(name, authors, genres);
  }
 private:
  std::string name;
  std::vector<Author> authors;
  std::vector<Genre> genres;
};
 
class Library {
 public:
  typedef std::vector<Book>::iterator Iterator;
  typedef std::vector<Book>::const_iterator ConstIterator;  
  void addBook(const Book &book) {
    books.push_back(book);
  }
  void removeBook(Iterator position) {
    books.erase(position);
  }
  size_t getSize() const { return books.size(); }
  Iterator firstBook() { return books.begin(); }
  Iterator lastBook() { return books.end(); }
  ConstIterator firstBook() const { return books.begin(); }
  ConstIterator lastBook() const { return books.end(); }
 private:
  std::vector<Book> books;
};
 
 
// операторы вывода на экран вместо методов,
// потому что это не то, что делает объект, а то, что делают
// с объектом
std::ostream &operator<<(std::ostream &stream, const Book &book) {
  stream << "Book{" <<
    "name='" << book.getName() << "', " <<
    "authors=[";
  for (size_t i = 0; i < book.getAuthors().size(); ++i) {
    stream << "'" << book.getAuthors()[i].getName() << "'";
    if (i != book.getAuthors().size() - 1) {
      stream << ", ";
    }
  }
  stream << "], genres=[";
  for (size_t i = 0; i < book.getGenres().size(); ++i) {
    stream << "'" << book.getGenres()[i].getName() << "'";
    if (i != book.getGenres().size() - 1) {
      stream << ", ";
    }
  }
  stream << "]}";  
  return stream;
}
 
std::ostream &operator<<(std::ostream &stream, const Library &l) {
  stream << "Library{[";
  for (Library::ConstIterator i = l.firstBook(); i != l.lastBook(); ++i) {
    stream << *i;
    if (i + 1 != l.lastBook()) {
      stream << ", ";
    }
  }
  return stream << "]}";
}
 
int main(int, char**) {
  
  
  Library library;
  library.addBook(BookBuilder()
    .setName("Physics, 9 grade")
    .addAuthor(Author("A.Ya.Kleshnya"))
    .addAuthor(Author("I.Ya.Kleshnya"))
    .addGenre(Genre("Education"))
    .addGenre(Genre("Physics"))
    .getBook());
  library.addBook(BookBuilder()
    .setName("Bible")
    .addAuthor(Author("Nevi'im Rishonim"))
    .addAuthor(Author("Joshua"))
    .addAuthor(Author("Samuel"))
    .addAuthor(Author("Jeremiah"))
    .addAuthor(Author("Isaiah"))
    .addAuthor(Author("Ezekiel"))
    .addAuthor(Author("others"))
    .addGenre(Genre("Pentateuch"))
    .addGenre(Genre("Historical narrative/epic"))
    .addGenre(Genre("The Law"))
    .addGenre(Genre("Wisdom"))
    .addGenre(Genre("Psalms"))
    .addGenre(Genre("Prophecy"))
    .addGenre(Genre("Apocalyptic"))
    .addGenre(Genre("Gospel"))
    .addGenre(Genre("Epistle (letter)"))
    .getBook());
 
  std::cout << library << std::endl;
  
  return 0;
}
1
pizurok
76 / 68 / 3
Регистрация: 05.05.2013
Сообщений: 3,461
27.05.2013, 12:17 #14
Цитата Сообщение от lemegeton Посмотреть сообщение
Может как-нибудь так.
У книги может быть несколько жанров и несколько авторов...
Пять классов достаточно. Наследование запихать вообще некуда.
Мне кажется этот подход не пойдет. Фактически классы жанров и авторов это обертки стринг-ов. Да и наследования нет
1
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
27.05.2013, 12:56  [ТС] #15
Спасибо всем за помощь и за идеи!! Буду пытаться сейчас реализовать

Добавлено через 6 минут
Только мне обязательно необходимо наследование!
0
27.05.2013, 12:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 12:56
Привет! Вот еще темы с ответами:

Подстановка в #include [не домашняя работа] - C++
У меня есть скачанная библиотека log4cplus, но вопрос не по ней. Она лежит распакованная где-то. например, в...

Описать класс "домашняя библеотека" - C++
Задание: Описать класс &quot;домашняя библеотека&quot;,поиск книг по автору и году выдачи, предусмотреть добавленние книг в библеотеку и удаление...

домашняя библиотека - Delphi
помогите создать бомашнюю библиотеку в дэлфи

домашняя библиотека - Delphi БД
помогите сосзать в дэлфи домашнюю библиотеку


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

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

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