Консультация № 187692
24.12.2013, 21:38
96.03 руб.
0 3 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Написать программу на PascalABCNET
Составить программу, которая содержит текущую информацию о книгах в библиотеке.
Сведения о книгах содержат:
• номер УДК;
• фамилию и инициалы автора;
• название;
• год издания;
а количество экземпляров данной книги в библиотеке.
Программа должна обеспечивать:
• начальное формирование данных о всех книгах в библиотеке в виде списка;
• при взятии каждой книги вводится номер УДК, и программа уменьшает значение
количества книг на единицу или выдает сообщение о том, что требуемой
книги в библиотеке нет, или требуемая книга находится на руках;
• при возвращении каждой книги вводится номер УДК, и программа увеличивает
значение количества книг на единицу;
• по запросу выдаются сведения о наличии книг в библиотеке.

Обсуждение

Неизвестный
26.12.2013, 21:42
общий
К таким заданиям часто бывает дополнительное, вроде: реализовать в виде стека, .... А у Вас как?
Неизвестный
26.12.2013, 21:52
общий

Нет такого условия
давно
Старший Модератор
31795
6196
27.12.2013, 16:30
общий
это ответ
Здравствуйте, Печников Александр Васильевич!

Смотрите приложение.
Добавлено две возможности запись и чтение базы, для хранения уже введенной информации на диске.
ps:вопросы задавайте в мини-форум.
Удачи!

Приложение:
type
tString=string[30];
{тип данных для записи в файл}
tData=record
isbn:tString;{код книги}
name:tString;{название книги}
autor:tString;{автор книги}
year:integer;{год выпуска книги}
count:integer;{количество книг}
end;
{тип данных для списка}
pList=^tList;
tList=record
isbn:tString;{код книги}
name:tString;{название книги}
autor:tString;{автор книги}
year:integer;{год выпуска книги}
count:integer;{количество}
next:pList;{указатель на следующий элемент списка}
end;
{глобальные переменные}
var
a:boolean;{признак изменения базы}
b:pList;{указатель на голову списка}
c:char;{символьная переменная меню}
{процедура считывания одного символа}
procedure LoadChar;
begin
readln(c);{читаем символ}
c:=UpCase(c);{преобразовываем к верхнему регистру}
end;
{процедура отображения информации на экране}
procedure Show(z:pList);
begin
writeln;
writeln('Autor(s):':10,z^.autor:30);{выводим автора книги}
writeln('Name:':10,z^.name:30);{выводим название книги}
writeln('ISBN:':10,z^.isbn:30);{выводим код книги}
writeln('Year:':10,z^.year:10,'Count:':10,z^.count:10);{выводим год и количество}
end;
{процедура создания нового элемента сиписка}
procedure CreateRecord;
var
z:pList;
begin
new(z);{новый элемент списка}
repeat
write('Enter ISBN:');readln(z^.isbn);{вводим код книги}
write('Enter Autor(s):');readln(z^.autor);{вводим автора книги}
write('Enter Name:');readln(z^.name);{вводим название книги}
write('Enter Year:');readln(z^.year);{вводим год выпуска книги}
write('Enter Number:');readln(z^.count);{вводим количество}
write('Please control information:');{проверяем введенную информацию}
Show(z);{}
write('Y|any key...');{подтверждаем правильность ввода}
LoadChar;{вводим подтверждение}
until c='Y';
z^.next:=b;{новую информацию включаем в список}
b:=z;
a:=true;{устанавливаем признак изменения базы}
end;
{процедура учета количества книг}
procedure ChangeBook(z:integer);
var
x:pList;
y:tString;
begin
write('Enter ISBN');readln(y);{вводим код книги}
x:=b;{указатель списка в начало}
while(x^.next<>nil)and(x^.isbn<>y)do x:=x^.next;{ищем нужную книгу}
if x^.isbn=y then x^.count:=x^.count+z{совпал код изменяем счетчик}
else writeln('wrong ISBN:',y);{иначе сообщение об ошибке}
if x^.count<0 then{проверяем отрицательное количество книг}
begin
x^.count:=0;{сбрасываем счетчик книг}
writeln('this book is not');{и выводим сообщение об ошибке}
end;
a:=true;{устанавливаем признак изменения базы}
end;
{процедура вывода информации о книгах}
procedure ListBase;
var
z:pList;
begin
z:=b;{указатель в начало списка}
while z<>nil do{пока не просмотрели всю базу}
begin
Show(z);{выводим текущий элемент списка}
z:=z^.next;{переходим к следующему}
end;
end;
{процедура чтения базы из файла}
procedure LoadBase;
var
x:tData;
y:file of tData;
z:pList;
begin
if b=nil then{проверяем загружена база или нет}
begin
assign(y,'q187692.dat');{связываем файл с переменной}
reset(y);{открываем для чтения}
while not Eof(y)do{пока не достигли конца файла}
begin
read(y,x);{читаем данные}
new(z);{создаем элемент списка}
z^.isbn:=x.isbn;{копируем данные в список}
z^.autor:=x.autor;
z^.name:=x.name;
z^.year:=x.year;
z^.count:=x.count;
z^.next:=b;{включаем новый элемент в список}
b:=z;
end;
close(y);{закрываем файл}
a:=true;{устанавливаем признак изменения база}
end
else writeln('Base is load'){иначе сообщени об ошибке}
end;
{процедура записи в файл и освобождения памяти}
procedure SaveBase;
var
x:tData;
y:file of tData;
z:pList;
begin
z:=b;{указатель в начало списка}
assign(y,'q187692.dat');{связывает файл с переменной}
rewrite(y);{открываем файл для записи}
while z<>nil do{пока список не пустой}
begin
x.isbn:=b^.isbn;{копируем данные из списка}
x.autor:=b^.autor;
x.name:=b^.name;
x.year:=b^.year;
x.count:=b^.count;
write(y,x);{записываем в файл}
z:=z^.next;{переходим к следующему элементу списка}
dispose(b);{освобождаем занятую память}
b:=z;{новая голова списка}
end;
close(y);{закрываем файл}
a:=false;{сбрасываем признак изменения базы}
end;
begin
b:=nil;{список пустой}
a:=false;{сбрасываем признак изменения базы}
repeat
writeln;{выводим меню}
writeln('Menu:');
writeln('n-new book;');
writeln('d-delivery book;');
writeln('r-return book;');
writeln('b-browsing base;');
writeln('l-load base;');
writeln('s-save base;');
writeln('q-exit from program.');
write('please select mode and press<ENTER>:');
LoadChar;{читаем режим работы}
case c of{вызываем нужную процедуру}
'N':CreateRecord;
'D':ChangeBook(-1);
'R':ChangeBook(1);
'B':ListBase;
'L':LoadBase;
'S':SaveBase;
'Q':if a then SaveBase;
end;
until c='Q';
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа