Министерство образования и науки Республики Казахстан
Карагандинский политехнический колледж
РАЗРАБОТКА БАЗЫ ДАННЫХ «УЧАЩИХСЯ»
Пояснительная записка
Руководитель
А.Г.Хмыров
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».