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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
09.05.2013, 11:51     Курсовая: Домашняя библиотека #1
Добрый день участники форума! На этом форуме видел программу к этому задание, но оно не удовлетворяет требованию курсовой, и хочу сам разобраться и написать) Напомню задание:

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

Описать класс «домашняя библиотека» C++
Домашняя бухгалтерия C++
C++ Описать класс «домашняя библиотека»
C++ Подстановка в #include [не домашняя работа]
библиотека C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stima
429 / 284 / 16
Регистрация: 22.03.2011
Сообщений: 923
Завершенные тесты: 1
09.05.2013, 14:20     Курсовая: Домашняя библиотека #2
C++
1
2
3
class A {};
class B : public A{};
class C : public B {};
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 минут
Очень нужна помощь!
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
11.05.2013, 01:09     Курсовая: Домашняя библиотека #4
Цитата Сообщение от Sniti01 Посмотреть сообщение
отношений наследования глубиной не менее 3
Аж три уровнял глубины... Это, на минуточку, очень дофига. Будет чертовски сложно придумать, куда-б прикрутить такое.

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

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

Цитата Сообщение от alsav22 Посмотреть сообщение
Для класса "домашняя библиотека" достаточно одного дополнительного класса (или структуры): "книга".
Ещё "книжный шкаф", что-ли, придумать?
буду рад любой помощи! Даже просто на словах, как создать три наследования в моём случае.
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 минуты
Подскажите пожалуйста, если не трудно!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.05.2013, 23:25     Курсовая: Домашняя библиотека #8
Тут всё неправильно. Используйте не указатели на char, а объекты класса string. Создайте класс Book, с данными о книге, и с методами получения и установки этих данных. Создайте класс Библиотека, который будет представлять из себя массив объектов класса Book. В качестве такого массива используйте vector <Book>. В нём реализуйте методы добавления книг, сортировки, поиска и пр.
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 минут
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
27.05.2013, 10:26     Курсовая: Домашняя библиотека #10
А зачем вы наследуете класс библиотеки от класса книги?
Библиотека не является и не ведет себя как книга. Наследование неуместно.

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

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

Откуда взять ещё два класса, ума не приложу. Придумать ещё одну сущность-наследник Item только если. Например газету, но газета суть тот же журнал
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
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;
}
pizurok
 Аватар для pizurok
53 / 67 / 3
Регистрация: 05.05.2013
Сообщений: 2,688
27.05.2013, 12:17     Курсовая: Домашняя библиотека #14
Цитата Сообщение от lemegeton Посмотреть сообщение
Может как-нибудь так.
У книги может быть несколько жанров и несколько авторов...
Пять классов достаточно. Наследование запихать вообще некуда.
Мне кажется этот подход не пойдет. Фактически классы жанров и авторов это обертки стринг-ов. Да и наследования нет
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
27.05.2013, 12:56  [ТС]     Курсовая: Домашняя библиотека #15
Спасибо всем за помощь и за идеи!! Буду пытаться сейчас реализовать

Добавлено через 6 минут
Только мне обязательно необходимо наследование!
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
27.05.2013, 13:17     Курсовая: Домашняя библиотека #16
Цитата Сообщение от pizurok Посмотреть сообщение
Фактически классы жанров и авторов это обертки стринг-ов.
Это же пример. У автора, например, может быть еще год рождения, год смерти, у жанра может быть еще что-нибудь, типа поджанра.

Цитата Сообщение от Sniti01 Посмотреть сообщение
Только мне обязательно необходимо наследование!
Для решения поставленной задачи наследование избыточно.
Придется что-то искусственно придумывать.
Sniti01
0 / 0 / 0
Регистрация: 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 минут
Уже второй день мучаюсь, но не могу найти как удалить строку из файла. Помогите кому не трудно!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.05.2013, 16:29     Курсовая: Домашняя библиотека #18
Цитата Сообщение от Sniti01 Посмотреть сообщение
Уже второй день мучаюсь
И где результат мучений?

Добавлено через 4 минуты
Считали структуры из файла в массив структур (можно сначала посчитать количество строк в файле и создать динамический массив под это количество структур). Перебираете массив, ищете нужную. Если нашли, то запомнили индекс этой структуры в массиве. Открыли файл для записи и записали в файл массив, кроме структуры с найденным индексом.
Sniti01
0 / 0 / 0
Регистрация: 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];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2013, 17:09     Курсовая: Домашняя библиотека
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 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;
...
и т.д. Расписывать детали времени нет.
Yandex
Объявления
31.05.2013, 17:09     Курсовая: Домашняя библиотека
Ответ Создать тему
Опции темы

Текущее время: 17:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru