Разработка программного продукта "Университет"

Построение системы управления базой данных, отражающей учёт успеваемости студентов ВУЗа, с помощью языка программирования Turbo Pascal. Описание средств, используемых при создании программы, отчетность по созданной программе и руководство пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 15.12.2010
Размер файла 610,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

13

Размещено на http://www.allbest.ru/

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ МЕНЕДЖМЕНТА

Кафедра Организации и технологии защиты информации

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

по дисциплине: Вычислительная техника и программирование

на тему: Разработка программного продукта «Университет»

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

очной формы обучения

специальности ОТЗИ

I курса 11группы

Оренбург 2010

Задание на курсовую работу (проект)

Исходные данные к работе (проекту): Предметная область исследования, отраженная в теме работы, язык программирования Turbo Pascal, рекомендуемая и дополнительная литература

Перечень подлежащих к разработке в работе вопросов: Программа разрабатывается с помощью языка программирования Turbo Pascal. Построить систему управления базой данных, отражающую учёт успеваемости студентов ВУЗа. При этом надо предусмотреть, что данные могут вноситься разными людьми. Построить базу данных, которая была бы максимально гибкой. В базе данных должны содержаться сведения о студентах, оценках, преподавателях и предметах. База данных нормализована и состоит из 4х таблиц. При этом разные таблицы могут заполняться разными людьми, а потом объединяться в одну общую базу данных. Например, таблицу о студентах заполняют на кафедре, на которой учится студент, а оценки ставит преподаватель. Все данные хранятся в динамических списка. Для сохранения используются типизированные файлы.

В папке с программой лежат 4 типизированных файла (baza1,baza2,baza3,baza4), в них хранятся данные для списка студентов, преподавателей, предметов и оценок. При загрузке нужно указать общую часть их названия "baza". Обосновать применение технических средств и программного обеспечения к разработанной программе.

Аннотация

на курсовую работу Джимы Ивана Олеговича

на тему: Разработка программного продукта «Университет»

курсовая работа изложена на 33 страницах, включает 8 рисунков, 1 таблицу, 2 приложения. Для ее написания использовано 11 источников

Цель курсовой работы - создание программы для учета успеваемости студентов ВУЗа, которая будет хранить введенную информацию в базах данных. Выполнить отчетность по созданной программе, создать руководство пользователя к программе.

Оглавление

Введение

1.Анализ предметной области

1.1 Входные данные

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

1.3 Схема работы с базой данных

2.Создание программы

2.1 Описание используемых процедур и функций

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

Заключение

Список используемой литературы

Приложение А (листинг программы)

Приложение Б (код модуля Tips.pas)

Приложение В (данные, используемые в работе)

Введение

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

Существует много веских причин перевода существующей информации на компьютерную основу. Сейчас стоимость хранения информации в файлах ЭВМ дешевле, чем на бумаге. Базы данных позволяют хранить, структурировать информацию и извлекать оптимальным для пользователя образом. Использование клиент/серверных технологий позволяют сберечь значительные средства, а главное и время для получения необходимой информации, а также упрощают доступ и ведение, поскольку они основываются на комплексной обработке данных и централизации их хранения. Кроме того ЭВМ позволяет хранить любые форматы данных, текст, чертежи, данные в рукописной форме, фотографии, записи голоса и т.д. программирование база данных pascal

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

Современные СУБД обеспечивают:

- набор средств для поддержки таблиц и отношений между связанными таблицами;

- развитый пользовательский интерфейс, который позволяет вводить и модифицировать информацию, выполнять поиск и представлять информацию в графическом или текстовом режиме;

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

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

Для достижения поставленной цели необходимо решить ряд задач:

· подробно изучить базу данных программы;

· исследовать средства, которые нам понадобятся для создания программы;

· описать интерфейс полученной программы

1 Анализ предметной области

1.1 Входные данные

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

Таблица 1 - Структура таблиц программы

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

Описание

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

T1

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

T2

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

T3

Имя

T4

Отчество

T5

Стипендия

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

T1

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

T2

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

T3

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

T4

Часы

T5

Курс

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

T1

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

T2

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

T3

Его имя

T4

Отчество

T5

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

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

T1

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

T2

Оценка

T3

Дата сдачи

T4

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

T5

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

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

Изобразим связь между таблицами (см. Рисунок 1).

Рисунок 1 - Связь между таблицами, используемыми в БД

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

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

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

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

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

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

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

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

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

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

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

Для примера я ввел некоторые данные и сохранил в файле pasha. Эти данные (см. Приложение В), выведенные с помощью команды - «Сохр. в текст. файл», я буду использовать в примерах.

Рисунок 2 - Схема работы программы с БД

1.3 Схема работы с базой данных

На представленном рисунке (рисунок 2) мы наблюдаем схему обращения к БД (базе данных). При просмотре данных нам предлагается 2 варианта поиска:

1. Поиск требующихся данных непосредственно методом сортировки по столбцам для удобства пользователя. Соответственно поиск пользователь выполняет сам, программа только располагает записи в алфавитном порядке относительно выбранного столбца

2. Поиск самой программой при наличии введенных данных пользователем (фамилия, оценка, дата)

Для записи данных нам предлагается также 2 варианта:

1. Сохранение в типизированный файл (файл который открывается только в программе)

2. Сохранение в текстовый файл для текстового редактора

2 Создание программы

2.1 Описание используемых процедур и функций

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

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 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, от которого зависит, нужно ли затирать таблицу сразу или она должна повисеть на экране, пока пользователь не ввел какие либо данные. Например, при удалении записей из таблицы, пользователю будет удобнее, если он будет содержание таблицы перед глазами. Например, покажем содержание таблицы студентов, которые будут выведены после нажатия на кнопку «Просмотр» (см. Рисунок 3).

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

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

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

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

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

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

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

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

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

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

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

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

Главное меню содержит вложенные. Например, на рисунке 5 показано меню, служащее для выбора таблицы (одной из четырех). Вход в него может быть осуществлен по-разному. То есть это меню вы будете проходить при просмотре данных, при корректировке и при сохранении в текстовой файл. Это меню в комментариях не нуждается.

Рисунок 5 - Меню выбора таблицы из БД

При выборе «Корректировка» вы перейдете к меню, показанному на рисунке 6.

Рисунок 6 - Подменю «Корректировка»

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

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

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

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

Рисунок 7 - Подменю «Запросы»

«Найти оценку» - найти оценку студента по его фамилии и предмету, который он сдавал.

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

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

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

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

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

Больше в программе меню такого типа нет, но есть много строчного ввода, например, выполним запрос с поиском оценок. После запроса экран будет выглядеть так, как показано на рисунке 8(искали четверочников).

Рисунок 8 - Результат запроса поиска оценок, где результат запроса отображается красным цветом.

Заключение

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

Список используемой литературы

1. Фаронов В.В. «Turbo Pascal 7.0 Начальный курс» Издательство "ОМД Групп" 2003, 577 с.

2. Шпак Ю.А. «Turbo Pascal 7.0 на примерах» Издательство "Юниор", 2003, 498 с.

3. Потопахин В.В. «Turbo Pascal: решение сложных задач.» Издательство "БХВ-Петербург", 2006, 208 с.

4. Ускова О.Ф. Программирование на языке Паскаль. Задачник. Издательство «Юниор», 2006г., 183с.

Интернет литература и вырезки из исходных кодов процедур и функций

http://www.tp7.info/

http://www.pascalbook.ru/

http://www.cyberguru.ru/programming/pascal

http://borlpasc.narod.ru/

http://bpascal.ru/

http://www.pascal.helpov.net/

http://pascalcoder.ru/

Приложение А

Листинг программы:

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

tem:=rab;

while tem^.sled<>nil do tem:=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 then writeln('Данной записи не обнаруженно');

nast:=menu1;

menus(nast,nast.m);

tabl1(tek,rab,false);

izm:=0; tek:=2;

end;

end;

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

var str1,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 begin str1:=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

if tem1^.tabl.t2=str1 then begin str1:=tem1^.tabl.t3; break; end;

tem1:=tem1^.sled;

end;

tem1:=tt3;

while tem1<>nil do begin

if tem1^.tabl.t1=str1 then begin

textcolor(red);

writeln('Преподаватель-');

with tem1^.tabl do write(' ',t2,', ',t3,', ',t4);

nay:=true; break;

end;

tem1:=tem1^.sled;

end;

end;

4:begin {Найти размер стипендии}

writeln('Введите фамилию студента');

readln(str1);

tem1:=tt1;

while tem1<>nil do begin

if tem1^.tabl.t2=str1 then begin

textcolor(red);

writeln('Стипендия-',tem1^.tabl.t5);

nay:=true; break;

end;

tem1:=tem1^.sled;

end;

end;

5:begin {Вывод всех студентов с избранной оценкой}

writeln('Введите оценку');

readln(str1);

tem1:=tt4; tem2:=tt1;

textcolor(red);

while tem1<>nil do begin

if tem1^.tabl.t2=str1 then begin

str2:=tem1^.tabl.t4;

while tem2<>nil do begin

if tem2^.tabl.t1=str2 then begin

with tem2^.tabl do

writeln('Студент-',t3,' ',t4,' ',t2);

nay:=true;

end;

tem2:=tem2^.sled;

end;

end;

tem2:=tt1; tem1:=tem1^.sled;

end;

end;

6:begin {Найти дату сдачи предмета}

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

readln(str1);

tem1:=tt2;

while tem1<>nil do begin

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

tem1:=tem1^.sled;

end;

tem1:=tt4;

while tem1<>nil do begin

if tem1^.tabl.t5=str1 then begin

textcolor(red);

writeln('Дата сдачи-',tem1^.tabl.t3);

nay:=true;

end;

tem1:=tem1^.sled;

end;

end;

end;

textcolor(red);

if not nay then writeln('Запрос невыполним');

textcolor(3); readln;

nast:=menu1; menus(nast,nast.m);

tek:=2;

end;

procedure writetip(temr:cc);

begin

clrscr;

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

writeln('в котором хотите сохранить данные');

readln(names);

for i:=1 to 4 do begin

if temr<>nil then begin temr:=nil; end;

case i of

1:begin temr:=tt1; namer:='1'+names; end;

2:begin temr:=tt2; namer:='2'+names; end;

3:begin temr:=tt3; namer:='3'+names; end;

4:begin temr:=tt4; namer:='4'+names; end;

end;

assign(outf,namer); rewrite(outf);

while temr<>nil do begin

write(outf, temr^.tabl);

temr:=temr^.sled;

end;

CLOSE(outf);

end;

nast:=menu1; menus(nast,nast.m); tek:=2;

end;

procedure readtip(temr:cc);

var tems:cc;

begin

clrscr;

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

writeln('из которого надо взять данные'); readln(names);

for i:=1 to 4 do begin

if temr<>nil then begin temr:=nil; end;

if tems<>nil then begin tems:=nil; end;

case i of

1:begin new(tt1); temr:=tt1; namer:='1'+names; end;

2:begin new(tt2); temr:=tt2; namer:='2'+names; end;

3:begin new(tt3); temr:=tt3; namer:='3'+names; end;

4:begin new(tt4); temr:=tt4; namer:='4'+names; end;

end;

assign(outf,namer); reset(outf);

if eof(outf) then begin

case i of

1:begin dispose(tt1);tt1:=nil;end;

2:begin dispose(tt2);tt2:=nil;end;

3:begin dispose(tt3);tt3:=nil;end;

4:begin dispose(tt4);tt4:=nil;end;

end;

end

else begin

tems:=temr;

while temr<>nil do begin

if eof(outf) then break;

read(outf,temr^.tabl);

if eof(outf) then break;

new(temr^.sled);

temr:=temr^.sled;

end;

temr^.sled:=nil;

case i of

1:tt1:=tems;

2:tt2:=tems;

3:tt3:=tems;

4:tt4:=tems;

end;

end;

CLOSE(outf);

end;

nast:=menu1; menus(nast,nast.m); tek:=2;

end;

procedure main;

begin

key:=#0;

if nast.st[1]=menu1.st[1] then begin {Если меню - основное}

case tek of

2:readtip(temr);

3:writetip(temr);

4,5,7:begin

nast:=menu2; menus(nast,nast.m);

if tek=7 then issor:=true;

if tek=4 then vfile:=true

else if tek=5 then vfile:=false;

tek:=2;

end;

6:begin

nast:=menu3; menus(nast,nast.m); tek:=2;

end;

8:begin

nast:=menu4; menus(nast,nast.m); tek:=2;

end;

9: begin

exist:=true;

end;

end;

end

else if nast.st[1]=menu3.st[1] then begin {Если текущее меню-menu3}

case tek of

2,3,4:begin

izm:=tek-1;

nast:=menu2; menus(nast,nast.m); tek:=2;

end;

5:begin

nast:=menu1;

menus(nast,nast.m); tek:=2;

end;

end;

end

else if nast.st[1]=menu4.st[1] then begin {Если текущее меню-menu4}

case tek of

2,3,4,5,6:zapros(tek);

7:begin

nast:=menu1;

menus(nast,nast.m); tek:=2;

end;

end;

end

else if nast.st[1]=menu2.st[1] then begin {Если текущее меню-menu2}

if izm>0 then begin

case tek of

2:obrabotka(izm, tek-1,tt1);

3:obrabotka(izm, tek-1,tt2);

4:obrabotka(izm, tek-1,tt3);

5:obrabotka(izm, tek-1,tt4);

6:begin

nast:=menu1; menus(nast,nast.m); izm:=0; tek:=2;

end;

end;

end

else if issor=true then begin

issor:=false;

case tek of

2:sort(izm, tek-1,tt1);

3:sort(izm, tek-1,tt2);

4:sort(izm, tek-1,tt3);

5:sort(izm, tek-1,tt4);

6:begin

nast:=menu1; menus(nast,nast.m); izm:=0; tek:=2;

end;

end;

end

else begin

case tek of

2:if vfile then tabl11(tek,tt1)

else tabl1(tek,tt1,false);

3:if vfile then tabl11(tek,tt2)

else tabl1(tek,tt2,false);

4:if vfile then tabl11(tek,tt3)

else tabl1(tek,tt3,false);

5:if vfile then tabl11(tek,tt4)

else tabl1(tek,tt4,false);

6:begin

nast:=menu1; menus(nast,nast.m); izm:=0; tek:=2;

end;

end;

end;

end;

end;

begin

clrscr;

textBackground(black);

tek:=2; kr:='-';

exist:=false;

nast:=menu1; menus(nast,nast.m);

while 1>0 do begin

if keypressed then key:=readkey;

case key of

#80:ramka('+');

#72:ramka('-');

#27:exist:=true;

#13:main;

end;

if exist then exit;

krutis;

end;

end.

Приложение Б

Код модуля Tips.pas

Unit tips;

interface

type

pered=record

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

m:byte;

end;

tabl2=record

t1,t2,t3,t4,t5:string[12];

end;

cc=^tab;

tab=record

tabl:tabl2;

sled:cc;

end;

var

menu1,menu2,menu3,menu4:pered;

mm:array[1..5,1..5] of string[50];

implementation

begin

with menu1 do begin

st[1]:='БАЗА ДАННЫХ';

st[2]:='Загрузка';

st[3]:='Сохр. в тип. файл';

st[4]:='Сохр. в текст. файл';

st[5]:='Просмотр';

st[6]:='Корректировка';

st[7]:='Сортировка';

st[8]:='Запросы';

st[9]:='Выход';

m:=9;

end;

mm[1,1]:='Студенческий';

mm[1,2]:='Фамилия';

mm[1,3]:='Имя';

mm[1,4]:='Отчество';

mm[1,5]:='Стипендия';

mm[2,1]:='Код предмета';

mm[2,2]:='Название';

mm[2,3]:='Код преподав.';

mm[2,4]:='Время учебы';

mm[2,5]:='Курс';

mm[3,1]:='Код преподав.';

mm[3,2]:='Фамилия';

mm[3,3]:='Имя';

mm[3,4]:='Отчество';

mm[3,5]:='Начало работы';

mm[4,1]:='Код сдачи';

mm[4,2]:='Оценка';

mm[4,3]:='Дата сдачи';

mm[4,4]:='Студенческий';

mm[4,5]:='Код предмета';

with menu2 do begin

st[1]:='ПРОСМОТР';

st[2]:='Студенты';

st[3]:='Предметы';

st[4]:='Преподаватели';

st[5]:='Оценки';

st[6]:='Выход';

m:=6;

end;

with menu3 do begin

st[1]:='КОРРЕКТИРОВКА';

st[2]:='Добавление';

st[3]:='Удаление';

st[4]:='Изменение';

st[5]:='Выход';

m:=5;

end;

with menu4 do begin

st[1]:='ЗАПРОСЫ';

st[2]:='Найти оценку';

st[3]:='Кто принимал экзамен';

st[4]:='Найти размер стипендии';

st[5]:='Вывод по оценке';

st[6]:='Дата сдачи экзамена';

st[7]:='Выход';

m:=7;

end;

end.

Приложение В

Данные, используемые в работе:

Студенты

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

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

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

¦ 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¦

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

Размещено на Allbest.ru


Подобные документы

  • Разработка эскизного и технического проектов программы "Helpopr" (ввод, хранение и вывод данных на дисплей по запросу пользователя). Язык программирования Turbo Pascal. Описание алгоритма программы. Требования к компьютеру и программному обеспечению.

    курсовая работа [198,1 K], добавлен 03.02.2010

  • Изучение текстового режима языка программирования Turbo Pascal. Написание игры "Змейка" с помощью средств, процедур и функций языка программирование Turbo Pascal. Структурное и функциональное описание разработки. Листинг и общие примеры работы программы.

    контрольная работа [286,3 K], добавлен 10.04.2011

  • Разработка программы на языке Turbo Pascal, обеспечивающей работу пользователя в диалоговом режиме с возможностью выбора функций с помощью одноуровневого меню вертикального типа. Блок-схема и листинг программы, описание руководства пользователя.

    курсовая работа [1,5 M], добавлен 17.03.2014

  • Символьный тип данных как составляющая языка программирования: управляющие символы, лексемы и разделители. Разработка программного обеспечения для практической реализации решения задач, содержащих символьные величины языка программирования Turbo Pascal.

    курсовая работа [37,7 K], добавлен 03.05.2012

  • Проектирование программного обеспечения для создания баз данных о работах студентов университета при помощи языка Visual Basic. Разработка интерфейса пользователя. Руководство для системного программиста. Краткое описание алгоритма работы с программой.

    курсовая работа [2,6 M], добавлен 19.03.2010

  • Строгая типизация и наличие средств структурного (процедурного) программирования императивного языка Pascal. Структура программы, выражения, строки. Правила и описание типов, процедур и функций, операторов ввода - вывода, модулей и подпрограмм.

    курсовая работа [37,3 K], добавлен 28.06.2008

  • Характеристика используемой операционной системы, языка программирования. Структура программы на языке Turbo Pascal 7.1. Операторы языка Turbo Pascal. Проведение сортировки записей. Алгоритмы программы и подпрограмм. Причины возникновения ошибок.

    курсовая работа [454,1 K], добавлен 13.06.2014

  • Разработка системы управления базой данных "Структура ВУЗа". Требования к программе: функциональным характеристикам, надежности, эксплуатации, составу и параметрам технических средств. Требования к программной документации. Порядок контроля и приемки.

    курсовая работа [982,7 K], добавлен 08.06.2015

  • Комбинированный тип данных для хранения входных данных о студентах и информация, содержащаяся в полях. Пример структуры входных и выходных данных. Алгоритм работы и программный код программы по успеваемости студентов, описание используемых функций.

    курсовая работа [135,9 K], добавлен 28.12.2012

  • Разработка программного продукта "Железная дорога". Вид и классификация инструментальных средств, используемых для создания прикладного ПО. Организация взаимодействия клиентской программы с базой данных; реализация системы контроля движения поездов.

    курсовая работа [895,0 K], добавлен 11.11.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.