Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 50
1

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

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

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

Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным количеством книг, поиска книги по какой-либо признаки (например, по автору или по году издания), добавления книг библиотеку, удаления книг из нее, сортировки книг по различным полей. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
ТРЕБОВАНИЯ К ПРОГРАММЕ
Программа должна отвечать следующим требованиям:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2013, 11:51
Ответы с готовыми решениями:

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

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

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

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

21
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
09.05.2013, 14:20 2
C++
1
2
3
class A {};
class B : public A{};
class C : public B {};
1
0 / 0 / 1
Регистрация: 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
4772 / 2581 / 893
Регистрация: 29.11.2010
Сообщений: 5,582
11.05.2013, 01:09 4
Цитата Сообщение от Sniti01 Посмотреть сообщение
отношений наследования глубиной не менее 3
Аж три уровнял глубины... Это, на минуточку, очень дофига. Будет чертовски сложно придумать, куда-б прикрутить такое.

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

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

Цитата Сообщение от alsav22 Посмотреть сообщение
Для класса "домашняя библиотека" достаточно одного дополнительного класса (или структуры): "книга".
Ещё "книжный шкаф", что-ли, придумать?
буду рад любой помощи! Даже просто на словах, как создать три наследования в моём случае.
0
0 / 0 / 1
Регистрация: 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
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
13.05.2013, 23:25 8
Тут всё неправильно. Используйте не указатели на char, а объекты класса string. Создайте класс Book, с данными о книге, и с методами получения и установки этих данных. Создайте класс Библиотека, который будет представлять из себя массив объектов класса Book. В качестве такого массива используйте vector <Book>. В нём реализуйте методы добавления книг, сортировки, поиска и пр.
1
0 / 0 / 1
Регистрация: 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
4772 / 2581 / 893
Регистрация: 29.11.2010
Сообщений: 5,582
27.05.2013, 10:26 10
А зачем вы наследуете класс библиотеки от класса книги?
Библиотека не является и не ведет себя как книга. Наследование неуместно.

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

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

Откуда взять ещё два класса, ума не приложу. Придумать ещё одну сущность-наследник Item только если. Например газету, но газета суть тот же журнал
2
4772 / 2581 / 893
Регистрация: 29.11.2010
Сообщений: 5,582
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
77 / 69 / 20
Регистрация: 05.05.2013
Сообщений: 3,810
27.05.2013, 12:17 14
Цитата Сообщение от lemegeton Посмотреть сообщение
Может как-нибудь так.
У книги может быть несколько жанров и несколько авторов...
Пять классов достаточно. Наследование запихать вообще некуда.
Мне кажется этот подход не пойдет. Фактически классы жанров и авторов это обертки стринг-ов. Да и наследования нет
1
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 50
27.05.2013, 12:56  [ТС] 15
Спасибо всем за помощь и за идеи!! Буду пытаться сейчас реализовать

Добавлено через 6 минут
Только мне обязательно необходимо наследование!
0
4772 / 2581 / 893
Регистрация: 29.11.2010
Сообщений: 5,582
27.05.2013, 13:17 16
Цитата Сообщение от pizurok Посмотреть сообщение
Фактически классы жанров и авторов это обертки стринг-ов.
Это же пример. У автора, например, может быть еще год рождения, год смерти, у жанра может быть еще что-нибудь, типа поджанра.

Цитата Сообщение от Sniti01 Посмотреть сообщение
Только мне обязательно необходимо наследование!
Для решения поставленной задачи наследование избыточно.
Придется что-то искусственно придумывать.
1
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 50
31.05.2013, 16:15  [ТС] 17
Задание немного изменилось) Теперь я записываю всё информацию в файл, считываю из файла. вывожу всю информацию, добавляю, удаляю, сортирую и всё в фале. Добавление и считывание из файла у меня вышло сделать, но не выходит удаление и сортировка.
На счёт этого я загуглил и понял что для удаления мне надо считать всю информацию из файла, изменить и перезаписать заново, но у меня не выходит создать поиск по файлу. Подскажите пожалуйста, как сделать поис и удаление! Очень нужна помощь!
Желательно к этому коду который я написал:
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
156
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
 
class Book {
 
public:
string Auzer;
string name;
string tupe;
string number;
int year;
int str;
};
 
 
class Librari: public Book {
private:
 vector <string> bibl_book;
public:
 void add (int);
 void prosmotr();
 void sort (int, int);
 void udalenie ();
};
 
 
void Librari::add (int kol){
      string end_str = "end_str";
        for (int i = 0; i < kol; i++){
    cout << "Введите номер книги: ";
    cin >> number;      
    cout << " Введите Автора: " ;
    cin >> Auzer ;
    cout << " Введите название книги: ";
    cin >> name;
    cout << " Введите год издания: ";
    cin >> year;
    cout << " Введите количество страниц: ";
    cin >> str;
    cout << endl;
        //      ******запишем данные в файл*******
    ofstream bibl (" book.txt ", ios_base::app);
    
    if (!bibl.is_open()) // если файл не был открыт
    {
     cout << "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение
    }
    else{
    bibl << number << " ";
    bibl << Auzer  << " ";
    bibl << name << " ";
    bibl << year << " ";
    bibl << str << " ";
    bibl << "\n";
    }
  }
}
 
void Librari::prosmotr (){
    char buf[1000];
    ifstream bibl (" book.txt ", ios_base::in ); // открываем файл только для чтения
    if (!bibl.is_open()) // если файл небыл открыт
    {
     cout << "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение
    }
    else{
            cout << "    Домашняя библиотека!!! " << endl;
        while (!bibl.eof() ){
        bibl.getline(buf,1000);
        cout << buf << endl;
        }
    }   
}
 
    
void Librari::udalenie( ){
 
    char stroka [5000];
    char s [50];
    int i = 0;
    string noll = " ";
    ifstream bibl (" book.txt ", ios_base::app);
    if (!bibl.is_open()) // если файл небыл открыт
    {
     cout << "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение
    }
/*
    string del_book;
 cout << "Введите номер книги которую хотите удалить: ";
 cin >> del_book;*/
 
    bibl.getline(stroka,5000);
 
 }
 
 
 
int _tmain(int argc, _TCHAR* argv[]){
 
 setlocale(LC_CTYPE, "rus");
Librari Object;
                    //      ***********меню программы***********
    while (true){
      cout << "        MENU" << endl;
      cout << "1 - Для добавления книг в библиотеку: " << endl;
      cout << "2 - Для просмотра книг в библиотеке: " << endl;
      cout << "3 - Для сортировки книг в библиотеке: " << endl;
      cout << "4 - Для удаления книг в библиотеке: " << endl;
      cout << "5 - Взять книгу в библиотеке: " << endl;
      cout << "6 - Выйти из программы: " << endl;
      int d;
      cin >> d;
 
      switch(d){
      case 1 : {
          cout << "Введите сколько книг будуть занесены в библиотеку :";
            int kol; 
              cin >> kol;
                Object.add (kol);
                  break;
               }
      case 2 : { Object.prosmotr();
                  break;
               }
      case 3 : {
         /*cout << "Введите адрес 1 книги:";
           int adr_1, adr_2;
            cin >> adr_1;
             cout << "Введите адрес 2 книги:";
              cin >> adr_2;
               Object.sort(adr_1, adr_2);
                  break;*/
               }
       case 4 : {
    /*  cout << "Введите адрес книги которую хотите удалить (от 1 - n)";
           int r;
            cin >> r;*/
                Object.udalenie();
          break;
               }
       case 5: {
              //
               }
       case 6: {return 0; }
          
   default: 
       cout << "Ошибка! Введите правельный знак операции!" << endl;
      }
    }
    system("pause");
    return 0;
}
Добавлено через 17 часов 38 минут
Уже второй день мучаюсь, но не могу найти как удалить строку из файла. Помогите кому не трудно!
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.05.2013, 16:29 18
Цитата Сообщение от Sniti01 Посмотреть сообщение
Уже второй день мучаюсь
И где результат мучений?

Добавлено через 4 минуты
Считали структуры из файла в массив структур (можно сначала посчитать количество строк в файле и создать динамический массив под это количество структур). Перебираете массив, ищете нужную. Если нашли, то запомнили индекс этой структуры в массиве. Открыли файл для записи и записали в файл массив, кроме структуры с найденным индексом.
1
0 / 0 / 1
Регистрация: 25.10.2012
Сообщений: 50
31.05.2013, 16:50  [ТС] 19
Цитата Сообщение от alsav22 Посмотреть сообщение
И где результат мучений?
Результаты мучений - это сделанный мною корявый-неробочий код удаления строки из файла, который я просто удалил.
Как мне записать строку из файла в определенный элемент массива строк?
Я только знаю как одно слово считать в один элемент массива строк. А с помощью getliane() не выходит.
C++
1
2
3
ifstream bibl("имя файла", ios_base::app)
string h[100];
bibl >> h[0];
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.05.2013, 17:09 20
Цитата Сообщение от Sniti01 Посмотреть сообщение
Как мне записать строку из файла в определенный элемент массива строк?
Я же написал:
Цитата Сообщение от alsav22 Посмотреть сообщение
Считали структуры из файла в массив структур
При чём здесь массив строк? А в поля элемента такого массива читайте из файла через >>.

Добавлено через 7 минут
Массив Book создайте. Потом в поля каждого элемента массива читайте из файла:
C++
1
2
3
4
5
6
7
...
Book arr[100];
...
fin >> arr[i].Auzer;
if (fin.eof()) break;
fin >> arr[i].name;
...
и т.д. Расписывать детали времени нет.
1
31.05.2013, 17:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2013, 17:09
Помогаю со студенческими работами здесь

Описать класс «Домашняя библиотека»; реализовать поиск книги по заданному признаку
Помогите решить програму: Описать класс «домашняя библиотека». предусмотреть возможность работы с...

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

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

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


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

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