Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Составители: профессор Степанов В.С.,
ст. преподаватель Васильева Н.И.
ст. преподаватель Ситникова Е.В.
ст. преподаватель Меркушин А.В.
Рецензент: доцент Шнеерсон Ю.Б.
Рекомендовано к изданию в качестве методических указаний к выполнению курсовой работы по информатике для студентов ФАВТ, кафедрой математики и информатики.
Протокол №11 от 02.07.2008 г.
1. Общие положения
Курсовая работа по информатике (далее курсовая работа) является одной из форм учебно-исследовательской работы, ее выполнение является обязательным для всех студентов первого курса факультета АВТ. Тема курсовой работы выдается индивидуально. В задании формулируется задача, метод ее решения.
Цель работы закрепление приобретенных навыков алгоритмизации задач с использованием структурного подхода, а также навыков программирования на языке высокого уровня.
В процессе выполнения курсовой работы по информатике студент самостоятельно (под руководством преподавателя) преодолевает все этапы создания программного продукта, приучается самостоятельно пользоваться специальной литературой, каталогами, справочниками, стандартами.
Курсовая работа может быть оценена на “отлично”, “хорошо”, “удовлетворительно”, “неудовлетворительно”. Оценка проставляется на титульном листе отчета за подписью научного руководителя, а также вносится в экзаменационную ведомость и зачетную книжку. Неудовлетворительная оценка в зачетную книжку не вносится. Полное название курсовой работы с указанием оценки вносится в приложении к диплому.
Несвоевременное выполнение курсовой работы считается академической задолженностью и ликвидируется в установленном порядке. Студенты, не получившие положительной оценки по курсовой работе, к сессии не допускаются.
Курсовые работы, получившие положительную оценку, хранятся на кафедре математики и информатики в течение года.
2. Требования к курсовой работе
Курсовая работа состоит из отчета, к которому прилагается отлаженная программа на электронном носителе.
2.1. Требования к отчету
Отчет по курсовой работе включает в себя следующее:
Текст и блок-схемы алгоритмов отчета должны быть выполнены синими (черными) чернилами, разборчивым почерком или набраны и распечатаны при помощи ПК (текст 11-16 пт, межстрочный интервал 1,3-1,5). Используется одна сторона листа писчей бумаги формата А4. На левой стороне листа для подшивки оставляется поле шириной 25-30 мм. Для остальных полей следует соблюдать следующие размеры: верхнее не менее 15мм., нижнее не менее 20 мм., правое не менее 10 мм.
Страницы нумеруются, начиная с титульного листа, причем используется сквозная нумерация, а сами номера проставляются в правом нижнем углу листа без точки в конце. Номер страницы на титульном листе не проставляется. Иллюстрации, таблицы и схемы, блок-схемы, расположенные на отдельных листах, также включаются в общую нумерацию страниц работы.
Таблицы, блок-схемы и схемы, приведенные в курсовой работе, должны иметь сквозную нумерацию арабскими цифрами. На них должны быть ссылки и упоминания в тексте работы. Таблицы имеют собственную сквозную нумерацию. Номер размещается в правом верхнем углу над заголовком таблицы после слова “Таблица”. Блок-схемы и схемы имеют заголовок, расположенный над ними, начинающийся со слова “Блок-схема…” или “Схема…”. Рисунки и графики должны иметь сквозную нумерацию и подпись, например, “Рис.6. Блок-схема процедуры VVOD ”.
Если в тексте встречаются формулы, то они записываются в отдельной строке.
Тексты программ оформляются с обязательными отступами, наглядно иллюстрирующими логическую структуру программы.
2.2. Требования к программе
Электронный носитель с рабочей, отлаженной программой (желательно дискета) является обязательной частью отчета. Файлы, размещенные на электронном носителе, должны иметь непосредственное отношение к курсовой работе (резервная копия, текстовые файлы пояснительного содержания пользователю, и т.д.). Перед сдачей преподавателю обязательная проверка на отсутствие вирусов.
К самой программе предъявляются следующие требования:
2.3. Требования к защите курсовой работы
Для получения положительной оценки студенту необходимо:
3. Методические рекомендации
3.1. Структурное программирование
Структурное программирование это определенный способ организации программы, коренным образом влияющий на разработку больших программ. Структурное программирование облегчает написание большой программы, упрощает отладку и открывает возможности для дальнейших переделок программы. В настоящее время большая неструктурированная программа воспринимается как написанная архаично или неграмотно.
Главное место в структурном программировании занимают:
Нисходящее (сверху вниз) проектирование начинается с постановки задачи, которую требуется решить, и развивается далее путем разбиения ее на подзадачи. Процесс проектирования включает в себя следующие действия:
Процесс декомпозиции повторяется для подзадач, и доказывается корректность для выполненного разбиения. Этот процесс повторяется до получения подзадач настолько простых, что решение выражается базовыми конструкциями.
Такой способ проектирования алгоритмов и программ в виде иерархической структуры позволяет решать громоздкие и сложные задачи. При нисходящей разработке появляется возможность проверки алгоритма или проверки и отладки программы с самого начала разработки. Тем самым создается ситуация выявления ошибок на ранних стадиях проектирования программы.
Так как подзадачи программ разрабатываются сверху вниз, то вместо подзадач нижнего уровня используются программные заглушки. Они требуются только для того, чтобы позволить подзадаче верхнего уровня проверить взаимодействие с подзадачей нижнего уровня. Программная заглушка содержит входные и выходные операторы и выдает сообщение о своем выполнении. Очень часто подзадачи оформляются как подпрограммы или даже отдельные модули.
К основным концепциям структурного программирования относятся:
При разработке алгоритма нужно руководствоваться следующими рекомендациями:
Фундаментом структурного программирования является теорема о структурировании. Эта теорема устанавливает, что, как бы ни была сложна задача, схема соответствующей программы всегда может быть представлена с использованием весьма ограниченного числа элементарных структур, которые могут соединяться между собой, образуя более сложные структуры, но по тем же самым элементарным схемам.
В структурном программировании несколько базовых управляющих структур: следования, разветвления, повторения (цикл с предусловием). В Паскале, помимо уже перечисленных структур предусмотрены еще ряд дополнительных структур: вариант, коррекция, цикл с постусловием, цикл с параметром. Все структуры подробно рассмотрены в литературе [1].
Согласно принципам структурированного программирования программа, в общем случае, состоит из заставки, набора процедур, функций и глобального блока (функционирующего посредством меню). В этом списке обязательным является глобальный блок.
3.2. Виды меню
Меню это перечисление возможностей системы, из которого пользователь выбирает нужную в текущий момент. В программах оформлению меню с точки зрения структуры, дизайна и требований эргономики придается очень большое значение, так как именно через него реализуются функции управляющей программы.
Меню должно быть простым в работе и понятным для самого неподготовленного пользователя. Более сложная система имеет обычно несколько меню. Среди них выделяют главное. Каждый элемент главного меню может генерировать новое (вложенное) меню, являющееся второстепенным по отношению к главному. Уровень вложения меню ограничивается только логической структурой решаемой задачи.
Одним из главных моментов при разработке меню является обработка ситуаций, когда пользователь набирает неправильный идентификатор режима. Наиболее эффективны меню, которые жестко навязывают пользователю ответ, используя для управления только несколько клавиш (например, клавиши , , , , <Esc>, <Enter>) и автоматически игнорируя нажатие всех других.
Рассмотрим три вида меню: простой запрос с вводом идентификатора выбранного режима, горизонтальное и вертикальное меню с указанием нужного режима ярким полем, позволяющие строить древовидные меню.
Простой запрос представляет собой наиболее несложный вид меню, не требующей дополнительной информации. Подсказка дана в самом запросе о выборе режима. Нужная подпрограмма активизируется в зависимости от значения цифры, которую введет пользователь. Меню легко реализуется на предварительно очищенном экране с помощью оператора case. Программа может выглядеть следующим образом:
Program KURSOVIK; uses crt,graph;
{пункты основного меню описаны в разделе описания const:}
const punkt:array[1..6] of string=
('1 - sozdaniye i dopolneniye',
'2 display',
'3 - plotnost naseleniya',
'4 - sum naseleniye kontinenta',
'5 correction, '6 - exit');
m='MAIN MENU'; v='Input number of punct ';
var {глобальные переменные}
procedure zastavka;
begin <тело процедуры> end;
. . . . . . .
begin
zastavka;
repeat
clrscr;
gotoXY (20,7); textcolor (red);
write (m); textcolor (yellow);
for i:=1 to 6 do
begin
gotoXY (15,10+i);
writeln (punkt[i])
end;
gotoXY (15,21); textcolor (white);
write (v); read (num);
case num of
1: create;
2: display
3: plotnst;
4: sumpop;
5: correct
else
begin gotoXY(15,23);
Write(Takogo puncta net. Repeat);
Delay(1000)
end
end
until num=6
end.
Во время выполнения программы при нажатии клавиш, не идентифицирующих имена режимов, выдается сообщение, и меню снова выводится на экран. В данном примере реализация меню полностью занимает глобальный блок.
Вертикальное меню и горизонтальное меню отличаются друг от друга только расположением списка режимов, все остальные принципы построения совпадают. Один из режимов выделен цветом или яркостью фона. Выбор нужного режима осуществляется нажатием клавиш ↑ ↓ для вертикального меню и клавиш → ← для горизонтального меню, активизация режима клавишей <Enter>.
Для построения вертикального меню воспользуемся следующей процедурой:
procedure menu(var punkt: integer);
var i:integer; key:char;
begin
gotoXY(30,7); write( Menu );
for i:=1 to k do
begin gotoXY(30,10+i); write(name[i]) end;
punkt:=1;
repeat
textbackground(6);
{6 коричневый цвет фона, цвет символа белый}
gotoXY(30,10+punkt);{выделяем первую строку}
write(name[punkt]);
repeat until keypressed;
key:=readkey;
if key =#0 then key:=readkey;
textbackground(0);
gotoXY(30,10+punkt);
write(name[punkt]); {отмена выделения}
case key of
#72:punkt:=punkt-1;
#80:punkt:=punkt+1;
end;
if punkt>k then punkt:=1
else
if punkt<1 then punkt:=k
until key=#13;
clrscr
end;
Использование данной процедуры рассмотрим на примере:
Program zenit;
Uses crt;
Const k=6;
Name: array[1..k] of string[30]=
('1- …', '2- …', '3- …',…);
var m:integer;
procedure menu(var punkt: integer);
var i:integer; key:char;
begin <тело процедуры>end;
procedure zastavka;
begin <тело процедуры>end;
. . . . . . .
{глобальный блок}
begin
zastavka;
repeat
menu(m);
case m of
1: create;
2: out;
3: srw;
4: sort;
5: spisok
end
until m=6
end.
Процедура носит универсальный характер и может быть использована для большинства аналогичных по структуре задач. Программист обязан лишь следить за правильным указанием параметров, чтобы меню не вышло за пределы экрана.
Рекомендации по использованию меню: прежде чем начать писать программу по реализации поставленной задачи, программист должен решить, к какому из перечисленных ниже типов (с точки зрения меню) она относится.
Градация программ на три типа весьма условна, но, в общем, позволяет, исходя из постановки, быстро понять логическую структуру задачи.
Каждый из перечисленных типов программ предполагает наличие заставки с информацией, для чего данная программа предназначена и кто ее автор. Кроме того, в программах второго и третьего типа, рассчитанных для массового использования, желательно включать режим, позволяющий выводить на экран или печатающее устройство инструкции по эксплуатации, данной программы.
3.3. Заставка (текстовая, графическая)
Заставка является визитной карточкой программы. Она выводится на экран сразу после старта программы и содержит информацию о названии программы, ее назначении, авторе и т.д.
Заставка оформляется как автономная процедура, которая стартует первая в разделе операторов глобального блока, но возможны и другие варианты. Например, операторы, формирующие заставку, могут находиться в разделе операторов глобального блока и составлять единую композицию с главным меню.
Рассмотрим три варианта работы с заставкой (хотя не исключены и другие варианты, порожденные неистощимой фантазией программистов).
Вариант 1:
Вариант 2:
Вариант 3:
Первый вариант используется чаще, так как при реализации второго часть экрана, занятая заставкой, не может применяться для других, возможно, более полезных целей. Кроме того, наличие лишней информации на экране отвлекает внимание пользователя. Третий вариант практически ничем не отличается от первого, кроме исключения очистки экрана перед выводом меню и восстановления экрана после исчезновения заставки. В данном примере реализуется первый вариант работы с заставкой. При разработке заставки используются самые разнообразные средства: от авторского рисования с помощью средств псевдографики и графики до применения фрагментов, подготовленных с помощью специализированных пакетов.
Пример текстовой заставки с процедурой черчения рамок с использованием псевдографики:
{процедура черчения рамок}
procedure FRAME(x1,y1,x2,y2: integer);
{х1,у1 корд.левого, а х2,у2 правого угла рамки}
const
{для черчения двойной линии}
A=#186; B=#187; C=#188;
D=#200; E=#201; F=#205;
{для черчения одинарной линии
A=#179; B=#191; C=#217;
D=#192; E=#218; F=#196;}
var I,j:integer;
begin
clrscr;
gotoxy(x1,y1); {курсор в лев.угол}
write(E);
for i:=(x1+1) to (x2-1) do write(F);
write(B);
for i:=(y1+1) to (y2-1) do
begin
gotoxy(x1,i);
write(A);
gotoxy(x2,i);
write(A)
end;
gotoxy(x1,y2);
write(D);
for i:=(x1+1) to (x2-1) do write(F);
write(C)
end;
procedure zastavka;
begin
textmode(co40);
frame(2,2,40,25);
gotoxy(2,3);
write(САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ);
gotoxy(5,5);
write(УНИВЕРСИТЕТ КИНО И ТЕЛЕВИДЕНИЯ);
textcolor(red);
gotoxy(15,10); write(КУРСОВАЯ РАБОТА);
gotoxy(15,12); write(ПО ИНФОРМАТИКЕ);
gotoxy(20,18); write(Выполнил студент);
gotoxy(20,19); write(группы …);
gotoxy(20,20); write(Петров А.И.);
gotoxy(15,22); write(САНКТ-ПЕТЕРБУРГ);
gotoxy(20,23); write(2008);
raidkey;
clrscr; textmode(co80)
end;
В типовом примере рассмотрена процедура графической заставки.
4. Разработка информационно-поисковой системы (ИПС)
Информационно-поисковые системы производят ввод, систематизацию, хранение, выдачу информации по запросу пользователя без сложных преобразований данных. Например, информационно-поисковая система в библиотеках, в железнодорожных и авиакассах продажи билетов.
Обязательным компонентом любой ИПС является база данных. База данных (БД) это поименованная совокупность структурированных данных, относящихся к определённой предметной области. Реляционные БД базы данных с табличной формой организации информации. Все данные и другая информация хранятся на жестком диске. Создание файла базы данных включает два этапа: создание структуры файла и его заполнение данными.
Файл данных, или база данных, представляет собой таблицу. Столбцы в таблице называются полями, а строки записями. Запись комбинированный тип данных, состоящий из компонент различных типов (полей).
База данных состоит из таблицы. Для работы с базой данных в Turbo Pascal используются записи в типизированном файле. Структура записи (структура таблицы) включает название поля, тип поля, размер поля.
Для создания, обработки и надежного хранения БД необходим комплекс программных и языковых средств (СУБД система управления базами данных). СУБД должна обеспечивать выполнение перечисленных ниже операций над базами.
Индекс это набор указателей на строки таблицы, упорядоченный по значениям полей записей. Каждый элемент этого набора состоит из двух частей: порядкового номера записи в таблице и значения поля сортировки.
Например, сортировка в алфавитном порядке фамилий
Индекс: 4 Афанасьев
6 Быков
1 Иванов
Слева указан номер записи в таблице (4, 6, 1), а справа фамилия в данной записи (фамилии следуют в алфавитном порядке). Просмотр происходит следующим образом: просматривается индексный файл по полю фамилия, и читается из таблицы запись с номером 4, а затем 6 и т.д. Основная таблица не упорядочена.
5. Типовой пример
Поскольку оформление содержания, введения, заключения и списка использованных источников не должно вызывать затруднений, в данном типовом примере рассмотрим кратко подразделы основной части курсовой работы.
5.1. Постановка задачи
Построить систему управления базой данных (в дальнейшем-СУБД), отражающую сведения о странах мира. Построить базу данных, которая была бы максимально гибкой. В базе данных должны содержаться данные: часть света, название страны, площадь, население. Составить программу на языке Turbo Pascal, позволяющую работать с этой информацией, используя переменные типа «запись» и базу данных в типизированном файле.
Программа должна выполнять следующие обязательные действия с базой данных:
5.2. Описание базы данных
База данных состоит из таблицы. Для работы с базой данных в Turbo Pascal используются типизированные файлы элементами которого являются записи.
Название поля Тип поля Размер поля Описание continent текстовый 13 часть света country текстовый 13 название страны area числовой вещественный площадь population числовой длинное целое население |
5.3. Структура программы
Программа, в общем случае, состоит из заставки, набора процедур, функций и глобального блока.
Program KURSOVIK; uses crt,graph;
const punkt:array[1..9] of string=
('1 - sozdaniye i dopolneniye',
'2 - display,
'3 - plotnost naseleniya',
'4 - sum naseleniye kontinenta',
'5 - correction', '6 - exit');
m='MAIN MENU'; v='Input number of punct ';
type zap=record
continent,country:string [13];
area:real; population:longint
end;
var {описание глобальных переменных, например, z:zap; f:file of zap} num,i:integer;
procedure zastavka;
{раздел описаний}
begin
{тело процедуры}
end;
{описание всех процедур пунктов меню}
................
begin
zastavka;
repeat
clrscr;
gotoXY (20,7); textcolor (red);
write (m); textcolor (yellow);
for i:=1 to 6 do
begin
gotoXY (15,10+i);
writeln (punkt[i])
end;
gotoXY (15,21); textcolor (white);
write (v); read (num);
case num of
1: create;
2: display
3: plotnst;
4: sumpop;
5: correct
else
begin
gotoXY(15,23);
write(Takogo puncta net. Repeat);
delay(1000)
end
end
until num=6
end.
5.4. Первоначальные данные
Данные вводят и сохраняют в типизированном файле 'TIP1.DAT'. Эти данные введены с помощью procedure create;
continent country area population
Africa Egipet 1001 36000
Africa Togo 56 2092
Africa Tunis 164 5400
Asia India 3268 563490
Asia Japan 370 107880
Asia Kitai 9597 800720
Europe Avstriya 84 7490
Europe France 551 51921
Europe Spain 505 34328
North America Canada 9976 21854
North America USA 9363 210194
Для того, чтоб понять, что делает программа, рассмотрим ее меню:
MAIN MENU
1 - sozdaniye i dopolneniye
2 - display
3 - plotnost naseleniya
4 - sum naseleniye kontinenta
5- correction
6 - exit
Input number of punct
Примечание: выбор пункта меню осуществляется путем ввода соответствующего номера.
Меню программы появляется при ее запуске после выполнения заставки.
Рассмотрим назначения каждого пункта меню:
1 sozdaniye i dopolneniye - создание базы данных в типизированном файле и дополнение файла новыми записями (пункты 1 и 2 исходного задания);
2 display вывод базы данных на экран;
3 plotnost naseleniya - ввод пользователем названия страны и получение информации о средней плотности населения данной страны (пункт 4 исходного задания). В случае неверного ввода программа сообщает пользователю об ошибке в названии страны или отсутствии сведений о данной стране в базе данных;
4 sum naseleniye kontinenta - определение для каждого континента суммарной численности населения всех стран, имеющихся в базе данных, и вывод информации на экран в порядке убывания численности. Программа сообщает об отсутствии сведений по какому-либо континенту в случае отсутствия информации ни по одной из стран для данного континента;
5 correction - коррекция записи в базе данных. В соответствии с желанием пользователя, программа позволяет произвести как полную коррекцию имеющейся информации для данной страны (название страны, континент, площадь, численность населения), так и заменить лишь числовые данные для введённой страны. В случае неверного ввода первоначального имени страны, нуждающейся в коррекции, программа сообщает пользователю об ошибке в названии или отсутствии данной страны в базе данных;
Каждый пункт меню формируется как отдельная процедура.
Создание и дополнение базы данных - procedure create;
Вывод на экран - procedure display;
Средняя плотность населения - procedure plotnst;
Суммарное население континента - procedure sumpop;
Коррекция записи - procedure correct.
Рассмотрим подробно две процедуры.
1. Суммарное население континента - procedure sumpop
Схема алгоритма реализации данной процедуры
Пояснения к алгоритму
Переменные процедуры sumpop
Имя переменной |
Смысл переменной |
Назначение переменной |
Ограничения |
Z |
элемент файла tip1.dat |
исходная |
глобальная переменная, запись |
Z1 |
массив, элементы которого двухкомпонентные записи |
результат |
типизированная константа |
Z2 |
двухкомпонентная запись |
промежуточная |
поле1 это название континента, поле2 численность населения |
i, j |
индексы массива Z1 |
целые числа |
В процедуре используется локальная типизированная константа Z1.
type
zap1=record
cont:string[13];
nas:longint
end;
const
z1:array[1..5] of zap1=
((cont:'Africa';nas:0),
(cont:'Asia';nas:0),
(cont:'Europe';nas:0),
(cont:'North America';nas:0),
(cont:'South America';nas:0));
var z2:zap1; i,j:integer;
Это массив состоящий из 5 элементов (по числу континентов). Каждый элемент массива запись состоящая из двух полей (название континента, численность населения стран приведенных в таблице соответствующего континента). Типизированная константа используется в процедуре, чтобы задать начальные значения полям записи (название континента и значения ноль для численности населения).
Примечание: типизированная константа ведет себя так же, как переменная с начальными значениями, т.е. в процессе выполнения процедуры ее значения могут изменяться.
Из файла tip1.dat считывается очередной элемент файла (запись о стране) и помещается в переменную Z
type zap=record
continent,country:string [13];
area:real;
population:longint
end;
var f:file of zap; z:zap;
Значение поля континент (название континента) переменной Z последовательно сравнивается со значением поля cont элементов массива Z1. если сравнение произошло, то значение поля nas (соответствующего элемента Z1) увеличивается на значение поля population переменной Z. Таким образом, после просмотра всех элементов файла в массиве Z1 в полях nas будут результаты вычисления сумм населения стран для каждого континента.
Далее организована сортировка массива Z1 по убыванию численности населения континентов (для сортировки используется метод прямой выборки) и вывод данных массива Z1 на экран.
Программа процедуры
procedure sumpop;
type
zap1=record
cont:string[13];
nas:longint
end;
Const
z1:array[1..5] of zap1=
((cont:'Africa';nas:0),
(cont:'Asia';nas:0),
(cont:'Europe';nas:0),
(cont:'North America';nas:0),
(cont:'South America';nas:0));
var z2:zap1; i,j:integer;
begin
clrscr; ;
reset (f);
while not eof (f) do
begin
read (f,z);
for i:=1 to 5 do
if z.continent=z1[i].cont then
z1[i].nas:=z1[i].nas+z.population
end;
for i:=1 to 4 do
for j:=i+1 to 5 do
if z1[i].nas<z1[j].nas then
begin
z2:=z1[i]; z1[i]:=z1[j]; z1[j]:=z2
end;
textcolor(lightred);
gotoxy(10,2);
write('SUM population on continents:');
textcolor(yellow);
gotoxy(5,3);write('Continent');
gotoxy(20,3);
write('Population (thousand people)');
for i:=1 to 5 do
with z1[i] do
begin
textcolor (white);
gotoXY (5,i+4);
write (cont);
if nas<>0 then
begin gotoXY (20,i+4); write (nas) end
else
begin
textcolor (lightred);
gotoxy(20,i+4); write ('NO INFORMATION')
end
end;
gotoxy(10,15);
write('Continue. Press on key');
readkey;
close (f)
end;
Примечание: при выводе данных на экран используется стандартная процедура gotoxy(x,y)-установливает курсор в позицию экрана с координатами (x,y) и с этой позиции осуществляется вывод по процедуре Write. Если численность населения континентов равна нулю, то на экран выводится текст'NO INFORMATION'(нет информации).
2. Средняя плотность населения - procedure plotnst
Переменные процедуры plotnst
Имя переменной Смысл переменной Назначение переменной Ограничения Z элемент файла tip1.dat исходная глобальная переменная, запись S название страны вводимое данное с клавиатуры строка, максимальный размер 13 символов R средняя плотность населения заданной страны результат число вещественное b флажок промежуточная логическая ans флажок промежуточная целое число |
Схема алгоритма реализации данной процедуры
Пояснения к алгоритму
В переменную S вводится с клавиатуры название страны, среднюю плотность населения которой необходимо определить.
Из файла tip1.dat считывается очередной элемент файла (запись о стране) и помещается в переменную Z. При совпадении названия страны (поле country) в записи Z со значением S переменной b присваивается значение true. Начальное значение b было false. Это сделано для того, чтобы не просматривать остальные элементы файла до конца файла. Условие (not eof(f)) and (b=false) будет иметь значение false при b= true даже если не достигнут конец файла, что позволит досрочно выйти из цикла.
После выхода из цикла проверяется значение флажка b, если b=true то производится расчет средней плотности населения для страны заданной в переменной S. Если записи о стране с название S в файле нет, то выводится на экран текст «Неверно задано название страны или в файле нет информации об этой стране» ('INVALID NAME OR NAME WITH NO INFORMATION!').
Пользователь имеет возможность повторить заново выполнение процедуры не выходя в меню (ans<>0) или закончить выполнение процедуры и выйти в меню (ans=0).
Программа процедуры
procedure plotnst;
var s:string; b:boolean;
ans:byte; r:real;
begin
repeat
clrscr;
b:=false; textcolor (lightcyan);
gotoXY (3,2);
write ('Input name of the country ');
textcolor (white);
repeat readln (s) until s<>'';
reset (f);
while (not eof (f)) and (b=false) do
begin
read (f,z);
if z.country=s then b:=true
end;
if b=true then
begin r:=z.population/z.area;
gotoXY (3,4); textcolor (yellow);
writeln (z.country,' - ',r:8:2,' thousand men for 1 square kilometer')
end
else
begin gotoXY (3,4);
textcolor (lightred);
writeln ('INVALID NAME OR NAME
WITH NO INFORMATION!')
end;
writeln; textcolor (white);
write (' 0 - exit, 1 - continue ');
readln (ans)
until ans=0;
close (f)
end;
Примечание: при вводе названия страны в переменную S предусмотрено исключение варианта, когда пользователь может случайно ввести пустую строк, путем повторения ввода в переменную S.
5.7. Текст программы
Program KURSOVIK;
uses crt,graph;
const punkt:array[1..6] of string=
('1 - sozdaniye i dopolneniye',
'2 - display ',
'3 - plotnost naseleniya',
'4 - sum naseleniye kontinenta',
'5 - correction',
'6 - exit');
m='MAIN MENU';
v='Input number of punct ';
type zap=record continent,country:string [13];
area:real;
population:longint
end;
var f:file of zap;
z:zap;
num,i:integer;
procedure zastavka;
const
vspom='Kursovayarabota';
var gd,gm,a,i,x:integer;
begin
gd:=detect; initgraph (gd,gm,'D:\TP\BGI');
{на красном фоне появляется текст КУРСОВАЯ РАБОТА, с использованием эффекта «летящие буквы»}
setfillstyle (1,red); floodfill (1,1,red);
setcolor (blue); settextstyle (0,0,4);
for i:=1 to 9 do
begin
outtextXY(50*i,100,copy(vspom,i,1));
delay (20000)
end;
setcolor (blue); settextstyle (0,0,4);
for i:=10 to 15 do
begin
outtextXY (70*(i-9),250,
copy(vspom,i,1));
delay (20000);
end;
{от центра снизу экран меняет цвет фона,
закрывая надпись}
setcolor (6); setfillstyle (9,6);
x:=getmaxX div 2;
for a:=1 to x-20 do
begin
fillellipse(x,1,a,getmaxY+round(0.5*a));
delay (600)
end;
setfillstyle (9,6); floodfill (30,1,red);
{сверху экрана выводятся данные студента: фамилия, имя, факультет, группа; в центре экрана появляются 5 колец символизирующих 5 континентов, цвет колец изменяется}
repeat
setcolor (random (15));
settextstyle (0,0,2);
outtextXY (115,30,'IVANOW, FAVT-613');
a:=random (15);
setcolor (a); setfillstyle (1,a);
circle (150,180,70);
circle (150,180,55);
floodfill (150,115,a); a:=random (15);
setcolor (a); setfillstyle (1,a);
circle (300,180,70);
circle (300,180,55);
floodfill (300,115,a);
a:=random (15);
setcolor (a); setfillstyle (1,a);
circle (450,180,70);
circle (450,180,55);
floodfill (450,115,a); a:=random (15);
setcolor (a); setfillstyle (1,a);
circle (227,310,70);
circle (227,310,55);
floodfill (227,245,a); a:=random (15);
setcolor (a); setfillstyle (1,a);
circle (375,312,70);
circle (375,312,55);
floodfill (375,245,a);
for i:=1 to 100 do delay (1000);
until keypressed;
{после нажатия клавиши вид экрана изменяется, появляется изображение глобуса и солнца}
setcolor (yellow);
outtextXY (115,30,'IVANOW, FAVT-613');
setfillstyle (0,brown);
bar(0,getmaxY-50,getmaxX,getmaxY);
setlinestyle (0,0,3);
setcolor (0);
for x:=270 to 294 do
line (x,105,x-160,310);
bar (110,310,150,490);
for i:= 110 to 125 do
arc (210,220,230,420,i);
setcolor (lightblue);
for i:=1 to 100 do circle (210,220,i);
setcolor (blue); circle (210,220,100);
setcolor (yellow); circle (515,165,50);
setfillstyle (1,yellow);
floodfill (515,165,yellow);
setlinestyle (0,0,3);
line(435,165,595,165);
x:=440;
repeat
i:=round(sqrt(7000-sqr(x-515)))+165;
line (515,165,x,i);
i:=-round(sqrt(7000-sqr(x-515)))+165;
line (515,165,x,i);
x:=x+10;
until x>=600;
readkey;
{после нажатия клавиши появляется закрывающийся занавес}
a:=random (15); setfillstyle (1,a);
setcolor (a); x:=getmaxX div 2+50;
for a:=1 to x do
begin
fillellipse (1,1,a,3*a);
fillellipse (getmaxX,1,a,3*a);
delay (1500)
end;
closegraph
end;
procedure create;
const
materik:array [1..5] of string [13]=
('Africa','Asia','Europe','North
America','South America');
var s:string [7]; ans,j,n:byte; i:integer;
begin
clrscr; s:='TIP'; textcolor (white);
write('0 - to create baza;
1 - to continue baza');
readln (n); writeln;
case n of
0:begin rewrite (f); i:=0 end;
1:begin reset(f); seek(f,filesize (f));
i:=filepos (f)
end
end;
repeat
clrscr; i:=i+1; textcolor (magenta);
writeln ('Input record number ',i);
with z do
begin
textcolor (yellow);
write('Input name of the country');
textcolor (white);
readln (country); writeln;
textcolor (yellow);
writeln ('Choose your continent');
textcolor (lightblue);
for j:=1 to 5 do
writeln (j,' - ',materik [j]);
read(j); continent:=materik [j];
textcolor (yellow);
writeln('You have chosen', materik
[j]); writeln;
writeln ('Input area, population
and of revision'); textcolor(white);
read (area,population); writeln;
textcolor (yellow); writeln
textcolor (lightred);
writeln ('Dobavleno!')
end;
write (f,z); writeln; textcolor (white);
write ('0 - exit, 1 - continue ');
readln (ans); writeln
until ans=0;
close (f)
end;
procedure display;
const
s:array [1..4] of string=
('continent','country',
'area','population');
var i:integer; ans:byte;
begin
repeat
clrscr; textcolor (yellow);
for i:=1 to 4 do write (s[i],' ');
i:=2;
reset (f); textcolor (white);
while not eof (f) do
begin
read (f,z); i:=i+1;
gotoXY (1,i); write (z.continent);
gotoXY (15,i); write (z.country);
gotoXY (23,i); write (z.area:8:2);
gotoXY (33,i); write(z.population:10);
end;
gotoxy(10,15); textcolor (white);
write ('0 - exit, 1 - continue ');
read (ans); writeln;
until ans=0; close (f)
end;
procedure plotnst;
var s:string; b:boolean;
ans:byte; r:real;
begin
repeat
clrscr; b:=false;
textcolor (lightcyan); gotoXY(3,2);
write('Input name of the country');
textcolor (white);
repeat readln (s) until s<>'';
reset (f);
while (not eof (f)) and (b=false) do
begin
read (f,z);
if z.country=s then b:=true
end;
if b=true then
begin
r:=z.population/z.area;
gotoXY (3,4); textcolor (yellow);
writeln (z.country,' - ',r:8:2,
'thousand men for 1 square kilometer')
end
else
begin
gotoXY (3,4);
textcolor (lightred);
writeln ('INVALID NAME OR
NAME WITH NO INFORMATION!')
end;
writeln; textcolor (white);
write (' 0 - exit, 1 - continue ');
readln (ans)
until ans=0; close (f)
end;
procedure sumpop;
type
zap1=record
cont:string[13];
nas:longint
end;
const
z1:array[1..5] of zap1=
((cont:'Africa';nas:0),
(cont:'Asia';nas:0),
(cont:'Europe';nas:0),
(cont:'North America';nas:0),
(cont:'South America';nas:0));
var z2:zap1; i,j:integer;
begin
clrscr; ;
reset (f);
while not eof (f) do
begin
read (f,z);
for i:=1 to 5 do
if z.continent=z1[i].cont then
z1[i].nas:=z1[i].nas+z.population
end;
for i:=1 to 4 do
for j:=i+1 to 5 do
if z1[i].nas<z1[j].nas then
begin
z2:=z1[i]; z1[i]:=z1[j]; z1[j]:=z2
end;
textcolor(lightred); gotoxy(10,2);
write('SUM population on continents:');
textcolor(yellow);
gotoxy(5,3);write('Continent');
gotoxy(20,3);
write('Population (thousand people)');
for i:=1 to 5 do
with z1[i] do
begin
textcolor (white); gotoXY (5,i+4);
write (cont);
if nas<>0 then
begin
gotoXY (20,i+4); write (nas)
end
else
begin
textcolor(lightred);
gotoxy(20,i+4);
write ('NO INFORMATION')
end
end;
gotoxy(10,15);
Write('Continue. Press on key');
readkey; close (f)
end;
procedure correct;
const
materik:array [1..5] of string [13]=
('Africa','Asia','Europe',
'North America','South America');
var ans,l,i:integer; imya:string; b:boolean;
begin
repeat
clrscr;
write('0 - to correct,
1 - to change numeric information');
read (l); writeln;
reset (f); textcolor (green);
write ('Input name of the country
you want to change ');
textcolor (white);
repeat readln (imya) until imya<>'';
writeln; b:=false;
while (not eof (f)) and (b=false) do
begin
read (f,z);
if z.country=imya then b:=true
end;
if (b=true) and (l=0) then
begin
textcolor (green);
write('Input new name of the country');
textcolor (white); readln (z.country);
writeln; textcolor (green);
writeln ('Choose the continent');
textcolor (lightcyan);
for i:=1 to 5 do
writeln (i,' - ',materik[i]);
writeln; textcolor (white);
read (i); z.continent:=materik [i];
textcolor (green);
writeln('You have chosen',materik [i]);
writeln
end;
if b=true then
begin
textcolor (green);
writeln('Input NEW area, poppulation');
textcolor (white);
read (z.area,z.population);
writeln; textcolor (green);
write ('Input NEW capital population');
textcolor(white);seek (f,filepos(f)-1);
write (f,z); writeln;
textcolor(yellow); write ('Obnovleno!')
end
else begin
textcolor (lightred);
writeln ('INVALID NAME OR
NAME WITH NO INFORMATION !');
writeln
end;
textcolor (white);
write ('0 - exit, 1 - continue ');
readln (ans); writeln;
until ans=0; close (f)
end;
begin
zastavka;
assign(f,'tip1.dat');
repeat
clrscr; gotoXY (20,7); textcolor (red);
write (m); textcolor (yellow);
for i:=1 to 6 do
begin
gotoXY (15,10+i); writeln (punkt[i])
end;
gotoXY (15,21); textcolor (white);
write (v); read (num);
case num of
1: create;
2: display;
3:plotnst;
4:sumpop;
5:correct;
end
until num=6
end.
5.8. Результаты машинного тестирования
1) После выполнения заставки и после выхода из процедуры на экране появляется меню:
MAIN MENU
1 - sozdaniye i dopolneniye
2 - display
3 - plotnost naseleniya
4 - sum naseleniye kontinenta
5 - correction
6 - exit
Input number of punct 1
После ввода пункта происходит очистка экрана пользователя и выводится на экран результат выполнения соответствующей процедуры.
Результаты процедуры create (дополнение базы данных):
0 - to create baza; 1 - to continue baza 1
Input record number 11
Input name of the country Kitai
Choose your continent
1 - Africa
2 - Asia
3 - Europe
4 - North America
5 - South America
2
You have chosen Asia
Input area, poppulation
9597 800720
Dobavleno!
0 - exit, 1 - continue 0
Примечание: 0 выход в меню, 1 повторить выполнение процедуры для другой страны
2) MAIN MENU
1 - sozdaniye i dopolneniye
2 - display
3 - plotnost naseleniya
4 - sum naseleniye kontinenta
5 - correction
6 - exit
Input number of punct 2
Результаты процедуры display:
continent country area population
Africa Egipet 1001 36000
Africa Togo 56 2092
Africa Tunis 164 5400
Asia India 3268 563490
Asia Japan 370 107880
Asia Kitai 9597 800720
Europe Avstriya 84 7490
Europe France 551 51921
Europe Spain 505 34328
North America Canada 9976 21854
North America USA 9363 210194
0 - exit, 1 - continue 0
3) MAIN MENU
1 - sozdaniye i dopolneniye
2 - display
3 - plotnost naseleniya
4- sum naseleniye kontinenta
5 - correction
6 - exit
Input number of punct 3
Результаты процедуры plotnost :
Input name of the country fsdgr
INVALID NAME OR NAME WITH NO INFORMATION!
0 - exit, 1 - continue 1
Input name of the country France
France - 94 thousand men for 1 square kilometer
0 - exit, 1 - continue 0
4) MAIN MENU
1 - sozdaniye i dopolneniye
2 - display
3 - plotnost naseleniya
4 - sum naseleniye kontinenta
5 - correction
6 - exit
Input number of punct 4
Результаты процедуры sumpop:
SUM population on continents:
Continent Population (thousand people)
Asia 1472090
North America 232048
Europe 93739
Africa 43492
South America NO INFORMATION
0 - exit, 1 - continue 0
5) MAIN MENU
1 - sozdaniye i dopolneniye
2 - display
3 - plotnost naseleniya
4 - sum naseleniye kontinenta
5 - correction
6 - exit
Input number of punct 5
Результаты процедуры correct:
0 - to correct, 1 - to change numeric information 1
Input name of the country you want to change France
Input NEW area, poppulation and year of revision
570 52030 1990
Input NEW capital population 2585
Obnovleno! 0 - exit, 1 - continue 1
0 - to correct, 1 - to change numeric information 0
Input name of the country you want to change Kitai
Input new name of the country China
Input new name of the capital Pekin
Choose the continent
1 - Africa
2 - Asia
3 - Europe
4 - North America
5 - South America
2
You have chosen Asia
Input NEW area, poppulation and year of revision
9597 800720 1975
Input NEW capital population 7570
Obnovleno! 0 - exit, 1 continue 0
6. Литература
1. Малыхина М.П. Программирование на языке высокого уровня. Turbo Pascal СПб.: БХВ Петербург, 2006.
2. Юркин А. Задачник по программированию.СПб.: Питер, 2002.
3. Степанов В.С., Меркушин А.В., Васильева Н.И. Алгоритмизация и программирование на языке высокого уровня. Методические указания к выполнению расчетной работы. СПбГУКиТ, 2008.
4. Бородич Ю.С. и др. Паскаль для персональных компьютеров .
Оглавление
1. Общие положения…………………………………………….…2
2. Требования к курсовой работе……………………………….…3
2.1. Требования к отчету……………………………………......3
2.2. Требования к программе……………………………….…..4
2.3. Требования к защите курсовой работы…………...............5
3. Методические рекомендации…………………………….……..6
3.1. Структурное программирование……………….………….6
3.2. Виды меню………………………………………………….8
3.3. Заставка (текстовая, графическая)……………………….13
4. Разработка информационно-поисковой системы (ИПС)…….17
5. Типовой пример………………………………………………...19
5.1. Постановка задачи………………………………………...19
5.2. Описание базы данных……………………………………20
5.3. Структура программы……………………………………..20
5.4. Первоначальные данные…………………………………..21
5.5. Интерфейс программы…………………………………….22
5.6. Разработка процедур………………………………………23
5.7. Текст программы…………………………………………..32
5.8. Результаты машинного тестирования…………………....41
6. Литература………………………………………………………45
3