Консультация № 184023
14.09.2011, 11:59
65.00 руб.
0 5 1
Здравствуйте! Прошу помощи в следующем вопросе:
C++ консольное приложение.
Выполнить упражнение, разместив описание
структуры в заголовочном файле, а определения функций и главную функцию
программы — в двух отдельных файлах.
Составить программу, которая содержит текущую информацию о книгах в библиотеке.
Сведения о книгах содержат:
• номер УДК;
• фамилию и инициалы автора;
• название;
• год издания;
а количество экземпляров данной книги в библиотеке.
Программа должна обеспечивать:
• начальное формирование данных о всех книгах в библиотеке в виде списка;
• при взятии каждой книги вводится номер УДК, и программа уменьшает значение
количества книг на единицу или выдает сообщение о том, что требуемой
книги в библиотеке нет, или требуемая книга находится на руках;
• при возвращении каждой книги вводится номер УДК, и программа увеличивает
значение количества книг на единицу;
• по запросу выдаются сведения о наличии книг в библиотеке.

Обсуждение

давно
Старший Модератор
17042
808
14.09.2011, 13:11
общий
С учётом того, что программа на C++: нужна именно структура или можно использовать класс с открытыми членами?
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
14.09.2011, 14:03
общий
Адресаты:
Да структура. Задание по учебнику Павловская Т. С. "С++ Програмирование на языке высокого уровня"
Классы изучаем позднее.
давно
Профессор
230118
3054
15.09.2011, 13:11
общий
15.09.2011, 13:13
Какая среда разработки?
Какую часть задания Вы можете сделать самостоятельно и в чем требуется помощь?
Трудно ожидать, что напишут всю программу целиком за такую сумму.
Неизвестный
16.09.2011, 06:54
общий
Адресаты:
Среда любая.
Неизвестный
20.09.2011, 16:36
общий
это ответ
Здравствуйте, Посетитель - 380644!
Например, так. Хотя какой смысл использовать именно структуру, не понимаю.
Создаёте заголовочный файл, например, List.h. В нём объявляем наши типы (для удобства я использую две структуры):
[code h=200]struct LElem { //Элемент списка
int info;
int year;
char author[51];
char name[101];
LElem* next; //Ссылка на следующий
};

struct CLists { //Общий класс списка
LElem* first; //Ссылка на первый
int kol; //Число элементов
CLists();
~CLists ();
void ClearList (); //Очистить список
void Vivod (); //Вывод списка
int GetBook (int x);
void ReturnBook (LElem x);
bool HasBook (int x);
};[/code]
Затем создаёте к нему в пару файл List.cpp, подключаете к нему через директиву include соответствующий заголовочный файл, и уже сюда помещаете реализацию данных функций:
[code h=200]#include "List.h"


CLists::CLists () //Конструктор
{ //Здесь обнуляем все переменные
first = NULL;
kol = 0;
}

CLists::~CLists () //Деструктор
{
ClearList (); //Очищаем список
}

void CLists::ClearList () //Очистка списка
{
LElem* b;
LElem* sp=first; //Идём по списку, освобождая память из-под каждого элемента
for (int i=1; i<=kol; i++) { b=sp; sp=sp->next; delete b;}
sp = NULL;
first = NULL;
kol = 0;
}

void CLists::Vivod () //Вывод списка на экран
{
LElem* sp = first;
cout << endl;
while (sp!=NULL) {
cout << sp->name << endl;
sp = sp->next;
}
}

void CLists::ReturnBook (LElem x) //Новый элемент в конец
{
LElem* s, *sp;
sp = first;
kol++; //наращиваем количество
s = new LElem; //Выделяем память под новый
s->info = x.info; //Запоминаем значение
strcpy (s->author, x.author);
strcpy (s->name, x.name);
s->year = x.year;
s->next = NULL;
if (sp!=NULL) { //Если элементы уже есть
while (sp->next!=NULL) sp = sp->next; //Идём в конец
sp->next = s; //Запоминаем новый элемент
} else { //Иначе запоминаем его как первый
first = s;
}
}
int CLists::GetBook (int x) //Удаление из конца
{
int er = 1; //Индикатор ошибки
LElem* s;
if (first == NULL) return er; //Если элементов нет - выходим
er = 0;
LElem* sp = first; //Идём до предпоследнего элемента
if (sp->info==x) {
first = first->next;
delete sp;
kol--;
return er;
}
while (sp->next!=NULL && sp->next->info!=x) sp = sp->next;
if (sp->next==NULL) return 1;
s = sp->next; //Запоминаем ссылку на последний
sp->next = sp->next->next; //Удаляем ссылку из списка
delete s; //Освобождаем память
s = NULL;
kol--; //Уменьшаем количество
return er;
}

bool CLists::HasBook (int x)
{
LElem* sp = first;
while (sp!=NULL) {
if (sp->info==x) return true;
sp = sp->next;
}
return false;
}
[/code]
Далее создаёте ещё один cpp-файл, в котором помещаете функцию main. В ней можете написать какой-нибудь тест для представленной структуры данных.
Будут вопросы, задавайте.
Удачи!
Форма ответа