Линейный связанный список. Создание базы данных для отдела кадров

Страницы работы

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

`

Балтийский Государственный

Технический Университет

«ВоенМех»

имени Д.Ф. Устинова

Отчет

к лабораторной работе по информатике №5

На тему

“Линейный связанный список”

Отчет выполнил студент

Факультета «И»

Суханов Александр

Группа И433

Санкт-Петербург 2004

Лабораторная работа по информатике №5

Тема: Линейный связанный список

Цель: Ознакомиться с динамической памятью и структурой линейный список. Научиться создавать и обрабатывать линейные связанные списки.

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

  1. Загрузка из файла
  2. Ввод данных
  3. Вывод данных обо всех сотрудниках (ФИО, Факультет, Группа, Телефон)
  4. Поиск
  5. Изменение данных
  6. Удаление записи
  7. Сохранение в файл

Структуры данных:

Тип Link – указатель на элемент списка

Тип Person – элемент списка – содержит данные об одном человеке.

BGTU – Указатель на начало списка

N – Кол-во записей

Модули раздельной трансляции:

Structur.pas – Содержит основные структуры данных, используемые в программе.

Menu.pas – Отвечает за функционирование главного меню программы.

Work.pas – Включает в себя основные процедуры программы.

Основные процедуры и функции:

procedure LoadData(var n: Integer; var BGTU: Link) - Первый пункт Меню

procedure InputData(var n: Integer; var BGTU: Link) - Второй пункт меню

procedure OutputData(n: Integer; var BGTU: Link) - Третий пункт меню

procedure FindData(n: Integer; BGTU: Link) - Четвертый пункт меню

procedure ChangeData(n: Integer; var BGTU: Link) -  Пятый пункт меню

procedure DeleteData(var n: Integer; var BGTU: Link) - Шестой пункт меню

procedure SaveData(n: Integer; BGTU: Link) - Седьмой пункт меню

procedure About - Восьмой пункт меню

SafeRead (MaxLen, MinLen, Code) – Замена стандартной процедуры Readln

PrintMainFraime (PozX, PozY, Width, Height: Integer) – Рисует рамку

PrintMainMenu (Active: Integer) – Вывод пунктов меню Active – номер активного пункта

CallMenu – Начало работы с Меню

Блок-схема алгоритма:

1.  Добавление элемента в двусвязанный список

Temp:=Base,начало SpInsert,(Base=nil) or (Add^.Name<=Base^.Name),true,(Temp^.Name<Add^.Name) and 
(Temp^.Next<>Nil),Add^.Pred:=Nil
Add^.Next:=Base
Base^.Pred:=Add
Base:=Add,конец,false,true,Temp:=Temp^.Next,Add^.Name<=Temp^.Name,true,false,Add^.Next:=Temp
Add^.Pred:=Temp^.Pred
Temp^.Pred^.Next:=Add
Temp^.Pred:=Add,Temp^.Next:=Add
Add^.Next:=Nil
Add^.Pred:=Temp
 


2.  Поиск элемента в двусвязанном списке

начало SpSearch,not Found and Temp<>Nil,Found:=False,Temp^.Name=Search^.Name or
Temp^.BirthYear=Search^.BirthYear or
Temp^.Address=Search^.Address or
Temp^.Phone=Search^.Phone or
Temp^.Facultet=Search^.Facult,конец,true,false,true,Found:=True,Temp:=Temp^.Next 


3.  Удаление элемента в двусвязанном списке

начало SpDelete,Del^.Pred=Nil,true,false,Base:=Base^.Next;
Base^.Pred:=Nil;,Del^.Pred^.Next:=Del^.Next,Del^.Next=Nil,true,false,Del^.Pred^.Next:=Nil,Del^.Next^.Pred:=Del^.Pred,Dispose(Del),конец 


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

program lab5;

uses Structur, Menu, Work;

begin

n:=0;

Mark(PMain);

New(BGTU);

BGTU:=Nil;

CallMenu;

Release(PMain);

end.

unit Structur;

Interface

const Color = 15;

MainBack = 1;

SelBack = 4;

type Link = ^Person;

Person = record

Name: String [20];

BirthYear: String[4];

Address: String[50];

Phone: String [20];

Facultet: String[1];

Group: String[3];

Next: Link;

Pred: Link;

end;

var BGTU: Link;

n: Integer;

PMain: Pointer;

Implementation

end.

unit Menu;

Interface

procedure PrintMainFraime(PozX, PozY, Width, Height: Integer);

procedure PrintMainMenu(Active: Integer);

procedure CallMenu;

Implementation

uses Crt, Structur, Work;

procedure PrintMainFraime(PozX, PozY, Width, Height: Integer);

var zicl: Integer;

begin

GotoXY(PozX, PozY);

Write('г');

for zicl:=1 to Width-2 do Write('=');

Write('¬');

for zicl:=1 to Height-2 do

begin

GotoXY(PozX, PozY+zicl); Write('¦');

GotoXY(PozX+Width-1,WhereY); Write('¦');

end;

GotoXY(PozX, PozY+Height-1);

Write('L');

for zicl:=1 to Width-2 do Write('=');

Write('-');

end;

procedure PrintMainMenu(Active: Integer);

const MenuItems: array [1..9] of string[39] = (

'[01] Загрузка данных из файла          ',

'[02] Добавление записи                 ',

'[03] Вывод сведений о всех сотрудниках ',

'[04] Поиск                             ',

'[05] Изменение записи                  ',

'[06] Удаление записи                   ',

'[07] Сохранение в файл                 ',

'[08] О программе                       ',

'[09] Выход                             ');

var zicl: Integer;

begin

GotoXY(28, 1);

Writeln('Отдел кадров БГТУ "ВоенМех"');

TextBackGround(MainBack);

for zicl:=1 to 9 do

begin

GotoXY(4, zicl+3);

if zicl=Active then

begin

TextBackGround(SelBack);

Write(MenuItems[zicl]);

TextBackGround(MainBack);

end

else Write(MenuItems[zicl]);

end;

GotoXY(1, 25);

end;

procedure CallMenu;

var zicl, Active: Integer;

Quit: Boolean;

Ch: Char;

begin

TextColor(Color);

TextBackGround(MainBack);

ClrScr;

PrintMainFraime(2, 2, 78, 13);

PrintMainMenu(1);

Quit:=False;

Active:=1;

repeat

Ch:=ReadKey;

case Ord(Ch) of

27: Quit:=True;

80: begin Inc(Active); If Active=10 then Active:=1; PrintMainMenu(Active); end;

72: begin Dec(Active); If Active=0 then Active:=9; PrintMainMenu(Active); end;

13: begin

Похожие материалы

Информация о работе