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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 43, средняя оценка - 4.63
sentinel
7 / 7 / 1
Регистрация: 02.12.2009
Сообщений: 102
#1

Описать класс «домашняя библиотека» - C++

28.12.2009, 22:24. Просмотров 6006. Ответов 10
Метки нет (Все метки)

вот задание
Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку (например, по автору или по году издания), добавления книг в библиотеку, удаления книг из нее, сортировки книг по разным полям.
Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2009, 22:24     Описать класс «домашняя библиотека»
Посмотрите здесь:

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

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

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

Описать класс Библиотека - C++
Люди добрые помогите описать класс "Домашняя библиотека" # include<iostream.h> # include<conio.h> # include<string.h> #...

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
29.12.2009, 21:08     Описать класс «домашняя библиотека» #2
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
class HomeLib{
       private:
                 struct book{
                          string author;
                          int date; //год издания
                          book (char *szpAuthor, int nDate)
                          {
                                 author=*szpAuthor;
                                 date=nDate;
                          }
                 };
                 List <book> Library;
       public:
                 string find(int date) //поиск по дате
                 {
                          for (list <book>::iterator i=Library.begin();i!=Library.end();i++)
                          {
                               if (date==i->date) return i->author;//правда такой метод будет искать до первого подходящего элемента, но все же...
                           }
                  }
                  int find(char *szName) //поиск по имени автора
                 {
                          for (list <book>::iterator i=Library.begin();i!=Library.end();i++)
                          {
                               if (szName==i->author) return i->date;//тоже до первого подходящего
                           }
                  }
                  void add(book b) {Library.push_back(b);}
                  void erase(book b);//определить метод, по удалению книги
                  void sortname(){/*реализация сортировки по ключу author*/};
                  void sortdate(){/*реализация сортировки по ключу date*/};
                  //еще чего-нибудь
};
ну и так далее
sentinel
7 / 7 / 1
Регистрация: 02.12.2009
Сообщений: 102
29.12.2009, 21:12  [ТС]     Описать класс «домашняя библиотека» #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
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
=0; 
        last = first; 
    } 
  Library::~Library() 
  { 
    delete last; 
    delete first; 
  } 
    struct list 
  { 
        char avtor[10]; 
    char naz[10]; 
        int god; 
        list* next; 
    }; 
    list* GetAutor(char s[]) 
  { 
        list* temp = first; 
        while(temp) 
        { 
            if(strcmp(s, temp->avtor) == 0) return temp; 
            temp = temp->next; 
        } 
        return NULL; 
    } 
  list* GetYear(int i) 
  { 
        list* temp = first; 
        while(temp) 
        { 
            if(temp->god==i) return temp; 
            temp = temp->next; 
        } 
        return 0; 
    } 
    void Set(char avtor[], char naz[], int god) 
  { 
        if(first != last) 
        { 
            list* l = new list; 
            strcpy(l->avtor, avtor); 
      strcpy(l->naz, naz); 
      l->god=god; 
      l->next = 0; 
            first->next = l; 
            last = l; 
    } 
    else 
    { 
            strcpy(first->avtor, avtor); 
      strcpy(first->naz, naz); 
      first->god=god; 
        } 
    } 
  void Delete (char naz[]) 
  { 
    list *temp, *t; 
    temp=first; 
    if(strcmp(naz, first->naz) == 0) {delete first; first->next=first->next->next;} 
    while(temp->next) 
        { 
      t=temp; 
            if(strcmp(naz, temp->next->naz) == 0) {temp->next=temp->next->next;delete temp->next; break;} 
            temp = temp->next; 
        } 
  } 
 
    void Print() 
  { 
        list* temp = first; 
        while(temp) 
    { 
            cout<<temp->avtor<<" : "<<temp->naz<<" "<<temp->god<<"y"; 
      cout<<endl; 
            temp = temp->next; 
    } 
    } 
private: 
    list* last; 
    list* first; 
 
}; 
 
int Menu() 
 { 
  int num; 
  cout<<"1 Add book"<<endl; 
  cout<<"2 Search by author"<<endl; 
  cout<<"3 Search by year"<<endl; 
  cout<<"4 Delete book by name"<<endl; 
  cout<<"5 Exit"<<endl; 
 
  cin>>num; 
  if(num>0 && num<5) return num; 
  return 0; 
 } 
 
void main() 
{ 
  Library l; 
  /*l.Set("Pyshkin", "Nazvanie", 1234); 
  l.Print();*/ 
 
  char n[10], a[10]; 
  int i, y; 
  while(1) 
  {i=Menu(); 
  switch(i) 
  { 
  case 1: cout<<"Name"<<endl;cin>>n; cout<<"Author"<<endl;cin>>a;cout<<"Year"<<endl;cin>>y; l.Set(a, n, y); break; 
  case 2: cout<<"Author"<<endl;cin>>a; l.GetAutor(a); l.Print(); break; 
  case 3: cout<<"Year"<<endl;cin>>y; l.GetYear(y); l.Print(); break; 
  case 4: cout<<"Enter book name"<<endl<<"Deleting"; l.Delete(n);break; 
  case 5: break; 
  default: cout<<"Enter right number!"<<endl; break; 
  }} 
}
не работает удаление книги. вот эта часть:

C++
1
2
3
4
5
6
7
8
9
10
11
12
void Delete (char naz[]) 
{ 
list *temp, *t; 
temp=first; 
if(strcmp(naz, first->naz) == 0) {delete first; first->next=first->next->next;} 
while(temp->next) 
{ 
t=temp; 
if(strcmp(naz, temp->next->naz) == 0) {temp->next=temp->next->next;delete temp->next; break;} 
temp = temp->next; 
} 
}
никак не могу понять почему(((
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
29.12.2009, 21:22     Описать класс «домашняя библиотека» #4
C++
1
delete first; first->next=first->next->next;
delete first - возвращает область памяти на которую ссылся first обратно системе, для программы этой области уже не существует соответственно обращаться к её полям: "first->next" нельзя!!!
у тебя ошибка чтения при удалении да? надо исправть, о чем я выше сказал:
надо примерно так:
C++
1
2
3
4
5
//...
      temp=first->next;
      delete first;
      first=temp;
//...
может быть ошбка не тлько в этом, код не отформатирован, трудно в него вникать... а куска сверху ваще нет
sentinel
7 / 7 / 1
Регистрация: 02.12.2009
Сообщений: 102
29.12.2009, 21:50  [ТС]     Описать класс «домашняя библиотека» #5
всё ок щас
koroleva
0 / 0 / 0
Регистрация: 22.03.2011
Сообщений: 7
22.03.2011, 22:34     Описать класс «домашняя библиотека» #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
=0; 
        last = first; 
    } 
  Library::~Library() 
  { 
    delete last; 
    delete first; 
  } 
    struct list 
  { 
        char avtor[10]; 
    char naz[10]; 
        int god; 
        list* next; 
    }; 
    list* GetAutor(char s[]) 
  { 
        list* temp = first; 
        while(temp) 
        { 
            if(strcmp(s, temp->avtor) == 0) return temp; 
            temp = temp->next; 
        } 
        return NULL; 
    } 
  list* GetYear(int i) 
  { 
        list* temp = first; 
        while(temp) 
        { 
            if(temp->god==i) return temp; 
            temp = temp->next; 
        } 
        return 0; 
    } 
    void Set(char avtor[], char naz[], int god) 
  { 
        if(first != last) 
        { 
            list* l = new list; 
            strcpy(l->avtor, avtor); 
      strcpy(l->naz, naz); 
      l->god=god; 
      l->next = 0; 
            first->next = l; 
            last = l; 
    } 
    else 
    { 
            strcpy(first->avtor, avtor); 
      strcpy(first->naz, naz); 
      first->god=god; 
        } 
    } 
  void Delete (char naz[]) 
  { 
    list *temp, *t; 
    temp=first; 
    if(strcmp(naz, first->naz) == 0) {delete first; first->next=first->next->next;} 
    while(temp->next) 
        { 
      t=temp; 
            if(strcmp(naz, temp->next->naz) == 0) {temp->next=temp->next->next;delete temp->next; break;} 
            temp = temp->next; 
        } 
  } 
 
    void Print() 
  { 
        list* temp = first; 
        while(temp) 
    { 
            cout<<temp->avtor<<" : "<<temp->naz<<" "<<temp->god<<"y"; 
      cout<<endl; 
            temp = temp->next; 
    } 
    } 
private: 
    list* last; 
    list* first; 
 
}; 
 
int Menu() 
 { 
  int num; 
  cout<<"1 Add book"<<endl; 
  cout<<"2 Search by author"<<endl; 
  cout<<"3 Search by year"<<endl; 
  cout<<"4 Delete book by name"<<endl; 
  cout<<"5 Exit"<<endl; 
 
  cin>>num; 
  if(num>0 && num<5) return num; 
  return 0; 
 } 
 
void main() 
{ 
  Library l; 
  /*l.Set("Pyshkin", "Nazvanie", 1234); 
  l.Print();*/ 
 
  char n[10], a[10]; 
  int i, y; 
  while(1) 
  {i=Menu(); 
  switch(i) 
  { 
  case 1: cout<<"Name"<<endl;cin>>n; cout<<"Author"<<endl;cin>>a;cout<<"Year"<<endl;cin>>y; l.Set(a, n, y); break; 
  case 2: cout<<"Author"<<endl;cin>>a; l.GetAutor(a); l.Print(); break; 
  case 3: cout<<"Year"<<endl;cin>>y; l.GetYear(y); l.Print(); break; 
  case 4: cout<<"Enter book name"<<endl<<"Deleting"; l.Delete(n);break; 
  case 5: break; 
  default: cout<<"Enter right number!"<<endl; break; 
  }} 
}
Мальчики, а у меня программа эта не запускается(( что делать???
Bogdanalex
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 3
23.05.2011, 00:56     Описать класс «домашняя библиотека» #7
можно полный, рабочий код?? очень нужно, а то не разбираюсь чёт
Bogdanalex
1 / 1 / 0
Регистрация: 16.05.2011
Сообщений: 3
30.05.2011, 21:43     Описать класс «домашняя библиотека» #8
Да, не кто так и не помог....вот, сам написал

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
157
158
159
160
161
162
163
164
# include<iostream.h>
# include<conio.h>
# include<string.h>
# include<stdio.h>
 
 
struct mas
{
char name[20];
char autor[20];
int god;
};
 
class bibl
{
private:
   mas kn;
public:
   void in(bibl[],int&);
   void vyb(bibl[],int&);
   void poisk(bibl[],int&);
   void udal(bibl[],int&);
   void dobavl(bibl[],int&);
   void vivod(bibl[],int&);
};
void main()
{
clrscr();
bibl a[10];
int x=0;
cout<<"Vvedite chislo knig:\n";
    cin>>x;
cout<<"Vvedite vashi knigi:\n";
    a[x].in(a,x);
getch();
}
void bibl::in(bibl a[], int&x)
{
for(int i=0;i<x;i++)
   {
   cout<<"Nazvanie: ";
      cin>>a[i].kn.name;
   cout<<"Avtor: ";
      cin>>a[i].kn.autor;
   cout<<"God izdaniya: ";
      cin>>a[i].kn.god;
      }
getch();
clrscr();
 
a[x].vyb(a,x);
}
void bibl::vyb(bibl a[],int&x)
{
int vybor=0;
do
{
clrscr();
cout<<"1-Poisk knig\n2-udalenye knigi\n3-dobavlenye knigi\n4-pokazat biblioteky\n5-vihod\nVash vybor:";
cin>>vybor;
clrscr();
   if(vybor==1)
      a[x].poisk(a,x);
   if(vybor==2)
      a[x].udal(a,x);
   if(vybor==3)
      a[x].dobavl(a,x);
   if(vybor==4)
      a[x].vivod(a,x);
}
while(vybor!=5);
}
void bibl::poisk(bibl a[],int&x)
{
int p=0,god=0;
char name[20],autor[20];
    cout<<"1-poisk po nazvaniu\n2-poisk po avtory\n3-poisk po gody izdaniya\nVash vibor:";
    cin>>p;
    clrscr();
    
    if(p==1)
        {
        int f=0;
        cout<<"Vvedite nazvanie: ";
        cin>>name;
    for(int i=0;i<x;i++)
    {
        if(strcmp(name,a[i].kn.name)==0)
           {
           cout<<a[i].kn.name<<"     "<<a[i].kn.autor<<"     "<<a[i].kn.god<<endl;
           f++;
           }}
        if(f==0)
           cout<<"Net takix knig!";
        getch();
        }
    if(p==2)
        {
        int h=0;
        cout<<"Vvedite avtora: ";
        cin>>autor;
    for(int i=0;i<x;i++)
    {
        if(strcmp(autor,a[i].kn.autor)==0)
           {
           cout<<a[i].kn.name<<"     "<<a[i].kn.autor<<"     "<<a[i].kn.god<<endl;
           h++;
           }}
        if(h==0)
           cout<<"Net takix knig!";
        getch();
        }
    if(p==3)
        {
        int g=0;
        cout<<"Vvedite god izdaniya: ";
        cin>>god;
    for(int i=0;i<x;i++)
    {
        if(god==a[i].kn.god)
           {
           cout<<a[i].kn.name<<"     "<<a[i].kn.autor<<"     "<<a[i].kn.god<<endl;
           g++;
           }}
        if(g==0)
           cout<<"Net takix knig!";
        getch();
        }
 
 
 
}
void bibl::udal(bibl a[],int&x)
{
int udal;
cout<<"vvedit adress dlya udaleniya < "<<x<<endl;
    cin>>udal;
        if(x==1)
            cout<<"udalenye nevozmozhno";
            strcpy(a[udal-1].kn.name,a[x-1].kn.name);
            strcpy(a[udal-1].kn.autor,a[x-1].kn.autor);
            a[udal-1].kn.god=a[x-1].kn.god;
            x--;
        cout<<"Udaleno!\n";
}
void bibl::dobavl(bibl a[],int&x)
{
   cout<<"Nazvanie: ";
      cin>>a[x+1].kn.name;
   cout<<"Avtor: ";
      cin>>a[x+1].kn.autor;
   cout<<"God izdaniya: ";
      cin>>a[x+1].kn.god;
    x++;
}
void bibl::vivod(bibl a[],int&x)
{
for(int i=0;i<x;i++)
   {
   cout<<a[i].kn.name<<"     "<<a[i].kn.autor<<"     "<<a[i].kn.god<<endl;
   }
getch();
clrscr();
}
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
22.09.2011, 18:09     Описать класс «домашняя библиотека» #9
Функция добавления не работает((((
_veritas_
Сообщений: n/a
25.01.2013, 05:22     Описать класс «домашняя библиотека» #10
Вот так должно работать добавление:
C++
1
2
3
4
5
6
7
8
9
10
void bibl::dobavl(bibl a[],int&x)
{
    cout<<"Nazvanie: ";
         cin>>a[x].kn.name;
    cout<<"Avtor: ";
         cin>>a[x].kn.autor;
    cout<<"God izdaniya: ";
         cin>>a[x].kn.god;
    x++;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 22:40     Описать класс «домашняя библиотека»
Еще ссылки по теме:

Описать класс "Библиотека" - C++
Помогите пожалуйста Описать класс «Библиотека», в полях которого хранится следующая информация о книгах: автор, название,...

Класс библиотека и шаблоны - C++
Есть такой код: Library.h #ifndef LIBRARY_H #define LIBRARY_H #include &lt;iostream&gt; #include &lt;queue&gt; #include &quot;Book.h&quot; using...

Библиотека STL, класс вектор - C++
Помогите написать прогу... вот задание: Использовать класс vector библиотеки STL для хранения каталога книг. Книги характеризуются...

Библиотека STL, класс ЛИСТ - C++
Прив Всем! Нужна помощь... вот задание: ========================================================================== Используй класс...

Создать шаблонный класс библиотека на основе односвязного списка - C++
мне нужно создать класс библиотека на основе односвязного списка, но список должен быть шаблонным, дело в том, что по заданию нужно...


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

Или воспользуйтесь поиском по форуму:
Sniti01
0 / 0 / 0
Регистрация: 25.10.2012
Сообщений: 50
08.05.2013, 22:40     Описать класс «домашняя библиотека» #11
Если не трудно конечно, может кто-то написать подробный комментарий к программе. Не всё понятно как работает. Заранее спасибо.
Yandex
Объявления
08.05.2013, 22:40     Описать класс «домашняя библиотека»
Ответ Создать тему
Опции темы

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