Автоматизация работы с базами данных

Разработка программы средствами Turbo Pascal для автоматизации процесса работы с небольшими базами данных. Состав используемого аппаратного обеспечения. Общая схема структуры языка программирования Паскаля и приемы процедурного программирования.

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

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

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

Таблица 1. Вводимы данные

Fio

num

Иванов Иван

50

Сидоров Сидор

33

Петров Петр

100

Иванова Иванна

25

Сидорова Сидора

44

Петрова Петра

75

Баночкин Федор

77

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

Рис. 5. Двоичное дерево поиска, полученное в результате ввода указанных данных

По результатам ввода было построено следующее дерево (о структуре дерево можно судить по порядку последующего считывания из файла при повторном запуске программы).

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

Пользовательский модуль - файл Trees.pas

{Модуль работы с двоичным деревом поиска - динамической структурой}

Unit trees;

{Интерфейсная часть модуля - описание объектов, доступных

для программы, к которой подключается модуль}

INTERFACE

Uses

Crt; {подключение библиотеки Crt для работы с консолью}

Type

{Описание типа компоненты дерева и указателя на компоненту

стандартное описание для динамических структур}

pTree = ^Tree; {указатель на компоненту}

Tree = record {описание компоненты с полями:}

fio : string[40]; {ФИО}

num : word; {табельный номер}

pol : char; {пол}

dat : string[10]; {дата рождение}

dol : string[40]; {должность}

left, right : pTree {указатели на поддеревья}

end; {размер - SizeOf(Tree) = 111 Bt}

{Описание типа компоненты типизированного файла полностью

соответствует структуре компоненты дерева за исключением

указателей на поддеревья для связи в структуре}

CompF = record

fio : string[40];

num : word;

pol : char;

dat : string[10];

dol : string[40];

end;

{подпрограммы, доступные из модуля}

Procedure print(v : pTree);

Procedure add(var x : CompF; var p : pTree);

Procedure del(x : word; var p : pTree);

{Часть реализации модуля - содержит описание подпрограмм

как объявленных в интерфейсной части так и для внутреннего

пользования (локальные в рамках модуля)}

IMPLEMENTATION

{Процедура вывода содержимого компоненты двоичного дерева поиска.}

procedure print(v : pTree);

{формальный параметр - указатель на компоненту}

begin {для организации паузы}

if WhereY > 20 then {анализируем текущее строку}

begin {расположения курсора, если > 20}

readkey; {организуем ожидание нажатия любой клавиши}

clrscr {и очищаем экран}

end;

with v^ do {организуем вывод на экран}

begin

writeln('Фамилия: ',fio);

writeln('табельный номер:',num);

writeln('Пол: ',pol);

writeln('Дата рождения: ',dat);

writeln('Должлость: ',dol);

writeln

end;

end;

{Рекурсивная процедура добавления компоненты в двоичное дерево поиска.}

{Метод - поиск по дереву поиска по ключу и добавление компоненты-листа.}

Procedure add(var x : CompF; var p : pTree);

{формальные параметры: запись с данными о работнике и указатель на корень}

begin

if p = nil then {указатель = nil}

begin {добавление комоненты - листа}

new(p); {заказ области в динамической памяти}

Move(x,p^,SizeOf(CompF)); {копирование значений полей в компоненту}

with p^ do {компоненты - лист => нет поддеревьев}

begin

left := nil;

right := nil;

end;

end

else {указатель <> nil}

if x.num < p^.num then {табельный номер<}

add(x,p^.left) {рекурсивный вызов для левого поддерева}

else

if x.num > p^.num then {табельный номер>}

add(x,p^.right) {рекурсивный вызов для правого поддерева}

else {табельные номера одинаковы - ошибка}

begin

writeln(#13#10'Ошибка! Такой номер уже есть!');

readkey

end

end;

{Рекурсивная процедура удаления компоненты из двоичного дерева поиска.}

{Метод - поиска по дереву узла; если лист или имеет одно поддерево, то

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

поддереве крайнего правого узла, его удаление с предварительной записью

его данных в удаляемый узел}

Procedure del(x : word; var p : pTree);

{формальные параметры: табельный номер и указатель на корень}

var

{локальные переменные:}

q : pTree; {указатель на удаляемую вершину}

d : char; {для организации запроса удаления}

{рекурсивная локальная процедура для организации поиска крайнего

правого узла в левом поддереве в случае удаления узла с двумя

поддеревьями}

procedure delt(var r : pTree);

{формальный параметр: указатель на компоненту}

begin

if r^.right <> nil then {движение в правые поддеревья}

delt(r^.right)

else

begin {крайний правый узел}

move(r^,q^,SizeOf(CompF)); {копируем данные в удаляемый}

q := r; {запоминаем для высвобождения}

r := r^.left {сохраняем связь с левым поддеревом}

end

end;

begin

if p <> nil then {уазатель на компоненту}

if x < p^.num then {табельный номер< чем у текущей}

del(x,p^.left) {рекурс. вызов комп. в левом поддереве}

else

if x > p^.num then {табельный номер< чем у текущей}

del(x,p^.right) {рекурс. вызов комп. в правом поддереве}

else

begin {компонента найдена}

print(p); {вывод содержимого компоненты}

writeln('Удалить (Y/Д)? ');{запрос на удаление}

d := readkey;

if not (d in ['Y','y','Н','н','L','l','Д','д']) then

begin

writeln('Отмена удаления...');

exit;

end;

q := p; {запоминаем через указатель компоненту}

if q^.right = nil then {если нет правого поддерева}

p := q^.left {исключаем из связи - связь на левое}

else

if q^.left = nil then {если нет левого поддерева}

p := q^.right {исключаем из связи - связь на правое}

else

delt(q^.left); {два поддерева - поиск в левом}

dispose(q); {высвобождение динамической памяти }

writeln('Удален...');

end

else {указатель = nil}

writeln('Введенный табельный номер не найден...');

end;

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

до основной программы в программе, к которой подключен модуль}

BEGIN

END.

Основная программа - файл Rab.pas

{Директива $M определяет параметры распределения памяти}

{$M 65520,111000,655360}

{Подключение библиотек:

Crt - стандартная для работы с консолью,

Trees - пользовательский модуль для работы с двоичным деревом поиска.}

Uses crt,trees;

Var

{Описание глобальных переменных}

root : pTree; {указатель на корень дерева}

f,fs : file of CompF; {файловые переменные для типизированного файла}

count : longint; {для хранения количества компонент}

c : char; {для организации диалога}

st : CompF; {для чтения файла, ввода, фактический пар.}

pClear : pointer;{бестиповый указ. для запоминания состояния дин.пам.}

{Процедура добавления работника}

Procedure AddRab;

var

z : integer; {для сохранения расположения курсора}

begin

inc(count); {увеличиваем счетчик на 1}

repeat

clrscr; {очистка экрана}

with st do {оператор присоединения}

begin {ввод данных}

write('Введите ФИО: '); readln(fio);

{$I-} {программный анализ ошибки ввода}

repeat

write('Введите табельный номер: '); readln(num);

until IOResult = 0;

{$I+}

repeat

write('Введите пол: ');

pol := readkey;

writeln(pol);

until pol in ['Ж','ж','М','м'];

write('Введите дату рождения: '); readln(dat);

write('Должность: '); readln(dol);

end;

z := WhereY; {организация запроса на подтверждения ввода}

TextColor(Green);

gotoxy(15,25);

write('Занести в базу (Y/Д - да, любая клавиша - нет, ESC - отмена)?');

TextColor(LightGray);

gotoxy(1,z);

c := readkey;

until c in ['Y','y','Н','н','L','l','Д','д',#27];

if c <> #27 then

add(st,root) {вызов процедуры добавления в дерево}

else

dec(count); {отмена добавления - уменьшаем счетчик на 1}

end;

{Процедура удаления работника}

Procedure DelRab;

var

z : word; {для указания табельного номера}

begin

clrscr;

{$I-}

repeat

write('Введите табельный номер: ');

readln(z);

until IOResult = 0;

{$I+}

del(z,root); {вызов процедуры удаления компоненты из дерева}

readkey

end;

{Процедура организации поиска и отбора работников по критерию}

{Метод - обход дерева слева-направо с анализом критерия поиска

и, в случае необходимости, вывод на экран}

procedure SearchRab;

var

tmps : string; {для указания ключа поиска}

tmpc : word; {для указания ключа поиска}

{Локальная рекурсивная процедура обхода дерева слева-направо}

{при проверке критерия используются глобальные по отношению

к процедуре переменные с, tmps и tmpc}

Procedure Search(t : pTree);

begin

if t <> nil then

begin

Search(t^.left); {движение в левое поддерево}

case c of {проверка ключа поиска}

'1' : if pos(tmps,t^.fio) <> 0 then Print(t);

'2' : if pos(tmps,t^.dol) <> 0 then Print(t);

'3' : if tmpc = t^.num then Print(t);

end;

Search(t^.right); {движение в правое поддерево}

end

end;

begin

clrscr;

writeln('Поиск по:'); {выбор критерия поиска}

writeln(' 1. фамилии');

writeln(' 2. должности');

writeln(' 3. табельному номеру');

writeln('Отмена - любая клавиша.');

c := readkey;

write('Введите ключ поиска: ');

{$I-}

case c of

'1','2' : readln(tmps); {ввод ключа поиска}

'3' : readln(tmpc); {ввод ключа поиска}

else

exit

end;

writeln;

if IOResult <> 0 then

writeln('Неверный ввод.')

else

begin

Search(root); {вызов процедуры обхода}

writeln('Поиск окончен...');

end;

{$I+}

readkey

end;

{Рекурсивная процедура вывода всех работников в порядке табельных номеров}

{Метод - обход дерева слева-направо с вызовом процедуры вывода print}

procedure PrintRab(r : pTree);

begin

if r <> nil then

begin

PrintRab(r^.left); {движение в левое поддерево}

Print(r); {вызов процедуры вывода компоненты}

PrintRab(r^.right); {движение в правое поддерево}

end

end;

{Процедура меню - организация простого интерфейса пользователя}

procedure Menu;

begin

repeat

clrscr;

writeln('1. Добавление работника');

writeln('2. Удаление работника ');

writeln('3. Поиск работника по фамилии, табельному номеру, должности');

writeln('4. Вывод работника');

writeln('5. Выход');

gotoxy(44,25);

write('Выберите необходимое действие...');

c := readkey;

case c of

'1' : AddRab;

'2' : DelRab;

'3' : SearchRab;

'4' : begin

clrscr;

if root = nil then

writeln('База пуста...')

else

PrintRab(root);

readkey

end;

'5',#27 : break;

else

begin

gotoxy(44,25);

write('Неверный выбор. Введите от 1 до 5.');

end;

end;

until false;

end;

{Процедура загрузки данных из файла при запуске программы}

Procedure LoadOfFile;

begin

assign(f,'Rab.dat'); {связь файловой переменной с физическим файлом}

{$I-} {отключение реакции на ошибки ввода-вывода}

reset(f); {открытия файла на чтение/запись}

if IOresult <> 0 then {ошибка открытия}

begin

writeln('Файл с данными не найден.',#13#10,

'Файл Rab.dat будет создан...',#13#10);

rewrite(f); {открытие файла на запись и создание его}

end

else {файл открыт}

while not eof(f) do {пока не конец файла}

begin

count := filepos(f); {запоминаем номер текущей компоненты файла}

read(f,st); {считываем компоненту}

Writeln('Считан из файла - ',count,'. ',st.fio);

add(st,root); {вызов процедура добавления в дерево}

end;

if IOResult <> 0 then {ошибка чтения файла}

writeln('Ошибка чтения файла...')

else {чтение успешно}

begin

close(f); {закрываем файл}

writeln('Всего записей: ',count+1);

gotoxy(60,25);

Write('Чтение окончено...');

end; {включение реакции на ошибки ввода-вывода}

{$I+}

readkey;

end;

{Рекурсивная процедура записи компонент дерева в файл}

{Метод - обход дерева сверху-вниз с организацией записи

компоненты дерева в файл}

Procedure SaveToFile(t : pTree);

begin

if t <> nil then

begin

move(t^,st,SizeOf(CompF)); {копируем содержимое компоненты дерева в st}

{$I-}

write(f,st); {запись компоненты в файл}

Writeln('Записан в файл - ',st.fio);

if IOResult <> 0 then {ошибка записи}

begin

writeln(#13#10,'Ошибка записи в файл!');

exit;

end;

{$I+}

SaveToFile(t^.left); {движение в левое поддерево}

SaveToFile(t^.right); {движение в правое поддерево}

end;

end;

{Тело программы}

begin

clrscr; {очистка экрана}

mark(pClear);{запоминаем состояние динамической памяти}

root := nil; {дерево пустое - корень = nil}

count := -1; {нет ни одного работника}

{Чтение данных из файла - процедура LoadOfFile}

LoadOfFile;

{Вызов процедуры меню - работа пользователя}

Menu;

{Окончание работы - организация сохранения данных}

clrscr;

{$I-}

assign(f,'Rab.tmp'); {связываем с резервной копией}

erase(f); {удаляем файл}

if IOResult <> 0 then writeln('Ошибка удаления - Rab.tmp.');

assign(f,'Rab.dat'); {связываем с файлом данных с прошлого сеанса}

rename(f,'Rab.tmp'); {переименовываем - резервная копия}

if IOResult <> 0 then writeln('Ошибка создания копии - Rab.tmp.');

{$I+}

{Сохраняем данные в файл}

assign(f,'Rab.dat');

rewrite(f); {открываем на перезапись}

SaveToFile(root); {вызов процедуры записи в файл}

close(f); {закрываем файл - запись окончена}

gotoxy(60,25);

write('Запись окончена...');

release(pClear);{очищаем динамическую память от результатов работы}

readkey

end.

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

1. Вирт Никлаус. Алгоритмы и структуры данных: Пер. с англ. - 2-е изд., испр. - СПб.: Невский Диалект, 2001. - 352 с.: ил.

2. Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0. - 4-е изд., испр. и дополн. - М.: «ДИАЛОГ-МИФИ», 1998. - 367 с.

3. Зуев Е.А. Turbo Pascal. Практическое программирование. - М.: «Издательство ПРИОР», 1999. - 336 с.

4. Климова Л.М. Практическое программирование. Решение типовых задач. - М.: КУДИЦ-ОБРАЗ, 2000. - 496 с., ил.

5. Ляхович В.Ф. Информатика: Пособие для учащихся 10-11 кл. общеобразоват. учреждений. - М.: Просвещение, 1998. - 352 с.

6. Фаронов В.В. Turbo Pascal 7.0. Начальный курс. Учебное пособие. - М.: «Нолидж», 2001

7. Фаронов В.В. Turbo Pascal 7.0. Практика программирования. Учебное пособие. - М.: «Нолидж», 2001

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


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

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

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

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

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

  • Описание возможностей языка программирования Turbo Pascal. Написание программы создания файлов с прямым доступом, которая также будет обрабатывать наборы данных с определенными полями и ограничениями. Контрольный пример работы поисковой программы.

    курсовая работа [563,6 K], добавлен 22.01.2016

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

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

  • При помощи Turbo Pascal достаточно не просто создать программу, которая бы демонстрировала работу с базами данных. Для этого существует огромное количество специализированных программ. Основа и сущность формирования базы данных при помощи Turbo Pascal.

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

  • Иерархические, сетевые и реляционные модели данных. Различия между OLTP и OLAP системами. Обзор существующих систем управления базами данных. Основные приемы работы с MS Access. Система защиты базы данных, иерархия объектов. Язык программирования SQL.

    курс лекций [1,3 M], добавлен 16.12.2010

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

    дипломная работа [2,4 M], добавлен 02.06.2013

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

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

  • Устройства внешней памяти. Система управления базами данных. Создание, ведение и совместное использование баз данных многими пользователями. Понятие системы программирования. Страницы доступа к данным. Макросы и модули. Монопольный режим работы.

    реферат [27,5 K], добавлен 10.01.2011

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

    презентация [6,8 K], добавлен 14.10.2013

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