Автор работы: Пользователь скрыл имя, 08 Июня 2014 в 19:35, курсовая работа
Базовыми компонентами система программирования Турбо Паскаль являются компилятор языка Паскаль, средства создания и редактирования исходных текстов программ и средства их отладки (поиска и исправления ошибок). Все эти компоненты объединены в единую интегрированную среду разработчика, с которой работает программист, создавая свои программы.
Запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих к разным типам. Компоненты записи называются полями, каждое из которых определяется именем. Поле записи содержит имя поля, вслед за которым через двоеточие указывается тип этого поля.
ВВЕДЕНИЕ 2
НАЗНАЧЕНИЕ И ОБЛАСТЬ ПРИМЕНЕНИЯ 3
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ 3
2.1. Постановка задачи 3
2.2. Описание программы и алгоритма программы с
описанием функций и составных частей и связей между
ними . Описание входных и выходных данных 3
2.3. Выбор состава технических и программных средств 8
3. ИСТОЧНИКИ, ИСПОЛЬЗОВАННЫЕ ПРИ РАЗРАБОТКЕ 9
РАЗРАБОТКА ПРОГРАММЫ 9
ТЕСТИРОВАНИЕ ПРОГРАММЫ 9
ВНЕДРЕНИЕ 10
ЗАКЛЮЧЕНИЕ 11
СПИСОК ЛИТЕРАТУРЫ 12
Список литературы
Program Kurs;
Uses Crt, Dos;{подключаемые модули}
Const RD=0; {Чтение из файла}
WR=1; {Запись в файл}
{главное меню программы}
Pp: array[1..3] of string[40]=('1. Новый рейс',
'2. Найти рейс',
'3. Выход из программы');
{подменю программы}
{массив пунктов меню}
Ai: array[1..7] of string[50]=('1. Добавить новые данные',
'2. Удалить данные',
'3. Изменить данные',
'4. Проданные места за месяц',
'5. Проданные места на заданное число',
'6. Кол-во свободных мест на заданное число',
'7. Выход в главное меню');
Max=20; {Максимальное количество мест на самолет}
type Dt=record {тип записи - дата рейса}
d,m,g: integer; {день, месяц и год (2013)}
end;
Kl=record {тип записи - пассажир}
F: string[15];{строковая переменная - Фамилия пассажира}
P: string[12];{строковая переменная - номер паспорта}
M: integer; {переменная целого типа - номер места в самолете}
end;
Reis=record {тип записи - рейс}
Sv: array[1..Max] of integer;{свободные номера в самолете}
Ps: array[1..Max] of Kl;{массив записей (данных) - данные о
пассажирах текущего (выбранного) рейса}
K: integer; {переменная целого типа - кол-во пассажиров в самолете}
D: Dt; {переменная типа Dt - дата рейса}
end;
var Rs: Reis; {здесь хранится инф-я по текущему рейсу, с которым идет работа}
F: File; {переменнaя типа File}
R_d, R_m:integer;{переменные целого типа}
ss: string; {перем. строкого типа}
{-----выполняется в конце процедур-пунктов меню}
Procedure Enter;
begin
gotoxy(10,25);{установить курсор в заданную позицию}
write('Для возврата в меню нажмите Enter.');{вывод на экран}
readln;{ждать нажатия кнокпи Enter}
end;
{--- Процедура записи/чтения в/из файл(а)}
Procedure InfoFile(W_R:integer);
var d, x: integer;
begin
x:=1;
if W_R=RD{чтение из файла}
then begin
reset(F, SizeOf(Rs)); {открыть файл для чтения}
BlockRead(F, Rs, SizeOf(Rs), x); {читать данные из файла}
end
else begin{запись в файл}
Rewrite(F, Sizeof(Rs)); {открыть файл для записи}
BlockWrite(F,Rs,x,d); {записать информацию в файл}
end;
Close(F);{закрыть файл}
end;
{---- Процедура вывода результата}
Procedure Out;
var i: integer;{переменная целого типа}
Key: char;
begin
if Rs.K=0{если пассажиров нет}
then writeln('Сначала введите данные.'){вывод на экран}
else begin {вывести данные пассажиров на экран}
i:=1;
repeat
Clrscr; {очистить экран}
writeln('Текущий номер записи - ',i,' Всего пассажиров - ',Rs.K);
writeln; writeln('Фамилия : ', Rs.Ps[i].F);
writeln('Номер паспорта : ', Rs.Ps[i].P); writeln('Место в самолете: ', Rs.Ps[i].M);
writeln('Дата вылета : ', Rs.D.d,'/',Rs.D.m,'/2013');
writeln('---------------------
gotoxy(1, 25);{уст.курсор в заданную позицию}
TextColor(LightRed);{уст.цвет текста} TextBackGround(Blue); {цвет фона текста}
write('<- НАЗАД -> ДАЛЬШЕ ВЫХОД-ESC');
TextBackGround(White); {цвет фона текста}
TextColor(Black); {уст.цвет текста} Key:=readkey; {ждет нажатия кнопки}
case Key of {оператор выбора}
#75: begin {влево}
if i=1 {проверка условия}
then i:=Rs.K else dec(i);
end;
#77: begin {вправо}
if i=Rs.K {проверка условия}
then i:=1 else inc(i);
end;
#27: exit;{выход из процедуры}
end;
until Key=#27;
end;
Enter; {ждать нажатия клавиши Enter-вызов процедуры}
end;
{------- Процедура просмотра свободных мест и информации о пассажирах}
Procedure Prosmotr(z, z2:integer);
var j: integer; {перем.целого типа}
begin
if z=0 then begin Out; exit; end;
writeln('Свободные места в самолете: ');{вывод на экран}
if Rs.K>0 {если есть пассажиры в самолете}
then begin
Textcolor(red); {установить красный цвет текста}
writeln; writeln('Дата вылета: ', Rs.D.d,'/',Rs.D.m,'/2006');
writeln; Textcolor(Blue); {установить синий цвет текста}
{вывод свободных номеров на экран}
for j:=1 to Max do
if Rs.Sv[j]>0 then write(Rs.Sv[j],', ');{вывод на экран}
writeln;{вывод пустой строки на экран}
Textcolor(Black); {установить черный цвет текста}
end
else writeln('Все места на самолет свободны !');
if z2=0 then Enter; {ждать нажатия клавиши Enter-вызов процедуры}
end;
{----------- Процедура ввода данных}
Procedure Add;
begin
Clrscr;
If Rs.K=Max then writeln('В самолете нет свободных мест.'){вывод на экран}
else begin
Prosmotr(1,1); {вызов процедуры}
inc(Rs.K); {увеличить кол-во пассажиров}
writeln; {вывод на экран} write('Введите фамилию пассажира : '); readln(Rs.Ps[Rs.K].F);
write('Введите его номер паспорта: '); readln(Rs.Ps[Rs.K].P);
repeat
repeat
write('Введите место в самолете : '); readln(Rs.Ps[Rs.K].M);
if(Rs.Ps[Rs.K].M<=0)or(Rs.Ps[
then begin
writeln; writeln('Введено неверное значение. Места могут быть с 1 по 20.');
end;
until (Rs.Ps[Rs.K].M>0)and(Rs.Ps[Rs.
if Rs.Sv[Rs.Ps[Rs.K].M]=0
then begin writeln; writeln('Это место уже занято другим пассажиром.'); end;
until Rs.Sv[Rs.Ps[Rs.K].M]>0;
Rs.Sv[Rs.Ps[Rs.K].M]:= 0;{занять место}
Rs.D.d:=R_d; Rs.D.m:=R_m; Rs.D.g:=2006;{заполняем дату}
InfoFile(WR);{---сохранить информацию в файл}
end;
Enter; {ждать нажатия клавиши Enter-вызов процедуры}
end;
{--- Процедура удаления пассажира из самолета (освобождения места)}
Procedure Del;
var i, j:integer;{переменные целого типа}
begin
Clrscr; {очистить экран}
if Rs.K=0 {если пассажиров нет}
then writeln('Отсутствуют пассажиры в самолете.'){вывод на экран}
else begin
write('Введите номер места в самолете, который требуется освободить: ');{вывод на экран}
readln(j); {ввод номера}
if Rs.Sv[j]>0 {проверка условия}
then writeln('Место под номером ',j, ' уже свободно в самолете !')
else
begin
{---------освободить место}
Rs.Sv[j]:= j;
for i:=1 to Rs.K do
if Rs.Ps[i].M=j then j:=i;
dec(Rs.K);
writeln('----- Пассажир -----');{вывод на экран}
Textcolor(green); {установить зеленый цвет рисования}
writeln('Фамилия : ', Rs.Ps[j].F); writeln('Номер паспорта : ', Rs.Ps[j].P);
writeln('Место в самолете: ', Rs.Ps[j].M);
writeln('Дата вылета : ', Rs.D.d,'/',Rs.D.m,'/2006');
Textcolor(Black); {установить черный цвет для текста}
writeln; writeln('Удален из самолета!');
for i:=j to Rs.K-1 do Rs.Ps[i]:=Rs.Ps[i+1];{Сдвиг записей к началу массива}
InfoFile(WR);{---сохранить информацию в файл}
end;
end;
Enter; {ждать нажатия клавиши Enter-вызов процедуры}
end;
{Процедура изменения данных}
procedure Izm;
var j, n: integer;
ff: boolean;
begin
if Rs.K=0 {если пассажиров нет}
then writeln('Отсутствуют пассажиры в самолете.'){вывод на экран}
else begin
repeat
write('Введите номер места, данные по которому требуется изменить - ');
readln(n);
if(n<=0)or(n>Max)
then writeln('Введено неверное значение. Места могут быть с 1 по 20.');
until (n>0)and(n<=Max);
j:=1; ff:=false;
repeat {выполнять}
if n=Rs.Ps[j].M then ff:=true else inc(j);
until (j>Rs.K)or(ff=true);{пока условие не станет истиным}
if ff=false then writeln('Место свободно в самолете. Данных нет!')
else begin
writeln('Есть такой пассажир в самолете. Вот его данные.');
Textcolor(Magenta); {установить цвет рисования}
write('Фамилия (старое=', Rs.Ps[j].F,'), новое ? ');
Textcolor(red); {установить цвет рисования}
readln(Rs.Ps[j].F); Textcolor(Magenta); {установить цвет рисования}
write('Номер паспорта (старое=', Rs.Ps[j].P,'), новое ? ');
Textcolor(red); {установить цвет рисования}
readln(Rs.Ps[j].P); Textcolor(Magenta); {установить цвет рисования}
writeln('Место в самолете: ', Rs.Ps[j].M);
writeln('Дата вылета : ', Rs.D.d,'/',Rs.D.m,'/2006');
Textcolor(Black); {установить черный цвет для текста}
InfoFile(WR);{---сохранить информацию в файл}
end;
end;
Enter; {ждать нажатия клавиши Enter-вызов процедуры}
end;
{------- Процедура просмотра проданных мест за весь месяц}
Procedure ProsmotrMonth;
var pr, i, j: integer;
Key: char;
M1: array[1..12] of integer;
M2: array[1..12] of string[10];
s1, s2, N: string;
mm: PathStr;{результат поиска файла}
w: Reis; {здесь хранится инф-я по текущему рейсу, с которым идет работа}
begin
ClrScr; {очистить экран}
M1[1]:=31; M1[2]:=28; M1[3]:=31; M1[4]:=30; M1[5]:=31; M1[6]:=30;
M1[7]:=31; M1[8]:=31; M1[9]:=30; M1[10]:=31; M1[11]:=30; M1[12]:=31;
M2[1]:='январь'; M2[2]:='февраль'; M2[3]:='март'; M2[4]:='апрель';
M2[5]:='май'; M2[6]:='июнь'; M2[7]:='июль'; M2[8]:='август';
M2[9]:='сентябрь'; M2[10]:='октябрь'; M2[11]:='ноябрь'; M2[12]:='декабрь';
Textcolor(Red); {установить красный цвет для текста}
write('Введите месяц (просмотр проданных мест) !');
repeat
gotoxy(5,2); write(' ');
gotoxy(5,2); Textcolor(Red); {установить красный цвет для текста}
write('Месяц - '); Textcolor(Blue); {установить цвет для текста} readln(R_m);
if (R_m<=0) or (R_m>12)
then begin
writeln('Вы ввели неверное значение! Enter-продолжить, ESC-выход');
repeat Key:=readkey; until (Key=#27) or (Key=#13);
if Key=#27 then begin Textcolor(Black); exit; end;
end;
gotoxy(1,5);
write('
gotoxy(20,2); write(M2[R_m]);
until (R_m>0) and (R_m<13);
{вычислим кол-во дней в месяце текущего 2006 года}
if (R_m=1)or(R_m=3)or(R_m=5)or(R_
if (R_m=4)or(R_m=6)or(R_m=9)or(R_
if R_m=2 then pr:=29;
for j:=1 to pr do
begin
str(j,s1); str(R_m,s2);
N:= ss+'\'+s1+'_'+s2+'_'+'06.bd';
assign(F, N);{установить зависимость} mm:= FSearch(N,ss);{поиск файла}
if mm<>''
then begin
InfoFile(RD);{получить информацию из файла}
writeln; write('День - ', R_d,', проданные места = ');
for i:=1 to Max do if Rs.Sv[i]=0 then write(i,',');{вывод на экран} end;
end;
str(R_d,s1); str(R_m,s2); N:= ss+'\'+s1+'_'+s2+'_'+'06.bd';
assign(F, N);{установить зависимость}
InfoFile(RD);{получить информацию из файла}
Textcolor(Black); {установить черный цвет для текста}
Enter; {ждать нажатия клавиши Enter-вызов процедуры}
end;
Procedure PodMenu; {---- Процедура вывода меню на экран}
var i:integer; {переменные целого типа}
Key:char; {переменная символьного типа}
begin
repeat ClrScr; {очистить экран}
Textcolor(green); {установить зеленый цвет рисования}
gotoxy(20,6); write('М Е Н Ю');{вывод на экран}
Textcolor(Magenta);{установить цвет рисования}
for i:=1 to 7 do begin gotoxy(20, 8+i); write(Ai[i]); end;
Key:= readkey; {Чтение кода нажатой клавиши} ClrScr; {очистить экран}
Textcolor(Black); {установить черный цвет для текста}
case Key of {оператор выбора}
'1': Add; {ввод данных}
'2': Del; {удаление данных}
'3': Izm; {изменение данных}
'4': ProsmotrMonth;{проданные места за весь месяц}
'5': Prosmotr(0,0);{просмотр проданных мест на заданное число}
'6': Prosmotr(1,0);{просмотр свободных мест на заданное число}
'7': Key:=#27; {выход из программы}
end;
if Key=#27 then exit {если нажата ESC-выход в основное меню программы}
until(Key=#27);
end;
procedure Reisy(z:integer); {Процедура создания/поиска рейса, если такого нет}
var pr, i, j: integer;
Key: char; M1: array[1..12] of integer;
M2: array[1..12] of string[10]; s1, s2, N: string;
mm: PathStr;{результат поиска файла}
begin
ClrScr; {очистить экран}
M1[1]:=31; M1[2]:=28; M1[3]:=31; M1[4]:=30; M1[5]:=31; M1[6]:=30;
M1[7]:=31; M1[8]:=31; M1[9]:=30; M1[10]:=31; M1[11]:=30; M1[12]:=31;
M2[1]:='январь'; M2[2]:='февраль'; M2[3]:='март'; M2[4]:='апрель';
M2[5]:='май'; M2[6]:='июнь'; M2[7]:='июль'; M2[8]:='август';
M2[9]:='сентябрь'; M2[10]:='октябрь'; M2[11]:='ноябрь'; M2[12]:='декабрь';
Textcolor(Red); {установить красный цвет для текста} write('Введите дату рейса !');
repeat {ввод месяца}
gotoxy(5,4);
write(' '); gotoxy(5,4); Textcolor(Red); {установить красный цвет для текста}