Реферат: Разработка базы данных, отражающей учет успеваемости студентов

Министерствообразования

РоссийскойФедерации

Хабаровский ГосударственныйТехнический Университет

Кафедра: «Программное обеспечение»

КУРСОВАЯРАБОТА

По теме«Разработка базы данных,

отражающейучет успеваемости студентов»

Выполнил студент

  гр. ПО-02 Самойленко П. Р.

Проверил преподаватель

  Белоусова Людмила

                             Васильевна

Хабаровск 2001
Содержание:

1.<span Times New Roman"">    

Задание на разработку, постановка задачи.

2.<span Times New Roman"">    

Описание базы данных.

3.<span Times New Roman"">    

Описание средств, используемых при создании программы.

4.<span Times New Roman"">    

Первоначальные данные.

5.<span Times New Roman"">    

Интерфейс программы.

6.<span Times New Roman"">    

Описание используемых переменных и процедур.

7.<span Times New Roman"">    

Возможности полученного программного продукта.<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

Постановка задачи.

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

Описание базы данных.

База данных нормализована и состоит из четырехтаблиц. Она разбита на четыре таблицы, дабы быть максимально гибкой. При этомразные таблицы могут заполняться разными людьми, а потом объединяться в однуобщую базу данных. Например, таблицу о студентах заполняют на кафедре, накоторой учиться студент, таблицу о преподавателе и предметах – на кафедре этихпреподавателей, а оценки ставит преподаватель.

Структуратаблиц

Название столбца

Описание

Таблица студентов (tt1)

T1

Номер студенческого билета

T2

Фамилия студента

T3

Имя

T4

Отчество

T5

Стипендия

Таблица предметов(tt2)

T1

Номер предмета

T2

Название предмета

T3

Номер преподавателя

T4

Часы

T5

Курс

Таблица преподавателей(tt3)

T1

Номер учителя

T2

Фамилия учителя

T3

Его имя

T4

Отчество

T5

Дата принятия преподавателя на работу

Таблица успеваемости(tt4)

T1

Код факта сдачи учебной дисциплины

T2

Оценка

T3

Дата сдачи

T4

Номер студенческого билета

T5

Код учебного предмета

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

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

<img src="/cache/referats/9215/image002.gif" align=«left» hspace=«12» v:shapes="_x0000_s1026">Изобразимсвязь между таблицами:

Связь этаосуществляется через уникальные поля каждой из таблиц. Из схемы видно, чтосвязь между преподавателями и например, студентами, осуществляется только черезтаблицу предметов. Такая организация базы данных позволяет избежатьдублирования данных. Например, если бы у нас таблица предметов была объединенас таблицей преподавателей, то мог выползти такой случай – один преподавательведет два предмета, следовательно его фамилия, имя и отчество будут повторятсяв таблице дважды. А это уже называется избыточностью данных.

Описание средств, используемых присоздании программы

Данный программный продукт работает в текстовомрежиме, периодически меняя цвет выводимых символов с помощью процедуры textcolor(). Эта процедурапринадлежит модулю crt.Помимо нее из этого модуля используется еще две процедуры: clrscr – для отчистки экрана, да gotoxy – для перехода назаданные координаты экрана.

В программе используются списки, записи, собственныемодули. Какие же преимущества дают использованные средства?

Списки позволяют рационально использовать памятькомпьютера и выделять ее динамически, не занимая ее попусту. Правда прииспользовании списков я заметил значительное увеличение кода программы посравнению со случаем, если бы мы использовали массивы и записи. Но работать сзаписями намного эффективнее, особенно при создании баз данных. При работе надданной СУБД я использовал стандартные процедуры для работы с указателями:

New()– выделение памяти для переменной

Dispose()  — Возвращение памяти в кучу.

Указатель в моем случае указывает на следующийкортеж в данной таблице.

Четыре таблицы хранятся в динамическом списке.Список заканчивается, как только следующий элемент принимает значение nil, то есть ни на что неуказывает.

Записи помогают структурировать данные, избежатьизбыточности.

Модуль я использую для предопределения в нем типов изаполнения записей, значения которых будут потом использованы в основной программе.В этих записях я храню массивы строк – строк меню. Таким образом, этот код не«захламляет» код основной программы. И добавлять новые элементы в меню намногопроще – не надо переделывать всю программу.

Первоначальные данные

Для примера я ввел некоторые данные и сохранил вфайле pasha. Вот эти данные, выведенные с помощью команды – «Сохр. в текст. файл»:

Студенты

+--------------------------------------------------------------------------+

¦ Студенческий¦       Фамилия¦           Имя¦      Отчество¦     Стипендия¦

+--------------+--------------+--------------+--------------+--------------¦

¦          3412¦       Поляков¦      Анатолий¦    Алексеевич¦         54.50¦

¦          3413¦       Старова¦        Любовь¦    Михайловна¦         17.00¦

¦          3414¦     Гриценко¦      Владимир¦    Николаевич¦          0.00¦

¦          3415¦       Котенко¦      Анатолий¦    Николаевич¦          0.00¦

¦          3416¦      Нагорный¦       Евгений¦    Васильевич¦         25.50¦

+--------------------------------------------------------------------------+

Предметы

+--------------------------------------------------------------------------+

¦ Код предмета¦      Название¦ Кодпреподав.¦   Время учебы¦          Курс¦

+--------------+--------------+--------------+--------------+--------------¦

¦          2001¦        Физика¦          4001¦            34¦             1¦

¦          2002¦         Химия¦          4002¦            68¦             1¦

¦          2003¦    Математика¦          4003¦            68¦             1¦

¦          2004¦     Философия¦          4005¦            17¦             2¦

¦          2005¦     Экономика¦          4004¦            17¦             3¦

+--------------------------------------------------------------------------+
   Преподаватели

+--------------------------------------------------------------------------+

¦ Код преподав.¦       Фамилия¦           Имя¦      Отчество¦ Начало работы¦

+--------------+--------------+--------------+--------------+--------------¦

¦          4001¦      Викулина¦     Валентина¦      Ивановна¦    01/04/1984¦

¦          4002¦     Костыркин¦          Олег¦ Владимирович¦    01/09/1997¦

¦          4003¦       Казанко¦       Виталий¦ Владимирович¦    01/09/1988¦

¦          4004¦    Позднякова¦        Любовь¦    Алексеевна¦    01/09/1998¦

¦          4005¦    Загарийчук¦         Игорь¦    Дмитриевич¦    10/05/1989¦

+--------------------------------------------------------------------------+

Оценки

+--------------------------------------------------------------------------+

¦     Код сдачи¦        Оценка¦    Дата сдачи¦ Студенческий¦  Код предмета¦

+--------------+--------------+--------------+--------------+--------------¦

¦          1001¦             5¦    10/06/1999¦          3412¦          2001¦

¦          1002¦             4¦   10/06/1999¦          3413¦          2003¦

¦          1003¦             3¦    11/06/1999¦          3414¦          2005¦

¦          1004¦             4¦    12/06/1999¦          3412¦          2003¦

¦          1005¦             5¦    12/06/1999¦          3416¦          2004¦

+--------------------------------------------------------------------------+

Эти данныебудут использоваться в примерах.

Интерфейс программы

Для того,чтоб понять, что делает программа рассмотрим ее меню:

Рис. 1

<img src="/cache/referats/9215/image004.gif" v:shapes="_x0000_s1029 _x0000_s1027 _x0000_s1028">


На рисунке1 представлено главное меню программы, которое появляется при ее запуске. Тут:

«Загрузка» — ввод базы данных изтипизированного файла.

«Сохр. в тип. файл» — сохранение базыданных в типизированном файле.

«Сохр. в текст. файл» — сохранениевыбранной таблицы в текстовой файл.

«Просмотр» — просмотр данных таблиц.

«Корректировка» — изменение записейтаблиц.

«Сортировка» — сортировка записей поопределенному полю.

«Запросы» — поиск данных в четырехтаблицах, соответствующие заданному условию.

«Выход» — выход из программы.

Рис. 2

<img src="/cache/referats/9215/image006.gif" v:shapes="_x0000_s1032 _x0000_s1030 _x0000_s1031">
Главноеменю содержит вложенные. Например на 2 рисунке показано меню, служащее длявыбора таблицы (одной из четырех). Вход в него может быть осуществлен поразному. То есть это меню вы будете проходить при просмотре данных, прикорректировке и при сохранении в текстовой файл. Это меню в комментариях ненуждается.

Рис. 3

<img src="/cache/referats/9215/image008.gif" v:shapes="_x0000_s1035 _x0000_s1033 _x0000_s1034">
При выборе «Корректировка» вы перейдете к меню, показанному на рисунке 3.

«Добавление» — добавление нового кортежав заданную с помощью предыдущего меню таблицу.

«Удаление» — удаление строки из таблицы,причем запись в таблице ищется по первому столбцу.

«Изменение» — изменение свойств существующейв базе данных строки.

Последнееподменю – это подменю запросов, на котором надо остановиться поподробнее.Рассмотрим рисунок:

Рис. 4

<img src="/cache/referats/9215/image010.gif" v:shapes="_x0000_s1038 _x0000_s1036 _x0000_s1037">
«Найти оценку» — найти оценку студента по его фамилии и предмету, который онсдавал.

«Ктопринимал экзамен» — фамилия преподавателя, принимавшего данный предмет.

«Найтиразмер стипендии» — размер стипендии выбранного студента.

«Вывод пооценке» — показать всех студентов, получивших данную оценку.

«Дата сдачиэкзамена» — найти даты, когда принимался данный предмет.

В запросахиспользуются реальные названия предметов, фамилии студентов, а не их номера(для студентов например номер соответствует номеру студенческого билета).

<img src="/cache/referats/9215/image012.jpg" v:shapes="_x0000_s1039">
Большев программе меню такого типа нет, но есть много строчного ввода, напримервыполним запрос с поиском оценок. После запроса экран будет выглядеть так(искали четверочников):

Результатзапроса отображается красным цветом.

Описаниеиспользуемых процедур.

В приложении используются как глобальные, так и локальные переменные. Кглобальным переменным относятся:

1) names,namer:string[10]– строковые переменные, которые вынесены в глобальные, чтобы сделать программуболее компактной. Иначе бы в разных процедурах надо было вводить аналогичныетипы данных, а так можно обойтись лишь парой глобальных переменных.

  2) key,kr:char– символьные переменные. Впеременной keyхранится код нажатой клавиши. А в переменной krнаходится текущее положение звездочки. Звездочка будет рассмотрена ниже.

  3) tek,i,j,izm:integer– целочисленные переменные.Из них iи j–циклические, временные переменные. Tekи izmпоказывают, какое меню активно в текущий момент. Они помогают понять программеот какого меню к какому перешли, тоесть помогает восстановитьпоследовательность действий.

  4)exist,vfile,issor:boolean – Логическиепеременные. Exist– служит для выхода из программы. Vfile–позволяет пускать одну процедуру по двум путям – либо выводить данные на экран,либо в файл. Issor– показывает меню выбора таблиц, что следующимшагом должна быть сортировка данной таблицы.

  5) nast:pered– Типизированнаяпеременная, в которой хранятся строки текущего меню. Описание типа peredимеется в модуле:

pered=record

   st:array[1..12] of string;

    m:byte;                                    {количествострок в меню}

  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 dobegin

    if i=1 thenbegin

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

    end

    else begin

      if i=2then textcolor(9)

      elsetextcolor(3);

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

    end;

  end;

end;

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

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

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

begin

  textcolor(14);

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

    elseif 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 thentek:=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, откоторого зависит, нужно ли затирать таблицу сразу или она должна повисеть наэкране, пока пользователь не ввел какие либо данные. Например при удалениизаписей из  таблицы, пользователю будетудобнее, если он будет содержание таблицы перед глазами. Например покажемсодержание таблицы студентов, которые будут <img src="/cache/referats/9215/image014.jpg" v:shapes="_x0000_s1040">
выведеныпосле нажатии на кнопку «Просмотр»:

Следующаяпроцедура — 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идетобработка запросов. Как показано на схеме взаимодействия таблиц, чтобы перейтиот студентам к преподавателям надо пройти через таблицу оценок.  Связь между таблицами осуществляется поуникальным полям. Например для нахождении оценки студента надо сначала из таблицыстудентов найти номер его студенческого, а потом найти номер сдаваемогопредмета из таблицы, а уже после этого, используя полученные номера, найти изтаблицы успеваемости полученную студентом оценку. То есть связь идет по тремтаблицам. В запросах я старался как можно больше показать возможности моей базыданных. На последнем рисунке показан один из запросов и результат еговыполнения. Возможность создания гибких запросов является важнейшей задачейпрограммирования баз данных.

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

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

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

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">

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

programDelphins;

usescrt,tips;

varnames,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;

proceduremenus(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;

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

varooutf: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;

proceduretabl1(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;

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

varpo: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;

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

vardlud:string;

  bis:boolean;

  tems,temr,tem:cc;

begin

  clrscr;

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

     if rab<>nil then begin

       tem:=rab;

       while tem^.sled<>nil dotem:=tem^.sled;

       new(tem^.sled);

       tem:=tem^.sled;

     end

     else begin

       new(rab);

       tem:=rab;

     end;

      writeln(mm[t,1]);readln(tem^.tabl.t1);

      writeln(mm[t,2]);readln(tem^.tabl.t2);

      writeln(mm[t,3]);readln(tem^.tabl.t3);

      writeln(mm[t,4]);readln(tem^.tabl.t4);

      writeln(mm[t,5]);readln(tem^.tabl.t5);

      tem^.sled:=nil;

      tem:=rab;

      izm:=0;

      nast:=menu1;

      menus(nast,nast.m);

      tek:=2; iz:=0;

    end

  else if iz=2 then begin       {Удалениезаписи}

  tems:=rab;

  tabl1(tek,rab,true);

  writeln('Введите уникальный номер');readln(dlud);

  bis:=true;

  if rab^.tabl.t1 = dlud then begin

    rab:=rab^.sled;

    bis:=false;

  end

    else begin

      while tems<>nil do begin

        if tems^.sled^.tabl.t1=dlud then begin

          tem:=tems^.sled;

          tems^.sled:=tems^.sled^.sled;

          dispose(tem);

          bis:=false;

          break;

        end;

        tems:=tems^.sled;

      end;

      end;

    if bis then writeln('Даннойзаписинеобнаруженно');

     nast:=menu1;

     menus(nast,nast.m);

     tabl1(tek,rab,false);

     izm:=0;

     tek:=2;

  end

  else if iz=3 then begin   {изменениеданных}

    tems:=rab;

    tabl1(tek,rab,true);

    writeln('Введите уникальный номер');readln(dlud);

    bis:=true;

      while tems<>nil do begin

        if tems^.tabl.t1=dlud then begin

         writeln(mm[t,1]);readln(tems^.tabl.t1);

         writeln(mm[t,2]);readln(tems^.tabl.t2);

         writeln(mm[t,3]);readln(tems^.tabl.t3);

          writeln(mm[t,4]);readln(tems^.tabl.t4);

         writeln(mm[t,5]);readln(tems^.tabl.t5);

          break;

        end;

        tems:=tems^.sled;

      end;

    if bis thenwriteln('Данной записи не обнаруженно');

     nast:=menu1;

     menus(nast,nast.m);

     tabl1(tek,rab,false);

     izm:=0; tek:=2;

  end;

end;

procedurezapros(num:integer);    {Запросы}

varstr1,str2,str3:string;

tem1,tem2:cc;

nay:boolean;

zz:tabl2;

begin

  clrscr;

  nay:=false;

  case num of

  2:begin          {Найтиоценку}

    tem1:=tt1;

    writeln('Введитефамилию'); readln(str1);

    writeln('Введите названиепредмета');readln(str2);

    while tem1<>nil do begin

      if tem1^.tabl.t2=str1 then beginstr1:=tem1^.tabl.t1; break; end;

      tem1:=tem1^.sled;

    end;

    tem1:=tt2;

    while tem1<>nil do begin

      if tem1^.tabl.t2=str2 then begin  str2:=tem1^.tabl.t1; break; end;

      tem1:=tem1^.sled;

    end;

    tem1:=tt4;

    while tem1<>nil do begin

      if ((tem1^.tabl.t5=str2) and(tem1^.tabl.t4=str1)) then begin

        textcolor(red);

        writeln('Оценкаэтогостудента-',tem1^.tabl.t2);

        nay:=true; break;

      end;

      tem1:=tem1^.sled;

    end;

  end;

  3:begin                    {Преподаватель}

    writeln('Выедите названиепредмета');

    readln(str1);

    tem1:=tt2;

    while tem1<>nil do begin

     

еще рефераты
Еще работы по программированию, базе данных