Автор работы: Пользователь скрыл имя, 10 Марта 2013 в 14:59, курсовая работа
В данной курсовой работе представлена программа Справочник студентов, написанная на языке object Pascal в среде Delphi 2007. Предназначена для ведения базы данных о студентах, поиска данных о студентах по номеру зачётной книжки, просмотра и введения изменений в базу.
Цель работы создать программный продукт, автоматизирующий ведение учёта а также быстрого поиска нужной информации.
Введение……..………………………………………………………………...5
Назначение и область применения…………………………...………………6
Постановка задачи……..………………….. …………………………………7
Описание программы………..………………………...…………………...…8
Исходные данные к работе…………………………………………………...9
Используемые методы……………………………..………………….….....10
Атрибуты объекта……..……………………………………...…………..11
Описание пользовательских типов…….………………………………..12
Использованные процедуры……………….…………………………….13
Используемые алгоритмы………………..…………………………..…..14
Руководство пользователя……………………………………………………21
Заключение…………………………………………………………………….22
Список использованных источников…………………………..…………….23
Содержание
| |||||||||||||||
АСУ КП.0797532- 01 81 01 | |||||||||||||||
Изм. |
Лист |
№ докум |
Подп. |
Дата | |||||||||||
Разраб. |
|
Программа «Справочник студентов» |
Лит. |
Лист |
Листов | ||||||||||
Пров. |
у |
3 |
37 | ||||||||||||
ТУСУР | |||||||||||||||
Н.Контр |
|
||||||||||||||
утвердил |
|||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата |
|||||||||||
1. Введение
В данной курсовой работе представлена программа Справочник студентов, написанная на языке object Pascal в среде Delphi 2007. Предназначена для ведения базы данных о студентах, поиска данных о студентах по номеру зачётной книжки, просмотра и введения изменений в базу. Цель работы создать программный продукт, автоматизирующий ведение учёта а также быстрого поиска нужной информации.
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
5 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
2. Назначение и область применения
Назначение программы:
• хранение справочных данных студентов • внесение изменений в справочник • удаление записей из справочника • поиск справочной информации
Программа предназначена для использования на персональном компьютере под управлением ОС Windows XP для учебных заведений высшего и среднего образования.
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
6 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
3. Постановка задачи
Требуется создать программу, выполняющую ведение, редактирование, удаление и поиск справочной информации. Программа должна хранить данные в типизированном файле, для поиска необходимо использовать соответствующий алгоритм, обеспечивающий наименьшее время ожидания при ведении поиска. Внесение изменений в данные должно осуществляться после соответствующего указания, для возможности исправления неверно введенных данных. Программа должна содержать окно, в котором отображаются атрибуты искомой записи, а также все остальные записи в отдельной таблице. В программе должна присутствовать информация о количестве записей.
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
7 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
4. Описание программы
Программа использует файл Students.std для хранения записей о студентах в котором находятся основные и дополнительные поля данных. Программа состоит из файлов struct.pas где описываются используемые структуры, файла Unit1.pas в котором находятся процедуры главной формы приложения и файла newtree2.pas в котором реализовано такая структура данных как АВЛ дерево.
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
8 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
4.1. Исходные данные к работе
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
9 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
4.2. Используемые методы
В данной работе были использованы методы
представления и обработки
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
10 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
4.2.1. Атрибуты объекта
Объект справочник имеет следующие атрибуты:
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
11 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
4.2.2. Описание пользовательских типов
Запись (record), называемая в некоторых языках структурой, представляет собой объединённый общим полем набор данных различных типов. Отдельные данные в записи называются полями. Записи могут использоваться для хранения информации как в оперативной памяти компьютера, а отдельные виды записей (строго ограниченные по размеру) могут использоваться для хранения информации в типизированных файлах. В данном случае использовалась для этих целей запись StudentRec.
StudentRec = record ID: longword; {номер зачетной книжки} FName: string[25]; Name:string[20]; Lname:string[25]; Index:longword;{почтовый индекс} Note:string[255]; {заметки} delme:boolean; {пометка на удаление}
Следующая запись используется для хранения элемента дерева Используются указатели на эти записи для хранения данных в оперативной памяти.
pR=^rec; rec = record id:md; mr: StudentRec; l,r:pR; h:integer; end;
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
12 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
4.2.3. Использованные процедуры
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
13 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
4.3. Используемые алгоритмы[2] [3]
Программа создания набора данных. Данная процедура рекурсивно заносит все элементы дерева в новый файл. procedure tform1.writemassfile(myr:pr); var x,y:integer; var str1: StudentRec; begin
if not myr^.mr.delme then write(mf,myr^.mr);
if myr^.r<>nil then writemassfile(myr^.r); if myr^.l<>nil then writemassfile(myr^.l); if (myr^.l=nil) and (myr^.r=nil) then dispose(myr); end;
и вызывается она из следующей процедуры
procedure TForm1.Button5Click(Sender: TObject); begin Assignfile(mf,'Students.std'); rewrite(mf); if troot<>nil then writemassfile(troot); closefile(mf); end;
Программа формирования динамической структуры данных
С помощью следующей процедуры подготавливается и вызывается программа формирования динамической структуры данных.
procedure TForm1.Button1Click(Sender: TObject); var str1: StudentRec; begin with str1 do begin id:=strtoint(edit1.Text); Lname:=edit4.Text;Index:= Note:=edit6.Text;delme:=false; end; adr(str1.id,str1); end;
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
14 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
Процедура вставки элемента в АВЛ дерево.
Алгоритм добавления вершины.Первый шаг аналогичен добавлению вершины двоичное дерево поиска. Далее производится балансировка всех предков добавленной вершины в порядке от родителя к корню. Относительно АВЛ-дерева
балансировкой вершины Используется 4 типа вращений Малое правое вращение
Большое правое вращение. Данное вращение используется тогда, когда (высота b-поддерева - высота L) = 2 и высота С <= высота R.
Малое левое вращение
Данное вращение используется тогда, когда (высота b-поддерева - высота L) = 2 и высота c-поддерева > высота R.
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
15 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
Данное вращение используется тогда, когда (высота b-поддерева — высота R) = 2 и высота С <= высота L.
procedure adr(var id0:md;var mr0:StudentRec); var st1:st; mypr,mypr1:pr; p:pointer; b:boolean; procedure addSt; begin st1^.stpr:=mypr; st1^.next:=new(st); st1^.next^.previos:=st1; st1:=st1^.next; st1^.next:=nil; end;
begin st1:=new(st); {st1:=nil;} st1^.previos:=nil;
mypr:=troot; while mypr<>nil do begin mypr1:=mypr; if id0<mypr^.id then begin addst; mypr:=mypr^.l; st1^.previos^.site:=true;end else if id0>mypr^.id then begin addst; mypr:=mypr^.r;st1^.previos^. else with mypr^.mr do begin
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
16 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||
FName:=mr0.FName; Name:=mr0.Name; Lname:=mr0.Lname; Index:=mr0.Index; Note:=mr0.Note; delme:=mr0.delme; break; end; end; mypr:=new(pr); mypr^.mr:=mr0; mypr^.id:=id0; mypr^.l:=nil;mypr^.r:=nil; mypr^.h:=0; if troot=nil then troot:=mypr else if st1^.previos^.site then mypr1^.l:=mypr else mypr1^.r:=mypr;
while st1^.previos<>nil do begin st1:=st1^.previos; mypr:=st1^.stpr; if st1^.previos=nil then troot:=rebalance(mypr) else if st1^.previos^.site then st1^.previos^.stpr^.l:= else st1^.previos^.stpr^.r:= end;
end;
Непосредственно после вставки нового элемента в дерево — ему присваивается баланс 0, и производится обратный проход в сторону корня дерева: при переходе к родителю если пришли слева — баланс увеличивается на 1, а если пришли справа — баланс уменьшается на 1. Это делается до тех пор, пока при изменении баланса он не станет нулевым. Если в процессе обновления баланс изменился на −2 — проверяется правый сын текущего узла: если его баланс равен +1 — выполняется двойной правый поворот, в противном же случае — одинарный правый поворот. Если же баланс изменяется на +2 — проверяется левый сын текущего узла: если его баланс равен −1 — выполняется двойной левый поворот, в противном случае — одинарный левый поворот.
| |||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||
17 | |||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата |
Расстановка балансов при повороте Обозначим: «Current» — узел, баланс которого равен −2 или 2: то есть тот, который нужно повернуть «Pivot» — ось вращения. +2: левый сын Current’а, −2: правый сын Current’а Если поворот осуществляется при вставке элемента, то баланс Pivot’а равен либо 1, либо −1. В таком случае после поворота балансы обоих устанавливаются равными 0. При удалении всё иначе: баланс Pivot’а может стать равным 0 (в этом легко убедиться). Приведём сводную таблицу зависимости финальных балансов от направления поворота и исходного баланса узла Pivot:
Pivot и Current — те же самые, но добавляется третий участник поворота. Обозначим его за «Bottom»: это (при двойном правом повороте) левый сын Pivot’а, а при двойном левом — правый сын Pivot’а. При данном повороте — Bottom в результате всегда приобретает баланс 0, но от его исходного баланса зависит расстановка балансов для Pivot и Current. | |||||||||||||||||||||||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||||||||||||||||||||||
18 | |||||||||||||||||||||||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | |||||||||||||||||||||||||||||||
Приведём сводную таблицу зависимости финальных балансов от направления поворота и исходного баланса узла Bottom:
Алгоритмы поворотов function rTurn(var mr:pr):pr; var r1,r3:pr; begin r3:=mr; r1:=mr^.r^.l; mr^.r^.l:=mr; mr:=mr^.r; mr^.l^.r:=r1; rturn:=mr; end; | |||||||||||||||||||||||||||||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | ||||||||||||||||||||||||||||||||||
19 | |||||||||||||||||||||||||||||||||||
Изм |
Лист |
№ докум |
Подп |
Дата |
function lturn(var mr:pr):pr; var r1,r3:pr; begin r3:=mr; r1:=mr^.l^.r; mr^.l^.r:=mr; mr:=mr^.l; mr^.r^.l:=r1; lturn:=mr; end;
function rrturn(var mr:pr):pr; var r1,r2,r3:pr; begin
r3:=mr; r1:=mr^.r^.l^.l; r2:=mr^.r^.l^.r; mr^.r^.l^.r:=mr^.r; mr^.r^.l^.l:=mr; mr:=mr^.r^.l; mr^.l^.r:=r1; mr^.r^.l:=r2; { if r3=troot then troot:=mr;} rrturn:=mr; end;
function llturn(var mr:pr):pr; var r1,r2,r3:pr; begin
r3:=mr;
r1:=mr^.l^.r^.r; r2:=mr^.l^.r^.l; mr^.l^.r^.l:=mr^.l; mr^.l^.r^.r:=mr; mr:=mr^.l^.r; mr^.r^.l:=r1; mr^.l^.r:=r2; { if r3=troot then troot:=mr;} llturn:=mr; end; | ||||||
АСУ КП. 0797532- 01 81 01 |
Лист | |||||
20 | ||||||
Изм |
Лист |
№ докум |
Подп |
Дата |
Окно программы содержит 6 текстовых полей, одну таблицу, кнопки для управления программой. При наборе номера зачетной книжки в соответствующем поле и нажатии кнопки «Найти» выдаются данные в текстовые поля. Для добавления студента необходимо заполнить поля и нажать кнопку «Добавить». В самих текстовых полях не производится непосредственной работы с записями, все изменения в них вступают в силу только после нажатия соответствующей кнопки «Изменить». Для удаления записи её необходимо пометить галочкой. Изменения записываются на диск после нажатия кнопки «Обновить файл». | ||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | |||||||
21 | ||||||||
Изм |
Лист |
№ докум |
Подп |
Дата | ||||
В Delphi 2007 даёт возможность решать почти любые задачи необходимые для современных приложений. Существует множество компонентов, использование которых позволяет не тратить время на поиск сложных решений. В данном случае не использовались готовые компоненты (сворачивания в трей, таймер). Совершенствовать программу можно следующим образом:
| ||||||||
АСУ КП. 0797532- 01 81 01 |
Лист | |||||||
22 | ||||||||
Изм |
Лист |
№ докум |
Подп |
Дата |
Список исполь зованных источников
| ||||||
АСУ КП. 0797532- 01 81 01 |
Лист | |||||
23 | ||||||
Изм |
Лист |
№ докум |
Подп |
Дата |