program kursovic; Uses crt,dos,graph,strings; {Подключение модулей} type{"Запись" базы данных железно-дорожн. касс} RVCash=record {"Запись"} DayOfWeek:string[10]; {день недели} PointDest:string[10]; {пункт назначения} TimeOfDepart:string[10]; {время отправки} Compartment:string[10]; {купейные места} Reserv:string[10]; {плацкартные места} end;{type} const {constans for Menu} MaxSortItemMenu=4; {Макс.число пунктов в меню сортировки} MaxBegItemMenu=8; {Макс.число пунктов осн.меню} BegNumOfCharItem=17;{Макс. число букв в пункте меню} {Пункты осн.меню} BegItemsMenu:array[0..MaxBegItemMenu] of string= ('Вывод БД на экран', {0} ' Редакт. поля ', {1} ' Добавл. поля ', {2} ' Удален. поля ', {3} ' Создан. файла ', {4} ' Открыть файл ', {5} 'Поиск поля(полей)', {6} 'Сортировка полей ', {7} ' Выход ');{8} {Пункты меню сортировки} SortItemsMenu:array[0..MaxSortItemMenu] of string= (' День недели ', {0} 'Пункт назначения ', {1} ' Время отправки ', {2} ' Купейные места ', {3} 'Плацкартные места');{4} {Сообщения для осн.меню} Messages:array[0..MaxBegItemMenu] of string= ('Вывод Базы данных на экран, если она создана или открыта.',{0} 'Редактирование поля найденого по признаку.', {1} 'Добавление поля в Базу данных.', {2} 'Удаление поля из Базы данных.', {3} 'Создание файла (Базы данных).', {4} 'Открыть файл (Базу данных).', {5} 'Поиск поля(полей) в Базе данных по признаку.', {6} 'Сортировка полей по признаку.', {7} 'Выход из программы.'); {8} {Сообщения об ошбках для осн.меню} Errors:array[0..MaxBegItemMenu] of string= ('Вывод на экран невозможен, файл не открыт, или не создан.',{0} 'Редактирование поля найденого по признаку невозможно', {1} 'Если БД не создана или не открыта, то она будет СОЗДАНА.', {2} 'Удаление поля из Базы данных невозможно.', {3} 'Создание файла (Базы данных).', {4} 'Немогу открыть файл (Базу данных).', {5} 'Поиск поля (полей) в Базе данных невозможен.', {6} 'Сортировка полей по признаку невозможна.', {7} 'Выход из программы.'); {8} ColorItem=15; {Цвет пункта меню} BkColorItem=3; {Фон пункта меню} ActivColorItem=2; {Цвет активного пункта} ActivBkColorItem=4;{Фон активного пункта} BorderMenuColor=6; {Цвет бордюра рамки меню} BegMenuX=1; {Коорд осн.меню по Х} BegMenuY=8; {Коорд. осн.меню по У} BegMenu=0; {Указатель на основное меню} SortMenu=1; {Constans for Base of DATA} Var {Global Variables for Menu} i:integer; {временная переменная} CurBegItem:Byte; {текущий пункт осн. меню} CurSortItem:Byte;{Текущий пункт меню сортировки} {Global Vars For DATABASE} FileOpened:Boolean; {Открыт ли файл} RVCashs:array[0..19] of RVCash;{Массив наших "Записей"} FileDB:File of RVCash; {Файл наших "Записей"} FileName:string; {Имя открытого или созданного файла} EndOfRVCash:Byte; {Номер последней "записи" в массиве RVCashs} {============================================================================} {Процедуры и функции для меню} Procedure CursorOn;{- включим курсор -} var regs:registers; begin with regs do begin AH:=$01; cx:=3342; Intr($10,regs); end; end; Procedure CursorOff;{- выключим курсор -} var regs:registers; begin with regs do begin AH:=$01; cx:=16128; Intr($10,regs); end; end; {Создание меню и показ его на экран} Procedure CreateMenu(MenuX,MenuY,PointMenu:Byte); Var{ Width,Height:Byte; {Ширина,Высота меню} i,j:Byte; {Временная переменная} Begin Case PointMenu of {Проверка указателя меню} BegMenu: Begin {Основное меню} {Отображение окна меню и самого меню} TextBackground(BkColorItem); TextColor(BorderMenuColor); GotoXY(MenuX,MenuY); Write('╔'); GotoXY(MenuX,MenuY+MaxBegItemMenu+2); Write('╚'); GotoXY(MenuX+BegNumOfCharItem+1,MenuY+MaxBegItemMenu+2);Write('╝'); GotoXY(MenuX+BegNumOfCharItem+1,MenuY); Write('╗'); For i:=1 to BegNumOfCharItem do Begin GotoXY(MenuX+i,MenuY); Write('═'); GotoXY(MenuX+i,MenuY+MaxBegItemMenu+2); Write('═'); End; For i:=1 to MaxBegItemMenu+1 do Begin GotoXY(MenuX,MenuY+i); Write('║'); GotoXY(MenuX+BegNumOfCharItem+1,MenuY+i); Write('║'); End; For i:=0 to MaxBegItemMenu do Begin if i=CurBegItem then Begin TextColor(ActivColorItem); TextBackground(ActivBkColorItem); End else Begin TextColor(ColorItem); TextBackground(BkColorItem); End; GotoXY(MenuX+1,MenuY+i+1); Write(BegItemsMenu[i]); End; TextColor(2);{Вывод подсказки} TextBackGround(BLACK); GotoXY(2,25); write(Messages[CurBegItem]);{} End;{Case 1:} SortMenu: Begin {Основное меню} {Отображение окна меню и самого меню} TextBackground(BkColorItem); TextColor(BorderMenuColor); GotoXY(MenuX,MenuY+MaxSortItemMenu+2); Write('╚'); GotoXY(MenuX+BegNumOfCharItem+1,MenuY+MaxSortItemMenu+2);Write('╝'); For i:=1 to BegNumOfCharItem do Begin GotoXY(MenuX+i,MenuY); Write('═'); GotoXY(MenuX+i,MenuY+MaxSortItemMenu+2); Write('═'); End; For i:=1 to MaxSortItemMenu+1 do Begin GotoXY(MenuX,MenuY+i); Write('║'); GotoXY(MenuX+BegNumOfCharItem+1,MenuY+i); Write('║'); End; TextBackGround(Black); For i:=MaxSortItemMenu+3 to MaxBegItemMenu+2 do Begin GotoXY(MenuX,MenuY+i); Write(' '); End; For i:=0 to MaxSortItemMenu do Begin if i=CurSortItem then Begin TextColor(ActivColorItem); TextBackground(ActivBkColorItem); End else Begin TextColor(ColorItem); TextBackground(BkColorItem); End; GotoXY(MenuX+1,MenuY+i+1); Write(SortItemsMenu[i]);{} End; End;{Case SortMenu:} End;{Of Case} End; {End of GreateMenu} {Обработка меню и возврат активного пункта} Procedure ActiveItemMenu(PointMenu:Byte); Var Key:Char; {переменная для обраб. клавы} i:byte; {временная переменная} Begin Case PointMenu of {Проверка указателя меню} BegMenu:{Осн.меню} Repeat Key:=ReadKey; {Опрос клавы} TextColor(Black); {Скрытие Сообщ. об ошибки} TextBackGround(Black); GotoXY(2,25); write(Errors[CurBegItem]); TextColor(Black); {Скрытие подсказки} TextBackGround(BLACK); GotoXY(2,25); write(Messages[CurBegItem]);{} if (Ord(Key)=72) and (CurBegItem=0) then CurBegItem:=MaxBegItemMenu else if (Ord(Key)=72) then Dec(CurBegItem); if (Ord(Key)=80) and (CurBegItem=MaxBegItemMenu) then CurBegItem:=0 else if (Ord(Key)=80) then Inc(CurBegItem); For i:=0 to MaxBegItemMenu do Begin if i=CurBegItem then Begin TextColor(ActivColorItem); TextBackground(ActivBkColorItem); End else Begin TextColor(ColorItem); TextBackground(BkColorItem); End; GotoXY(BegMenuX+1,BegMenuY+i+1); Write(BegItemsMenu[i]); TextColor(2); TextBackGround(BLACK); GotoXY(2,25); write(Messages[CurBegItem]);{} End; Until (Ord(Key)=13) or (Ord(Key)=27); SortMenu:{Меню сортировки} Repeat Key:=ReadKey; {Опрос клавы} if (Ord(Key)=72) and (CurSortItem=0) then CurSortItem:=MaxSortItemMenu else if (Ord(Key)=72) then Dec(CurSortItem); if (Ord(Key)=80) and (CurSortItem=MaxSortItemMenu) then CurSortItem:=0 else if (Ord(Key)=80) then Inc(CurSortItem); For i:=0 to MaxSortItemMenu do Begin if i=CurSortItem then Begin TextColor(ActivColorItem); TextBackground(ActivBkColorItem); End else Begin TextColor(ColorItem); TextBackground(BkColorItem); End; GotoXY(BegMenuX+1,BegMenuY+i+1); Write(SortItemsMenu[i]); End; Until Ord(Key)=13; End;{Case Of PointMenu} If Ord(Key)=27 then CurBegItem:=MaxBegItemMenu; {если ESCAPE то Выход} End; {End of Active Menu} {============================================================================} {Functions and procedurs для работы с БД} Procedure CreateFile; {Создаем файл} Var RightName:Boolean; Begin Repeat TextColor(White); {Введите имя файла} TextBackGround(Black); GotoXY(2,23); writeln('Введите имя файла:');{} Readln(FileName); {Чтение Имени файла} {проверка на правельность имени файла} if (Length(FileName)<=8) and (Length(FileName)>=1) then RightName:=True else Begin RightName:=False; TextColor(Black); {Скрытие подсказки} TextBackGround(BLACK); GotoXY(2,25); write(Errors[CurBegItem]);{} TextColor(White); {Сообщ. об ошибки} TextBackGround(Red); GotoXY(2,25); write('Имя файла введено неправильно');{} TextColor(Black); {Скрытие Сообщ. об ошибки} TextBackGround(Black);{} GotoXY(2,23); writeln('Введите имя файла:'); write(FileName);{} End; Until (RightName) or (Length(FileName)=0); TextColor(Black); {Скрытие Сообщ. об ошибки} TextBackGround(Black);{} GotoXY(2,25); write(Errors[CurBegItem]);{} GotoXY(2,23); writeln('Введите имя файла:');{} write(FileName);{} GotoXY(2,25); write('Имя файла введено неправильно');{} {Создание и открытие файла} Assign(FileDB,FileName); ReWrite(FileDB); if RightName Then Begin TextColor(2); GotoXY(2,25); write('Файл "',FileName,'" успешно создан.');{} End; { TextColor(White); {} { GotoXY(30,10); write(FileName);{} FileOpened:=True;{} End;{End of CreateFile} Procedure OpenFile; {открываем файл} Var RightName:Boolean; i:Byte; Begin Repeat TextColor(White); {Введите имя файла} TextBackGround(Black); GotoXY(2,23); writeln('Введите имя файла:');{} Readln(FileName); {Чтение Имени файла} {проверка на правельность имени файла} if (Length(FileName)<=8) and (Length(FileName)>=1) then RightName:=True else Begin RightName:=False; TextColor(Black); {Скрытие подсказки} TextBackGround(BLACK); GotoXY(2,25); write(Errors[CurBegItem]);{} TextColor(White); {Сообщ. об ошибки} TextBackGround(Red); GotoXY(2,25); write('Имя файла введено неправильно');{} TextColor(Black); {Скрытие Сообщ. об ошибки} TextBackGround(Black);{} GotoXY(2,23); writeln('Введите имя файла:'); write(FileName);{} End; Until (RightName) or (Length(FileName)=0); TextColor(Black); {Скрытие Сообщ. об ошибки} TextBackGround(Black);{} GotoXY(2,25); write(Errors[CurBegItem]);{} GotoXY(2,23); writeln('Введите имя файла:');{} write(FileName);{} GotoXY(2,25); write('Имя файла введено неправильно');{} {открытие файла} Assign(FileDB,FileNAme); {$I-} Reset(FileDB); {$I+} if (IOResult=0) and (RightName) Then Begin GotoXY(2,25); TextColor(2); write('Файл "',FileName,'" успешно открыт.');{} {Чтение откр. файла в наш массив "записей"} while not Eof(FileDB) do begin Read(FileDB,RVCashs[EndOfRVCash]); Inc(EndOfRVCash); end; FileOpened:=True;{Файл открыт} Seek(FileDB,0); End else Begin GotoXY(2,25); TextColor(White); TextBackGround(Red); write('Файл "',FileName,'" не найден.');{} End; End;{End of CreateFile} Procedure AddField; {Добавл. поле} {Var {} Begin TextColor(Black); {Скрытие подсказки} TextBackGround(BLACK); GotoXY(2,25); write(' ');{} TextColor(2); {подсказка} TextBackGround(Black); GotoXY(2,25); write('Введите новое поле'); {Вводим поле} TextColor(White); GotoXY(2,23); writeln('День недели:'); Readln(RVCashs[EndofRVCash].DayOfWeek); TextColor(Black); GotoXY(2,23); writeln('День недели:'); Write(RVCashs[EndofRVCash].DayOfWeek); TextColor(White); GotoXY(2,23); writeln('Пункт назначения:'); Readln(RVCashs[EndofRVCash].PointDest); TextColor(Black); GotoXY(2,23); writeln('Пункт назначения:'); Write(RVCashs[EndofRVCash].PointDest); TextColor(White); GotoXY(2,23); writeln('Время отправки:'); Readln(RVCashs[EndofRVCash].TimeOfDepart); TextColor(Black); GotoXY(2,23); writeln('Время отправки:'); Write(RVCashs[EndofRVCash].TimeOfDepart); TextColor(White); GotoXY(2,23); writeln('Купейные места:'); Readln(RVCashs[EndofRVCash].Compartment); TextColor(Black); GotoXY(2,23); writeln('Купейные места:'); Write(RVCashs[EndofRVCash].Compartment); TextColor(White); GotoXY(2,23); writeln('Плацкартн. места:'); Readln(RVCashs[EndofRVCash].Reserv); TextColor(Black); GotoXY(2,23); writeln('Плацкартн. места:'); Write(RVCashs[EndofRVCash].Reserv); Inc(EndofRVCash);{Увелич. номер последней "записи" в массиве RVCashs} End;{End of AddField} Procedure ShowDB; Var i,j:Integer; Begin TextBackGround(White); TextColor(Blue); {writeln(' ╔═════╤═══════════════════╤════════════════╤════════════════════╗'); writeln(' ║№-пол│ Ф.И.О больного │ Диагноз │ Леч.врач ║'); writeln(' ╟─────┼───────────────────┼────────────────┼────────────────────╢') writeln(' ╚═════╧═══════════════════╧════════════════╧════════════════════╝'); {Ресуем рамку} For i:=23 to 79 do For j:=3 to 23 do Begin GotoXY(i,j); Write(' '); end; { For i:=23 to 78 do Begin GotoXY(i,24); Write('═'); End;{} For i:=2 to 23 do Begin GotoXY(20,i); Write('║'); GotoXY(80,i); Write('║'); End; GotoXY(20,2); Write('╔═╤═══════════╤═══════════╤═══════════╤═══════════╤═════════╗'); GotoXY(21,3); Write('N│День недели│Пункт назн.│Время отпр.│Куп. места │Плацкарт.'); GotoXY(21,4); Write( '─┼───────────┼───────────┼───────────┼───────────┼─────────'); For i:=5 to 23 do Begin GotoXY(21,i); Write(' │ │ │ │ │'); End; GotoXY(20,24); write('╚═╧═══════════╧═══════════╧═══════════╧═══════════╧═════════╝'); j:=0; if EndOfRVCash<>0 then For i:=0 to EndOfRVCash-1 do Begin GotoXY(21,i+5); Write(i); GotoXY(j*12+23,i+5); Write(RVCashs[i].DayOfWeek); j:=j+1; GotoXY(j*12+23,i+5); Write(RVCashs[i].PointDest); j:=j+1; GotoXY(j*12+23,i+5); Write(RVCashs[i].TimeOfDepart); j:=j+1; GotoXY(j*12+23,i+5); Write(RVCashs[i].Compartment); j:=j+1; GotoXY(j*12+23,i+5); Write(RVCashs[i].Reserv); j:=0; End; End; Procedure Save_CloseDBOnFile;{Сохранение и закрытие текущего файла} Var i:Byte; Begin if EndOfRVCash<>0 then ReWrite(FileDB); {Пересоздадим наш файл} For i:=0 to EndOfRVCash-1 do Write(FileDB,RVCashs[i]); Close(FileDB); EndOfRVCash:=0; End; Procedure ScreenSaver; {Заставка} Var i,j:Integer; Begin TextBackGround(White); TextColor(Blue); For i:=20 to 79 do For j:=2 to 24 do Begin if (i=20) or (i=79) or (j=2) or (j=24) then Begin GotoXY(i,j); Write('*'); end else GotoXY(i,j); Write(' '); End; GotoXY(43,5);Write('Курсовая работа.'); GotoXY(30,10);Write('Тема: .......'); GotoXY(30,11);Write('Студент: Ф.И.О.'); GotoXY(30,12);Write('Факультет: .... , Группа: "такая-то"'); GotoXY(30,15);Write('Преподаватель: Ф.И.О.'); End; Procedure Sort; {Сортировка по признаку} var i,j,NumOfCh:byte; Cash:RVCash; Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); write(' '); TextColor(2); GotoXY(2,25); write('Введите признак сортировки'); CreateMenu(BegMenuX,BegMenuY,SortMenu);{Вызов меню сортировки} ActiveItemMenu(SortMenu); NumOfCh:=1; Case CurSortItem of {Сортировать по ...} 0: for j:=0 to EndOfRVCash-2 do {Дням недели} for i:=0 to EndOfRVCash-2 do Repeat if RVCashs[i].DayOfWeek[NumOfCh]> RVCashs[i+1].DayOfWeek[NumOfCh] then Begin Cash:=RVCashs[i+1]; RVCashs[i+1]:=RVCashs[i]; RVCashs[i]:=Cash; End Else if RVCashs[i].DayOfWeek[NumOfCh]= RVCashs[i+1].DayOfWeek[NumOfCh] then Inc(NumOfCh) Else NumOfCh:=1; if NumOfCh>Length(RVCashs[i].DayOfWeek) then NumOfCh:=1;{} Until NumOfCh=1; 1: for j:=0 to EndOfRVCash-2 do {Пунктам назначения} for i:=0 to EndOfRVCash-2 do Repeat if RVCashs[i].PointDest[NumOfCh]> RVCashs[i+1].PointDest[NumOfCh] then Begin Cash:=RVCashs[i+1]; RVCashs[i+1]:=RVCashs[i]; RVCashs[i]:=Cash; End Else if RVCashs[i].PointDest[NumOfCh]= RVCashs[i+1].PointDest[NumOfCh] then Inc(NumOfCh) Else NumOfCh:=1; if NumOfCh>Length(RVCashs[i].PointDest) then NumOfCh:=1;{} Until NumOfCh=1; 2: for j:=0 to EndOfRVCash-2 do {Время отправки} for i:=0 to EndOfRVCash-2 do Repeat if RVCashs[i].TimeOfDepart[NumOfCh]> RVCashs[i+1].TimeOfDepart[NumOfCh] then Begin Cash:=RVCashs[i+1]; RVCashs[i+1]:=RVCashs[i]; RVCashs[i]:=Cash; End Else if RVCashs[i].TimeOfDepart[NumOfCh]= RVCashs[i+1].TimeOfDepart[NumOfCh] then Inc(NumOfCh) Else NumOfCh:=1; if NumOfCh>Length(RVCashs[i].TimeOfDepart) then NumOfCh:=1;{} Until NumOfCh=1; 3: for j:=0 to EndOfRVCash-2 do {Купейные места} for i:=0 to EndOfRVCash-2 do Repeat if RVCashs[i].Compartment[NumOfCh]> RVCashs[i+1].Compartment[NumOfCh] then Begin Cash:=RVCashs[i+1]; RVCashs[i+1]:=RVCashs[i]; RVCashs[i]:=Cash; End Else if RVCashs[i].Compartment[NumOfCh]= RVCashs[i+1].Compartment[NumOfCh] then Inc(NumOfCh) Else NumOfCh:=1; if NumOfCh>Length(RVCashs[i].Compartment) then NumOfCh:=1;{} Until NumOfCh=1; 4: for j:=0 to EndOfRVCash-2 do {Плацкарт} for i:=0 to EndOfRVCash-2 do Repeat if RVCashs[i].Reserv[NumOfCh]> RVCashs[i+1].Reserv[NumOfCh] then Begin Cash:=RVCashs[i+1]; RVCashs[i+1]:=RVCashs[i]; RVCashs[i]:=Cash; End Else if RVCashs[i].Reserv[NumOfCh]= RVCashs[i+1].Reserv[NumOfCh] then Inc(NumOfCh) Else NumOfCh:=1; if NumOfCh>Length(RVCashs[i].Reserv) then NumOfCh:=1;{} Until NumOfCh=1; End;{Case CurSortItem} ShowDB; CreateMenu(BegMenuX,BegMenuY,BegMenu); {Возвращаемся к гл.меню} End; Procedure DelField; {Удаление поля} Var i,j:Byte; NumStr:Byte; Key:Char; Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); write(' '); TextColor(2); TextBackGround(Black); GotoXY(2,25); Write('Введите No строки для удаления.'); TextColor(White); TextBackGround(Black); GotoXY(2,23); writeln('No строки:'); Readln(NumStr); TextColor(Black); GotoXY(2,23); writeln('No строки:'); Write(NumStr); TextColor(Black); TextBackGround(Black); GotoXY(2,25); Write('Введите поле и слово для удаления.'); TextColor(White); TextBackGround(Red); GotoXY(2,25); Write('Удалить поле ',NumStr,' y/n?'); Key:=ReadKey; TextColor(Black); TextBackGround(Black); GotoXY(2,25);Write(' '); If (Key=#13) or (Key=#89) or (Key=#121) or (Key=#173) or (Key=#141) then Begin For j:=NumStr to EndOfRVCash do RVCashs[j]:=RVCashs[j+1]; Dec(EndOfRVCash); ShowDB; End; CreateMenu(BegMenuX,BegMenuY,BegMenu); {Возвращаемся к гл.меню} End; Procedure EditField; {Редактирование поля} Var i,j:Byte; {Временная переменая} NumStr:Byte; {Num of string} Key:Char; Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); write(' '); TextColor(2); TextBackGround(Black); GotoXY(2,25); Write('Введите No сторки для редакт.'); TextColor(White); TextBackGround(Black); GotoXY(2,23); writeln('No строки:'); Readln(NumStr); TextColor(Black); TextBackGround(Black); GotoXY(2,23); writeln('No строки:'); GotoXY(2,25); Write('Введите No сторки для редакт.'); TextColor(White); TextBackGround(Red); GotoXY(2,25); Write('Изменить строку ',NumStr,' y/n?'); Key:=ReadKey; TextColor(Black); TextBackGround(Black); GotoXY(2,23);Writeln('No строки:'); GotoXY(1,24);Write(NumStr); GotoXY(2,25);Write(' '); TextColor(White); If (Key=#13) or (Key=#89) or (Key=#121) or (Key=#173) or (Key=#141) then Begin TextColor(White); GotoXY(2,23); writeln('День недели:'); Readln(RVCashs[NumStr].DayOfWeek); TextColor(Black); GotoXY(2,23); writeln('День недели:'); Write(RVCashs[NumStr].DayOfWeek); TextColor(White); GotoXY(2,23); writeln('Пункт назначения:'); Readln(RVCashs[NumStr].PointDest); TextColor(Black); GotoXY(2,23); writeln('Пункт назначения:'); Write(RVCashs[NumStr].PointDest); TextColor(White); GotoXY(2,23); writeln('Время отправки:'); Readln(RVCashs[NumStr].TimeOfDepart); TextColor(Black); GotoXY(2,23); writeln('Время отправки:'); Write(RVCashs[NumStr].TimeOfDepart); TextColor(White); GotoXY(2,23); writeln('Купейные места:'); Readln(RVCashs[NumStr].Compartment); TextColor(Black); GotoXY(2,23); writeln('Купейные места:'); Write(RVCashs[NumStr].Compartment); TextColor(White); GotoXY(2,23); writeln('Плацкартн. места:'); Readln(RVCashs[NumStr].Reserv); TextColor(Black); GotoXY(2,23); writeln('Плацкартн. места:'); Write(RVCashs[NumStr].Reserv); ShowDB; End; CreateMenu(BegMenuX,BegMenuY,BegMenu); {Возвращаемся к гл.меню} End; Procedure FindField; {Поиск поля} Var i,j,k,c:Byte; {Временная переменая} Word:String; Key:Char; Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); write(' '); CreateMenu(BegMenuX,BegMenuY,SortMenu);{Вызов меню сортировки} TextColor(2); TextBackGround(Black); GotoXY(2,25); Write('Введите поле и слово для поиска.'); ActiveItemMenu(SortMenu); Case CurSortItem of {Удалить по ...} 0: Begin TextColor(White); TextBackGround(Black); GotoXY(2,23); writeln('День недели:'); Readln(Word); TextColor(Black); GotoXY(2,23); writeln('День недели:'); Write(Word); k:=0; TextColor(Blue); {Сотрем написаное в рамке} TextBackGround(White); For c:=5 to 23 do Begin GotoXY(21,c); Write(' │ │ │ │ │ '); End; for i:=0 to EndOfRVCash-1 do {Дням недели} if RVCashs[i].DayOfWeek=Word then Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); Write('Введите поле и слово для поиска.'); TextColor(Blue); TextBackGround(White); j:=0; GotoXY(j*12+23,k+5); Write(RVCashs[i].DayOfWeek); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].PointDest); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].TimeOfDepart); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Compartment); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Reserv); k:=k+1; End; End;{Case: 0} 1: Begin TextColor(White); TextBackGround(Black); GotoXY(2,23); writeln('Пункт назначения:'); Readln(Word); TextColor(Black); GotoXY(2,23); writeln('Пункт назначения:'); Write(Word); k:=0; TextColor(Blue); {Сотрем написаное в рамке} TextBackGround(White); For c:=5 to 23 do Begin GotoXY(21,c); Write(' │ │ │ │ │ '); End; for i:=0 to EndOfRVCash-1 do if RVCashs[i].PointDest=Word then Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); Write('Введите поле и слово для поиска.'); TextColor(Blue); TextBackGround(White); j:=0; GotoXY(j*12+23,k+5); Write(RVCashs[i].DayOfWeek); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].PointDest); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].TimeOfDepart); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Compartment); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Reserv); k:=k+1; End; End;{Case: 0} 2: Begin TextColor(White); TextBackGround(Black); GotoXY(2,23); writeln('Время отправки:'); Readln(Word); TextColor(Black); GotoXY(2,23); writeln('Время отправки:'); Write(Word); k:=0; TextColor(Blue); {Сотрем написаное в рамке} TextBackGround(White); For c:=5 to 23 do Begin GotoXY(21,c); Write(' │ │ │ │ │ '); End; for i:=0 to EndOfRVCash-1 do if RVCashs[i].TimeOfDepart=Word then Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); Write('Введите поле и слово для поиска.'); TextColor(Blue); TextBackGround(White); j:=0; GotoXY(j*12+23,k+5); Write(RVCashs[i].DayOfWeek); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].PointDest); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].TimeOfDepart); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Compartment); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Reserv); k:=k+1; End; End;{Case: 0} 3: Begin TextColor(White); TextBackGround(Black); GotoXY(2,23); writeln('Купейные места:'); Readln(Word); TextColor(Black); GotoXY(2,23); writeln('Купейные места:'); Write(Word); k:=0; TextColor(Blue); {Сотрем написаное в рамке} TextBackGround(White); For c:=5 to 23 do Begin GotoXY(21,c); Write(' │ │ │ │ │ '); End; for i:=0 to EndOfRVCash-1 do if RVCashs[i].Compartment=Word then Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); Write('Введите поле и слово для поиска.'); TextColor(Blue); TextBackGround(White); j:=0; GotoXY(j*12+23,k+5); Write(RVCashs[i].DayOfWeek); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].PointDest); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].TimeOfDepart); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Compartment); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Reserv); k:=k+1; End; End;{Case: 0} 4: Begin TextColor(White); TextBackGround(Black); GotoXY(2,23); writeln('Плацкартн. места:'); Readln(Word); TextColor(Black); GotoXY(2,23); writeln('Плацкартн. места'); Write(Word); k:=0; TextColor(Blue); {Сотрем написаное в рамке} TextBackGround(White); For c:=5 to 23 do Begin GotoXY(21,c); Write(' │ │ │ │ │ '); End; for i:=0 to EndOfRVCash-1 do {Дням недели} if RVCashs[i].Reserv=Word then Begin TextColor(Black); TextBackGround(Black); GotoXY(2,25); Write('Введите поле и слово для поиска.'); TextColor(Blue); TextBackGround(White); j:=0; GotoXY(j*12+23,k+5); Write(RVCashs[i].DayOfWeek); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].PointDest); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].TimeOfDepart); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Compartment); j:=j+1; GotoXY(j*12+23,k+5); Write(RVCashs[i].Reserv); k:=k+1; End; End;{Case: 0} End;{Case CurSortItem} CreateMenu(BegMenuX,BegMenuY,BegMenu); {Возвращаемся к гл.меню} End; {============================================================================} Begin {Вход в основную программу} CurBegItem:=0; {Текщ. пункт меню (1)} CurSortItem:=0; {Текщ. пункт меню сортировки (1)} EndOfRVCash:=0; {"Записей" нет} FileOpened:=False; TextBackground(Black); clrscr; {Очистка зкрана} CursorOff;{} ScreenSaver; {Заставка} CreateMenu(BegMenuX,BegMenuY,BegMenu);{Создание меню} Repeat ActiveItemMenu(BegMenu);{} Case CurBegItem of 0: Begin if (FileOpened) and (EndOfRVCash<>0) then ShowDB Else Begin TextColor(White); TextBackGround(Red); GotoXY(2,25); write(Errors[CurBegItem]); End; End; 1: Begin if (FileOpened) and (EndOfRVCash<>0) then EditField Else Begin TextColor(White); TextBackGround(Red); GotoXY(2,25); write(Errors[CurBegItem]); End; End; 2:if FileOpened then Begin AddField; ShowDB; End else Begin TextColor(Black); {Скрытие подсказки} TextBackGround(BLACK); GotoXY(2,25); write(Messages[CurBegItem]);{} TextColor(White); {Сообщ. об ошибки} TextBackGround(Red); GotoXY(2,25); write(Errors[CurBegItem]); CreateFile; {Созд файл} if EndOfRVCash<19 then Begin AddField; {Добавл поле} ShowDB; End; End;{} 3: Begin if (FileOpened) and (EndOfRVCash<>0) then DelField Else Begin TextColor(White); TextBackGround(Red); GotoXY(2,25); write(Errors[CurBegItem]); End; End; 4: Begin CreateFile; End; 5: Begin {Открыть файл} if not FileOpened then OpenFile {Если файл не откр.} else Begin Save_CloseDBOnFile;{то откр., иначе} OpenFile; {сохр. и откр.} End;{} ShowDB; End; 6: Begin if (FileOpened) and (EndOfRVCash<>0) then FindField Else Begin TextColor(White); TextBackGround(Red); GotoXY(2,25); write(Errors[CurBegItem]); End; End; 7: Begin if (FileOpened) and (EndOfRVCash<>0) then Sort Else Begin TextColor(White); TextBackGround(Red); GotoXY(2,25); write(Errors[CurBegItem]); End; End; End;{Case of CurBegItem} Until CurBegItem=8;{Выход} if FileOpened then Save_CloseDBOnFile; ScreenSaver; TextColor(2); TextBackGround(Black); GotoXY(2,25);Write(' '); GotoXY(2,25);Write('Нажмите любую клавишу!'); While not KeyPressed do; CursorOn; End. {Выход из основной программы}