Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2010, 22:09   #1
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию Описание класса.

Доброго времени суток, уважаемые форумчане! Возникла проблема с описание класса... Суть задачи следующая:
Описать класс «домашняя библиотека». Предусмотреть возможность работы с произвольным числом книг, поиска книги по какому-либо признаку (например, по автору или по году издания), добавления книг в библиотеку, удаления книг из нее, сортировки книг по разным полям. Написать программу, демонстрирующую работу с этим классом. Использовать конструктор.
Так вот в чём собственно проблема... После описания классов, дальше во всех функция требуется описание массива mas, а как сделать это не представляю, что только не пробовал уже...
И ещё хотелось бы спросить по поводу добавления и удаления книг... Сколько не ломал голову, так и не додумался как это реализовать можно... Помогите пожалуйста!


Код:
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <conio.h>

using namespace std;
class stud{
	public:
	char name[50];    	
	char author[50]; 	
	char year[50];  	
};

class exam{
	public:
	int col;    	 
	stud *mas;  	 
	exam(int n){
		col=n;
	    mas=new stud[col];
	}


void Get(){
		cout<<"Vvod KNIG >>\n";
		for(int i=0;i<col;i++){
			cout<<"Vvedite nazvanie "<<i+1<<" knigi:"<<"\n";
			cin>>mas[i].name;
			cout<<"Vvedite avtora "<<i+1<<" knigi"<<"\n";
			cin>>mas[i].author;
			cout<<"Vvedite god izdani9: "<<" knigi"<<"\n";
			cin>>mas[i].year;
			cout<<"\n";
		}
	}
	

void Sort(){
		for(int i=0;i<col;i++){
			for(int j=1;j<col-1;j++){
				if(strcmp(mas[i].author,mas[j+1].author)>1){
				stud temp=mas[i];
				mas[i]=mas[j+1];
				mas[j+1]=temp;
				}
			}
		}
	}
	
void Sort2(){
		for(int i=0;i<col;i++){
			for(int j=1;j<col-1;j++){
				if(strcmp(mas[i].year,mas[j+1].year)>1){
				stud temp=mas[i];
				mas[i]=mas[j+1];
				mas[j+1]=temp;
				}
			}
		}
	}
	
	void Print(){
		cout<<"\n";
		for(int i=0;i<col;i++){
		     cout<<mas[i].name<<"\n";
 	         cout<<mas[i].author<<"\n";
		     cout<<mas[i].year<<"\n";
		     cout<<"\n";
		}
		cout<<"\n";
	}
};

main()
{
	int n,i;
	cout<<"Vvedite kolichestvo knig:";
	cin>>n;
	exam examved(n);
	examved.Get();
	examved.Print();
    examved.Sort();
	examved.Sort2();
	system("PAUSE");
	return EXIT_SUCCESS;
}

Последний раз редактировалось frem-dag; 11.01.2010 в 00:51.
frem-dag вне форума Ответить с цитированием
Старый 10.01.2010, 22:31   #2
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Смотрите в сторону stl контейнеров. std::vector<book>, std::list<book>, std:eque<book>. там есть все, что вам нужно для работы с массивами данных.
_Ч_ вне форума Ответить с цитированием
Старый 11.01.2010, 00:49   #3
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

Да, спасибо, я скачал несколько книг по теме, нашёл свои косяки в массиве Код исправил...
Но вот с добавление и удаление новых книг что-то так и не додумался. Подскажите пожалуйста.
frem-dag вне форума Ответить с цитированием
Старый 11.01.2010, 03:34   #4
Shymep
 
Аватар для Shymep
 
Регистрация: 10.01.2010
Сообщений: 4
По умолчанию

Добавить новый объект можно в зависимости от того, какой структурой данных вы пользуетесь
1) Списочной
2) Динамическими массивами
3) Классами типа vector, list, map etc

Лично я предпочитаю вектор
Код:
//---------------------------------------------------------------------------
#include <iostream>
#include <vector>
using namespace std;
class stud{
public:
	char name[50];
	char author[50];
	char year[50];
};

void addStud(vector<stud>&v)
{
	stud s;
	cin>>s.name;
	cin>>s.author;
	cin>>s.year;
	v.push_back(s);

}
void print(vector<stud>v)
{
	int size = v.size();
	for(int i = 0; i < size; i++)
		cout<<v[i].name<<" "<<v[i].author<<" "<<v[i].year<<endl;
}
int main(int argc, char* argv[])
{
	vector<stud>v;
	int n;
	cin>>n;
	for(int i = 0; i < n; i++)
		addStud(v);
	v.erase(v.begin() + 2); //удаляем 3 элемент
	print(v);
	return 0;
}
//---------------------------------------------------------------------------
Однако, если у вас идет работа с динамическими массивами, чтобы добавить объект нужно запрограммировать простой алгоритм
1) Выделяем память под массив из n+1 объектов
2) Копируем первые n объектов из исходного массива
3) Добавляем n+1 объект
4) Назначаем новый массив исходным, а старый исходный массив удаляем.

Удаление:
1) Выделяем память под массив из n-1 объектов
2) Копируем объекты без учета k-го (удаляемого)
3) Назначаем новый массив исходным, а старый исходный массив удаляем.

Думаю вы справитесь
Shymep вне форума Ответить с цитированием
Старый 11.01.2010, 19:53   #5
frem-dag
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 23
По умолчанию

Спасибо большое. Разобрался
frem-dag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описание массива ddima Помощь студентам 5 28.12.2009 17:05
Если в классе объявить объект другого класса,будет ли видно переменные первого класса из объекта второго? TwiX Общие вопросы Delphi 3 15.11.2009 00:54
Описание библиотек в Си papochka Общие вопросы C/C++ 1 28.10.2009 10:51
Описание к файлам Naposaram PHP 4 09.02.2009 09:24