Справочник студентов СиАОД

Автор работы: Пользователь скрыл имя, 10 Марта 2013 в 14:59, курсовая работа

Описание работы

В данной курсовой работе представлена программа Справочник студентов, написанная на языке object Pascal в среде Delphi 2007. Предназначена для ведения базы данных о студентах, поиска данных о студентах по номеру зачётной книжки, просмотра и введения изменений в базу.
Цель работы создать программный продукт, автоматизирующий ведение учёта а также быстрого поиска нужной информации.

Содержание работы

Введение……..………………………………………………………………...5
Назначение и область применения…………………………...………………6
Постановка задачи……..………………….. …………………………………7
Описание программы………..………………………...…………………...…8
Исходные данные к работе…………………………………………………...9
Используемые методы……………………………..………………….….....10
Атрибуты объекта……..……………………………………...…………..11
Описание пользовательских типов…….………………………………..12
Использованные процедуры……………….…………………………….13
Используемые алгоритмы………………..…………………………..…..14
Руководство пользователя……………………………………………………21
Заключение…………………………………………………………………….22
Список использованных источников…………………………..…………….23

Файлы: 1 файл

Курсовая02.doc

— 248.50 Кб (Скачать файл)

 

 

Содержание

  1. Введение……..………………………………………………………………...5
  2. Назначение и область применения…………………………...………………6
  3. Постановка задачи……..………………….. …………………………………7
  4. Описание программы………..………………………...…………………...…8
    1. Исходные данные к работе…………………………………………………...9
    2. Используемые методы……………………………..………………….….....10
      1. Атрибуты объекта……..……………………………………...…………..11
      2. Описание пользовательских типов…….………………………………..12
      3. Использованные процедуры……………….…………………………….13
    3. Используемые алгоритмы………………..…………………………..…..14
  5.   Руководство пользователя……………………………………………………21
  6.   Заключение…………………………………………………………………….22
  7.   Список использованных источников…………………………..…………….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. Исходные данные к работе

 

 

  1. Индивидуальное задание на разработку программы справочника.
  2. Большое количество обрабатываемых записей
  3. Повышенные требования к скорости работы программы
  4. Частое внесение изменений
  5. Персонализация учёта
  6. Ведение дополнительной информации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         

 

                      АСУ КП. 0797532- 01 81 01

Лист

         

9

Изм

Лист

№ докум

Подп

Дата

 

 

4.2. Используемые методы

 

 

В данной работе были использованы методы представления и обработки информации в виде сбалансированного по высоте бинарного дерева поиска так называемого  АВЛ дерева, в котором для каждой его вершины высота её двух поддеревьев различается не более чем на 1 и названного так по первым буквам фамилий его изобретателей,  Г. М. Адельсона-Вельского и Е. М. Ландиса. Также были использованы рекурсивные и нерекурсивные методы  для обхода дерева при выводе данных и вставке новых данных в дерево.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         

 

                      АСУ КП. 0797532- 01 81 01

Лист

         

10

Изм

Лист

№ докум

Подп

Дата

 

4.2.1. Атрибуты объекта

 

 Объект справочник имеет следующие атрибуты:

 

  1. Номер зачётной книжки
  2. Фамилия
  3. Имя
  4. Отчество
  5. Почтовый индекс
  6. Примечание

 

 

 

         

 

                      АСУ КП. 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. Использованные процедуры

 

  1. Процедура adr для добавления нового элемента в дерево.
  2. Функции Left1 Right1 для перемещения в дереве от корня к листьям.
  3. Процедуры rturn, lturn, rrturn, llturn для осуществления одинарных и двойных поворотов при вставке элемента.
  4. Функция GetBalance для определения балансировки дерева.
  5. Функция Max для определения максимальной высоты любого из поддеревьев.
  6. Функция Rebalance для восстановления балансировки дерева.
  7. Функция FindPr для нахождения записи по номеру зачётной книжки.
  8. Функция writemassfile для записи дерева в типизированный файл.
  9. Функция writemass для обновления записей в таблице
         

 

                      АСУ КП. 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);FName:=edit2.Text;Name:=edit3.Text;

Lname:=edit4.Text;Index:=strtoint(edit5.Text);

Note:=edit6.Text;delme:=false;

end;

adr(str1.id,str1);

end;

 

         

 

                      АСУ КП. 0797532- 01 81 01

Лист

         

14

Изм

Лист

№ докум

Подп

Дата

 

Процедура вставки элемента в АВЛ  дерево.

 

Алгоритм добавления вершины.Первый шаг аналогичен добавлению вершины двоичное дерево поиска. Далее производится балансировка всех предков добавленной вершины в порядке от родителя к корню.

Относительно АВЛ-дерева балансировкой вершины называется операция, которая в случае разницы  высот левого и правого поддеревьев = 2, изменяет связи предок-потомок в поддереве данной вершины так, что разница становится <= 1, иначе ничего не меняет. Указанный результат получается вращениями поддерева данной вершины.

Используется 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^.site:=false;end

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:=rebalance(mypr)

      else st1^.previos^.stpr^.r:=rebalance(mypr);

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:

 

Направление поворота

Old Pivot.Balance

New Current.Balance

New Pivot.Balance

Правый или Левый

-1 или +1

0

0

Правый

0

-1

+1

Левый

0

+1

-1


Pivot и Current — те же самые, но добавляется третий участник поворота. Обозначим его за «Bottom»: это (при двойном правом повороте) левый сын Pivot’а, а при двойном левом — правый сын Pivot’а.

При данном повороте — Bottom в результате всегда приобретает баланс 0, но от его исходного баланса зависит расстановка балансов для Pivot и Current.

         

 

                      АСУ КП. 0797532- 01 81 01

Лист

         

18

Изм

Лист

№ докум

Подп

Дата

 

Приведём сводную таблицу  зависимости финальных балансов от направления поворота и исходного  баланса узла Bottom:

 

 

Направление

Old Bottom.Balance

New Current.Balance

New Pivot.Balance

Правый или Левый

0

0

0

Правый

+1

0

-1

Правый

-1

+1

0

Левый

+1

-1

0

Левый

-1

0

+1


Алгоритмы поворотов

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

Изм

Лист

№ докум

Подп

Дата


 

 

 

  1. Руководство пользователя

 

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

         

 

                      АСУ КП. 0797532- 01 81 01

Лист

         

21

Изм

Лист

№ докум

Подп

Дата

 

  1. Заключение

 

     В Delphi 2007 даёт возможность решать почти любые задачи необходимые для современных приложений. Существует множество компонентов, использование которых позволяет не тратить время на поиск сложных решений. В данном случае не использовались готовые компоненты (сворачивания в трей, таймер).

Совершенствовать программу  можно следующим образом:

  1. При отсутствии ярлыков в папке Links создавать их на несколько звуковых файлов, для которые будут храниться в каталоге программы в подкаталоге «Sound»
  2. Проверять на валидность не только присутствие ярлыков в расписании как реализовано в программе, но и сами ярлыки и пути к программам, на которые они указывают.
  3. В таблице расписаний сделать возможность удалять записи кнопкой Delete на клавиатуре.
  4. Добавив дополнительные поля в структуру создать возможность задавать не только конкретное время, но и общее, например 1 января, понедельник, 16:00
  5. Добавив дополнительные поля ввода в форму настроек сделать фозможность фильтра отображаемого расписания, например между датами 2009-2010 год,
         

 

                      АСУ КП. 0797532- 01 81 01

Лист

         

22

Изм

Лист

№ докум

Подп

Дата


 

 

 

Список исполь зованных источников

 

  1. Архангельский А.Я. Delphi 6 СПРАВОЧНОЕ ПОСОБИЕ ––М.: ЗАО «Издательство БИНОМ», 2001г. – 1023 с.
  2. Вирт Н. Алгоритмы и структуры данных. М.:Мир, 1989. Глава 4.5 (С. 272-286)
  3. Г. М. Адельсон-Вельский, Е. М. Ландис. Один алгоритм организации информации // Доклады АН СССР. 1962. Т. 146, № 2. C. 263–266.
         

 

                      АСУ КП. 0797532- 01 81 01

Лист

         

23

Изм

Лист

№ докум

Подп

Дата


 


Информация о работе Справочник студентов СиАОД