Создание информационной системы 'Учреждение образования'
СОДЕРЖАНИЕ
Введение
. Выбор метода реализации задачи
.1 Обоснование метода реализации задачи
.2 Выделение функциональных частей
.3 Составление общего алгоритма
.4 Обоснование алгоритма отдельных функциональных
частей
. Разработка тестовых приемов
. Разработка программы
. Тестирование и анализ результатов
Заключение
Список литературы
Приложения
ВВЕДЕНИЕ
Информационные и управляющие системы в настоящее
время составляют основную область приложений компьютерных систем для всех видов
хозяйственной, финансовой, творческой деятельности, а также в образовании,
фундаментальных и прикладных научных исследованиях. Хотя современные
компьютерные технологии больше обслуживают потребности человека и групп людей в
их общественной и технической деятельности, чем их естественные потребности,
они уже стали неотъемлемой частью повседневной жизни практически по всему
земному шару. Занятия некоторых людей, групп, коллективов и блоков сейчас всё в
большей мере начинает зависеть от их информированности и способности результативно
применять бытующие сведения.
В настоящее время персональные электронные
вычислительные машины используются при решении широкого спектра проблем,
поэтому логичным было бы предложить использование персональной электронной
вычислительной машины для выполнения задачи, связанной не только с поиском, но
и с хранением информации по выбранной теме, т. к. при отыскании целесообразных
решений во всякой сфере вызывает обработку немалых объёмов сведений, что другой
раз невозможно без привлечения особых технических средств. При использовании
персональной электронной вычислительной машины для решения данной задачи время
поиска нужной информации сократится до минимума.
Часто важен именно быстрый доступ к необходимой
информации, т.к. информация может повлиять на какие-либо решения либо действия
человека. Поэтому так важен скоростной доступ к полной и отсортированной
информации.
В ходе выполнения курсового проекта будет
создана информационная система “Учреждение образования”, которая может быть
использована сотрудниками таких учреждений в целях облегчения поиска подходящей
(необходимой) информации. Для лучшего использования в программе будет
реализован удобный графический интерфейс и понятный любому пользователю
диалоговый режим.
1. ВЫБОР МЕТОДА РЕАЛИЗАЦИИ ЗАДАЧИ
1.1 ОБОСНОВАНИЕ МЕТОДА РЕАЛИЗАЦИИ
ЗАДАЧИ
Для написания информационной системы «Учреждение
образования» будет выбран язык программирования Паскаль. Начинать изучение
программирования лучше всего именно им - это единственный язык, который создан
специально для обучения программированию. Паскаль имеет четкую систему типов
данных, понятную словесную форму их описания, поддерживает как текстовый, так и
графический режимы. Написанные на Паскале программы ближе всего к естественному
языку. Программы записывают по синтаксису языка Паскаль, а стандартные слова -
английским языком. Такая запись существенно улучшает понимание программы, а
возможность автоматического перевода упрощает переход к профессиональным средам
программирования. Язык Паскаль сыграл большую роль в развитии методов
аналитического доказательства правильности программ и позволил реально перейти
от методов отладки программ к системам автоматической проверки правильности
программ.
Применение данного языка значительно подняло
"планку" надёжности разрабатываемых программ за счёт требований
Паскаля к описанию используемых в программе переменных, проверки
согласованности программы при компиляции без её выполнения, использования в
Паскале простых и гибких структур управления: ветвлений, циклов. К его
преимуществам можно отнести:
- легкость написания динамических
программ и программ для работы с текстовой информацией;
- возможность использования внешних
процедур, что способствует развитию умения работать с библиотекой алгоритмов;
- низкие требования к аппаратуре и совместимость
с широким кругом IBM-совместимых
Кроме набора средств, присущих современным
языкам программирования высокого уровня (структурность, модульность,
определяемые типы данных) в Паскаль включены средства для программирования
"почти" на уровне ассемблера (использование указателей, побитовые
операции, операции сдвига). Паскаль требует жесткой дисциплины
программирования, содействующей устранению многих ошибок еще на стадии их
трансляции. Данный язык не допускает использования принципов умолчаний и сокращений,
требует строгого соблюдения соответствия типов данных, в нём жёстко
регламентированы структура и место описания программных объектов.
Перечислим основные из них:
- ограниченное использование типов
данных, в полном объёме поддерживаются только арифметические типы данных.
- вложенность блоков, в которых
используются одноименные объекты, не должна превышать двух уровней.
- процедурные блоки не должны быть
внутри BEGIN-блоков, вложенность процедурных блоков не ограничивается.
- допускается использовать только
одномерные массивы с открытой правой границей (динамические массивы) в качестве
параметров процедурных блоков; при этом адресуются элементы массива в Паскаль
программе, начиная с нулевого элемента.
- ограниченное использование смешения
различных типов данных.
В языке Паскаль операции отношения и
рассмотренные ниже булевские операции более важны при написании программ, чем в
других языках, так как они интенсивно используются для реализации
разветвляющихся и циклических алгоритмов. Каждый конкретный язык ориентирован
либо на компиляцию, либо на интерпретацию - в зависимости от того, для каких
целей он создавался. Например, Паскаль
<#"601491.files/image001.gif">
заставка (Рис. 4.1.).
После нажатия клавиши ENTER,
на экране появляется горизонтальное меню (рис.4.2)
Рис. 4.2. Горизонтальное меню и информация.
Видно, что активный пункт меню - Новая. Нажимая
клавиши управления курсором, перемещаюсь по пунктам меню. На пункте меню Новая
нажимаю клавишу ENTER,
на экране выводится сообщение (рис.4.3):
Рис. 4.3. Запрос на новую запись.
Ввожу следующую информацию:
Шифр
|
4653456
|
Фамилия
|
Петровский
|
Специальность
|
АСОИ
|
Имя
|
Евгений
|
Отчество
|
Иванович
|
Год
поступления
|
1999
|
После ввода информации и нажатия клавиши ENTER,
появляется запрос (рис.4.4). Нажимаю НЕТ - появляется первоначальная заставка
(рис 4. 2.). Добавленную запись мы сразу же видим на экране.
Рис.4.4 Добавление записи.
Если бы мы нажали клавишу ДА, появилось снова бы
сообщение (рис.4.3.).
Выход в главное меню при неполном заполнении
записи осуществляется путём нажатия клавиши ESC.
Нажав клавишу TAB,
видим, что появилась полная информация об окне (рис.4.5), расположенном первым
по списку, нажимая клавиши ↓↑, мы перемещаемся по записям и
наблюдаем полную информацию о каждом.
Рис. 4.5. Полная информация о записях.
При нажатии клавиш: DEL
- появляется запрос (рис. 4.6.), ENTER
- появляется такой же запрос, как и при создании новой записи (рис 4.3.), но
поля уже содержат данные, INS
-запрос о подтверждении переноса в архив (рис. 4.7.).
Рис. 4.6. Удаление записи
Рис 4.7. Перенос записи в архив.
Нажимаем клавишу ESC
и возвращаемся в главное меню, выбираем пункт Поиск. Критерий поиска - любое
поле записи (если же не указаны искомые данные, система выведет всю базу
данных). Найдём всех студентов, факультета «АСОИ» (рис. 4.8.). В том случае,
если программа не найдет записей по исходному запросу, то появится сообщение
«Ничего не найдено!».
Рис. 4.8. Заполнение ключевых полей поиска.
Результат (рис.4.9), затем клавишей ESC
возвращаемся в главное меню, выбираем пункт Сортировка. Появляется запрос
(рис.4.10), перемещаясь с помощью клавиш ↓↑ выбираем сортируемое
поле, например фамилия, результат (рис. 4.11.)
Рис. 4.9. Результат поиска.
Рис. 4.10. Запрос на сортировку.
Рис. 4.11. Результат сортировки.
Опять же клавишей ESC
возвращаемся в главное меню, выбираем пункт Архив.
Нажимаем клавишу ENTER
и просматриваем содержимое архива (поскольку мы не заносили туда никакой
информации - результат пустой список). Возвращаемся в главное меню клавишей ESC,
выбираем пункт Автор и нажимаем ENTER
(рис 4.12.). Возвращение в главное меню - клавиша ESC.
Рис. 4.12. Краткая информация об авторе.
При выборе пункта меню Выход, мы возвращаемся в
среду TP.
ЗАКЛЮЧЕНИЕ
В результате выполнения курсовой работы был
разработан алгоритм реализации и написана программа для информационной системы
«Учреждение образования». Данная программа позволяет создать базу данных,
хранящую в себе данные о студентах (учащихся), таких как шифр, фамилия, имя,
отчество, специальность, год поступления. Обеспечена возможность добавление
записей, их редактирование и удаление.
В итоге программа оказалась нетребовательной к
ресурсам компьютера и может легко использоваться на недорогих ЭВМ. Также, для
лучшего использования программа имеет удобный интерфейс и понятный любому
пользователю диалоговый режим. В ходе проделанной работы была построена гибкая
модель базы данных, в которой легко создать нужный запрос; данные представлены
в удобном для пользователя виде.
Пояснительная записка содержит подробное
описание процесса проектирования и создания, как базы данных, так и
программного обеспечения, работающего с ней.
Так как программа работает с динамическими
списками, то она быстра и позволяет избежать избыточности данных в таблицах.
В дальнейшем программа может быть
усовершенствована путем добавления новых функций и модулей, например, для
применения в более профессиональной среде и вывода на печать файла с
информацией о студентах (учащихся). Это сможет значительно расширить область
применения программы и сделать ее еще более востребованной.
СПИСОК ЛИТЕРАТУРЫ
- Вальвачев
А.Н., Крисевич В.С. Программирование на языке ПАСКАЛЬ для персональных ЭВМ ЕС:
Справочное пособие. - Мн.: Выш. шк., 1989.
- Базенков
Т.Н., Дереченик С.С. СТ БПИ - 02 - 98. Графическая конструкторская документация
электронной аппаратуры в курсовых и дипломных проектах (работах): Общие
требования к разработке и правила оформления. - Брест, 1998.
- ГОСТ
19.002 - 80 ЕСПД Схемы алгоритмов и программ. Правила выполнения. - М. :
Издательство стандартов, 1990.
- ГОСТ
19.003 - 80 ЕСПД Схемы алгоритмов и программ. Обозначения условные и
графические. - М.: Издательство стандартов, 1990.
- ГОСТ
19.701 - 90 ЕСПД Схемы алгоритмов, программ, данных и систем. Условные
обозначения и правила выполнения. - М. : Издательство стандартов, 1990.
- СТБПИ
- 02 - 98 Стандарты института. Графическая конструкторская и программная
документация электронной аппаратуры в курсовых и дипломных проектах (работах).
Общие требования к разработке и правила оформления. - Брест : БПИ, 1998.
- Епанешников
А.М., Епанешников В.А.. «Программирование в среде TURBO PASCAL 7.0». Москва,
«Диалог-мифи», 1996. Вальвачев А.Н., Крисевич В.С.. «Программирование на языка
ПАСКАЛЬ». Минск, «Вышэйшая школа», 1989
ПРИЛОЖЕНИЯ
ПРИЛОЖЕНИЕ 1.
БЛОК-СХЕМА АЛГОРИТМА
ПРИЛОЖЕНИЕ 2. ТЕКСТ ПРОГРАММЫ
kurs;crt;_Base=record {тип данных
mag представляющий из себя запись с 6-ю переменными}
Record_Number:String[9];
{Шифр Студента}_Famile:string[40];
{Фамилия}_Special:string[20];
{Специальность}_Name:string[20];
{Имя}_Fathername:String[15];
{Отчество}_Year:String[20];
{Год поступления};=file
of Record_Base;_Q=6;_S:array[0..MENU1_Q-1] of string[25] = ('Новая','Поиск','Сортировка','Архив','Автор','Выход');_S:array[1..6]
of string[30] =
('Шифр : ','Фамилия : ','Специал. :
','Имя : ','Отчество : ','Год пост.: ');
FILENAME:string
= 'Base.imm';ARCHIVNAME:string = 'Archiv.rar';='╔═ ДЕТАЛИ ════════════════════╗';='╔═
КРАТКИЕ ДАННЫЕ ═══════════╗';='╔═
ИНФОРМАЦИЯ ════════════════╗';:char;:word;,cod2,cod3,cod4,c1,c2,c3,c4,i,last1,last2,lastfile:integer;:string;,f1:FileType;:Record_Base;,n,flag,archiv:boolean;enter(x,y:integer;max:integer;mode:string;var
flag:boolean;var str:string);s:string; c:char;:=mode; while keypressed do
c:=readkey;gotoxy(x,y); for i:=1 to max do write(' '); gotoxy(x,y);
write(s);c:=readkey;if ord(c)=0 then begin c:=readkey; c:=#0; end; until
(ord(c)<>0);ord(c) of 8 : delete(s,length(s),1); end;(length(s)<max)
and (ord(c)<>8) and (ord(c)<>13) then s:=s+c;(ord(c)=13) or
(ord(c)=27); flag:=c=#27;:=s;;Panel(var x:integer;var n:word);leng,i,j:word;
c:char;(1,1,80,1); leng:=80 div MENU1_Q;window(2,18,Length(STR1)-1,23);
textattr:=$0f;; gotoxy(2,2); write('Нажмите
"Tab", чтобы увидеть');(5,3);
write('полную информацию');(6,4);
write('или
"Enter", чтобы
'); textattr:=$0f;x of
:begin
gotoxy(1,5);write('добавить новую запись в базу');end;
:begin
gotoxy(5,5);write('найти запись в базе');end;
2:begin
gotoxy(3,5);write('сортировать записи в базе');end;
:begin gotoxy(1,5);if archiv then
write(' просмотреть содержимое базы')write('просмотреть содержимое
архива');end;
:begin gotoxy(2,5);write('увидеть
информацию об авторе');end;
:begin gotoxy(6,5);write('выйти из
программы');end;
end;(1,1,80,1);
textattr:=$07;; textattr:=$1b;i:=0 to MENU1_Q-1 do beginx=i then textattr:=$3f;
for j:=1 to (leng-length(MENU1_S[i])) div 2 do(' '); write(MENU1_S[i]);j:=1 to
(leng-length(MENU1_S[i])) div 2 do(' '); textattr:=$1b; end;:=readkey;if
ord(c)=0 then c:=readkey; case ord(c) of
:
x:=(x+1)*ord(x<>MENU1_Q-1);
:
x:=(x-1)*ord(x<>0)+(MENU1_Q-1)*ord(x=0);
:
n:=111n:=x;;(ord(c)=27) or (ord(c)=13) or (ord(c)=9);:=$07; Window(1,1,80,50);
if ord(c)=27 then
halt;;windows(x,y:integer;height,widgth,mode:integer;message:string):boolean;:array
[1..1] of string[20] = (' ВНИМАНИЕ! ');=' ДА
'; Button2=' НЕТ
'; Button3=' OK ';:pointer; i,j,k:integer; c:char; t:boolean;
oldmaxx,oldmaxy,oldminx,oldminy:integer;,cur2:byte;:=lo(windmax)+1;
oldmaxy:=hi(windmax)+1;:=lo(windmin)+1; oldminy:=hi(windmin)+1;; window(1,1,80,25);
getmem(p,(height+1)*(widgth+2)*2);
{Save
window} for i:=0 to height do for j:=0 to (widgth+2)*2-1
do(ptr(segb800,80*2*(y+i-1)+x*2-2+j)^,ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,1);
{Print
window} textattr:=$1b; window(x,y,x+widgth-1,y+height-1);; window(1,1,80,25);
gotoxy(x+(widgth-length(message)) div 2,y+1);write(message);(x,y);write(#201);
for i:=1 to round((widgth-length(STR[mode])-2)/2) do(#205); write(STR[mode]);
for i:=1 to (widgth-length(STR[mode])-2) div 2 do(#205); write(#187);i:=1 to
height-2 do(x,y+i);write(#186);
gotoxy(x+widgth-1,y+i);write(#186);;(x,y+height-1); write(#200);i:=1 to
widgth-2 do Write(#205); write(#188);
{Making dark
area}:=$08; for i:=1 to height-1 dok:=0 to 1 do
move(j,ptr(segb800,80*2*(y-1+i)+(x+k)*2+widgth*2-1)^,1);i:=1 to widgth do
move(j,ptr(segb800,80*2*(y+height-1)+(x+1)*2+i*2-1)^,1);:=true; case mode of
:t=true then
textattr:=$3f else textattr:=$07;(x+3,y+3);write(Button1); if t=false then
textattr:=$3f else textattr:=$07;(x+widgth-3-length(Button2),y+3);write(Button2);:=readkey;
case ord(c) of 75 : t:=true; 77 : t:=false; end;(ord(c)=13) or (ord(c)=27) or
(ord(c)=32);ord(c)=27 then t:=false; end;
:textattr:=$3b;(Widgth
div 2+x-length(Button3) div 2,height div 2+1+y);write(Button3);:=readkey; until
(ord(c)=27) or (ord(c)=13) or (ord(c)=32);; {Print old window}i:=0 to height do
for j:=0 to (widgth+2)*2-1
do(ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,ptr(segb800,80*2*(y+i-1)+x*2+j-2)^,1);(p);
window(oldminx,oldminy,oldmaxx,oldmaxy);:=t;;windows_enter(x,y:integer;height,widgth:integer;mode:integer;var
man:Record_Base;var flag,l:boolean);
const=' Пожалуйста, введите
информацию ';:pointer;
i,j,k:integer; c:char; oldmaxx,oldmaxy,oldminx,oldminy:integer;,cur2:byte;
str:string;:=lo(windmax)+1; oldmaxy:=hi(windmax)+1;:=lo(windmin)+1;
oldminy:=hi(windmin)+1;ah,03h10hcur1,chcur2,cl;(1,1,80,25);
getmem(p,(height+1)*(widgth+2)*2);
{Save
window} for i:=0 to height do for j:=0 to (widgth+2)*2-1 do(ptr(segb800,80*2*(y+i-1)+x*2-2+j)^,ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,1);
{Print
window}:=$1b; window(x,y,x+widgth-1,y+height-1);; window(1,1,80,25);
gotoxy(x,y);write(#201);i:=1 to round((widgth-length(STRin)-2)/2) do
Write(#205);(STRin); for i:=1 to (widgth-length(STRin)-2) div 2 do(#205);
write(#187);i:=1 to height-2 do begin
gotoxy(x,y+i);write(#186);(x+widgth-1,y+i);write(#186); end;(x,y+height-1);
write(#200); for i:=1 to widgth-2 do Write(#205);(#188); {Making dark area}
j:=$08;i:=1 to height-1 do for k:=0 to 1
do(j,ptr(segb800,80*2*(y-1+i)+(x+k)*2+widgth*2-1)^,1);i:=1 to widgth do
move(j,ptr(segb800,80*2*(y+height-1)+(x+1)*2+i*2-1)^,1);i:=1 to 12 do(x+3,y+i);
write(MENU2_S[i]); end;(mode=1) or (mode=2) then with man do
begin_Number:='';Record_Famile:='';_Special:='';Record_Name:='';Record_Fathername:='';Record_Year:='';;
textattr:=$1f; with man do
begin(Length(MENU2_S[1])+x+3,1+y);Write(Record_Number);(Length(MENU2_S[2])+x+3,2+y);Write(Record_Famile);(Length(MENU2_S[3])+x+3,3+y);Write(Record_Special);(Length(MENU2_S[4])+x+3,4+y);Write(Record_Name);(Length(MENU2_S[5])+x+3,5+y);Write(Record_Fathername);(Length(MENU2_S[6])+x+3,6+y);Write(Record_Year);;Man
doif (mode=1) or (mode=3)
thenEnter(x+3+Length(MENU2_S[1]),y+1,15,Record_Number,flag,Str);(length(Str)=0)
and (not flag) then windows(23,9,5,36,2,'Это поле обязательно для ввода!');
textattr:=$1f;(length(Str)<>0) or flag
else(x+3+Length(MENU2_S[1]),y+1,15,'',flag,Str);_Number:=str; if (mode=1) or
(mode=3) thenif not flag then(x+3+Length(MENU2_S[2]),y+2,20,'',flag,Str);(length(Str)=0)
and (not flag) then windows(23,9,5,36,2,'Это поле обязательно для ввода!');
textattr:=$1f;(length(Str)<>0) or flag else if not flag
then(x+3+Length(MENU2_S[2]),y+2,20,'',flag,Str);_Famile:=str; if not flag
then(x+3+Length(MENU2_S[3]),y+3,20,Record_Special,flag,str);Record_Special:=str;not
flag
then(x+3+Length(MENU2_S[4]),y+4,20,Record_Name,flag,str);Record_Name:=str;not
flag
then(x+3+Length(MENU2_S[5]),y+5,15,Record_Fathername,flag,str);Record_Fathername:=str;not
flag then(x+3+Length(MENU2_S[6]),y+6,18,Record_Year,flag,str);Record_Year:=str;;:=$0b;
if mode=1 then
l:=windows(23,9,5,30,1,'Продолжать
вводить записи?');
{Print old
windows} for i:=0 to height do for j:=0 to (widgth+2)*2-1
do(ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,ptr(segb800,80*2*(y+i-1)+x*2+j-2)^,1);(p);
window(oldminx,oldminy,oldmaxx,oldmaxy);;windows_sort (x,y:integer; height,
widgth: integer; var flag:boolean; var n:integer);
const STRin=' Выберите поле
сортировки ';
var
p:pointer; i,j,k: integer; c:char; oldmaxx, oldmaxy, oldminx, oldminy:
integer;,cur2:byte; str:string;:=lo(windmax)+1; oldmaxy:=hi(windmax)+1;
oldminx:=lo(windmin)+1;:=hi(windmin)+1; window(1,1,80,25);
getmem(p,(height+1)*(widgth+2)*2);
{Save
window} for i:=0 to height do for j:=0 to (widgth+2)*2-1
do(ptr(segb800,80*2*(y+i-1)+x*2-2+j)^,ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,1);
{Print
window} textattr:=$1b; window(x,y,x+widgth-1,y+height-1); clrscr;(1,1,80,25);
gotoxy(x,y);write(#201); for i:=1 to round((widgth-length(STRin)-2)/2) do(#205);
write(STRin); for i:=1 to (widgth-length(STRin)-2) div 2 do(#205); write(#187);
for i:=1 to height-2 do begin(x,y+i);write(#186);
gotoxy(x+widgth-1,y+i);write(#186); end;(x,y+height-1); write(#200); for i:=1
to widgth-2 do Write(#205);(#188); {Making dark area} j:=$08; for i:=1 to
height-1 do for k:=0 to 1
do(j,ptr(segb800,80*2*(y-1+i)+(x+k)*2+widgth*2-1)^,1); for i:=1 to widgth
do(j,ptr(segb800,80*2*(y+height-1)+(x+1)*2+i*2-1)^,1); for i:=1 to 12
dogotoxy(x+3,y+i); write(MENU2_S[i]); end;:=false; n:=1; textattr:=$1f; repeat
gotoxy(x+23,y+n); write(#17,#205,#205,#205); c:=readkey;if ord(c)=0 then
c:=readkey; gotoxy(x+23,y+n); write(' ');ord(c) of 72 :
n:=12*ord(n=1)+(n-1)*ord(n<>1);
:
n:=1*ord(n=12)+(n+1)*ord(n<>12); end;(ord(c)=27) or (ord(c)=13); if ord(c)=27
then flag:=true;:=$1b; {Print old windows} for i:=0 to height doj:=0 to
(widgth+2)*2-1
do(ptr(seg(p^),ofs(p^)+i*((widgth+2)*2)+j)^,ptr(segb800,80*2*(y+i-1)+x*2+j-2)^,1);(p);
window(oldminx,oldminy,oldmaxx,oldmaxy);;ramka1(Nach:integer);i:integer;(1,2,Length(STR1),16);
textattr:=$0b; clrscr; window(1,2,Length(STR1),17);:=$0b; gotoxy(1,Nach); if
(Nach>0) and (Nach<=22) then Write(STR1);i:=Nach+1 to Nach+14 do if
(i>0) and (i<=22) then begin(1,i);write(#186); gotoxy(31,i);write(#186);
end;(Nach+14>0) and (Nach+14<=22) then begin gotoxy(1,Nach+14);
Write(#200);i:=1 to 29 do write(#205); write(#188); end;
window(2,2,Length(STR1)-1,16);:=$0b; for i:=1 to 12 do if (i+Nach>0) and
(i+Nach<22) thengotoxy(1,i+Nach); write(MENU2_S[i]); end; window(1,1,80,25);;ramka2;(1,1,80,25);
textattr:=$0b; gotoxy(32,3); Write(STR2);(32,4);Write(#186,'Шифр',#25);
gotoxy(44,4);Write('Фамилия');(64,4);Write('Специальность');
gotoxy(80,4);write(#186);(32,5);write(#204); for i:=1 to 47 do write(#205);
write(#185);i:=6 to 24 do begin gotoxy(32,i);write(#186);
gotoxy(80,i);write(#186);; gotoxy(32,25);write(#200); for i:=1 to 47 do
write(#205); write(#188);;ramka3;i:integer;(1,17,Length(STR1),25);
textattr:=$0b; writeln(STR3); for i:=2 to 7 dogotoxy(1,i);write(#186);
gotoxy(length(STR3),i);write(#186);; write(#200); for i:=1 to length(STR3)-2 do
write(#205);(#188);
window(1,1,80,25);End;Delete(l:integer);man:Record_Base;(f,l+1); while not
eof(f) do begin read(f,man); seek(f,filepos(f)-2); write(f,man);
seek(f,filepos(f)+1); end; seek(f,filesize(f)-1);
truncate(f);;Init(FILENAME:string);(f,FILENAME); {$I-} reset(f); if
IOResult<>0 thenrewrite(f); if IOResult<>0 then begin;
writeln('Error while creating new file program will be
terminated');(red+blink); Writeln('PRESS ENTER!');:=$07; Readln; Halt(1); end;
end; close(f); {$I+};Show_ramka;ramka:=true;i:=-17 to 1
dowindow(1,2,Length(STR1),16); clrscr; ramka1(i);
delay(round(sqr(i+30)));;;Hide_Ramka;ramka:=false;i:=1 downto -17 do begin
window(1,2,Length(STR1),16); clrscr;(i); delay(round(sqr(i+30)));
end;;New_String;Man:Record_Base; i:integer; c:char; str:string; l:boolean;(f);
window(2,18,Length(STR1)-1,22); textattr:=$0f; clrscr; gotoxy(11,3);Write('Пожалуйста,');
gotoxy(7,4);Write('введите информацию');
window(3,3,Length(STR1)-1,15); Repeat windows_enter(15,4,14,50,1,man,flag,l);not
flag then begin seek(f,filesize(f));
write(f,Man);last2+filesize(f)-lastfile-1<=19 thenif filesize(f)=1 then
textattr:=$1f else
textattr:=$0b;(33,5,79,23);(1,last2+filesize(f)-lastfile-1);clreol;write(man.Record_Number);(12,last2+filesize(f)-lastfile-1);write(man.Record_Famile);(32,last2+filesize(f)-lastfile-1);write(man.Record_Special);
end;; Until not l; close(f);;Fill_Ramka2(n:integer);i,k:integer;
Man:Record_Base;(f); textattr:=$0b; window(33,5,79,23); clrscr; i:=1;(i<20)
and (not eof(f)) do begin read(f,man); if i=n then begin:=$1f; gotoxy(1,n);
clreol;
end;(1,i);write(man.Record_Number);(12,i);write(man.Record_Famile);(32,i);write(man.Record_Special);i=n
then textattr:=$0b; inc(i); end; window(1,1,80,25); close(f);;ramka2_move(var
x,l:integer);c:char; k:integer; man:Record_Base; flag,h:boolean;:file of
Record_Base;(2,18,Length(STR1)-1,23); textattr:=$0f;; gotoxy(1,2); write(#24,' или
',#25,' - двигать курсор');
gotoxy(1,3); write('"del"
- удалить запись');(1,4); write('"Enter"-редактировать запись');
gotoxy(1,5);
if archiv then write('"Ins" - перенести в базу')
else('"Ins" - перенести в архив');
if not ramka then Show_Ramka;(f); seek(f,l); if filesize(f)>0
thenread(f,man); seek(f,l);; repeat textattr:=$0f; if filesize(f)>0
thenwindow(3,3,Length(STR1)-1,16);Man do
begin(Length(MENU2_S[1]),1);clreol;Write(Record_Number);(Length(MENU2_S[2]),2);clreol;Write(Record_Famile);(Length(MENU2_S[3]),3);clreol;Write(Record_Special);(Length(MENU2_S[4]),4);clreol;Write(Record_Name);(Length(MENU2_S[5]),5);clreol;Write(Record_Fathername);(Length(MENU2_S[6]),6);clreol;Write(Record_Year);;
end else ramka1(1);(33,5,79,23); c:=readkey;if ord(c)=0 then
c:=readkey;((ord(c)=72) and (filepos(f)>0)) or ((ord(c)=80) and (filepos(f)+1<filesize(f)))
and (filesize(f)>0) then begin read(f,man);(f,filepos(f)-1);
textattr:=$0b;(1,x); clreol;
gotoxy(1,x);write(man.Record_Number);(12,x);write(man.Record_Famile);
gotoxy(32,x);write(man.Record_Special);; case ord(c) of
:if
(filepos(f)>0) and (filesize(f)<>0) thenif x=1 then begin gotoxy(1,x);
insline; end else dec(x);(f,filepos(f)-1); read(f,man); seek(f,filepos(f)-1);
end;
:if
(filepos(f)+1<filesize(f)) and (filesize(f)<>0) then begin if x=19
thengotoxy(1,1); delline; end else inc(x); seek(f,filepos(f)+1);
read(f,man);(f,filepos(f)-1); end; 83 : if filesize(f)<>0 then if
windows(23,9,5,30,1,'Вы точно хотите удалить?')
thentextattr:=$0b;:=filepos(f); delete(k); gotoxy(1,x); delline; if
(k+19-x)<=filesize(f)-1 thenseek(f,k+19-x); read(f,man); seek(f,k);
gotoxy(1,19);write(man.Record_Number);(12,19);write(man.Record_Famile);
gotoxy(32,19);write(man.Record_Special);; if (k>filesize(f)-1) and
(filesize(f)<>0) thenseek(f,k-1); dec(x); end else seek(f,k); if
filesize(f)<>0 thenread(f,man); seek(f,filepos(f)-1); end;:=filepos(f);
end;
: if
filesize(f)<>0 then beginarchiv then h:=windows(23,9,5,30,1,'Перенести в базу?')
else
h:=windows(23,9,5,30,1,'Перенести в архив?');
if h then
begin {$I-} assign(f1,ARCHIVNAME); reset(f1); if IOResult<>0 then
rewrite(f1);IOResult<>0 then halt(1); seek(f1,filesize(f1));(f1,man);
close(f1); {$I+} k:=filepos(f);(k); gotoxy(1,x); delline; if
(k+19-x)<=filesize(f)-1 thenseek(f,k+19-x); read(f,man); seek(f,k);
gotoxy(1,19);write(man.Record_Number);(12,19);write(man.Record_Famile);
gotoxy(32,19);write(man.Record_Special);; if (k>filesize(f)-1) and
(filesize(f)<>0) thenseek(f,k-1); dec(x); end else seek(f,k); if
filesize(f)<>0 then begin read(f,man); seek(f,filepos(f)-1); end;
k:=filepos(f); end; end; 13 : begin windows_enter(15,4,14,50,3,man,flag,h); if
not flag thenwrite(f,man); seek(f,filepos(f)-1); end else begin(f,man);
seek(f,filepos(f)-1); end; end; end; if filesize(f)<>0 thengotoxy(1,x);
textattr:=$1f; clreol;
gotoxy(1,x);write(man.Record_Number);(12,x);write(man.Record_Famile);
gotoxy(32,x);write(man.Record_Special);; l:=filepos(f); until (ord(c)=9) or
(ord(c)=27); seek(f,0); close(f); Hide_ramka;(2,18,Length(STR1)-1,23);
textattr:=$1b; clrscr; window(1,1,80,25);;About;(2,18,Length(STR1)-1,23);
clrscr;(2,3);
Write(' Сачевичик
Алексей, АС-563 Январь 2012 ');
readkey; clrscr;
window(1,1,80,25);;Find;Number:array[1..1000] of word; man1,man2:Record_Base;
i,max,x,k,s,p:word;d,flag,l :boolean;(2,18,Length(STR1)-1,23); textattr:=$0f;
clrscr;(11,3);Write('Пожалуйста,');
gotoxy(7,4);Write('введите информацию');:=$0f;
windows_enter(15,4,14,50,2,man1,flag,l);(f); i:=0;if not flag thenbegin
window(33,5,79,23);; while not eof(f) do begin
read(f,Man2);:=(Man1.Record_Number=copy(Man2.Record_Number,1,length(Man1.Record_Number)))
or (Man1.Record_Number='');:=d and
((Man1.Record_Famile=copy(Man2.Record_Famile,1,length(Man1.Record_Famile))) or
(Man1.Record_Famile=''));:=d and
((Man1.Record_Special=copy(Man2.Record_Special,1,length(man1.Record_Special)))
or (Man1.Record_Special=''));:=d and ((Man1.Record_Name=copy(Man2.Record_Name,1,length(man1.Record_Name)))
or (Man1.Record_Name=''));:=d and
((Man1.Record_Fathername=copy(Man2.Record_Fathername,1,length(man1.Record_Fathername)))(Man1.Record_Fathername=''));:=d
and ((Man1.Record_Year=copy(Man2.Record_Year,1,length(man1.Record_Year))) or
(Man1.Record_Year='')); if d then begini=0 then textattr:=$1f else
textattr:=$0b; if i<=18 thengotoxy(1,i+1);clreol;
gotoxy(1,i+1);write(man2.Record_Number);(12,i+1);write(man2.Record_Famile);
gotoxy(32,i+1);write(man2.Record_Special);; inc(i); Number[i]:=filepos(f)-1;
end; end;if i>0 then begin if not ramka then show_ramka; max:=i; i:=1; x:=1;
if max<>0 then begin seek(f,Number[1]);(f,man1); seek(f,Number[1]); end;
window(2,18,Length(STR1)-1,23); textattr:=$0f;; gotoxy(1,2); write(#24,' или
',#25,' - двигать курсор');(1,3);
write('"del" - удалить запись');
gotoxy(1,4);('"Enter"-редактировать запись');
gotoxy(1,5); if archiv then('"Ins" -
перенести в базу') else write('"Ins" - перенести
в архив');
repeat textattr:=$0f; if
max<>0 then begin window(3,3,Length(STR1)-1,16);Man do
begin(Length(MENU2_S[1]),1);clreol;Write(Man1.Record_Number);(Length(MENU2_S[2]),2);clreol;Write(Man1.Record_Famile);(Length(MENU2_S[3]),3);clreol;Write(Man1.Record_Special);(Length(MENU2_S[4]),4);clreol;Write(Man1.Record_Name);(Length(MENU2_S[5]),5);clreol;Write(Man1.Record_Fathername);(Length(MENU2_S[6]),6);clreol;Write(Man1.Record_Year);;ramka1(1);window(33,5,79,23);
end; c:=readkey;if ord(c)=0 then c:=readkey; if ((ord(c)=72) and (i>1)) or
((ord(c)=80) and (i<max)) and (max>0) thentextattr:=$0b; gotoxy(1,x);
clreol; seek(f,Number[i]); read(f,man1);(1,x);write(man1.Record_Number);
gotoxy(12,x);write(man1.Record_Famile);(32,x);write(man1.Record_Special); end;
case ord(c) of 72:if (i>1) and (max<>0) thenif x=1 then begin
gotoxy(1,x); insline; end else dec(x);(i); end; 80 :if (i<max) and
(max<>0) then beginx=19 then begin gotoxy(1,1); delline; end else inc(x);
inc(i); end;
:filesize(f)<>0 then begin if
archiv then l:=windows(23,9,5,30,1,'Перенести в базу?')l:=windows(23,9,5,30,1,'Перенести в архив?');
if l then{$I-} assign(f1,ARCHIVNAME); reset(f1); if IOResult<>0 then
rewrite(f1);IOResult<>0 then halt(1); seek(f1,filesize(f1));
write(f1,man1);(f1); {$I+} textattr:=$0b; delete(Number[i]); for k:=1 to max
dok>=i then if k+1<=max then Number[k]:=Number[k+1]-1; dec(max);(1,x);
delline; if (19-x+i)<=max then begin(f,Number[19-x+i]); read(f,man1);
gotoxy(1,19);write(man1.Record_Number);(12,19);write(man1.Record_Famile);
gotoxy(32,19);write(man1.Record_Special);; if (i>max) and (max<>0)
then begin(x); dec(i); end; end; end;
: if max<>0 then if
windows(23,9,5,30,1,'Вы точно хотите удалить?')
thentextattr:=$0b; delete(Number[i]); for k:=1 to max dok>=i then if
k+1<=max then Number[k]:=Number[k+1]-1;(max); gotoxy(1,x); delline; if
(19-x+i)<=max then begin(f,Number[19-x+i]); read(f,man1);
gotoxy(1,19);write(man1.Record_Number);(12,19);write(man1.Record_Famile);
gotoxy(32,19);write(man1.Record_Special);; if (i>max) and (max<>0)
then begin dec(x); dec(i); end; end;
:windows_enter(15,4,14,50,3,man1,flag,l);
if not flag thenseek(f,Number[i]); write(f,man1); seek(f,Number[i]); endbegin
seek(f,Number[i]); read(f,man1); seek(f,Number[i]); end; end; end;(33,5,79,23);
if max<>0 then begin gotoxy(1,x); textattr:=$1f;; seek(f,Number[i]);
read(f,Man1);
gotoxy(1,x);write(man1.Record_Number);(12,x);write(man1.Record_Famile);
gotoxy(32,x);write(man1.Record_Special);; until (ord(c)=9) or (ord(c)=27);
Hide_ramka;else windows(23,9,5,30,2,'Ничего не найдено!');end;
close(f);:=1;lastfile:=0; fill_ramka2(last2);End;sort;,min,temp:Record_Base;
m,i,j,l:integer; d:boolean;(f); windows_sort(15,4,14,50,flag,l); if not flag
theni:=0 to filesize(f)-1 do begin seek(f,i); read(f,min); m:=i;(f,i); for j:=i
to filesize(f)-1 do begin:=true; read(f,man);
d:=(Man.Record_Number<min.Record_Number) or
(l<>1);val(Man.Record_Famile,c1,cod1);val(min.Record_Famile,c2,cod2);:=d
and ((c1<c2) or
(l<>2));val(Man.Record_Special,c3,cod3);val(min.Record_Special,c4,cod4);:=d
and ((c3<c4) or (l<>3));:=d and ((Man.Record_Name<min.Record_Name)
or (l<>4));:=d and ((Man.Record_Fathername<min.Record_Fathername) or
(l<>5));:=d and ((Man.Record_Year<min.Record_Year) or (l<>6));d
then begin min:=man; m:=j; end; end; seek(f,i); read(f,man); temp:=man;(f,i);
write(f,min); seek(f,m); write(f,man); end; close(f);
last2:=1;lastfile:=0;_ramka2(Last2);End;Zastavka;i:integer;; window(7,4,77,19);
textcolor(15); textbackground(1);(chr(186),' ___ ___ ___ ____ ___ ___
',chr(186));(chr(186),' | | | | | | | | | | | | | | | | \ / ',chr(186));(chr(186),'
|__ |___| ___| |___| | | |___| |___| |___| |__ | \/ ',chr(186));(chr(186),' | |
| | | | | _|___|_ | | | | | | | || / \ ',chr(186));(chr(186),' |__| | | ___| |
| | || | | | | | |__|| / \ ',chr(186));(chr(186),' ',chr(186));(chr(186),' __
____ ',chr(186));(chr(186),' | | | | | ',chr(186));(chr(186),' |__| |___| __|
',chr(186));(chr(186),' | | | | ',chr(186));(chr(186),' |___| ___| ____|
',chr(186));(3,22,77,25); textcolor(15);textbackground(1);(' Программа разработана студентом группы АС-563,(с)
Сачевичик Алексей');('
Нажмите
<Enter> для продолжения');
textbackground(blue); readln;; window(1,1,80,25);movetoarchiv;archiv then begin
filename:='Base.imm'; Archivname:='archiv.rar';_s[3]:='Архив';
end else begin filename:='Archiv.rar'; Archivname:='Base.imm';_s[3]:=' База';
end; init(Filename); Fill_ramka2(1); archiv:=not
archiv;:=1;lastfile:=0;end;;(FILENAME);ax,0003h10h;:=false;:=$1b;(1,1,80,25);;(black);;;Fill_ramka2(1);;:=false;:=1;lastfile:=0;(last1,z);z
of
:Find;
:sort;
:MovetoArchiv;
:About;
:ramka2_move(last2,lastfile);;z=5;(1,1,80,25);;
End.