Получение сведений о наличии билетов аэрофлот
Калининградский
Государственный Технический
Кафедра
систем управления и вычислительной
техники
Работа защищена с оценкой
_______________ ________
(дата)
Гудков А.Л.
Получение сведений о наличии билетов
на
рейсы Аэрофлота
Пояснительная
записка по курсовой работе по дисциплине
«Программирование»
Работа допущена Работу выполнил студент
к
защите учебной группы 08–ИЭ
Гудков
А.Л. Четвергов Е.С.
__________ ____________
(дата) (дата)
Калининград,
2009
Аннотация
В настоящей пояснительной записке приведены результаты разработки программы решения задачи «Получение сведений о наличии билетов на рейсы Аэрофлота», выполненной в соответствии с заданием по курсовой работе по дисциплине «Программирование» – постановка указанной задачи, проектные решения и программа (на языке Турбо-Паскаль), результаты испытания (тестирования) программы.
СОДЕРЖАНИЕ
1. Описание постановки задачи
- Характеристика задачи
Задача «Получение сведений о наличии билетов на рейсы Аэрофлота» решается с целью получения списка авиарейсов с опередленным пунктом назначения и временем вылета. Исходными для решения задачи данными является набор данных (файл) на магнитном диске, содержащий информацию об авиарейсах. В начале решения задачи задается (вводится с клавиатуры) запрос, представляющий собой две строковых переменных - пункт назначения и время вылета - и определяющий, для каких рейсов должны быть получены указанные выше сведения (результаты решения задачи).
- Исходные данные
Исходная для решения задачи «Получение сведений о наличии билетов на рейсы Аэрофлота» информация содержится в одном дисковом файле и в указываемом (вводимом с клавиатуры) в начале решения задачи запросе пользователя.
Структура элемента файла «Сведения об авиарейсах» (дисковое имя – ‘C:\TP\aeroflot.dat’):
- номер рейса (целое число),
- пункт назначения (строка),
- время вылета (строка),
- время прибытия (строка),
- количество свободных мест (целое число).
Запрос пользователя представляет собой:
- пункт назначения (строка),
- время вылета (строка).
- Результаты решения
Результатом решения задачи на ПК является таблица «Сведения о рейсах Аэрофлота» (рис. 1.1), которая содержит:
- номер рейса (целое число),
- время вылета (строка),
- время прибытия (строка),
- количество свободных мест (целое число).
|
Рис
1.1. Таблица «Сведения о рейсах Аэрофлота»
Данные в таблице располагаются в порядке возрастания по времени вылета.
2. Описание проектных решений
2.1.
Функциональная структура задачи,
программы
На
рис. 2.1 представлена схема иерархии процедур
задачи «Получение сведений о наличии
билетов на рейсы Аэрофлота», полученная
в результате её декомпозиции.
Рис
2.1. Схема иерархии процедур
На рис. 2.2 представлена функциональная структура программы решения задачи, полученная на основе схемы иерархии ее процедур.
Рис 2.2. Функциональная структура программы
Помимо основной программы с именем «P_AEROFLOT», программа должна содержать следующие подпрограммы:
- Подпрограмму Procedure InA (var city,time:string; var e:boolean), которая обеспечивает ввод двух элементов запроса – пункт назначения (строка), время вылета (строка);
- Подпрограмму Function UpcaseR (city:string):string, которая обеспечивает преобразование элемента запроса – пункт назначения – в заглавные буквы;
- Подпрограмму Function VerA2 (time:string):boolean, которая обеспечивает проверку элемента запроса - время вылета (строка);
- Подпрограмму Procedure GetR (city,time:string; var result:mas; var m:integer), которая обеспечивает обработку файла «AEROFLOT» с целью получения сведений об авиарейсах для заданного запроса;
- Подпрограмму SortR (var result:mas; m:integer), которая обеспечивает упорядочивание списка по возрастанию времени вылета (целое число);
- Подпрограмму OutR (city,time:string; result:mas; m:integer), которая обеспечивает вывод списка авиарейсов на экран монитора.
2.2. Описание алгоритма задачи
На рис. 2.3 – 2.9 представлены схемы обобщенного алгоритма задачи «Получение сведений о наличии билетов на рейсы Аэрофлота» и алгоритмов отдельных её процедур. Смысл используемых в них условных обозначений (имен, идентификаторов) приведен в табл. 2.1, тексты выводимых сообщений – в табл. 2.2. Обобщенный алгоритм (алгоритм задачи в целом) описывается в основной программе. Алгоритмы отдельных процедур – в соответствующих подпрограммах (см. 2.1.).
Рис 2.3. Схема алгоритма основной задачи
Рис 2.4. Схема алгоритма процедуры InA
Рис
2.5. Схема алгоритма функции UpcaseR
Рис 2.6. Схема алгоритма функции VerA2
Рис 2.7. Схема алгоритма процедуры GetR
Таблица 2.1. Условные
обозначения (имена, идентификаторы), используемые
в процедурах и функциях программы.
| Название
процедуры или функции |
Имена, идентификаторы | Назначение |
| InA | city:string
time:string e:boolean |
Пункт назначения
Время вылета Признак правильности запроса e=true – запрос верный e=false – запрос неверный |
| UpcaseR | i:byte | Счетчик символов исходной строки |
| VerA2 | c:boolean | Признак правильности
запроса
с=true – запрос верный с=false – запрос неверный |
| GetR | city:string
time:string result:mas m:integer a:zap a.pn a.vv a.mesta |
Элемент запроса
- пункт назначения
Элемент запроса - время вылета Массив записей об авиарейсах Количество записей в массиве result Запись из файла Элемент записи – пункт назначения Элемент записи – время вылета Элемент записи – кол-во свободных мест |
Таблица 2.2. Тексты выводимых сообщений
| Сообщение 1 | Ошибка при вводе запроса |
| Сообщение 2 | Нет сведений по запросу |
| Сообщение 3 | Введите пункт назначения: |
| Сообщение 4 | Введите время вылета (чч.мм): |
| Сообщение 5 | Вы не ввели пункт назначения! |
3. Описание программы
3.1. Структура программы
При написании программы решения задачи «Получение сведений о наличии билетов на рейсы Аэрофлота» использовался язык программирования Турбо-Паскаль (Turbo Pascal Version 7).
Функциональная структура программы (состав и взаимосвязь программных единиц исходного текста её – основной программы и подпрограмм) определена в 2.1.
Программа является описанием алгоритма задачи, приведенного в 2.2.
Модульная
структура программы (состав и взаимосвязь
модулей исходного текста) приведена на
рис. 3.1. Ниже указано содержание модулей
программы.
Рис
3.1 Модульная структура программы
Головной модуль P_AEROFLOT содержит текст основной программы.
Модуль U1 содержит подпрограммы InA, UpcaseR, VerA2.
Модуль U2 содержит подпрограммы GetR, SortR.
Модуль U3 содержит подпрограммы OutR.
Модуль U4 содержит описания общих типов данных.
3.2. Текст программы
Исходный текст программы решения задачи «Получение сведений о наличии билетов на рейсы Аэрофлота» (на языке Турбо-Паскаль, версия Turbo Pascal Version 7) – её модулей – приведен в приложении 1.
3.3. Исполнение программы
Для исполнения программы решения задачи «Получение сведений о наличии билетов на рейсы Аэрофлота» необходим ПК типа IBM с клавиатурой и монитором. Программа предварительно откомпилирована и собрана в исполняемый модуль с именем af.exe, который вызывается для исполнения стандартными средствами.
До начала исполнения программы на магнитном диске должен быть сформирован файл с исходными данными, структура, содержание и имя которого описаны в 1.2. В начале исполнения программы необходимо ввести с клавиатуры запрос, конкретизирующий условия решения задачи (см. 1.2).
4. Описание результатов испытаний программы
В
ходе испытаний (тестирования и контрольных
примеров исполнения) программы решения
задачи «Получение сведений о наличии
билетов на рейсы Аэрофлота» использовался
тестовый файл, текст которого приведен
в приложении 2 (программы создания и печати
тестового файла приведен в приложении
3), а также запросы для разных вариантов
решения задачи:
- Пункт назначения: москва
Время вылета: 01.00
- Пункт назначения: москва
Время вылета: 23.59
- Пункт назначения: с.пЕТЕрБург
Время вылета: 13.00
- Пункт назначения: _
- Пункт назначения: лондон
Время вылета: 10.00
- Пункт назначения: москва
Время вылета: time
- Пункт назначения: москва
Время
вылета: 30.00
После устранения ошибок в программе для указанных исходных данных (контрольных примеров) получены правильные результаты решения задачи (приложение 4), что свидетельствует о правильности разработанной программы.
ПРИЛОЖЕНИЯ
Приложение 1
Исходный
текст программы решения задачи
«Получение сведений о наличии билетов
на рейсы Аэрофлота»
Основная
программа
Program P_AEROFLOT;
uses U1,U2,U3,U4;
var city,time:string; e:boolean;
result:mas; m:integer;
Begin
InA(city,time,e);
if e=false then writeln('Ошибка при вводе запроса') else begin
GetR(city,time,result,m);
if m=0 then writeln('Нет сведений по запросу') else begin
if m>1 then SortR(result,m);
OutR(city,time,result,m);
end;
end;
Readln;
End.
Модуль
U1
Unit U1;
Interface
Function UpcaseR(city:string):string;
Function VerA2(time:string):boolean;
Procedure InA(var city,time:string; var e:boolean);
Implementation
Function UpcaseR(city:string):string;
const AS='
AB='
var n,i:byte; a:string;
Begin
a:='';
for i:=1 to length(city) do begin
n:=Pos(city[i],AS);
if n>0 then a:=a+copy(AB,n,1) else a:=a+city[i];
end;
UpcaseR:=a;
End;
Function VerA2(time:string):boolean;
var v:string; dv,code:integer; c:boolean;
Begin
c:=false;
if length(time)=5 then
if (time[3]='.') then begin
v:=copy(time,1,2); val(v,dv,code);
if (code=0)and(dv>=00)and(dv<=23)
then begin
v:=copy(time,4,2); val(v,dv,code);
if (code=0)and(dv>=00)and(dv<=59) then c:=true;
end;
end;
VerA2:=c;
End;
Procedure InA(var city,time:string; var e:boolean);
Begin
Write ('Введите пункт назначения: '); readln(city);
if city='' then begin
writeln ('Вы не ввели пункт назначения!');
e:=false
end else begin
city:=UpcaseR(city);
write ('Введите время вылета (чч.мм): '); readln(time);
e:=VerA2(time);
end;
End;
End.
Модуль
U2
Unit U2;
Interface
uses u4;
Procedure GetR(city,time:string; var result:mas; var m:integer);
Procedure SortR(var result:mas; m:integer);
Implementation
Procedure GetR(city,time:string; var result:mas; var m:integer);
Var F:file of zap; a:zap;
Begin
Assign(F,'AEROFLOT.dat');
Reset(F);
m:=0;
While not eof (F) do begin
Read (F, a);
If (a.pn=city) and (a.vv>=time) and (a.mesta>0) then begin
m:=m+1;
result[m]:=a;
end;
end;
Close (F);
End;
Procedure SortR(var result:mas; m:integer);
var i,j:integer; a:zap;
Begin
For i:=1 to (m-1) do
For j:=i+1 to m do
if result[i].vv>result[j].vv then begin
a:=result[i]; result[i]:=result[j]; result[j]:=a;
end;
End;
End.
Модуль
U3
Unit U3;
Interface
uses crt,U4;
Procedure OutR(city,time:string; result:mas; m:integer);
Implementation
Procedure OutR(city,time:string; result:mas; m:integer);
var i:integer;
Begin
clrscr;
Writeln (' Сведения о рейсах Аэрофлота ');
Writeln (' Пункт назначения: ',city);
Writeln (' Время вылета после: ',time);
Writeln ('┌───────┬──────────┬────────
Writeln
('│ Номер │ Время │ Время │ Количество │');
Writeln
('│ рейса │ вылета │ прибытия │ свободных мест │');
Writeln ('├───────┼──────────┼────────
for i:=1 to m do
Writeln
('│',result[i].nomer:5,' │',result[i].vv:6,' │',
result[i].vp:6,'
│',result[i].mesta:3, │');
Writeln ('└───────┴──────────┴────────
End;
End.
Модуль U4
Unit U4;
Interface
Type zap=record
nomer:integer;
pn:string[25];
vv:string[5];
vp:string[5];
mesta:integer
end;
mas=array
[1..16] of zap;
Implementation
End.
Приложение 2
Текст тестового
файла на магнитном диске
| номер
рейса |
пункт
назначения |
время
вылета |
время прибытия | свободных мест |
| 1010
1011 1012 1013 1014 1101 1102 1103 1500 1501 2010 2011 2100 2200 |
МОСКВА
МОСКВА МОСКВА МОСКВА МОСКВА С.ПЕТЕРБУРГ С.ПЕТЕРБУРГ С.ПЕТЕРБУРГ БАКУ БАКУ ЯКУТСК ЯКУТСК САРАНСК ВОЛОГДА |
06.00
10.00 14.00 17.00 21.00 07.00 12.00 18.00 11.00 20.00 06.00 17.00 13.00 12.00 |
07.00
11.00 15.00 18.00 22.00 07.40 12.40 18.40 13.00 22.00 12.00 23.00 16.00 16.00 |
40
40 60 30 30 15 40 50 60 70 60 55 70 50 |
Приложение 3
Текст программ
создания и печати тестового файла
Program CREATE;
Uses CRT,U1,U4;
Var AF:file of ZAP;
x:zap;
k,l:integer;
name:string;
Begin
clrscr;
k:=0;
assign(AF,'AEROFLOT.dat');
rewrite(AF);
writeln('Для ввода данных нажмите Enter');
writeln('Для окончания работы нажмите *');
while not (readkey='*') do begin
write('Номер рейса: ');
readln(x.nomer);
write('Пункт назначения: ');
readln(x.pn);
x.pn:=UPCASER(x.pn);
write('Время вылета хх.хх: ');
readln(x.vv);
write('Время прибытия хх.хх: ');
readln(x.vp);
write('Количество свободных мест: ');
readln(x.mesta);
k:=k+1;
write(AF,x);
writeln;
writeln('Для продолжения
writeln('Для окончания работы
writeln;
end;
clrscr;
writeln('В файле ',k:3,' записей');
reset(AF);
writeln('┌────────┬───────────
writeln('│ номер │ пункт │ время │ время │ свободных │');
writeln('│ рейса │ назначения │ вылета │ прибытия │ мест │');
writeln('├────────┼───────────
while not eof(AF) do begin
read(AF,x);
with x do
writeln('│',nomer:7,' │',pn:22,' │',vv:9,' │',vp:9,' │',mesta:10,' │');
end;
writeln('└────────┴───────────