Курсовая работа: Разработка базы данных, отражающей учет успеваемости студентов
end;
Эта процедура работает таким образом – обращение к ней идет из основного блока программы, в котором стоит бесконечный цикл. На экране отображается что то похожее на бенгальский огонь. Это достигается путем последовательного вывода на одном и том же месте символов: \, |, /, —. В переменной tek у нас содержится номер активной строки, а относительно нее мы и должны поставить звездочку.
Следующая процедура:
procedure ramka(ch:char); {перемещение указателя}
begin
gotoxy(6,tek+3);Writeln(' ');
textcolor(3);gotoxy(8,tek+3);write(nast.st[tek]);
if ch='+' then tek:=tek+1
else tek:=tek-1;
if tek=1 then tek:=nast.m
else if tek=nast.m+1 then tek:=2;
key:=#0;
textcolor(9);gotoxy(8,tek+3);write(nast.st[tek]);
krutis;
end;
Данная процедура имеет параметр символьного типа. По содержанию ch определяется – вверх или вниз сдвинулась активная строка. Обращение к этой процедуре идет из основного блока программы. Больше процедур такого рода нет (ко всем другим процедурам обращение идет из процедуры main).
Эта процедура затирает элемент, который был активен перед этим цветом по умолчанию (голубым) и стирает предыдущее положение звездочки. После этого исходя из значения ch изменяется значение tek и выделяется элемент, на который был осуществлен переход. В подпрограмме вставлены два условия:
if tek=1 then tek:=nast.m
else if tek=nast.m+1 then tek:=2;
Они срабатывают когда активным является верхний элемент меню и пользователь нажал кнопку вверх, тогда текущей становится последняя строка, и наоборот – текущая строка является последней, а пользователь нажал кнопку вниз, тогда активной станет первая строка активного меню.
Процедуры следующего типа осуществляют загрузку и выгрузку данных из файла. Я не буду здесь приводить полный текст процедур, так как его можно посмотреть в приложении. Чтение осуществляется с помощью readetip, а запись – writetip. В этих процедурах используются глобальные переменные. Загрузка идет посредством таблиц tt1, tt2, tt3, tt4. При работе пользователь работает как бы с одним файлом, хотя реально каждая из таблиц сохраняется в свой файл. При запросе пользователь вводит название файла, а потом к этому названию добавляется слева цифра – 1, 2, 3 или 4. Например если при сохранении в типизированный файл имени сохраняемого файла присвоить значение pasha , то таблица tt1 будет сохранена в файле 1 pasha , tt2 – 2 pasha , tt3 – 3 pasha , tt4 – 4 pasha . При выгрузке из файла присвоение имен идет таким же образом. Для сохранения в текстовой файл используется процедура tabl11(t:integer;rab:cc), где rab – сохраняемая таблица, а t – помогает найти заголовки столбцов текущей таблицы. Результат выполнения данной процедуры можно посмотреть выше, где показаны таблицы первоначальных данных. Для вывода содержимого таблицы на экран используется процедура tabl1(t:integer;rab:cc;yd:boolean), действие которой аналогично предыдущей, только добавляется параметр yd, от которого зависит, нужно ли затирать таблицу сразу или она должна повисеть на экране, пока пользователь не ввел какие либо данные. Например при удалении записей из таблицы, пользователю будет удобнее, если он будет содержание таблицы перед глазами. Например покажем содержание таблицы студентов, которые будут выведены после нажатии на кнопку «Просмотр»:
Следующая процедура - obrabotka(iz,t:integer; var rab:cc). Эта процедура вызывается при корректировке записей. Через параметр iz процедура выбирает путь дальнейшего хода. То есть надо ли добавить запись, изменить или удалить. Параметр rab – это таблица, которая передается в процедуру, и параметр var показывает, что данную таблицу можно изменять непосредственно из процедуры.
В ней используются локальные переменные –
dlud:string;
bis:boolean;
tems,temr,tem:cc;
Здесь все переменные типа cc – временные, dlud служит для ввода данных, а bis показывает, выполнимо ли выбранное действие или нет.
Продцедура sort(iz,t:integer; var rab:cc) осуществляет сортировку записей в выбранной таблице по выбранному полю. Ее работа и параметры с переменными аналогичны предыдущей процедуре.
При запросах выполняется процедура zapros(num:integer), где через параметр num передается, какой именно запрос должен выполняться. Потом через условие case идет обработка запросов. Как показано на схеме взаимодействия таблиц, чтобы перейти от студентам к преподавателям надо пройти через таблицу оценок. Связь между таблицами осуществляется по уникальным полям. Например для нахождении оценки студента надо сначала из таблицы студентов найти номер его студенческого, а потом найти номер сдаваемого предмета из таблицы, а уже после этого, используя полученные номера, найти из таблицы успеваемости полученную студентом оценку. То есть связь идет по трем таблицам. В запросах я старался как можно больше показать возможности моей базы данных. На последнем рисунке показан один из запросов и результат его выполнения. Возможность создания гибких запросов является важнейшей задачей программирования баз данных.