Книжный магазин. 2
1 Постановка задачи
В данной курсовой работе необходимо разработать программу по созданию и обработке записей.
Запись – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. В отличие от массива, компоненты (поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются.
Типовыми операциями с записями являются:
- создание и заполнение списка;
- вывод данных;
- удаление заданного элемента списка;
- добавление нового элемента в список.
Разрабатываемая программы должна иметь удобный пользовательский интерфейс, выраженный в меню, и иметь модульную структуру.
Интерфейс пользователя
– это программные или аппаратн
Модуль в Турбо Паскале это отдельно хранимая и независимо компилируемая программная единица, в отличие от подпрограмм, которые, являясь структурным элементом программы, не могут существовать вне ее.
Программа должна реализовывать следующие функции обработки динамического списка:
- создавать список, содержащий сведения о книгах (фамилия, имя, отчество автора, издание, цена и скидка на книгу), а также вычисляемое поле – цена на распродаже;
- производить удаление элемента списка;
- дополнять список новыми данными
- выводить список на экран;
- выходить из программы.
2 Метод решения задачи и её формализация
Для решения поставленной задачу разобьем ее на подзадачи, и каждую из них оформим как отдельную процедуру обработки. Все процедуры обработки будут помещены в отдельный программный модуль. Для запуска процедур разработаем специальный интерфейс, наиболее удобно представить его в виде меню, каждый пункт которого соответствует операции обработки.
Метод решения данной задачи можно представить в виде следующей схемы:
Для решения данной задачи применяется процедурный принцип построения программы:
- Процедура Procedure write_data(l:integer) предназначена для создания и добавления новой записи список;
- Процедура Procedure output(sel:integer) предназначена для вывода данных о книгах на экран;
- Процедура Procedure DELETE(DS:PFish) предназначена для удаления элемента динамического списка по заданному ключу (наименование);
- Процедура Procedure menu выполняет прорисовку вертикального меню на экране;
В программе данного
курсового проекта был
Одним из распространенных типов интерфейсов человека и компьютера является интерфейс на основе меню, который был использован при разработке программы данного курсового проекта. Интерфейс такого типа облегчает взаимодействие пользователя с компьютером, так как устраняет необходимость изучения пользователем языка общения с вычислительной системой.
На каждом шаге диалога пользователю предъявляются все возможные в данный момент команды в виде набора пунктов меню, из которого пользователь может выбрать нужный.
Для отображения меню на экране используется вывод в заданное место на экране текстового сообщения, которое состоит из нескольких групп слов (группа слов или одно слово – пункт меню). Вывод текста может быть реализован с помощью следующих операторов:
- установка кодов цвета фона и символов с помощью процедур TextBackGround и TextColor или с помощью присвоения кода параметру TextAttr; значение TextAttr определяется как (Код цвета символа)х16 + (Код цвета символа)
- перемещение курсора в позицию экрана (X,Y) для вывода очередного пункта меню с помощью процедуры GoToXY (X,Y);
- вывод на экран текста очередного пункта меню с помощью процедуры Write (Name_P[i]) при использовании горизонтального меню или Writeln (Name_P[i]) при использовании вертикального меню. Эти пункты повторяются для каждого пункта меню, например, с помощью оператора for i:=1 to 5 do…
В программе данного курсового проекта использовался интерфейс пользователя типа «вертикальное меню с выбором по функциональной клавише».
3 Разработка состава и структуры исходных данных и результатов
Исходные данные и результат представляют собой список. Элементом списка является переменная типа «запись», состоящая из полей данных.
В данном курсовом проекте в информационной части содержится информация о книгах: фамилия, имя, отчество автора, издание, цена и скидка на книгу, и расчетное поле - цена на распродаже. Наиболее удобно для описания такой информации использовать тип Record (запись). Тип Record представляет собой совокупность логически связанных между собой элементов различного типа, которые называются полями. Входными и выходными данными является список, содержащий информацию о книгах. Результаты разработки структуры данных можно представить в форме таблицы:
Таблица 1 – Результаты разработки структуры данных
Назначение переменной |
Идентификатор |
Тип данных |
Диапазон |
Фамилия |
fam |
string[10] |
0..25 символов |
Имя |
name |
string[10] |
0..25 символов |
Отчество |
otch |
string[10] |
0..32767 |
Издание |
izd |
string[10] |
- 3,40E + 38 — -1,18E - 38, 0 и 1,18E - 38 — 3,40E + 38 |
Цена |
cena |
real |
- 3,40E + 38 — -1,18E - 38, 0 и 1,18E - 38 — 3,40E + 38 |
Скидка |
skidk |
real |
- 3,40E + 38 — -1,18E - 38, 0 и 1,18E - 38 — 3,40E + 38 |
Цена на распродаже |
raspr |
real |
- 3,40E + 38 — -1,18E - 38, 0 и 1,18E - 38 — 3,40E + 38 |
Результат работы программы представляется в виде списка (таблицы) сведений о книгах с указанием ее автора, издания, цены, скидки и итоговой стоимости
Результаты работы программы представлены в Приложении В.
4 Разработка алгоритма решения задачи
В основной программе производится загрузка графического режима, а затем в цикле производится обращение к процедуре вывода заголовка программы и функции создания и перемещения по меню. Далее идет обращение к нужной процедуре. Выход из цикла (и из программы) происходит если переменная stop примет значение Esc (то есть был выбран пункт меню “Выход из программы”). Перед выходом происходит закрытие графического режима.
В программе содержатся следующие процедуры обработки записей:
- Процедура write_data создает динамический список. Выделяет память для первой записи, после чего заполняют поля переменной, а в поле ссылки помещается вводимое значение. Далее в цикле создается последующий элемент списка и устанавливается указатель из предыдущего элемента на вновь созданный. Создание элементов происходит до тех пор пока пользователь положительно отвечает на запрос о продолжении ввода.
- Процедура Output выводит список на экран. Выполняется с помощью изменения текущего указателя от начального значения до тех пор, пока не будет конец файла.
- Процедура Delete удаляет элементы списка. В цикле производится поиск книги с заданным названием. После выполнения цикла, если удовлетворяющий условию элемент найден, то в зависимости от того, какая переменная удаляется (первая, из середины списка, последняя переменная списка) изменяются ссылки и производится удаление записи (освобождение оперативной памяти от динамической переменной).
Результаты разработки алгоритма решения задачи представлены в Приложении А
Текст программы представлен в приложении Б.
5 Выбор языка программирования
Для разработки программы данного курсового проекта был использован язык Turbo Pascal 7.1.
Язык Паскаль разработан профессором Швейцарского федерального технологического института Никлаусом Виртом в 1968 - 1971гг. и назван в честь великого французского математика и механика Блеза Паскаля.
Первоначально язык Паскаль был предназначен для изучения программирования студентами. Однако благодаря ряду положительных свойств этот язык получил большое распространение и в профессиональной деятельности для создания достаточно сложного программного обеспечения.
В 1992 году фирма Borland International выпустила пакет программирования, основанный на изучении языка Паскаль. Пакет Borland Pascal 7.0. учитывает многие новейшие достижения в программировании и практике создания программ и включает в себя три режима работы: в обычном режиме ОС и MS-DOS, в защищенном режиме MS-DOS и в среде Windows. Обладая расширенными возможностями, пакет Borland Pascal требует память примерно 30 Мбайт на жестком диске и не менее 2 Мбайт ОП.
Язык Паскаль разработан с учетом принципов структурного программирования, которое на современном этапе признано одним из методов рационализации труда программистов, для таких программ характерна простота отладки, корректировки, сопровождения и модификации программ. Паскаль обладает полным набором типов данных: простые переменные, массивы, файлы, множества, записи, ссылочные переменные; он позволяет использовать внешние программные модули. Особо отмечается надежность Паскаль программ, которая достигается за счет простоты и естественности конструкций языка, за счет избыточности (например, обязательного описания переменных)
Язык Turbo Pascal является объектно-ориентированным и структурированным языком. Поэтому он удобен для написания больших программ. Программу можно разбить на части – подпрограммы, которые реализуются с помощью процедур и функций и в ходе выполнения основной программы можно обращаться к процедурам и функциям, что необходимо для решения программы данного курсового проекта. Это значительно облегчает выполнение программ и сокращение объема. Различные конструкции языка - разветвляющиеся, циклические позволяют изменять направление выполнения программ и производить многократные вычисления.
К возможностям Turbo Pascal относятся также использование дополнительных библиотек и стандартных модулей, что расширяет направления и возможности программирования. В программе данного курсового проекта использовался стандартный модуль Сrt, который имеет ряд возможностей, таких как управление клавиатурой, управление текстовым экраном, формирование окна, управление положением курсора, определение цвета фона и символов, управления принтером и звуковым сигналом и так далее. Важным для построения больших программных систем свойством этого языка является модульность. Кроме стандартных модулей Паскаль обладает возможностью создавать собственные модули пользователя. Они необходимы тогда, когда программа имеет объем более 64 Кбайт и поэтому программа разбивается на модули.
Язык программирования Turbo Pascal 7.0 предоставляет программисту возможность образовать и уничтожать переменные в любой момент работы программы, в соответствии с потребностями решаемой задачи, то есть возможность использования динамических переменных.
Есть и недостатки языка Паскаль: в нем нет операции возведения в степень, из-за богатства возможностей язык не прост для освоения в полном объеме в первоначальном изучении.
Среда программирования Turbo Pascal позволяет создавать тексты программ, компилировать их, находить ошибки и оперативно их исправлять, компоновать программы из отдельных частей, включая стандартные модули, отлаживать и выполнять отлаженную программу. Паскаль предоставляет пользователю большой объем справочной информации.
Возможности языка программирования Паскаль совершенствуются.
На основании описанных возможностей и особенностей языка Turbo Pascal, он и выбран для написания программы данного курсового проекта.
6 Разработка программы
В программе данного курсового проекта применялись следующие операторы:
- Условный оператор - if <условие> then <операторы 1>. Если условие истинно, то выполняется оператор 1, в противном случае управление передается на оператор, идущий за оператором if; или if <условие> then <операторы 1> else <операторы 2>. Если условие истинно, то выполняется оператор 1, в противном случае оператор 2;
Фрагменты программы
if l=0 then
begin
rewrite(f);
writeln('Fail dannih '+BD+' sozdan zanovo');
writeln('---------------------
end
else
begin
reset(F);
end;
– Оператор присваивания - переменная:=значение
– Оператор ввода: readln (X1,X2…XN) реализует чтение из стандартного файла input последовательности N значений, пропуск остальных значений до начала следующей строки файла input, присваивание этих значений переменным X1,X2…XN; readln реализует пропуск строки в файле input до начала следующей строки.
Фрагмент программы
…readln(raspr)…
– Операторы вывода write (X1,X2…XN) реализует вывод значений переменных X1,X2…XN в стандартный файл output в одну строку; writeln (X1,X2…XN) реализует вывод значений переменных X1,X2…XN в одну строку и переход к началу следующей строки файла output; writeln реализует пропуск строки в файле output и переход к началу следующей строки
Фрагмент программы
…writeln('Dlj vihoda nazhmite Esc, dlj prodolzhenij Enter')…
…write(‘Vvedite cenu na knigu:’)…
- Оператор выбора Case <выражение> of <const>: <оператор> позволяет осуществить выбор одной из нескольких альтернатив.
Фрагмент программы
case readkey of
#27: begin exit; stop:=true; end;{ESC}
#0: case readkey of
#60:begin write_data(0); menu; end;{F2}
#62:begin write_data(1); menu; end;{F4}
#63:begin OUTPUT(0); menu; end;{F5}
end;
end;
- Оператор цикла с предусловием while <выражение> do <оператор> используется, когда количество повторений операторов тела цикла заранее неизвестно и определяется в процессе выполнения цикла. Операторы тела цикла выполняются только в том случае, если результат выражения истинный, если он ложный, то тело цикла не выполняется. Если результат выражения ложный до начала первого выполнения тела цикла, то тело цикла не выполняется ни разу.
Фрагмент программы
while not eof(f) do
begin
read(f,pl);
if d>23 then
begin
clrscr;
if sel=0 then
writeln('')
else
writeln('====== Svedenij o knigah =====');
writeln('---------------------
writeln('|#p/p|familij|imj|
writeln('---------------------
d:=5;d1:=5;
end;
if sel=1 then
begin
gw(pl,d1,i1);
Inc(i1);Inc(d1);
end
else
gw(pl,d,i);
Inc(i);Inc(d);
if (d>23) or (d1>23) then
begin
writeln;
writeln('Dlj prodolzhenij nazhmite lybuy klavishu...');
readkey;
end;
end;
- Оператор цикла с постусловием repeat <оператор> until <выражение> используется, когда количество повторений операторов тела цикла заранее неизвестно и определяется в процессе выполнения цикла. Тело цикла repeat выполняется хотя бы один раз. После каждого выполнения тела цикла анализируется значение результата выражения: если оно ложно, выполнение цикла повторяется, если истинно – цикл завершается.
Фрагмент программы
repeat
case readkey of
#27: begin exit; stop:=true; end;{ESC}
#0: case readkey of
#60:begin write_data(0); menu; end;{F2}
#62:begin write_data(1); menu; end;{F4}
#63:begin OUTPUT(0); menu; end;{F5}
end;
end;
until stop;
В программе использовались следующие стандартные процедуры и функции:
- Процедура Inc(var X [; DX: LongInt]) увеличивает значение переменной X на величину DX, а если параметр DX не задан – на 1
…Inc(i);Inc(d)…
Процедуры и функции, используемые в программе и относящиеся к модулю CRT:
- gotoxy (X,Y)- процедура установления курсора в требуемое место экрана с координатами X (горизонтальная),Y (вертикальная)
…gotoxy(1,d…
- Функция readkey:Char возвращает значение типа char – код нажатой клавиши. С ее помощью можно считать и опознать нажатие на любую клавишу, кроме клавиш-переключателей (Alt, Shift, Ctrl, Caps Lock). Эта функция приостанавливает работу программы до тех пор, пока не будет нажата клавиша. Считанный символ не отображается на экране, то есть функция readkey вводит символ без высвечивания его на экране
- Процедура ClrScr очищает экран (окно) и помещает курсор в верхний левый угол.
Текст программы представлен в приложении Б.
7 Отладка и тестирование программы
Отладка – процесс локализации ошибок, когда факт их существования установлен. В результате отладки программа должна соответствовать определенной фиксированной совокупности правил и показателей качества, принимаемой за эталонную для данной программы.
Одним из критериев профессионального мастерства программистов является их способность обнаруживать и исправлять их собственные ошибки. В общем времени разработки программы отладка занимает от 50% до 90%. Процесс отладки зависит от условий используемой ЭВМ, языка программирования, используемой ОС и спецификации самой задачи.
Все ошибки, которые могут возникнуть при разработке и отладке программ делятся на три вида:
- синтаксические;
- семантические;
- логические.
Синтаксические ошибки – эти ошибки возникают в результате нарушения правил написания предложений на языке программирования. Появление этих ошибок в тексте программы обусловлено усталостью и снижением внимания программиста при вводе исходного текста программы, а также недостаточным знанием языка программирования. Такие ошибки выявляются компилятором языка, о чём компилятор выдаёт соответствующие сообщения на экран, с указанием места в исходном тексте программы, где он обнаружил ошибку.
Семантические ошибки – связаны с недопустимыми значениями параметров или недопустимыми действиями над ними.
Логические ошибки – это ошибки алгоритма выполнения программы. Такие ошибки обнаружить труднее всего, при допущении таких ошибок программа может нормально компилироваться и выполняться, и даже давать вполне правдоподобные результаты, но в определенный момент может вести себя странно.
При отладке программы данного курсового проекта используется смешанный метод отладки, который заключается в комплексном использовании ручного и машинного методов: сначала написанная часть программы проверяется вручную, визуально просматривается запись конструкций языка программирования, соответствие программы и алгоритма, таким образом была выявлена часть синтаксических ошибок; затем эта часть отлаживалась с помощью ЭВМ отладочным компилятором.
Чтобы отладить программу в среде Pascal необходимо ее откомпилировать. Чтобы откомпилировать программу, то есть создать исполняемый файл, необходимо нажать F9 или Alt+F9, что соответствует пунктам меню Compile/Make или Compile/Compile. Если были совершены ошибки при наборе, компиляция не завершается, а среда программирования показывает предположительный характер ошибки. При отладке программы данного курсового проекта были обнаружены следующие ошибки:
- 3 Unknown identifier – неизвестный идентификатор. Этот идентификатор не объявлен
- 26 Type mismatch – несовместимость типов
- 37 END expected – нужен END
- 85 expected – нужна «;»
- 15 File not found – файл не найден.
В программе данного
курсового проекта
После компиляции необходимо запустить программу на исполнение, для чего надо нажать комбинацию клавиш Ctrl+F9, что соответствует пункту меню Run/Run.
Для проверки логики была использована печать в Программа данного курсового проекта была отлажена в среде Turbo Pascal 7.1. Отладка производилась по шагам, в итоге ошибки, находящиеся в программе были выявлены и исправлены, поэтому программа является полностью отлаженной и готовой к работе.
Результаты выполнения
программы удовлетворяют постав
Список используемой литературы
- Данилина Н.П., Кутепова Л.А. Алгоритмические языки и программирование. Язык ПАСКАЛЬ: Методические указания к выполнению лабораторных работ – Пенза: Изд-во Пензенского технологического института, 2003. 84с.
- Епанешников А.М., Епанешников В. Программирование в среде Turbo Pascal 7.0. – М.: «ДИАЛОГ-МИФИ»
- Климова Л.М. Pascal 7.0. Практическое программирование Решение типовых задач. М.: «КУДИЦ-ОБРАЗ», 2000
- Колесников А., Гинзбург В. Турбо Паскаль – С.-Петербург: «BHV», 1996
- Кнут Д. Искусство программирования. Т.1 Основы программирования. М. ИНФРА - М,1976
- Фаронов Turbo Pascal 7.0. Начальный курс– М.: «ДИАЛОГ-МИФИ», 1996
- Фаронов Turbo Pascal 7.0. Практика программирования– М.: «ДИАЛОГ-МИФИ», 1996
ПРИЛОЖЕНИЕ А
«Разработка программы»
Схема основной программы kursovoi.pas
Схема процедуры write_data
Схема процедуры Output
Схема процедуры del
ПРИЛОЖЕНИЕ Б
«Разработка программы»
Текст программы
Program kursovoi;
Uses crt;
const bd='knigi.bd';
Type
pole=record
fam:string[10];
name:string[10];
otch:string[10];
izd:string[10];
cena:real;
skidka:shortint;
raspr:real;
end;
fil=file of Pole;
var
stop:boolean;
{=============================
Procedure gw(p:pole;d,i:integer);
begin
gotoxy(1,d);write('і');
gotoxy(2,d);write(i);
gotoxy(7,d);write('і');
gotoxy(8,d);write(p.fam);
gotoxy(19,d);write('і');
gotoxy(20,d);write(p.name);
gotoxy(33,d);write('і');
gotoxy(34,d);write(p.otch);
gotoxy(45,d);write('і');
gotoxy(46,d);write(p.izd);
gotoxy(57,d);write('і');
gotoxy(58,d);write(p.cena:6:2)
gotoxy(64,d);write('і');
gotoxy(65,d);write(p.skidka);
gotoxy(71,d);write('і');
gotoxy(72,d);write(p.raspr:6:
gotoxy(79,d);write('і');
end;
{=============================
procedure output(sel:integer);
var ok:boolean;
f:fil;
pl:pole;
k,i,d,d1,i1:integer;
begin
clrscr;
assign(f,bd);
reset(f);
i:=1;i1:=i;
d:=24;d1:=d;
while not eof(f) do
begin
read(f,pl);
if d>23 then
begin
clrscr;
if sel=0 then
writeln('')
else
writeln(' ========= Svedenij o knigah ==========');
writeln('---------------------
writeln('|# p/p| familij | imj | otchestvo | izdanie | cena |skidka| itogo |');
writeln('---------------------
d:=5;d1:=5;
end;
if sel=1 then
begin
gw(pl,d1,i1);
Inc(i1);Inc(d1);

- Книжный магазин
- Книжный маркетинг
- КНР в мирохозяйственных связях
- Княжение Владимира и крещение Руси
- Княжеская благотворительность в эпоху Киевской Руси
- Княжеский тип управления в русских землях периода политической раздробленности
- Князь в Древней Руси
- Книжная графика
- Книжная культура Древней Руси
- Книжная культура России: изучение, сохранение, развитие
- Книжная торговля как способ документоснабжения библиотек
- Книжное дело Казахсатана 1991-2012 год
- Книжный дизайн
- Книжный магазин