46261 (607807), страница 2

Файл №607807 46261 (Разработка базы данных, отражающей учет успеваемости студентов) 2 страница46261 (607807) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

end;

temr,tt1,tt2,tt3,tt4:cc – Таблицы базы данных. Тут tt1 – таблица с данными о студентах, tt2 – предметы, tt3 – преподаватели, tt4 – оценки (успеваемость). Temr – временная таблица. Все эти переменные являются динамическими списками. Они описаны в файле tips.pas:

tabl2=record {Сама таблица}

t1,t2,t3,t4,t5:string[12]; {Состоит из строк}

end;

cc=^tab;

tab=record {Создание динамического списка}

tabl:tabl2;

sled:cc;

end;

Программа отвечает на то, какую клавишу нажал пользователь и передает управление процедуре main. Процедура readkey используется в основном блоке программы. Для работы с управляющими клавишами используются их коды в таблице ISCII. Тут:

80 – курсор вверх

72 – курсор вниз

27 – ESC

13 – Enter

При нажатии на клавишу «Ввод» управление передается продцедуре main. При этом используются глобальные переменные.

В процедуре main управление переходит к подпрограмме, согласно текущему меню, но порой надо знать откуда был осуществлен вход. Как я уже говорил, зайти в меню выбора таблиц можно по разному. Все меню имеют разные заголовки, которые и используются для их идентификации. При нажатии на кнопку «Выход », текущем становится первоначальное меню.

Интерфейсная часть программы состоит из трех процедур:

procedure menus(m:pered;max:byte); {Вывод меню}

begin

clrscr;

For i:=1 to max do begin

if i=1 then begin

textcolor(1); gotoxy(9,2); write(m.st[i]);

end

else begin

if i=2 then textcolor(9)

else textcolor(3);

gotoxy(8,i+3);write(m.st[i]);

end;

end;

end;

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

Следующая процедура:

procedure krutis; {Звездочка рядом с активным элементом}

begin

textcolor(14);

if kr='/' then kr:='-'

else if kr='-' then kr:='\'

else if kr='\' then kr:='|'

else kr:='/';

gotoxy(6,tek+3);write(kr);

textcolor(3);

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 будет сохранена в файле 1pasha, tt2 – 2pasha, tt3 – 3pasha, tt4 – 4pasha. При выгрузке из файла присвоение имен идет таким же образом. Для сохранения в текстовой файл используется процедура 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 идет обработка запросов. Как показано на схеме взаимодействия таблиц, чтобы перейти от студентам к преподавателям надо пройти через таблицу оценок. Связь между таблицами осуществляется по уникальным полям. Например для нахождении оценки студента надо сначала из таблицы студентов найти номер его студенческого, а потом найти номер сдаваемого предмета из таблицы, а уже после этого, используя полученные номера, найти из таблицы успеваемости полученную студентом оценку. То есть связь идет по трем таблицам. В запросах я старался как можно больше показать возможности моей базы данных. На последнем рисунке показан один из запросов и результат его выполнения. Возможность создания гибких запросов является важнейшей задачей программирования баз данных.

Возможности полученного

программного продукта

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

Текст программы Kurs.pas

program Delphins;

uses crt,tips;

var names,namer:string[10];

key,kr:char;

tek,i,j,izm:integer;

exist,vfile,issor:boolean;

nast:pered;

temr,tt1,tt2,tt3,tt4:cc;

outf:file of tabl2;

procedure menus(m:pered;max:byte); {Вывод меню}

begin

clrscr;

For i:=1 to max do begin

if i=1 then begin

textcolor(1); gotoxy(9,2); write(m.st[i]);

end

else begin

if i=2 then textcolor(9)

else textcolor(3);

gotoxy(8,i+3);write(m.st[i]);

end;

end;

end;

procedure krutis; {Звездочка рядом с активным элементом}

begin

textcolor(14);

if kr='/' then kr:='-'

else if kr='-' then kr:='\'

else if kr='\' then kr:='|'

else kr:='/';

gotoxy(6,tek+3);write(kr);

textcolor(3);

end;

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;

procedure tabl11(t:integer;rab:cc); {Вывод таблицы в файл}

var ooutf:text;

tem:cc;

begin

clrscr;

writeln('Введите имя файла');

readln(names);

assign(ooutf,names);

rewrite(ooutf);

writeln(ooutf,menu2.st[t]);

writeln(ooutf,'+--------------------------------------------------------------------------+');

writeln(ooutf,'¦',mm[t-1,1]:14,'¦',mm[t-1,2]:14,'¦',mm[t-1,3]:14,'¦',mm[t-1,4]:14,'¦',mm[t-1,5]:14,'¦');

writeln(ooutf,'+--------------+--------------+--------------+--------------+--------------¦');

tem:=rab;

while tem<>nil do

begin

writeln(ooutf,'¦',tem^.tabl.t1:14,'¦',tem^.tabl.t2:14,'¦',tem^.tabl.t3:14,'¦',tem^.tabl.t4:14,

'¦',tem^.tabl.t5:14,'¦');

tem:=tem^.sled;

end;

writeln(ooutf,'+--------------------------------------------------------------------------+');

close(ooutf);

nast:=menu1;

menus(nast,nast.m);

tek:=2;

end;

procedure tabl1(t:integer;rab:cc;yd:boolean); {Вывод таблицы на экран}

var tem:cc;

begin

clrscr;

writeln(menu2.st[t]);

writeln('+--------------------------------------------------------------------------+');

writeln('¦',mm[t-1,1]:14,'¦',mm[t-1,2]:14,'¦',mm[t-1,3]:14,'¦',mm[t-1,4]:14,'¦',mm[t-1,5]:14,'¦');

writeln('+--------------+--------------+--------------+--------------+--------------¦');

tem:=rab;

while tem<>nil do

begin

writeln('¦',tem^.tabl.t1:14,'¦',tem^.tabl.t2:14,'¦',tem^.tabl.t3:14,'¦',tem^.tabl.t4:14,

'¦',tem^.tabl.t5:14,'¦');

tem:=tem^.sled;

end;

writeln('+--------------------------------------------------------------------------+');

if not yd then begin

readln;

nast:=menu1;

menus(nast,nast.m);

tek:=2;

end;

yd:=false;

end;

procedure sort(iz,t:integer; var rab:cc); {Сортировка по полю}

var po:integer;

te1,te2,tem:cc;

str1,str2:string;

ttrtt:tabl2;

begin

tabl1(tek,rab,true);

writeln('Введите номер столбца по которому надо отсортировать данные');

readln(po);

te1:=rab;

while te1<>nil do begin

te2:=te1^.sled;

while te2<>nil do begin

case po of

1:begin str1:=te1^.tabl.t1; str2:=te2^.tabl.t1; end;

2:begin str1:=te1^.tabl.t2; str2:=te2^.tabl.t2; end;

3:begin str1:=te1^.tabl.t3; str2:=te2^.tabl.t3; end;

4:begin str1:=te1^.tabl.t4; str2:=te2^.tabl.t4; end;

5:begin str1:=te1^.tabl.t5; str2:=te2^.tabl.t5; end;

end;

if str1>str2 then begin

ttrtt:=te1^.tabl;

te1^.tabl:=te2^.tabl;

te2^.tabl:=ttrtt;

end;

te2:=te2^.sled;

end;

te1:=te1^.sled;

end;

tabl1(tek,rab,false);

end;

procedure obrabotka(iz,t:integer; var rab:cc); {Обработка записей}

var dlud:string;

bis:boolean;

tems,temr,tem:cc;

begin

clrscr;

if iz=1 then begin {добавление записи}

if rab<>nil then begin

Характеристики

Тип файла
Документ
Размер
1,33 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6513
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее