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

Министерство образования и науки Республики Казахстан

Карагандинский политехнический колледж

























РАЗРАБОТКА БАЗЫ ДАННЫХ «УЧАЩИХСЯ»



Пояснительная записка





Руководитель

	А.Г.Хмыров

22.11.09

Выполнил учащийся

Группы 9-4-ПВТ-07

	Зиньков В.А.

22.11.09



	

	2009г.

	
ВВЕДЕНИЕ



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

Сегодняшние темпы компьютеризации превышают темпы развития всех других отраслей. Без компьютеров и компьютерных сетей не обходится сегодня ни одна средняя фирма, не говоря о крупных компаниях. Современный человек начинает взаимодействовать с компьютером постоянно - на работе, дома, в машине и даже в самолете. Компьютеры стремительно внедряются в человеческую жизнь, занимая свое место в нашем сознании. Уже сегодня компьютеры отвечают за наведение и запуск ядерных ракет, за банковские переводы многомиллионных сумм денег и многие другие системы.

Сейчас в учебные планы многих дисциплин включены разделы, требующие применение прикладных программ различной степени сложности и во многие предметы учебного плана внедрены работы с компьютерами, пишутся электронные учебники, пособия, программы для этих предметов. В настоящее время проникновение информационных технологий происходит во все сферы человеческой деятельности. Любое современное производство, учреждение, офис немыслимо представить без современных коммуникационных технологий. В связи, с чем изучение информационных технологий начинается с дошкольной системы образования.

На данный момент времени преимущественное место среди разрабатываемых программ занимают программы-тесты. Они применяются во многих сферах, и имеют различные направления и назначения. Такие как: проверка определённых знаний, коэффициент знаний, обучение и многое другое. 

В связи с вышеизложенным, была поставлена цель, написать программу для тестирования, а именно простой и лёгкой в использовании программы в качестве теста. Так как на сегодняшний момент, в связи с различными подходами к образованию, появляется потребность в данной продукции.

Данный проект может быть использован как преподавателями так и обучаемыми так как является тестирующей программой разных категорий сложности, а также предоставляется возможность создания своих тестовых вопросов.




ОБЩАЯ ЧАСТЬ



	 База данных - совокупность связанных данных, организованных по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования, независимая от прикладных программ. База данных является информационной моделью предметной области. Обращение к базам данных осуществляется с помощью системы управления базами данных (СУБД). Объектами хранения в текстовых БД являются тексты. Под текстом будут пониматься неструктурированные данные, построенные из строк. 

Основной целью любой текстовой БД является хранение, поиск и выдача документов, соответствующих запросу пользователя. Такие документы принято называть релевантными.



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; 



можно написать проще:

Function F(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 of Real;

Q : File of String[100];

Fr: File of TRec;



В этом примере 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{Baza Dannyh}

zastavka; {Запуск заставки}

user; {Выбор пользователя}

menus; {Открытие меню}

end.{Baza Dannyh}

(Листинг Unit программы)

{******************************************************************}

{ Zastavka - Процедура	заставки }

{ Makeramka - Рисование рамок }

{ Lines - Рисование линий }

{ Archieve - Процедура архива }

{ User - Процедура выбора пользователя }

{ Menus - Процедура меню }

{ Password - Процедура запроса пароля, требует только у Админа }

{******************************************************************}

Unit REGUNIT;

Interface 

uses crt;

const

illcount=100;

NameProg='Baza dannyh';

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 of char =

['A'..'Z','a'..'z','0'..'9','_','\',':',

 '(',')','!','#','%','^','~','-','''','&','@'];

simvN : set of char = ['A'..'Z','a'..'z','Ђ'..'џ',' '..'п'];

simvD : set of char = ['0'..'9','.'];

simvDIG : set of 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 of ill;

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;

Procedure menucl;

Procedure Screen(color:byte);

Function GotoCen(s:string):integer;

Procedure lines(color:byte);

Procedure space(n:byte);

Procedure clear;

Procedure MakeRamka(x0,y0:integer; s:string; x,y:integer;color,fon:byte);

Procedure field;

Procedure archieve;

Procedure menuarchh;

Procedure menunewkar;

Procedure menufinder;

Procedure user; 

Procedure menus;

Procedure zastavka;

Procedure password;

Implementation

procedure menucl;

var

i:integer;

begin{menucl}

textbackground(blue);

for i:=1 to 20 do

begin

gotoxy(2,i+2);

writeln(' ');

end;

end;{menucl}

Procedure Screen(color:byte);

Var

i:integer;

begin{screen}

textbackGround(color);

for i:=1 to 25 do

writeln(' ');

gotoXY(1,1);

end;{screen}

Function GotoCen(s:string):integer;

begin{gotocen}

GotoCen:=(80-length(s)) div 2;

end;{gotocen}

Procedure lines(color:byte);

var

i:byte;

begin{lines}

textcolor(color);

gotoXY(gotocen(nameprog),1);writeln(NameProg);

write(line1);

for i:=3 to 25 do

begin

gotoxy(19,i);

write('і');

end;

textcolor(yellow);

end;{lines}

Procedure space(n:byte);

Var

i:byte;

begin{space}

for i:=1 to n do

write(' ');

end;{space}

Procedure Clear;

var

x,y:byte;

begin{clear}

textbackground(blue);

For y:=3 to 24 do

For x:=20 to 80 do

Begin

gotoxy(x,y);

write(' ');

end;

end;{clear}

Procedure MakeRamka(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 to x-1 do

begin

gotoxy(i,y0);

write('Н');

end;

Write('»');

gotoxy(10+gotocen(s),y0);

textcolor(white);

write(s);

for i:=y0+1 to y-1 do

begin

j:=x0;

textcolor(color);

gotoxy(j,i);

write('є');

textcolor(white);

for j:=x0+1 to x-1 do

write(' ');

TextColor(color);

write('є');

end;

gotoxy(x0,y);

write('И');

for i:=x0+1 to x-1 do

write('Н');

write('ј');

textcolor(yellow);

end; {MakeRamka}

procedure field;

var

i:integer;

begin{field}

MakeRamka(22,3,'Delo uchschegosya',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('Familiya kuratora ');

gotoxy(24,17);

write('Imya kuratora ');

gotoxy(24,19);

write('Otchestvo kuratora ');

gotoxy(24,23);

write('Клавиша F8 - Удаление дела');

textbackground(black);

textcolor(white);

for i:=1 to 9 do

begin

gotoxy(50,3+i*2);

write(' ');

end;

end;{field}

procedure archieve;

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}

procedure menuarchh;

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 3 do

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: 

if ind<>3

then

inc(ind);

#72: 

if ind<>1

then

dec(ind);

else 

if chr(ord(ch)) in simvv

then

if ii<=8

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 to illcount 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 to illcount 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}

procedure menunewkar;

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

for i:=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 8 do

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 2 do

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<=15

then

begin 

if flagg 

then

begin

case ii of 

1,2,4,5,7,8,9,10:

if not((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}

procedure menufinder;{+++++++++++++++++++++++++++++++++++++++++}

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 8 do 

tempm[i]:='';

repeat

repeat

for i:=1 to 2 do

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 to 9 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<=15

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 to illcount do

begin

flag:=false;

val(s,t,code);

case posy of

1: if ((masill[tmp].number = t) and (t<>0)) 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;

if chr(ord(ch)) in simvdig

then

begin

s:=s+chr(ord(ch));

flag:=true;

val(s,t,code);

if ((t>100) or (t<0) or (s='00'))

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}

procedure user;

var

ind:shortint;

ch:char;

begin {user}

ind:=1; 

MakeRamka(22,8,'‚лЎҐаЁвҐ Ї®«м§®ў вҐ«п:',78,13,white,cyan);

repeat

for i:=1 to 2 do{Їа®аЁб®ўлў Ґ¬ Їг­Євл ¬Ґ­о ўлЎ®а }

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);

until ch=#13;{­ ¦ в ‚‚Ћ„}

if ind=1

then

password

else

admin:=false;

clear;

end; {user}

procedure menus;

var

i, ind:integer;

ch:char;

begin{menus}

flag:=false;

ind:=1;

menucl;

numb:=0;

repeat

repeat

for i:=1 to 5 do

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 (ind<>5))

then

inc(ind);

if ((ch=#72) and (ind<>1))

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}

procedure zastavka;

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=80 then mart:=true;

if schmart=100 then mart2:=true;

if schmart=200 then

begin

mart:=false;

mart2:=false;

schmart:=0;

end;

if sim<25 then

begin

repeat

posx:=random(27)+1

until m[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 27 do

begin

if m[1,i]<>0

then

if not((m[3,i]=12) and mart2 and (m[1,i]>8) and (m[1,i]<20))

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;

if m[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);

until keypressed;

screen(blue);

lines(white);

end;{zastavka}

procedure password;

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 ii do

write('*');

end;

else

if (chr(ord(ch)) in simvV)

then

if ii<=15

then

begin

gotoxy(42,11);

s:=s+chr(ord(ch));

textbackground(black);

textcolor(white);

inc(ii);

for i:=1 to ii do

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».