Разработка приложения, использующего однофайловую базу данных на Pascal

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Министерство образования Республики Беларусь

УО «Полоцкий государственный университет»

Факультет информационных технологий

Кафедра технологий программирования

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

по курсу «Основы алгоритмизации и программирования»

«Разработка приложения, использующего однофайловую базу данных на Pascal»

Выполнил: Соболевский А. С.

Проверил: Кеда И. С.

Полоцк 2013 г.

Содержание

Введение

1. Анализ исходных данных

2. Теоретическая часть

3. Проектирование программы

4. Реализация

5. Тестирование

Выводы

Список литературы

Приложения

Введение

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

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

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

Программа будет работать с большим количеством информации. Для размещения этих данных в памяти персональных компьютеров потребуется большое количество памяти. Поэтому для обработки больших объемов информации и экономии памяти будут использоваться динамические структуры, в которых выделение памяти на данные происходит только во время выполнения самой программы и при её завершении эти данные из памяти удаляются и «не засоряют» оперативную память персонального компьютера.

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

Курсовая работа реализована на языке программирования Pascal в свободно распространяемой среде программирования Pascal ABC.

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

1. Анализ исходных данных

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

1) Имя пользователя

2) Номер компьютера

3) дата использования

4) время начала работы

5) время окончания работы

6) признак работы (в локальной сети или в Internet)

Также программа должна иметь возможность обрабатывать эти данные. Обработка должна включать в себя:

-Добавление записей

-Удаление записей

-Поиск записей по одному из полей

-Пирамидальную сортировку записей по одному из полей

-Вывод базы данных на экран

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

В программе предусмотрена процедура пирамидальной сортировки по одному из полей записи.

При решении задачи должна использоваться динамическая структура данных «Кольцевой список»

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

2. Теоретическая часть

Работа данной программы основывается на использовании динамической структуры данных — кольцевой список. При выполнении любой программы, каждая используемая в ней переменная получает свой адрес в оперативной памяти. При динамическом распределении памяти имеется возможность создавать новые, не объявленные заранее переменные, и размещать их на свободные участки в динамической области оперативной памяти. Это достигается за счет использования указателей.

Указатель — это элемент данных, представляющий собой ссылку на определённую ячейку динамической области оперативной памяти, начиная с которой записывается значение переменной. Переменные, которые размещаются в динамической области оперативной памяти с помощью указателей, называются динамическими переменными.

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

Указатель объявляется с помощью специального символа, называемого «каре» (), за которым записывается идентификатор типа динамической переменой:

Динамическая структура называется кольцевым списком или двунаправленным списком, если каждый узел её содержит два указателя: один указывает на предшествующий узел, другой — на последующий. Указатель первого элемента указывает на последний элемент и наоборот.

Рисунок — Реализация кольцевого списка

Также условие предусматривает использование пирамидальной сортировки.

Метод пирамидальной сортировки работает следующим образом:

для начала необходимо перестроить исходный массив так, чтобы он превратился в пирамиду, где каждый элемент «опирается» на два меньших. Этот процесс назвали просеиванием, потому что он очень напоминает процесс разделения некоторой смеси (камней, монет, т.п.) на фракции в соответствии с размерам частиц: на нескольких грохотах последовательно задерживаются сначала крупные, а затем все мелкие частицы.

Для того чтобы отсортировать массив методом Пирамиды, необходимо выполнить такую последовательность действий:

0-й шаг: Превратить исходный массив в пирамиду (с помощью просеивания).

1-й шаг: Для N-1 элементов, начиная с последнего, производить следующие действия:

· поменять местами очередной «рабочий» элемент с первым;

· просеять (новый) первый элемент, не затрагивая, однако, уже отсортированный хвост последовательности (элементы с i-го по N-й).

Пирамидальная сортировка хорошо работает с большими массивами, однако на маленьких примерах (N< 20) выгода от ее применения может быть не слишком очевидна. В среднем этот алгоритм имеет сложность, пропорциональную N*log N.

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

3. Проектирование программы

Сразу после запуска программа должна будет предложить выбрать одно из перечисленных ниже действий, для этого нужно будет нажать клавишу «Enter» и продолжить пользование программой.

1) Создание новой базы данных.

2) Открытие базы данных.

3) Сохранение базы данных.

4) Добавить нового пользователя.

5) Удалить пользователя из списка.

6) Произвести поиск пользователя.

7) Сортировать список пользователей.

8) Посмотреть весь список пользователей.

9) Отчет за определённый период времени.

0) Выход из программы.

Создание новой базы данных — эта команда будет выполнять создание новой базы данных на компьютере.

Открытие базы данных — эта команда будет выполнять открытие базы данных на компьютере.

Просмотреть весь список пользователей — эта команда будет выполнять вывод полного списка пользователей на монитор.

Сортировать список пользователей — эта команда будет выполнять сортировку преподавателей по одному из перечисленных элементов:

1) Сортировка пользователей по Имени (от, А до Я).

2) Сортировка пользователей по номеру (по возрастанию).

3) Сортировка пользователей по Дате (по возрастанию).

Добавить нового пользователя — эта команда будет выполнять добавление пользователя в базу данных библиотеки.

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

Удалить пользователя из списка — эта команда будет выполнять удаление пользователя по одному из перечисленных элементов:

1) Удалить из головы.

2) Удалить из конца.

3) Удалить рабочий элемент.

4) Вернуться

Произвести поиск пользователя — эта команда будет выполнять поиск пользователя по одному из перечисленных элементов:

1) Поиск пользователя по Имени.

2) Поиск пользователя по Номеру компьютера.

3) Поиск пользователя по Дате.

4) Вернуться.

Вернуться — эта команда будет выполнять возврат в предыдущее меню.

Сохранить изменения — эта команда будет выполнять сохранение изменений, совершённых за время работы программы.

Выход из программы — эта команда будет выполнять закрытие окна без сохранения изменений, совершённых за время работы программы.

Также в программе используется и стандартный модуль crt.

4. Реализация

Кольцевой список я реализовал следующим образом:

plist = list;

list = record

data: infrec;

next: plist;

pred: plist;

end;

Где поле data является записью, которая хранится в списке, а поля Next и Pred являются указателями на предыдущий и следующий элементы списка соответственно.

Запись infrec описана следующим образом:

type infrec = record

name, date, time_nach, time_end, priznak: string;

number: integer;

end;

В переменной head — хранится «голова» списка, а в переменной Tail — соответственно хранится «хвост» списка.

Поле Name имя пользователя, Number — номер компьютера пользователя, date — дату использования компьютера, time_nach — время, time_end — время окончания работы, priznak — признак работы (в локальной сети или в Internet).

Модуль Sistem

Данный модуль включает в себя следующие подпрограммы:

Function pr_kolelem (p: string)(листинг 1) — функция, производящая проверку количества пользователей;

Листинг 1 — описание процедуры pr_kolelem (p: string)

var s: string;

kol: integer;

begin

kol: =0;

for i: =1 to length (s) do begin

if s[i] in ['0'. '9'] then // Если цифра то считаем кол-во

inc (kol);

end;

if (kol < > i) and (length (s) < 11) then n: =-1 //Если кол-во не равно длине

else // строки, то помечаем н =-1

n: =strtoint (s); // иначе преобразуем строку в число и отправляем дальше

pr_kolelem: =n;

end;

Procedure prover_date (s: string;var buf: plist); (листинг 2) — процедура, производящая проверку вводимых символов в дату;

Листинг 2 — описание процедуры prover_date (s: string;var buf: plist);

Procedure prover_date (s: string;var buf: plist);

var flag: boolean;

begin

flag: =false;

repeat

if (length (s) = 10) and (s[3] = '. ') and (s[6] = '. ')

and (s[1] < '4') and (s[7] < '3') then

if ((s[4] = '1') and (s[5] < '2='))or (s[4] = '0') then

flag: =true; // Проверяем на корректность ввода даты

if not flag then // Если ввели не правильно, то предлогаем ввод заново

begin

writeln (`Введите дату в формате (дд. мм. гггг):');

readln (buf. data. date);

s: =buf. data. date; // обновляем строку введенной информацией

end;

until flag;

Procedure prover_name (s: string;var buf: plist); (листинг 3) — процедура, производящая проверку вводимых символов в имя пользователя;

Листинг 3 — описание процедуры prover_name (s: string;var buf: plist);

Procedure prover_name (s: string;var buf: plist);

var flag: boolean;

i: integer;

begin

flag: =false;

repeat

s: =buf. data. name;

if (ord (s[1])> =65) and (ord (s[1])< =90) or (ord (s[1])> =192) and (ord (s[1])< =223) then // Если первая буква заглавная flag: =true;

if flag then // то идём дальше

for i: =1 to length (s) do begin

if (length (s) <= 20) and (ord (s[i])> =97) and (ord (s[i])< =122) or (ord (s[i])> =224) and (ord (s[i])< =255) // Если латинские

or (ord (s[i])> =65) and (ord (s[i])< =90) or (ord (s[i])> =192) and (ord (s[i])< =223) then // Если русские

flag: =true

else

begin

flag: =false; // иначе выходим из подпрограммы и опускаем флаг

break;

end;

end;

if not flag then begin // если не корректно, то ввод заново

write (Введите имя состоящее из букв (Alex): ');

readln (buf. data. name);

s: =buf. data. name;

end;

until flag;

end;

procedure prover_time_nach (s: string;var buf: plist); (листинг 4) — процедура, производящая проверку вводимых символов в начальное время.

Листинг 4 — описание процедуры prover_time_nach (s: string;var buf: plist); prover_time_nach (s: string;var buf: plist);

var flag: boolean;

begin

flag: =false;

repeat

if (length (s) = 5) and (s[3] = '. ') and (s[1] < '3') and (s[4] < '7') then // Если время введено правильно то поднимаем флаг

flag: =true;

if not flag then // если введено не правильно, то ввод заново.

begin

writeln ('Введите время в формате (чч. мм)');

readln (buf. data. time_nach);

s: =buf. data. time_nach;

end;

until flag;

end;

procedure prover_number (s: string;var buf: plist); (листинг 5) — процедура, производящая проверку вводимых символов в номер компьютера.

Листинг 5 — описание процедуры prover_number (s: string;var buf: plist);

prover_number (s: string;var buf: plist var i, x, flag, code: integer;

begin

flag: =0;

repeat

for i: =1 to length (s) do

if s[i] in ['0'. '9'] then inc (flag); // если цифра то считаем

if flag < > 3 then //если не 3-х значное то, ввод заново

begin

writeln ('Введите целое 3-х значное число: ');

readln (s);

flag: =0;

end;

until flag = 3; // Если флаг = 3, то выходим из цикла

val (s, x, code); // преобразуем строку s в целочисленную переменную x

buf. data. number:=x;

end;

Procedure add_data — процедура заполнения записи. Выполнено ряд проверок при вводе данных о пользователе. Если вы введете не верные данные, то вы увидите соответствующее окно.

Procedure add_head, add_tail, add_elem — процедуры создают новый узел и заполняют информацию о пользователях с помощью процедуры add_data.

Function search_number — функция выполняет поиск по введенному номеру компьютера, возвращает позицию в списке.

Procedure print (print_one) — процедура выводит на экран список пользователей (одного пользователя).

Procedure save_in_fail — процедура сохраняет базу данных в файл.

Procedure open_fail — процедура открывает из файла, сохранённую ранее базу данных.

Procedure add_zap_head, add_zap_tail, add_zap — процедуры для добавления записи о пользователях, в уже существующий список пользователей.

Procedure search_name, search_date — процедуры поиска пользователей по одному из полей записи. Выполнено ряд проверок при вводе данных о пользователе. Если пользователя по одному из критериев не будет, то выведется на экран соответствующие сообщение.

Sort_date, sort_name, sort_number — процедуры сортировки по полям записей. Используеться пирамидальная сортировка. Для примера сортировка графически представлена в (приложении 4).

Procedure delete_head, delete_tail, delete_elem — процедуры удаления любого элемента из списка.

Function srav_date — функция возвращает количество минут содержащихся в обрабатываемой дате.

5. Тестирование программы

Для проведения тестирования запустим программу из файла main. pas.

После запуска программы на экране появляется главное меню (рис. 1).

Рисунок 1 — главное меню.

При выборе пункта «Создание новой базы данных» запускается следующее меню (рис. 2.)

Рисунок 2 — Создание новой базы данных.

Если при ввод данных присутствуют неверные символы, то программа выдаёт сообщение об ошибке до тех пор, пока не будут введены верные символы (рис. 2)

При выборе пункта «Открытие базы данных» запускается следующее меню (рис. 3.)

Рисунок 3 — открытие базы данных.

При попытке открыть файл которого не существует, то программа выдаёт сообщение об ошибке (рис. 3).

При выборе пункта «Сортировать список пользователей» запускается следующее меню (рис. 5).

Рисунок 5 — Меню Сортировки.

При выборе пункта «Добавить нового пользователя «запускается следующие меню (рис. 6).

Рисунок 6 — Добавление данных о пользователе

При выборе пункта «Удалить пользователя из списка «запускается следующие меню (рис. 7).

Рисунок 7 — Удалить пользователя из списка

При выборе пункта «Произвести поиск пользователя» запускается следующие меню (рис. 8).

Рисунок 8 — Меню поиска пользователя

Если пользователи с определенными данными не будут обнаружены в базе данных, то выведется сообщение (рис. 9).

Рисунок 9 — Сообщение о не нахождении пользователя в базе данных

Тестирование программы завершено успешно.

Выводы

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

В процессе работы были закреплены основные навыки работы с динамическими структурами данных, обработка строк, процедурное программирование, модульное программирование, было освоено умение работать со стандартным модулем crt.

Удалось реализовать программу, которая способна управлять базой пользователей компьютеров, добавлять и удалять их, которая реагирует на ошибки. Кроме того, она удобна в работе и имеет понятный интерфейс.

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

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

1. В. С. Фаронов: «Turbo Pascal 7. 0(начальный курс)», МВТУ, 1992.

2. М. С. Долинский: «Алгоритмизация и программирование на Turbo Pascal», Спб.: Питер- 2005.

3. В. П. Грибанов: «Основы алгоритмизации и программирования», Москва, 2004.

4. И. А. Шпак: «Иллюстрированный самоучитель по Turbo Pascal», Москва, 2002.

Приложения

Приложение 1

Блок-схема записи данных в голову списка.

Приложение 2

Блок-схема сохранения в файл базы данных.

Приложение 3

Блок-схема пирамидальной сортировки. В данном случае сортировка по номеру компьютера (по возрастанию).

ПоказатьСвернуть
Заполнить форму текущей работой