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

Составить программу, которая содержит текущую информацию о книгах в библиотеке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строка кода http://www.cyberforum.ru/cpp-beginners/thread769510.html
Можно ли как-то выяснить номер строки, на которой написан код? Допустим: void main() { printf("Hello\n"); printf("This is code-line #%d\n", SOME_PREPROCESSOR_CONSTANT); }
C++ Динамическое выделение памяти Здраствуйте. Собственно сам код и вопрос: почему могу свободно выходить за границы массива? Для чего тогда размерность указывается... Объясните пожалуйста. int* foo = new int; cout << foo; http://www.cyberforum.ru/cpp-beginners/thread769504.html
C++ Блок-схема сортировки методом пузырька массива строк
#include "stdafx.h" #include <string.h> // библиотека для работы со строками void BubbleSort(char** x,int n) //в нее отправляется двумерный массив { char tmp; for (int i = 0; i < n; i++) { for (int j = n-1; j > i; j-- ) //сортируется { if (strlen(x)<strlen(x))
C++ Dev C++: процес компиляции обрывается?
При Компиляции при проверке кода процес обрывается. Никаких сообщений об ошибках не выводится. при нажатие RUN-появляется сообщение что file not compiled. Но я ввожу пример из методичке для студентов. Может там что то встроено чтобы это делалось а код не запускался. Но я уже вручную переписывал этот код. Что можно сделать в этом случае. Как исправить ошибку. 2. И еще вопрос. Скорее я в этом...
C++ преобразование в число последовательности http://www.cyberforum.ru/cpp-beginners/thread769467.html
напишите программу преобразования в число последовательности символов-цифр, вводимых с клавиатуры, размещенных в массиве из 12 элементов, образующих запись целой части числа (дробной части числа, но это вторая задача) помогите девушке ничего не смыслящей в программировании
C++ Написать программу в субботу Очень прошу написать мне программу в субботу, пожалуйста, кто сможет? Добавлено через 1 минуту На базе знаний 1-го курса задачка будет, кто поможет? подробнее

Показать сообщение отдельно
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
23.01.2013, 14:08     Составить программу, которая содержит текущую информацию о книгах в библиотеке
Тут недавно делал одному такое же задание. Препод не принял -- задача оказалась с подвохом. Надо было, оказывается, правильно декомпозировать, а не делать прямо по тексту.

Главная проблема в том, что количество книг в хранилище не является свойством книги и нельзя его делать членом класса. Нужно делать отдельную сущность (а-ля DAO), которая уже будет управлять книгами и хранить соответствие "книга"-"её количество".

В общем, две сущности, и несколько операторов для работы с ними.

Задача была на сущности, поэтому пример примитивнейший.
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
#include <iostream>
#include <string>
#include <map>
 
class Book {
 public:
  Book(const std::string &udcCode, const std::string &author,
    const std::string &name, int year) : udcCode(udcCode),
    author(author), name(name), year(year) {}
  const std::string &getUdcCode() const { return udcCode; }
  const std::string &getAuthor() const { return author; }
  const std::string &getName() const { return name; }
  int getYear() const { return year; }
 private:
  std::string udcCode;
  std::string author;
  std::string name;
  int year;
};
 
bool operator==(const Book &a, const Book &b) {
  return (&a == &b) || 
    (a.getUdcCode() == b.getUdcCode() &&
    a.getAuthor() == b.getAuthor() &&
    a.getYear() == b.getYear());
};
 
bool operator!=(const Book &a, const Book &b) {
  return !(a == b);
};
 
bool operator<(const Book &a, const Book &b) {
  if (a.getUdcCode() == b.getUdcCode()) {
    if (a.getAuthor() == b.getAuthor()) {
      if (a.getName() == b.getName()) {
        return a.getYear() < b.getYear();
      } else {
        return a.getName() < b.getName();
      }
    } else {
      return a.getAuthor() < b.getAuthor();
    }
  } else {
    return a.getUdcCode() < b.getUdcCode();
  }
};
 
std::ostream &operator<<(std::ostream &stream, const Book &book) {
  return stream << "Book{" <<
    "udcCode=\"" << book.getUdcCode() << "\"," <<
    "author=\"" << book.getAuthor() << "\"," <<
    "name=\"" << book.getName() << "\"," <<
    "year=" << book.getYear() << "}";
};
 
class Library {
 public:
  typedef std::map<Book, int> StorageType;
  typedef StorageType::iterator Iterator;
  typedef StorageType::const_iterator ConstIterator;
  Library() : books() {}
  void add(const Book &book, int count) {
    books[book] = count;
  }
  int get(const Book &book, int count) {
    if (books[book] < count) {
      count = books[book];
    }
    books[book] -= count;
    return count;
  }
  size_t size() const { return books.size(); }
  ConstIterator begin() const { return books.begin(); }
  Iterator begin() { return books.begin(); }
  ConstIterator end() const { return books.end(); }
  Iterator end() { return books.end(); }
 private:
  StorageType books;
};
 
std::ostream &operator<<(std::ostream &stream, const Library &library) {
  stream << "Library{";
  for (Library::ConstIterator i = library.begin(); i != library.end(); ++i) {
    stream << "{book=" << i->first << ",count=" << i->second << "},";
  }
  return stream << "}";
}
 
int main(int argc, char **argv) {
  Library library;
  
  // добавление книг
  library.add(Book("51-76", "Peace, Green", "Biohazard in Numbers", 2001), 2);
  library.add(Book("51-76", "Peace, Green", "Total Waste", 1987), 1);
  library.add(Book("613.6.015", "Propaganda Department", "Take care of your teeth", 2002), 5);
 
  // вывод всех книг
  std::cout << library << std::endl;
 
  Book aBook = Book("51-76", "Peace, Green", "Total Waste", 1987);
 
  // попытка взять две книги
  std::cout << "Requesting 2x" << aBook << std::endl;
  int count = library.get(aBook, 2);
  if (count > 0) {
    std::cout << "Was able to get " << count << " book(s) of 2 requested." << std::endl;
  } else {
    std::cout << "Was not able to get a book." << std::endl;
  }
  
  // возврат
  std::cout << "Returning " << count << "x" << aBook << std::endl;
  library.add(aBook, count);
  
  return 0;
};
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru