Разработка базы данных "Учащиеся"

Министерствообразования и науки Республики Казахстан
Карагандинскийполитехнический колледж
РАЗРАБОТКАБАЗЫ ДАННЫХ «УЧАЩИХСЯ»
Пояснительнаязаписка
Руководитель
А.Г.Хмыров
22.11.09
Выполнил учащийся
Группы 9-4-ПВТ-07
Зиньков В.А.
22.11.09
2009г.

ВВЕДЕНИЕ
Если проследить историючеловечества, то можно заметить, что на протяжении развития цивилизации наземле, человек что-то придумывает чтобы облегчить и украсить свою жизнь наземле. И вот уже к концу ХХ в. научно-технический прогресс, набравшийголовокружительную скорость, послужил причиной появления такого чудасовременности как компьютер и компьютерные технологии. Изобретение компьютеровпослужило переломным моментом в развитии многих отраслей промышленности, назначительный объём повысило мощь и эффективность военной техники, внесломножество прогрессивных изменений в работу средств массовой информации, системсвязи, качественно изменило принцип работы банков и административныхучреждений. С каждым днем происходит усовершенствование компьютерныхтехнологий, что приводит к повышению работоспособности всегокомпьютеризированного мира в целом. Вслед за развитием компьютерных технологий,идет бурное развитие программного обеспечения.
Сегодняшние темпыкомпьютеризации превышают темпы развития всех других отраслей. Без компьютерови компьютерных сетей не обходится сегодня ни одна средняя фирма, не говоря окрупных компаниях. Современный человек начинает взаимодействовать с компьютеромпостоянно — на работе, дома, в машине и даже в самолете. Компьютерыстремительно внедряются в человеческую жизнь, занимая свое место в нашемсознании. Уже сегодня компьютеры отвечают за наведение и запуск ядерных ракет,за банковские переводы многомиллионных сумм денег и многие другие системы.
Сейчас в учебные планымногих дисциплин включены разделы, требующие применение прикладных программразличной степени сложности и во многие предметы учебного плана внедрены работыс компьютерами, пишутся электронные учебники, пособия, программы для этихпредметов. В настоящее время проникновение информационных технологий происходитво все сферы человеческой деятельности. Любое современное производство,учреждение, офис немыслимо представить без современных коммуникационныхтехнологий. В связи, с чем изучение информационных технологий начинается сдошкольной системы образования.
На данный момент временипреимущественное место среди разрабатываемых программ занимают программы-тесты.Они применяются во многих сферах, и имеют различные направления и назначения.Такие как: проверка определённых знаний, коэффициент знаний, обучение и многоедругое.
В связи с вышеизложенным,была поставлена цель, написать программу для тестирования, а именно простой илёгкой в использовании программы в качестве теста. Так как на сегодняшниймомент, в связи с различными подходами к образованию, появляется потребность вданной продукции.
Данный проект может бытьиспользован как преподавателями так и обучаемыми так как является тестирующейпрограммой разных категорий сложности, а также предоставляется возможностьсоздания своих тестовых вопросов.

1 ОБЩАЯ ЧАСТЬ
1.1  Базаданных — совокупность связанных данных, организованных по определеннымправилам, предусматривающим общие принципы описания, хранения иманипулирования, независимая от прикладных программ. База данных являетсяинформационной моделью предметной области. Обращение к базам данныхосуществляется с помощью системы управления базами данных (СУБД). Объектамихранения в текстовых БД являются тексты. Под текстом будут пониматьсянеструктурированные данные, построенные из строк.
Основнойцелью любой текстовой БД является хранение, поиск и выдача документов,соответствующих запросу пользователя. Такие документы принято называтьрелевантными.
1.2Обзор элементов языка программирования
Разрабатываемый программный продукт был написан на языке программированияПаскаль. Язык Паскаль, назван в честь французского математика и философа БлезаПаскаля (1623—1662). Первая версия языка программирования Паскаль быларазработана на кафедре информатики Стэндфордского университета швейцарским ученымНиколаусом Виртом в 1968 году. Язык Паскаль, созданный первоначально дляобучения программированию как систематической дисциплине, скоро стал широкоиспользоваться для разработки программных средств в профессиональномпрограммировании.
Прошло много времени смомента появления Паскаля на рынке программных продуктов, прежде чем он получилвсеобщее признание. Признание программистов и простых пользователей пришловследствие появления языка программирования Турбо Паскаль (ТП), созданногоамериканской фирмой Борланд. Эта фирма объединила очень быстрый компилятор средактором текста и добавила к стандартному Паскалю мощное расширение, чтоспособствовало успеху первой версии этого языка.
Широкой популярности Паскаля среди программистовспособствовали следующие причины:
1) благодаря своей компактности, удачномупервоначальному описанию Паскаль оказался достаточно легким для изучения;
2) язык программирования Паскаль отражает фундаментальныеи наиболее важные концепции алгоритмов в очевидной и легко воспринимаемой форме,что предоставляет программисту средства, помогающие проектировать программы;
3) язык Паскаль позволяет четко реализовать идеиструктурного программирования и структурной организации данных;
4) язык Паскаль сыграл большую роль в развитииметодов аналитического доказательства правильности программ и позволил реальноперейти от методов отладки программ к системам автоматической проверкиправильности программ;
5) применение языка Паскаль значительно подняло«планку» надежности разрабатываемых программ за счет требованийПаскаля, к описанию используемых в программе переменных, проверкисогласованности программы при компиляции без ее выполнения;
6) использование в Паскале простых и гибких структуруправления: ветвлений, циклов.
В качестве констант алфавит языка Турбо Паскальвключает символы, цифры, шестнадцатеричные цифры, специальные символы, пробелыи зарезервированные слова.
Символы — это буквы латинского алфавита от «а» до«z» и от «А» до «Z», а также знак подчеркивания «_» (код ASCII 95). В ТурбоПаскале нет различия между прописными и строчными буквами алфавита, если толькоони не входят в символьные и строковые выражения.
Целые числа записываются со знаком или без него имогут иметь значение от -2147483648 до +2147483647. Следует учесть, что, еслицелочисленная константа выходит за указанные границы, компилятор дает сообщениеоб ошибке. Такие константы должны записываться с десятичной точкой, то естьопределяться как вещественные числа.
Вещественные числазаписываются со знаком или без него с использованием десятичной точки илимантиссой числа.
Если в записивещественного числа присутствует десятичная точка, перед точкой и за ней должнобыть, хотя бы по одной цифре. Шестнадцатеричное число состоит изшестнадцатеричных цифр, которым предшествует знак доллара $ (код 36 в ASCII).Диапазон шестнадцатеричных чисел — от $00000000 до $FFFFFFFF.
Специальные символы ТурбоПаскаля — это символы:
+- * / = ,’.:; [ ] ( ) { } ^ @ $ #.
Кспециальным символам относятся также следующие пары символов:
= := (* *) (. .).
В программе эти парысимволов нельзя разделять пробелами, если они используются как знаки операцийотношения или ограничители комментария.
Идентификаторы в ТурбоПаскале — это имена констант, переменных, меток, типов, объектов, процедур,функций, модулей, программ и полей в записях. Идентификаторы могут иметьпроизвольную длину, но значащими (уникальными в области определения) являютсятолько первые 63 символа.
Идентификатор всегданачинается буквой, за которой могут следовать буквы и цифры. Напомню, чтобуквой считается также символ подчеркивания, поэтому идентификатор можетначинаться этим символом и даже состоять только из одного или несколькихсимволов подчеркивания. Пробелы и специальные символы алфавита не могут входитьв идентификатор.
Константы в Турбо Паскалемогут использоваться целые, вещественные и шестнадцатеричные числа, логическиеконстанты, символы, строки символов, конструкторы множеств и признакнеопределенного указателя NIL.
Логическая константа — это либо слово FALSE (ложь), либо слово TRUE (истина).
Символьная константа — это любой символ ПК, заключенный в апострофы:
‘z’ — символ z;
‘Ф’ — символ Ф.
Если необходимо записатьсобственно символ апострофа, он удваивается:
”” — символ апостроф.
Допускается использованиезаписи символа путем указания его внутреннего кода, которому предшествуетсимвол # (код 35), например:
#97 — символ а;
#90 — символ Z;
#39 — символ ‘;
#13 — символ CR.
Строковая константа — любая последовательность символов (кроме символа CR -возврат каретки),заключенная в апострофы. Если в строке нужно указать сам символ апострофа, онудваивается, например:
‘Это- строка символов’;
‘That”s string.’.
Конструктормножества — список элементов множества, обрамленный квадратными скобками,например:
[1,2,4..7,12] или[blue, red].
Любойиз структурированных типов (а в Турбо Паскале их четыре: массивы, записи,множества и файлы) характеризуется множественностью образующих этот типэлементов, т.е. переменная или константа структурированного типа всегда имеетнесколько компонентов. Каждый компонент, в свою очередь, может принадлежатьструктурированному типу, что позволяет говорить о возможной вложенности типов.В Турбо Паскале допускается произвольная глубина вложенности типов, однакосуммарная длина любого из них во внутреннем представлении не должна превышать-5520 байт.
В отличие от стандартногоПаскаля, в Турбо Паскале разрешается в объявлении констант использоватьпроизвольные выражения, операндами которых могут быть ранее объявленные нетипизированные константы, имена типов и объектов.
Процедуры и функциипредставляют собой относительно самостоятельные фрагменты программы,оформленные особым образом и снабженные именем. Упоминание этого имени в текстепрограммы называется вызовом процедуры (функции). Отличие функции от процедурызаключается в том, что результатом исполнения операторов, образующих телофункции, всегда является некоторое единственное значение или указатель, поэтомуобращение к функции можно использовать в соответствующих выражениях наряду спеременными и константами. Условимся далее называть процедуру или функцию общимименем «подпрограмма», если только для излагаемого материала указанное отличиене имеет значения.
Подпрограммы представляютсобой инструмент, с помощью которого любая программа может быть разбита на рядв известной степени независимых друг от друга частей. Такое разбиениенеобходимо по двум причинам.
Во-первых, это средствоэкономии памяти: каждая подпрограмма существует в программе в единственномэкземпляре, в то время как обращаться к ней можно многократно из разных точекпрограммы. При вызове подпрограммы активизируется последовательность образующихее операторов, а с помощью передаваемых подпрограмме параметров нужным образоммодифицируется реализуемый в ней алгоритм.
Вторая причиназаключается в применении методики нисходящего проектирования программ. В этомслучае алгоритм представляется в виде последовательности относительно крупныхподпрограмм, реализующих более или менее самостоятельные смысловые частиалгоритма. Подпрограммы в свою очередь могут разбиваться на менее крупныеподпрограммы нижнего уровня. Последовательное структурирование программыпродолжается до тех пор, пока реализуемые подпрограммами алгоритмы не станутнастолько простыми, чтобы их можно было легко запрограммировать.
Вызов подпрограммыосуществляется простым упоминанием имени процедуры в операторе вызова процедурыили имени функции в выражении. При использовании расширенного синтаксиса ТурбоПаскаля функции можно вызывать точно так же, как и процедуры. Как известно,любое имя в программе должно быть обязательно описано, перед тем как онопоявится среди исполняемых операторов. Не делается исключения и в отношенииподпрограмм: каждую свою процедуру и функцию программисту необходимо описать вразделе описаний.
Описать подпрограмму — это значит указать ее заголовок и тело. В заголовке объявляются имяподпрограммы и формальные параметры, если они есть. Для функции, кроме того,указывается тип возвращаемого ею результата. За заголовком следует телоподпрограммы, которое, подобно программе, состоит из раздела описаний и разделаисполняемых операторов. В разделе описаний подпрограммы могут встретитьсяописания подпрограмм низшего уровня, в тех — описания других подпрограмм и такдалее.
Описание подпрограммысостоит из заголовка и тела подпрограммы.
Заголовок процедуры имеетвид:
PROCEDURE ( );
Заголовок функции:
FUNCTION ( ):;
Здесь — имяподпрограммы (правильный идентификатор);
— списокформальных параметров;
— типвозвращаемого функцией результата.
Список формальныхпараметров необязателен и может отсутствовать. Если же он есть, то в нем должныбыть перечислены имена формальных параметров и их типы, например:
Procedure SB(a:Real; b: Integer; c: Char)
Как видно из примера,параметры в списке отделяются друг от друга точками с запятой. Несколькоследующих подряд однотипных параметров можно объединять в подсписки, например,вместо
Function F(a:Real; b: Real): Real;
можно написать проще:
FunctionF(a,b: Real): Real;
Операторы телаподпрограммы рассматривают список формальных параметров как своеобразноерасширение раздела описаний: все переменные из этого списка могутиспользоваться в любых выражениях внутри подпрограммы. Таким способомосуществляется настройка алгоритма подпрограммы на конкретную задачу.
Может сложитьсявпечатление, что объявление переменных в списке формальных параметровподпрограммы ничем не отличается от объявления их в разделе описания переменных.Действительно, в обоих случаях много общего, но есть одно существенноеразличие: типом любого параметра в списке формальных параметров может бытьтолько стандартный или ранее объявленный тип. Поэтому нельзя, например,объявить следующую процедуру:
Procedure S (a: array [1..10] of Real);
так как в спискеформальных параметров фактически объявляется тип-диапазон, указывающий границыиндексов массива.
Если необходимо передатьопределенный элемент массива, как правило, проблем не возникает, но если вподпрограмму передается весь массив, то следует первоначально описать его тип.Например:
type
atype = array[1..10] of Real;
Procedure S(a: atype);
Поскольку строка являетсяфактически своеобразным массивом, ее передача в подпрограмму осуществляетсяаналогичным образом:

type
intype =String [15];
outype =String [30];
Function St (s: intype): outype;
Рекурсия — это такойспособ организации вычислительного процесса, при котором подпрограмма в ходевыполнения составляющих ее операторов обращается сама к себе.
Рекурсивная формаорганизации алгоритма обычно выглядит изящнее итерационной и дает болеекомпактный текст программы, но при выполнении, как правило, медленнее и можетвызвать переполнение стека (при каждом входе в подпрограмму ее локальныепеременные размещаются в особым образом организованной области памяти,называемой программным стеком). Переполнение стека особенно ощутимо сказываетсяпри работе с сопроцессором: если программа использует арифметическийсопроцессор, результат любой вещественной функции возвращается через аппаратныйстек сопроцессора, рассчитанный всего на 8 уровней. Чтобы избежать переполнениястека сопроцессора, следует размещать промежуточные результаты вовспомогательной переменной.
Иногда бывает необходимовыполнить часть программы, если заданное условие имеет значение True (истина)или False (ложь), или когда заданное выражение принимает определенное значение,в этом случае используем условный оператор.
Формат записи оператора If:
If (выражение) thenоператор 1; else оператор 2;
где (выражение) — любоебулевское выражение (проверяющее на условие True или False ); (оператор 1) и(оператор 2) – операторы ТП. Если выражение принимает значение True (истина),то (оператор 1) выполняется; в противном случае выполняется – (оператор 2).
Оператор else являетсянеобязательным, другими словами, допустимо использовать оператор if в следующемвиде:
If (выражение) thenоператор 1;
В этом случае (оператор1) выполняется только тогда, когда выражение имеет значение True. В противномслучае (оператор 1) пропускается и выполняется следующий оператор.
Если необходимо выполнитьболее одного оператора, в случае, когда выражение принимает значение, True(истина) или False (ложь), то следует использовать составной оператор.
Составной оператор — этоключевое слово begin, несколько операторов разделенных точкой с запятой иключевое слово end.
Оператор выбор Case — средство выбора альтернатив. Позволяет уменьшить количество операторов If.
Оператор Case состоит извыражения (селектора) и списков операторов, каждому из которых предшествуетметка того же типа, что и селектор. Это значит, что в данный момент выполняетсятот оператор, у которого значение совпадает с текущем значением селектора. Еслисовпадения значений не происходит, то не выполняется ни один из операторов,входящих в Case или же выполняются операторы, стоящие после необязательногослова else.
Метка case состоит излюбого количества констант или поддиапазонов, разделенных запятыми, за которымследует двоеточие(:).
В случае, когда привыполнении какого-либо условия (или невыполнения), необходимо выполнять группуоператоров повторно, используются циклы.
Существуют три цикла:цикл While (с предусловием), цикл Repeat (с постусловием) и цикл For (спараметром).
Цикл While используется дляпроверки некоторого условия в начале цикла.
Формат записи операторацикла While:
While (выражение) doоператор;
В цикле While вычисляетсявыражение. Если оно имеет результат- True (истина), выполняется оператор. Впротивном случае выполнение цикла завершается.
Цикл Repeat…untilиспользуется когда необходимо выполнить тело цикла хотя бы раз.
Формат записи циклаRepeat…until :
Repeat оператор 1; оператор2;until (выражение).
Существуют три основныхотличия цикла Repeat…until от цикла While:
— операторы в циклеRepeat выполняются хотя бы один раз, потому что проверка выраженияосуществляется в конце тела цикла. В цикле While, если значение выраженияFalse, тело его сразу пропускается.;
— цикл Repeat выполняетсяпока выражение не станет True (истина), в то время, как цикл While выполняетсядо тех пор, пока выражение имеет значение True (истина);
— в цикле Repeat может использоватьсяпросто группа операторов, а не составной оператор. При использовании этогоцикла не используются слова begin…end, как в случае с циклом While.
Цикл Reрeat выполнитсяхотя бы один раз, в то время, как цикл While может ни разу не выполниться взависимости от значения выражения.
Цикл For используется,когда необходимо выполнить тело цикла определенное количество раз
Формат цикла For:
For индекс:=(выражение1)to (выражение2) do оператор где индекс — скалярная переменная (целого типа, символьного,булевcкого и любого перечислимого типа); (выражение1) и (выражение2) — выражения типа, совместимого с типом индекса; оператор — одиночный илисоставной оператор. Индекс увеличивается на 1 после каждого выполнения цикла.Индекс можно уменьшать на 1. Для этого ключевое слово to заменяется на downto.
Главный недостаток циклаFor — это возможность уменьшить или увеличить индекс только на 1.
Основные преимущества — краткость, возможность использования символьного и перечислимого типа вдиапазоне значений [5].
Файловые типы есть тритипа файлов:
— текстовые файлы;
— файлы с типом;
— файлы без типа.
Связь с файлом может бытьустановлена через файловую переменную, которая после описания, но доиспользования в программе должна быть связана с внешним файлом с помощьюпроцедуры Assign.
Текстовой файл – этопоследовательность символьных строк переменной длины. Всякая такая строказавершается маркером конца строки CR/LF. Текстовые файлы можно обрабатыватьтолько последовательно. Ввод и вывод нельзя производить для открытого файла,используя одну файловую переменную. Текстовой файл имеет тип Text. Примерописания файловой переменной текстового типа:
Var Fi: Text;
Файлы без типа состоят изкомпонент одинакового размера, структура которых не известна или не имеетзначения. Допустим прямой доступ к любой компоненте файла. Пример объявленияфайловой переменной файла без типа:
Var F: File;
Файлы с типом состоят изоднотипных компонент известной структуры [6]. Допустим прямой доступ к любойкомпоненте файла. Пример объявления файловых переменных для файлов с типом:
Type
TRec = Record
A: Real;
B: Integer;
C: Char;
End;
Var
F: File ofReal;
Q: File ofString[100];
Fr: File ofTRec;
В этом примере Fобъявлена как файловая переменная вещественного типа.
Это означает, чтокомпонентами файла могут быть только вещественные значения. Файловая переменнаяQ предназначена для доступа к файлам, которые состоят из символьных строк длины100. Файловая переменная Fr предназначена для работы с файлами, которые состоятиз записей типа TRec, объявленного в секции Type.

2 СПЕЦИАЛЬНАЯ ЧАСТЬ
2.1 Общая постановказадачи
Цель данной курсовойработы – разработать базу данных “учащихся”, а именно программу для болееудобного способа вести личные дела учащихся в тех или иных учебных заведениях.
В программу включаетсязаставка, меню, помощник, с помощью которого пользователю будет, легкоознакомится с данной программой.
Разрабатываемыйпрограммный продукт должен обеспечивать возможность выполнения следующихдействий:
-имеются ли однофамильцы;
— имеются ли однофамильцына одном курсе;
— в каких группах более10 учащихся;
— на сколько человекбольше на I-м курсе, чем на IV-м курсе;
Исходные данные:
— база данных “учащихся”,различных групп;
Выходными даннымиявляются:
— результат поиска тогоили иного учащегося, любой группы, однофамильцы, различие в количествеучащихся.
2.2 Описание модулей
Модуль Crt. Модуль содержит константы, переменные и подпрограммы, предназначенныедля работы с консолью. В отличие от стандартного ввода-вывода, когда оносуществляется через ОС, подпрограммы модуля Crt работают с BIOS и даже непосредственно с видеопамятью.

Таблица 2.3-Процедуры ифункции модуля Crt. Процедуры управлением цветом HighVideo Задание высокой яркости символов LowVideo Задание малой яркости символов NormVideo Задание исходной яркости символов TextBackGround Задание цвета фона TextColor Задание цвета символов Процедуры для работы с экраном ClrEol Удаление символов от курсора до конца строки ClrScr Очистка экрана DelLine Удаление строки, в которой находится курсор GotoXY Перемещение курсора в заданную позицию Функции для работы с клавиатурой KeyPressed Проверка нажатия клавиши ReadKey Чтение символа с клавиатуры Процедуры для работы со звуком Sound Включение звука NoSound Отключение звука Процедуры разнообразного назначения Delay Задержка выполнения программы
Данный программныйпродукт написан с помощью подпрограмм, то есть с помощью применения процедур ифункций. Процедуры и функции представляют собой относительно самостоятельныефрагменты программы, оформленные особым образом и снабженные именем. Программу,написанную при помощи процедур и функций легко тестировать и отлаживать, атакже защитить программный продукт от ошибок.
Список и описаниеиспользованных подпрограмм:
1) Procedure Zastavka- является заставкой программы,которая появляется при запуске программы и, информирует о том, кто создал данныйпрограммный продукт, кто руководитель проекта, год создания программы.
2) Procedure Menu- является началом программы и предписываетопределённые действия для пользователя.
3) Procedure Password – является не посредственнозащищающей подпрограммой, для защиты от удаления или внесения не правильнойинформации об уч-ся находящихся в базе данных, и для использования деканом илизам-директором и прочей администрации учебного заведения (ТРЕБУЕТ ТОЛЬКО У«Администратора»).
4) Procedure Novoe delo – предназначенная для заведения дел учащихся (ПРИМЕЧАНИЕ:данная процедура доступна лишь «Администратору»).
5) Procedure Arhieve – данная процедура предназначена для сохранения (создания),или загрузки существующей базы данных(ПРИМЕЧАНИЕ: данная процедура доступна лишь«Администратору»).
6) Procedure end – выход из программы.
2.3 Идентификаторы
Идентификаторы в ТурбоПаскале — это имена констант, переменных, меток, типов, объектов, процедур ифункций, модулей, программ и полей в записях, созданных самим программистом.
Идентификатор всегданачинается с буквы, за которой могут следовать буквы и цифры. Буквой считаетсятакже символ подчеркивания, поэтому идентификатор может начинаться этимсимволом и даже состоять только из одного или нескольких символовподчеркивания. Пробелы и специальные символы алфавита не могут входить видентификатор.
Идентификаторыиспользуются без учета регистра, это означает, что строчные буквы (a..z) рассматриваются тождественными буквами (A..Z). Идентификаторы могут иметь любую длину, но только первые63 символа являются значащими.
Таблица идентификаторов№ Идентификатор Тип Назначение 1 Num Integer Нумерация личных дел (диапазон: -32768,,,32767; размер-2байта). 2 FirsName Char Создание фамилии уч-ся (диапазон:-128…127; размер-1байт). 3 Name Char Создание имени уч-ся (диапазон:-128…127; размер-1байт). 4 FatherName Char Создание отчества уч-ся (диапазон:-128…127; размер-1байт). 5 Date Integer Заполнение даты рождения уч-ся (диапазон:-32768,,,32767; размер-2байта). 6 FirstNameKur Char Создание фамилии куратора (диапазон:-128…127; размер-1байт). 7 NameKur Char Создание имени куратора (диапазон:-128…127; размер-1байт). 8 FatherNameKur Char Создание отчества куратора (диапазон:-128…127; размер-1байт).
2.4 Структурная и функциональная схема
/>
Рис.1 Структурная схема

/>
Рис.2 Функциональнаясхема

ЗАКЛЮЧЕНИЕ
При написании данногопроекта была достигнута поставленная цель, а именно разработана и полностьюсформирована база данных ”учащихся”. В интерфейсе данной программыпредусмотрены все необходимые для пользователя пункты главного меню в рамкахпоставленной задачи проекта. В программе выполнены все требования,предъявленные к программному продукту, с уверенностью можно заявить что цель,поставленная при разработке данной программы, была достигнута. Программанаписана на языке программирования Турбо Паскаль.
После тщательногоизучения предметной области и задания полученного на данный проект быливыдвинуты основные требования к программному продукту, которые в последующем ибыли реализованы в программе.
Стоит отметить, чтоданный программный продукт обладает несложным интерфейсом. Благодаря этомукачеству, программу сможет использовать каждый пользователь, имеющий простейшиенавыки работы на компьютере. А для пользователей умеющих программировать наязыке Паскаль программа может послужить базой для написания более сложныхсистем или стать наглядным пособием написания и использования процедур ифункций в данной среде, так как данная программа хорошо демонстрируетпрактическую реализацию их использования.

CПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1) Алексеев В. Е., Ваулин А.С.,Петрова Г. Б. – Вычислительная техника и программирование. Практикум попрограммированию: Практ. пособие/ –М.: Высш. шк., 1991. – 400 с.
2) Абрамов С.А., Зима Е.В. – Началапрограммирования на языке Паскаль. – М.: Наука, 1987. –112 с.
3) Турчак Л.И. – Основы численныхметодов – М.: «Наука», 1987-31 с.
4) Вычислительная техника ипрограммирование: Учеб. для техн. вузов/ А.В. Петров, В.Е. Алексеев, А.С.Ваулин и др. – М.: Высш. шк., 1990 – 479 с.
5) Меженный О.А. – самоучитель Turbo Pascal. – М.: 2003-75 с.
6) Марченко А.И., Марченко Л.А. –Программирование в среде Turbo Pascal 7.0 – К.:ВЕК+, М.: Бином Универсал, 1998. – 496 с.
7) Немнюгин С.А. TurboPascal
8) Прайс Д. Программирование на языкепаскаль. Практическое руководство.
9) Меженный О.А. – самоучитель Turbo Pascal. – М.: 2003-198 с.

ГРАФИЧЕСКАЯ ЧАСТЬ
Лист 1. Функциональнаясхема
/>

Лист 2. Структурная схема
/>

ПРИЛОЖЕНИЕ А
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
1 Введение
Настоящее практическоезадание распространяется на разработку программы создания и обработки тестовыхданных, предназначенной для использования любых пользователей.
Отличительнойособенностью данной программной продукции является дополнительная программа,позволяющая изменять вопросы и варианты вопросов тестирования. Оно имеетсравнительно лёгкий пользовательский интерфейс, ориентированный на пользователя,имеющего навыки в работе с вычислительной техникой.
Разрабатываемая программапозволяет легко и просто протестировать пользователя на знание определённойобласти, заключённой в тестовых вопросах.
2 Основание дляразработки
В соответствии с полученнымзаданием проекта на практику.
3 Назначение
Пользователями даннойпрограммы могут выступать: завучи, заведующие кафедры любого направления.Основным назначением данной программы болееудобный способ вести личные дела учащихся в тех или иных учебных заведениях.

4 Требование к программе или программному изделию
4.1 Требование к функциональным характеристикам.
4.1.1Программный продукт должен обеспечивать возможностьвыполнения следующих операций:
 -имеются ли однофамильцы;
-имеются ли однофамильцы на одном курсе;
— в каких группах более 10 учащихся;
— на сколько человек больше на I-мкурсе, чем на IV-м курсе.
4.1.2. Исходные данные:
-аналитическое заданиеданных.
4.2. Требования кнадёжности программы:
4.2.1. Предусмотретьконтроль вводимых данных.
4.2.2. Предусмотретьблокировку некорректных действий пользователя при работе с системой.
4.3 Требования к составуи параметрам технических средств
4.3.1 Система должнаработать на IBM совместимых персональных компьютерах.
4.3.2 Минимальная конфигурация:
-типпроцессора Pentium;
-объёмоперативного запоминающего устройства не менее 16Мб;
-типмонитора VGA или SVGA.
4.4Требования к информационной программной совместимости
— Система работает подуправлением операционных систем семейства Windows (Windows95,Windows98,Windows2000,WindowsNT и т.п.), а также дисковых операционных системах MS-DOS.
5 Требования кпрограммной документации
5.1Разрабатываемыепрограммные модули должны быть самодокументированы, то есть тексты программдолжны содержать все необходимые комментарии;
5.2Разрабатываемая программа должна включать справочную информацию об основныхтерминах соответствующего раздела программы и подсказки пользователю;
5.3В состав сопровождающей документации должны входить:
5.3.1Пояснительная записка на 25-30 листах, содержащая описание разработки и всенеобходимые комментарии;
5.3.2Листинг программы;
6 Стадии и этапыразработки№ этапа Дата выполнения Названия этапов 1 Изучение предметной области решаемой задачи 2 Общая постановка решаемой задачи 3 Анализ входных и выходных документов 4 Создание окон пользовательского интерфейса 5 Создание кода программы 6 Отладка программы 7 Тестирование программного обеспечения 8 Редактирование всей необходимой документации
ТаблицаА1-Стадии и этапы разработки.

ПРИЛОЖЕНИЕ Б
ЛИСТИНГ ПРОГРАММЫ
(Листинг основнойпрограммы)
program Baza;
uses crt,REGUNIT;
begin{BazaDannyh}
zastavka; {Запуск заставки}
user; {Выборпользователя}
menus; {Открытие меню}
end.{Baza Dannyh}
(Листинг Unit программы)
{******************************************************************}
{ Zastavka — Процедура        заставки}
{ Makeramka — Рисованиерамок }
{ Lines — Рисование линий}
{ Archieve — Процедураархива }
{ User — Процедура выборапользователя }
{ Menus — Процедура меню }
{ Password — Процедуразапроса пароля, требует только у Админа }
{******************************************************************}
Unit REGUNIT;
Interface
uses crt;
const
illcount=100;
NameProg=’Bazadannyh’;
PasswordX=’password’;
Line1=’ННННННННННННННННННСННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН’;
 mmenu:array[1..5] of string[16]=(‘ Novoe delo ‘,
‘ Архив… ‘,’ Поиск… ‘,’Пользователь…’,
‘ ‚Выход ‘);
menunew:array[1..2] of string[16]=(‘ ‘®еа ­Ёвм ‘,
‘ Ћв¬Ґ­ ‘);
menuarch:array[1..3] of string[16]=(‘ ‘®еа ­Ёвм ‘,
 ‘ ‡ Јаг§Ёвм ‘,’ Ћв¬Ґ­ ‘);
 menufind:array[1..2] of string[16]=(‘ Ќ ©вЁ ‘,
‘ Ћв¬Ґ­ ‘);
menuuser:array[1..2] of string[40]=
(‘ Ђ¤¬Ё­Ёбва в®а ‘,
‘ Џ®«м§®ў вҐ«м ‘);
simvV: set ofchar =
[‘A’..’Z’,’a’..’z’,’0′..’9′,’_’,’\’,’:’,
 ‘(‘,’)’,’!’,’#’,’%’,’^’,’~’,’-‘,””,’&’,’@’];
simvN: set ofchar = [‘A’..’Z’,’a’..’z’,’Ђ’..’џ’,’ ‘..’п’];
simvD: set ofchar = [‘0′..’9′,’.’];
simvDIG: setof char = [‘0’..’9′];
krifind: array[1..8] of string[8]=(‘number’,’sur’,’name’,’otch’,
‘dateburn’,’surdoc’,’namedoc’,’otchdoc’);
type
ill = record
number:integer;{­®¬Ґа Є ав®зЄЁ}
sur:string[20];{д ¬Ё«Ёп}
name:string[20];{Ё¬п}
otch:string[20];{®взҐбвў®}
dateburn:string[20];{¤ в ஦¤Ґ­Ёп}
surdoc:string[20];{д ¬Ё«Ёп ўа з }
namedoc:string[20];{Ё¬п ўа з }
otchdoc:string[20];{®взҐбвў® ўа з }
end;
masi =array[1..illcount] of ill;
fff = file ofill;
max =array[1..3,1..28] of integer;
var
pass, flag,open, admin: boolean;
m: max;
numb, numfind,illind, posx, simv, sim, i: integer;
tempmas:array[1..9] of string;
masill: masi;
fileill: fff;
Proceduremenucl;
ProcedureScreen(color:byte);
FunctionGotoCen(s:string):integer;
Procedurelines(color:byte);
Procedurespace(n:byte);
Procedureclear;
ProcedureMakeRamka(x0,y0:integer; s:string; x,y:integer;color,fon:byte);
Procedurefield;
Procedurearchieve;
Proceduremenuarchh;
Proceduremenunewkar;
Proceduremenufinder;
Procedureuser;
Proceduremenus;
Procedurezastavka;
Procedurepassword;
Implementation
proceduremenucl;
var
i:integer;
begin{menucl}
textbackground(blue);
for i:=1 to 20do
begin
gotoxy(2,i+2);
writeln(‘ ‘);
end;
end;{menucl}
ProcedureScreen(color:byte);
Var
i:integer;
begin{screen}
textbackGround(color);
for i:=1 to 25do
writeln(‘ ‘);
gotoXY(1,1);
end;{screen}
FunctionGotoCen(s:string):integer;
begin{gotocen}
GotoCen:=(80-length(s))div 2;
end;{gotocen}
Procedurelines(color:byte);
var
i:byte;
begin{lines}
textcolor(color);
gotoXY(gotocen(nameprog),1);writeln(NameProg);
write(line1);
for i:=3 to 25do
begin
gotoxy(19,i);
write(‘і’);
end;
textcolor(yellow);
end;{lines}
Procedurespace(n:byte);
Var
i:byte;
begin{space}
for i:=1 to ndo
write(‘ ‘);
end;{space}
ProcedureClear;
var
x,y:byte;
begin{clear}
textbackground(blue);
For y:=3 to 24do
For x:=20 to80 do
Begin
gotoxy(x,y);
write(‘ ‘);
end;
end;{clear}
ProcedureMakeRamka(x0,y0:integer; s:string; x,y:integer;color,fon:byte);
var
i,j:integer;
begin{MakeRamka}
textbackground(fon);
textcolor(color);
gotoxy(x0,y0);write(‘Й’);
for i:=x0+1 tox-1 do
begin
gotoxy(i,y0);
write(‘Н’);
end;
Write(‘»’);
gotoxy(10+gotocen(s),y0);
textcolor(white);
write(s);
for i:=y0+1 toy-1 do
begin
j:=x0;
textcolor(color);
gotoxy(j,i);
write(‘є’);
textcolor(white);
for j:=x0+1 tox-1 do
write(‘ ‘);
TextColor(color);
write(‘є’);
end;
gotoxy(x0,y);
write(‘И’);
for i:=x0+1 tox-1 do
write(‘Н’);
write(‘ј’);
textcolor(yellow);
end; {MakeRamka}
procedurefield;
var
i:integer;
begin{field}
MakeRamka(22,3,’Delouchschegosya’,78,24,white,cyan);
textcolor(black);
gotoxy(24,5);
write(‘№ Dela ‘);
gotoxy(24,7);
write(‘” Фамилия ‘);
gotoxy(24,9);
write(‘Имя ‘);
gotoxy(24,11);
write(‘Отчество ‘);
gotoxy(24,13);
write(‘Дата рождения ‘);
gotoxy(24,15);
write(‘Familiyakuratora ‘);
gotoxy(24,17);
write(‘Imyakuratora ‘);
gotoxy(24,19);
write(‘Otchestvokuratora ‘);
gotoxy(24,23);
write(‘Клавиша F8 — Удаление дела’);
textbackground(black);
textcolor(white);
for i:=1 to 9do
begin
gotoxy(50,3+i*2);
write(‘ ‘);
end;
end;{field}
procedurearchieve;
var
i:integer;{Ї а ¬Ґва жЁЄ« }
begin{archieve}
MakeRamka(22,3,’‘®еа ­Ґ­ЁҐ/‡ Јаг§Є ‘,78,24,white,cyan);
textcolor(black);
textbackground(cyan);
gotoxy(30,13);
write(‘€¬п д ©« ‘);
{‚лў®¤ ЇаҐ¤гЇаҐ¦¤Ґ­Ёп}
gotoxy(30,15);
write(‘‚­Ё¬ ­ЁҐ! “Є § ў Ё¬п бгйҐбвўго饣® д ©« ‘);
gotoxy(30,16);
write(‘ЇаЁ б®еа ­Ґ­ЁЁ ¤ ­­ле, ‚л Џ…ђ…‡ЂЏ€?…’…’);
gotoxy(30,17);
write(‘ҐЈ® ᮤҐа¦Ё¬®Ґ!’);
textbackground(black);
textcolor(white);
gotoxy(40,13);
write(‘ ‘);
end;{archieve}
proceduremenuarchh;
var
io, pos, i,ii, ind: integer;
ch: char;
s: string;
begin{menuarchh}
s:=”;
menucl;
ind:=1;
pos:=41;
ii:=1;
archieve;
repeat
repeat
for i:=1 to 3do
begin
if i=ind
then
begin
textbackground(white);
textcolor(black);
end
else
begin
textcolor(white);
textbackground(black);
end;
gotoxy(2,i*2+1);
write(menuarch[i]);
end;
ch:=readkey;
gotoxy(30,19);
textbackground(cyan);
write(‘ ‘);
textcolor(white);
case ch of
#8:{backspace}
if(s”)
then
begin
dec(ii);
delete(s,ii,1);
textbackground(black);
textcolor(white);
gotoxy(40,13);
write(‘ ‘);
gotoxy(40,13);
write(s);
end;
#80:
ifind3
then
inc(ind);
#72:
ifind1
then
dec(ind);
else
ifchr(ord(ch)) in simvv
then
if ii
then
begin
gotoxy(40,13);
s:=s+chr(ord(ch));
textbackground(black);
textcolor(white);
write(s);
inc(ii);
end;
end;
until ch=#13;
assign(fileill,s+’.dat’);
case ind of
1: begin
rewrite(fileill);
for i:=1 toillcount do
write(fileill,masill[i]);
close(fileill);
ind:=3;
end;
2: begin
{$i-}
reset(fileill);
io:=ioresult;
{$i+}
If io = 0
then
begin
for i:=1 toillcount do
read(fileill,masill[i]);
close(fileill);
end;
end;
end;
if (ind = 2)
then
if (io = 0)
then
ind:=3
else
begin
textcolor(red);
textbackground(cyan);
gotoxy(30,19);
write(‘” ©«­Ґ ­ ©¤Ґ­!’);
end;
until ind=3;
clear;
end;{menuarchh}
proceduremenunewkar;
var
numerr, tmp,code,ii, posy, i, ind:integer;
ch:char;
tempm:array[1..9] of string[20];
s,ss:string[20];
sd: char;
errd,flagg:boolean;
begin{menunewkar}
menucl;
ind:=1;
field;
posy:=1;
ii:=1;
s:=”;
if flag
then
numb:=numfind
else
fori:=illcount downto 1 do
if(masill[i].number = 0)
then
numb:=i;
{+++++++++++++++++++++}
gotoxy(50,posy*2+3);
write(numb);
if flag
then
begin
str(numb,ss);
tempm[1]:=ss;
tempm[2]:=masill[numb].sur;
tempm[3]:=masill[numb].name;
tempm[4]:=masill[numb].otch;
tempm[5]:=masill[numb].dateburn;
tempm[6]:=masill[numb].surdoc;
tempm[7]:=masill[numb].namedoc;
tempm[8]:=masill[numb].otchdoc;
for i:=1 to 8do
begin
gotoxy(50,i*2+3);
write(‘ ‘);
gotoxy(50,i*2+3);
write(tempm[i]);
end;
end
else
begin
tempm[1]:=”;
tempm[2]:=”;
tempm[3]:=”;
tempm[4]:=”;
tempm[5]:=”;
tempm[6]:=”;
tempm[7]:=”;
tempm[8]:=”;
tempm[9]:=”;
end;
repeat
repeat
for i:=1 to 2do
begin
if i=ind
then
begin
textbackground(white);
textcolor(black);
end
else
begin
textcolor(white);
textbackground(black);
end;
gotoxy(2,i*2+1);
write(menunew[i]);
end;
gotoxy(50,posy*2+5);
ch:=readkey;
errd:=false;
case ch of
#66:
if admin
then
begin
masill[numb].number:=0;
masill[numb].sur:=”;
masill[numb].name:=”;
masill[numb].otch:=”;
masill[numb].dateburn:=”;
masill[numb].surdoc:=”;
masill[numb].namedoc:=”;
masill[numb].otchdoc:=”;
ch:=#13;
ind:=2;
end;
#9: begin
textbackground(black);
textcolor(white);
s:=”;
if posy = 8
then
posy:=1
else
inc(posy);
ii:=1;
end;
#83: {delete}
if admin
then
{if ch=chr(0)
{ then }
begin
gotoxy(50,posy*2+5);
write(‘ ‘);
s:=”;
ii:=1;
end;
#8:{backspase}
if admin
then
if(s”)
then
begin
dec(ii);
delete(s,ii,1);
textbackground(black);
textcolor(white);
gotoxy(50,posy*2+5);
write(‘ ‘);
gotoxy(50,posy*2+5);
write(s);
end;
#80:
if ind=1
then
inc(ind);
#72:
if ind=2
then
dec(ind);
else
if admin
then
begin
if (posy=4) or(posy=8)
then
flagg:=true
else
flagg:=false;
if((chr(ord(ch)) in simvN) and not(flagg)) or
((chr(ord(ch))in simvD) and flagg)
then
if ii
then
begin
if flagg
then
begin
case ii of
1,2,4,5,7,8,9,10:
ifnot((chr(ord(ch)) in simvdig))
then
errd:=true;
3,6:
if(ch’.’)
then
errd:=true;
else
errd:=true;
end;
end;
if not(errd)
then
begin
s:=s+chr(ord(ch));
tempm[posy+1]:=s;
textbackground(black);
textcolor(white);
gotoxy(50,posy*2+5);
write(‘ ‘);
gotoxy(50,posy*2+5);
write(s);
inc(ii);
end;
end;
end;
end;
until ch=#13;
case ind of
1: if admin
then
begin
if flag
then
numb:=numfind;
masill[numb].number:=numb;
masill[numb].sur:=tempm[2];
masill[numb].name:=tempm[3];;
masill[numb].otch:=tempm[4];
masill[numb].dateburn:=tempm[5];
masill[numb].surdoc:=tempm[6];
masill[numb].namedoc:=tempm[7];
masill[numb].otchdoc:=tempm[8];
ind:=2
end;
2: begin
dec(numb);
ind:=2
end;
end;
until ind=2;
tempm[posy+1]:=s;
s:=”;
clear;
flag:=false;
end;{menunewkar}
proceduremenufinder;{+++++++++++++++++++++++++++++++++++++++++}
var
t, code, tt,tmp, ii, posy, i, ind:integer;
ch:char;
tempm:array[1..8] of string[20];
s:string[20];
flagg:boolean;
begin{menufinder}
menucl;
ind:=1;
field;
posy:=1;
ii:=1;
s:=”;
for i:=1 to 8do
tempm[i]:=”;
repeat
repeat
for i:=1 to 2do
begin
if i=ind
then
begin
textbackground(white);
textcolor(black);
end
else
begin
textcolor(white);
textbackground(black);
end;
gotoxy(2,i*2+1);
write(menufind[i]);
end;
gotoxy(50,posy*2+3);
ch:=readkey;
case ch of
#9:
begin
s:=”;
if posy = 9
then
posy:=1
else
inc(posy);
for tmp:=1 to9 do
begin
gotoxy(50,tmp*2+3);
write(‘ ‘);
end;
ii:=1;
end;
#8:{backspase}
if(s”)
then
begin
dec(ii);
delete(s,ii,1);
textbackground(black);
textcolor(white);
gotoxy(50,posy*2+3);
write(‘ ‘);
gotoxy(50,posy*2+3);
write(s);
end;
#80:
if ind=1
then
inc(ind);
#72:
if ind=2
then
dec(ind);
else
begin
if (posy=1) or(posy=5) or (posy=9)
then
flagg:=true
else
flagg:=false;
if((chr(ord(ch)) in simvN) and not(flagg)) or
((chr(ord(ch))in simvD) and flagg)
then
if ii
then
begin
gotoxy(50,posy*2+3);
s:=s+chr(ord(ch));
textbackground(black);
textcolor(white);
write(s);
inc(ii);
end;
end;
end;
until ch=#13;
if ind=1
then
begin
MakeRamka(22,3,’‘ЇЁб®Є ­ ©¤Ґ­­ле:’,78,24,white,cyan);
tt:=1;
for tmp:=1 toillcount do
begin
flag:=false;
val(s,t,code);
case posy of
1: if((masill[tmp].number = t) and (t0)) then flag:=true;
2: if(masill[tmp].sur = s) then flag:=true;
3: if(masill[tmp].name = s) then flag:=true;
4: if(masill[tmp].otch = s) then flag:=true;
5: if(masill[tmp].dateburn = s) then flag:=true;
6: if (masill[tmp].surdoc= s) then flag:=true;
7: if(masill[tmp].namedoc = s) then flag:=true;
8: if(masill[tmp].otchdoc = s) then flag:=true;
end;
if s=”
then
flag:=false;
if flag
then
begin
textcolor(black);
textbackground(cyan);
gotoxy(40,tt+5);
write(‘ь: ‘,masill[tmp].number);
gotoxy(47,tt+5);
write(‘” ¬Ё«Ёп: ‘+masill[tmp].sur);
inc(tt);
end;
end;
textcolor(black);
textbackground(cyan);
gotoxy(24,4);
write(‘‚ўҐ¤ЁвҐ ­®¬Ґа п祩ЄЁ:’);
textcolor(white);
textbackground(black);
gotoxy(24,5);
write(‘ ‘);
gotoxy(24,5);
s:=”;
flag:=false;
repeat
ch:=readkey;
ifchr(ord(ch)) in simvdig
then
begin
s:=s+chr(ord(ch));
flag:=true;
val(s,t,code);
if ((t>100)or (t
then
begin
s:=”;
gotoxy(24,5);
write(‘ ‘);
flag:=false;
end;
gotoxy(24,5);
write(‘ ‘);
gotoxy(24,5);
write(s);
end;
until((ch=#13) or (ch=#27));
if ch=#27
then
begin
ind:=2;
flag:=false
end
else
if ((ch=#13)and flag)
then
begin
ind:=2;
val(s,t,code);
numfind:=t;
end;
end;
until ind=2;
clear;
end;{menufinder}
procedureuser;
var
ind:shortint;
ch:char;
begin {user}
ind:=1;
MakeRamka(22,8,’‚лЎҐаЁвҐ Ї®«м§®ў вҐ«п:’,78,13,white,cyan);
repeat
for i:=1 to 2do{Їа®аЁб®ўлў Ґ¬ Їг­Євл ¬Ґ­о ўлЎ®а }
begin
if i=ind
then
begin
textcolor(black);
textbackground(white)
end
else
begin
textcolor(white);
textbackground(black)
end;
gotoxy(30,9+i);
write(menuuser[i]);
end;
ch:=readkey;
if ((ch=#80)and (ind=1))
then
inc(ind);
if ((ch=#72)and (ind=2))
then
dec(ind);
untilch=#13;{­ ¦ в ‚‚Ћ„}
if ind=1
then
password
else
admin:=false;
clear;
end; {user}
proceduremenus;
var
i,ind:integer;
ch:char;
begin{menus}
flag:=false;
ind:=1;
menucl;
numb:=0;
repeat
repeat
for i:=1 to 5do
begin
if i=ind
then
begin
textbackground(white);
textcolor(black);
end
else
begin
textcolor(white);
textbackground(black);
end;
gotoxy(2,i*2+1);
write(mmenu[i]);
end;
ch:=readkey;
if ((ch=#80)and (ind5))
then
inc(ind);
if ((ch=#72)and (ind1))
then
dec(ind);
until ch=#13;
case ind of
1: if admin
then
menunewkar;
2: if admin
then
menuarchh;
3: menufinder;
4: user;
end;
if flag then
menunewkar;
until ind=5;
end;{menus}
procedurezastavka;
var
mart, mart2:boolean;
schmart:integer;
begin{zastavka}
mart:=false;
mart2:=false;
schmart:=0;
TextBackGround(Black);
TextColor(Green);
Randomize;
Clrscr;
sim:=0;
repeat
if schmart=80then mart:=true;
if schmart=100then mart2:=true;
if schmart=200then
begin
mart:=false;
mart2:=false;
schmart:=0;
end;
if sim
begin
repeat
posx:=random(27)+1
untilm[1,posx]=0;
if mart
then
case posx of
9: simv:=84;
10, 23:simv:=72;
11: simv:=69;
12: simv:=95;
13: simv:=66;
14, 16:simv:=65;
15: simv:=90;
17, 18, 19:simv:=33;
else
simv:=random(24)+97
end
else
simv:=random(24)+97;
m[1,posx]:=posx;
m[2,posx]:=simv;
m[3,posx]:=m[3,posx]+1;
sim:=sim+1;
end;
delay(7000);
for i:=1 to 27do
begin
ifm[1,i]0
then
ifnot((m[3,i]=12) and mart2 and (m[1,i]>8) and (m[1,i]
then
begin
gotoxy(m[1,i]*3-2,m[3,i]);
write(chr(m[2,i]));
gotoxy(m[1,i]*3-2,m[3,i]-1);
write(‘ ‘);
gotoxy(m[1,i]*3-2,m[3,i]);
m[3,i]:=m[3,i]+1;
end;
ifm[3,i]>25
then
begin
m[1,i]:=0;
m[2,i]:=0;
m[3,i]:=0;
gotoxy(m[1,i]*3-2,m[3,i]);
write(chr(m[2,i]));
sim:=sim-1;
end;
end;
inc(schmart);
untilkeypressed;
screen(blue);
lines(white);
end;{zastavka}
procedurepassword;
var
s:string[16];
i,ii:integer;
ch:char;
begin{password}
MakeRamka(22,8,’‚ўҐ¤ЁвҐ Ї а®«м ¤«п ¤®бвгЇ Є Ў §Ґ ¤ ­­ле:’,78,14,white,cyan);
textcolor(white);
textbackground(black);
gotoxy(42,11);
writeln(‘ ‘);
gotoxy(42,11);
ii:=0;
s:=”;
admin:=false;
repeat
ch:=readkey;
case ch of
#72:;
#75:;
#77:;
#80:;
#8:{backspase}
if(s”)
then
begin
delete(s,ii,1);
dec(ii);
textbackground(black);
textcolor(white);
gotoxy(42,11);
write(‘ ‘);
gotoxy(42,11);
for i:=1 to iido
write(‘*’);
end;
else
if(chr(ord(ch)) in simvV)
then
if ii
then
begin
gotoxy(42,11);
s:=s+chr(ord(ch));
textbackground(black);
textcolor(white);
inc(ii);
for i:=1 to iido
write(‘*’);
end;
end;
until((ch=#13) or (ch=#27));
if ch=#27{­ ¦ в Esc}
then
admin:=false
else
if s=PasswordX
then
admin:=true
else
begin
s:=”;
textcolor(red);
textbackground(cyan);
gotoxy(42,13);
write(‘‚ўҐ¤Ґ­ ­ҐўҐа­л© Ї а®«м!’);
gotoxy(42,11);
textcolor(white);
textbackground(black);
write(‘ ‘);
gotoxy(42,11);
ch:=readkey;
password;
end;
clear;
end;{password}

ПРИЛОЖЕНИЕ В
ПРИМЕРЫ ПРОГРАММЫ
/>
Рис.1 Пример заставки,при её создании использовалась таблица ASCII
/>
Рис.2 Пример защитыпрограммы паролем ( по умолчанию: password )

/>
Рис.3 Пример менюпрограммы
/>
Рис.4 Создание новогодела учащегося

/>
Рис.5 ПримерСохранения\Загрузки архива
/>
Рис.6 Пример Поиска поразличным критериям, в данном случае по фамилии куратора

/>
Рис.7 Пример результатапоиска учащегося по какой либо из критерий
/>
Рис.8 Пример сменыпользователя, например из «Пользователя» в «Администратора» после чегопрограмма потребует пароль

ПРИЛОЖЕНИЕ Г
РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Запускаете файл Reg.exe, при запуске будет запущена заставка программы — нажмите любую клавишу для продолжения.
Далее выйдет окно запросапароля (или выбора пользователя): а) Введите пароль для выбора учётной записи«Администратор» (по умолчанию:password); б) нажмите клавишу “Esc”для выбора учётной записи «Пользователь».
Далее следует меню,состоящее из подпунктов: Новое дело, Архив, Поиск, Выбор пользователя, Выход.Если будет выбран «Администратор», тогда вы можете завести новые дела научащихся, сохранять изменение (создавать) базы данных или загружать ужесуществующие базы, далее можете воспользоваться поиском тех или иных учащихсядля удаления или корректировки данных, выбор пользователя – заменапользователя, допустим с «Администратора» на «Пользователя», выход – из даннойпрограммы. Клавиши и подпункты: (для перемещения по подпунктам используютсяклавиши: Вверх, влево, вправо, вниз. Для перемещения по ячейкам данных используетсяклавиша «TAB». Для удаления конкретного делаучащегося используйте клавишу «F8».Клавиша для принятия «Enter».