Создание приложения "База данных кинологов"

Тип работы:
Дипломная
Предмет:
Программирование


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

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

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

Введение

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

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

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

программа информация файл кинолог

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

Рис. 1.1 «Интерфейс программы»

Данное приложение включает в себя одну форму. На рис. 1.1 представлен начальный интерфейс приложения сразу после открытия.

Рис. 1.2 «Действия с файлом»

Рис. 1.3 «Действия с файлом»

1.1 Операции с файлом

Нажав на кнопку File в левом верхнем углу программы позволяет открыть уже имеющийся ранее банк данных, который загрузится в программу для дальнейших действий с ним «Open…», можно сохранить преобразованный файл, причем можно выбрать, в какую папку и с каким названием этот документ сохранится «Save As…», закрыть программу «Exit»; (Рис. 1.2 «Действия с файлом»).

1.2 Операции со списком

Нажав на кнопку Edit в левом верхнем углу программы позволяет внести в список нового человека с описанием его собаки «Add», изменить данные «Change», и удалить текущую запись из базы данных «Delete». (Рис. 1.3 «Действия с файлом»).

Так же существуют кнопки быстрого пользования программой, такие как: «ButtonLoad» позволяющая осуществить быструю загрузку файла, «ButtonSaveAs» позволяющая осуществить быстрое сохранение файла, «ButtonAdd» или нажав кнопку «Insert» позволяющую осуществить быстрое добавление нового клиента, «ButtonEdit» позволяющая осуществить быстрое редактирование данных и «ButtonDel» позволяющая быстро удалить данные, так же можно удалить данные нажав на кнопку «Delete». (Рис. 1.4. «Действия с файлом»)

Рис. 1.4 «Действия с файлом»

Для начала заполнения банка данных необходимо нажать кнопку «Edit», в которой выбрать функцию «Add», или можно нажать на клавишу быстрого пользования «ButtonAdd» или «Insert» которые позволят внести нового человека с описанием его собаки. (Рис. 1.5. «Действия со списком»).

Рис. 1.5 «Действия со списком»

После заполнения фамилии и имени владельца собаки, клички собаки и породы, можно выбрать день, месяц и год рождения собаки. (Рис. 1.6. «Действия со списком» и Рис. 1.7. «Действия со списком»).

Рис. 1.6 «Действия со списком»

Рис. 1.7 «Действия со списком»

При заполнении списка данных можно переключаться на следующую строчку ввода данных с помощью клавиши «Tab»; Также программу можно разворачивать и сворачивать для удобства пользователя, программа обладает прокруткой по вертикали и горизонтали. (Рис. 1.8 «Действия со списком» и Рис. 1.9. «Действия со списком»).

Рис. 1.8 «Действия со списком»

Рис. 1.9 «Действия со списком»

После заполнения данных, можно сохранить эти данные нажав на кнопку «ОК» или же отменить ввод данных и выйти в основное меню программы нажав кнопку «Cancel» (Рис. 1. 10 «Действия со списком»)

Рис. 1. 10 «Действия со списком»

1.3 Вывод по критериям

Для определенного поиска владельца и его собаки существует вывод по критериям, который позволяет быстро найти записи по заданным параметрам. Кликнув в «окошко» «Фамилия» можно осуществить поиск владельца собаки по его фамилии, даже набрав первую букву его фамилии поиск станет значительно проще, потому что программа выдаст фамилии начинающиеся именно с этой буквы. То же самое можно проделать c «окошками» «Кличка» собаки и «Порода» собаки. (Рис. 1. 11 «Вывод по критериям» и Рис. 1. 12 «Вывод по критериям»)

Рис. 1. 11 «Вывод по критериям»

Рис. 1. 12 «Вывод по критериям»

Глава 2. Руководство программисту

2.1 Описание структуры данных

Записи объединяют фиксированное число элементов данных. Используются поля, отдельные элементы записи, имеющие имена. Каждое имя поля должно быть уникально. Чтобы объединить данные разных типов, используется вариативная запись. Она имеет конечное число полей, однако предоставляет возможность по-разному использовать области памяти, занимаемые полями. Все варианты записи располагаются в одном месте памяти и позволяют обращаться к ним по различным именам. Каждый вариант обозначается минимум одной константой. Все константы должны быть порядковыми и совместимыми по типу с меткой поля. Для обращения к конкретному полю необходимо указывать имя записи и имя поля, разделенные точкой, т. е. имя поля является составным. С полем можно выполнять все операции, которые допускаются для отдельной переменной этого же типа.

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

PKino = ^TKino; // описание типизированного указателя

elem = record // объявление переменной типа record

next, previous: ptr; // указатели на предыдущую и следующую записи

s_fio, s_age, s_address, s_doctor: string[50]; // объявление записей, не зависящие от вариативной записи

case ch: char of // вариантная часть

'y': (s_group, s_ill: string[30]; s_srok: TDate); // объявление записей, если есть инвалидность

'n': (s_comp: string[30]; s_reg, s_dog: TDate); // объявление записей, если нет инвалидности

var

Npos: integer; // определение типа указателя

NoteFl: file of elem; // определение типа файла

head, pcur, result, p: Ptr; // объявление указателей на начало файла, текущую запись, последнюю запись, запись

Form1: TForm1;

В программе используются связные списки -- структура данных, состоящая из узлов, каждый из которых содержит как собственно данные, так и одну или две ссылки («связки») на следующий и/или предыдущий узел списка. В данной программе мы используем двунаправленный список, непременным условием которого является наличие взаимных ссылок двух соседних элементов друг на друга, поэтому в запись мы добавляем 2 дополнительных поля.

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

2.2 Описание интерфейса приложения

Для обозначения полей используется Label

lbl_fio: TLabel; // ФИО пациента

lbl_age: TLabel; // возраст пациента

lbl_address: TLabel; // адрес пациента

lbl_doctor: TLabel; //ФИО лечащего доктора

lbl_group: TLabel; // группа инвалидности

lbl_ill: TLabel; // заболевание

lbl_srok: TLabel; // срок инвалидности (в формате даты)

lbl_comp: TLabel; // страховая компания

lbl_reg: TLabel; // дата регистрации в страховой компании (в формате даты)

lbl_dog: TLabel; // дата окончания договора со страховой компанией (в формате даты)

• Для ввода необходимых данных предусмотрены поля ввода

• Для заполнения списка:

edt_fio: TEdit; // ФИО пациента

edt_age: TEdit; // возраст пациента

edt_address: TEdit; // адрес пациента

edt_doctor: TEdit; // ФИО лечащего доктора

edt_group: TEdit; // группа инвалидности

edt_ill: TEdit; // заболевание

edt_srok: TEdit; // срок инвалидности (в формате даты)

edt_comp: TEdit; // страховая компания

edt_reg: TEdit; // дата регистрации в страховой компании (в формате даты)

edt_dog: TEdit; // дата окончания договора со страховой компанией (в формате даты)

• Для отбора по критериям:

edt_kr_doc: TEdit; // ввод искомого доктора

edt_kr_group: TEdit; // ввод искомой группы инвалидности

edt_kr_ill: TEdit; // ввод искомого заболевания

edt_kr_comp: TEdit; // ввод искомой страховой компании

• Операции выполняются с помощью кнопок Button:

• Для заполнения списка и работы с файлом

btnNew: TButton; // Новый файл

btn2: TButton; // Сохранить

btn3: TButton; // Открыть файл

btnAdd_s: TButton; // Добавить

btnInsert_s: TButton; //Вставить

btnDelete_s: TButton; //Удалить

btnBrowse_s: TButton; //Просмотр

btnFirst_s: TSpeedButton; //Первый элемент списка

btnPrevious_s: TSpeedButton; // Предыдущий элемент списка

btnNext_s: TSpeedButton; // Следующий элемент списка

btnLast_s: TSpeedButton; // Последний элемент списка

btn_clear: TButton; // Очистить поля ввода

• Для отбора по критериям:

btn_kr_doc: TButton; // отбор по доктору

btn_kr_group: TButton; // отбор по группе инвалидности

btn_kr_ill: TButton; // отбор по заболеванию

btn_kr_comp: TButton; // отбор по страховой компании

btn_kr_dog: TButton; // отбор по сроку договора

btn_kr_srok: TButton; // отбор по сроку инвалидности

• Для вывода данных используется ListBox

lst1: ListBox

• Для выбора нужного документа для сохранения или загрузки используются инструменты OpenDialog и SaveDialog:

SaveDialog1: TSaveDialog; //Для сохранения

OpenDialog1: TOpenDialog; //Для загрузки

2.3 Описание процедур

procedure ButtonAddClick — процедура для добавления записей

procedure CIRec — процедура очистки полей ввода;

procedure Showw — процедура, которая помогает показать текущий элемент списка;

procedure SWrec — процедура, сохраняющая изменения в списке после добавления новых записей;

procedure TForm1. rg1Click — процедура вариантной части, которая отмечает, какие поля ввода должны быть включены для определенного варианта;

procedure TForm1. btnAdd_sClick — процедура добавления в список новой записи в конец списка;

procedure TForm1. btnInsert_sClick — процедура вставки в список новой записи после текущей записи;

procedure TForm1. btnDelete_sClick — процедура удаления текущей записи из списка;

procedure TForm1. btnBrowse_sClick — процедура вывода на ListBox текущей базы данных;

procedure TForm1. btnFirst_sClick — процедура для перехода к первому элементу списка;

procedure TForm1. btnLast_sClick — процедура для перехода к последнему элементу списка;

procedure TForm1. btnPrevious_sClick — процедура для перехода к предыдущему элементу списка;

procedure TForm1. btnNext_sClick — процедура для перехода к следующему элементу списка;

procedure TForm1. btnNewClick — процедура создания нового файла для записи;

procedure TForm1. btn2Click — процедура сохранения файла;

procedure TForm1. btn3Click — процедура открытия файла;

procedure TForm1. btn_kr_docClick — процедура для отбора и вывода на экран пациентов с одинаковым доктором;

procedure TForm1. btn_kr_groupClick — процедура для отбора и вывода на экран пациентов с одинаковой группой инвалидности;

procedure TForm1. btn_kr_illClick — процедура для отбора и вывода на экран пациентов с одинаковым заболеванием;

procedure TForm1. btn_kr_compClick — процедура для отбора и вывода на экран пациентов с одинаковой страховой компанией;

procedure TForm1. btn_kr_dogClick — процедура для отбора и вывода на экран пациентов с истекшим сроком регистрации в страховой компании;

procedure TForm1. btn_kr_srokClick — процедура для отбора и вывода на экран пациентов с истекшим сроком инвалидности;

procedure TForm1. btn_clearClick — процедура очистки ввода полей.

Глава 3. Демонстрация работы приложения

3.1 Демонстрация ввода записей в базу данных

Рис. 3.1 «Добавление записей в базу данных»

Рис. 3.2 «Добавление записей в базу данных «

В поля вводятся необходимые данные (см. рис. 3. 2), далее через кнопку «OK» данные добавляются в базу данных (см. рис. 3. 2).

3.2 Демонстрация удаления записи из базы данных

Рис. 3.3 «Удаление записи из списка»

Рис. 3.4. «Удаление текущей записи»

Выберите запись, которую хотите удалить, затем нажмите кнопку «ButtonDel» или нажав клавишу «Delete». (Рис 3.4. «Удаление текущей записи»).

3.3 Демонстрация перехода к первому элементу списка

Рис. 3.5. «Переход к первому элементу списка»

3.4 Демонстрация перехода к последнему элементу списка

Рис. 3.6. «Переход к последнему элементу списка»

3.5 Демонстрация перехода по списку данных

Рис. 3.7. «Переход по списку данных»

Рис. 3.8. «Переход по списку данных»

Находясь на любом элементе списка, можно перемещаться по данным с помощью стрелочек на клавиатуре, чтобы посмотреть нужные данные достаточно нажать на клавишу «пробел».

3.6 Демонстрация редактирования данных

Рис. 3.9. «Редактирование данных»

Выбираем данные, которые нужно редактировать, нажимаем на кнопку «ButtonEdit», после этого можно будет исправить эти данные. Редактированные данные сохраняются после нажатия на клавишу «OK».

3.7 Демонстрация сохранения файла

Рис. 3. 10. «Сохранение»

Рис. 3. 11. «Сохранение»

Сохранить базу данных можно двумя способами: 1) Нажать на кнопку «File» и выбрать функцию «SaveAs…» 2) Нажать на клавишу быстрого пользования «ButtonSaveAs» После чего пишем название нашей базы данных и нажимаем кнопку «Сохранить».

3.8 Демонстрация открытия файла

Рис. 3. 12. «Открытие»

Рис. 3. 13. «Открытие»

Выберите файл, который необходимо открыть, и нажмите кнопку «Открыть».

Рис. 3. 14. «Открытие»

3.9 Демонстрация отбора по критерию «Фамилия»

Рис. 3. 15. «Отбор по критерию «Фамилия»

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

3. 10 Демонстрация отбора по критерию «Кличка»

Рис. 3. 16. «Отбор по критерию «Кличка»

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

3. 11 Демонстрация отбора по критерию «Порода»

Рис. 3. 17. «Отбор по критерию «Порода»

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

Заключение

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

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

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

• Архангельский А. Я. Программирование в Delphi: учебник по классическим версиям Delphi. — M. БИНОМ, 2008.

• Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. — 2-е изд. — М.: Бином, 1998.

Епанешнипков А. М., Епанешников В. А. DELPHI. Базы данных. — СПб.: Диалог — МИФИ, 2000.

• Карпов Б. Delphi: специальный справочник. — СПБ.: Питер, 2002.

Фаронов В. В. Delphi. Программирование на языке высокого уровня: учебник для вузов. — СПб.: Питер, 2003.

• Федотова С. В. Создание Windows-приложений в среде Delphi. — М.: СОЛОН — Пресс, 2004.

• Хомоненко А., Гофман В., Мещеряков Е. DELPHI 7. — СПб.: БХВ-Петербург, 2010.

• Фленов М. Библия Delphi. — СПб.: БХВ-Петербург, 2002.

• Вирт Н. Алгоритмы и структуры данных / Пер. с англ. -- М.: Мир, 1989.

• Практическое руководство по программированию / Пер. с англ. Б. Мик, П. Хит, Н. Рашби и др.; под ред. Б. Мика, П. Хит, Н. Рашби. -- М.: Радио и связь, 1986.

Приложение

Исходный код программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, ExtCtrls, CheckLst, Menus, ToolWin;

type

TForm1 = class (TForm)

ButtonAdd: TButton;

ButtonSaveAs: TButton;

SaveDialog1: TSaveDialog;

ButtonLoad: TButton;

OpenDialog1: TOpenDialog;

ButtonEdit: TButton;

StatusBar1: TStatusBar;

ButtonDel: TButton;

MainMenu1: TMainMenu;

File1: TMenuItem;

Open1: TMenuItem;

SaveAs1: TMenuItem;

N1: TMenuItem;

Exit1: TMenuItem;

Edit1: TMenuItem;

Add1: TMenuItem;

Edit2: TMenuItem;

Delete1: TMenuItem;

ListView1: TListView;

ToolBar1: TToolBar;

Panel1: TPanel;

ESurn: TLabeledEdit;

ENick: TLabeledEdit;

EBreed: TLabeledEdit;

procedure ButtonAddClick (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure ButtonSaveAsClick (Sender: TObject);

procedure ButtonLoadClick (Sender: TObject);

procedure ButtonEditClick (Sender: TObject);

procedure ButtonDelClick (Sender: TObject);

procedure Exit1Click (Sender: TObject);

procedure ListView1DblClick (Sender: TObject);

procedure ListView1KeyUp (Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ESurnChange (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

PKino = ^TKino;

TKino = record

prev: PKino;

next: PKino;

surname: string[100]; //фамилия владельца

name: string[100]; //имя владельца

nick: string[100]; //кличка собаки

breed: string[100]; //порода собаки

birth: TDateTime; //дата рождения собаки

end;

var

Form1: TForm1;

head: TKino;

implementation

uses UKino;

{$R *. dfm}

function FindLast: PKino;

begin

Result := @head;

while Result. next < > nil do Result := Result. next;

end;

procedure ClearList;

var kino: PKino;

begin

kino := FindLast;

while kino < > nil do begin

Dispose (kino. next);

kino := kino. prev;

end;

end;

function CheckStr (SubStr, S: String): boolean;

begin

if SubStr = '' then Result := true

else Result := Pos (AnsiUpperCase (SubStr), AnsiUpperCase (S)) > 0;

end;

function CheckFilter (kino: PKino): boolean;

begin

Result := CheckStr (Form1. ESurn. Text, kino. surname)

and CheckStr (Form1. ENick. Text, kino. nick)

and CheckStr (Form1. EBreed. Text, kino. breed);

end;

procedure PrintList;

var

kino: PKino;

Item: TListItem;

begin

Form1. ListView1. Clear;

kino := head. next;

while kino < > nil do begin

if CheckFilter (kino) then begin

Item := Form1. ListView1. Items. Add;

Item. Data := kino;

Item. Caption := kino. surname;

Item. SubItems. Add (kino. name);

Item. SubItems. Add (kino. nick);

Item. SubItems. Add (kino. breed);

Item. SubItems. Add (DateToStr (kino. birth));

end;

kino := kino. next;

end;

end;

procedure TForm1. ButtonAddClick (Sender: TObject);

var kino, last: PKino;

begin

FKino. DefaultVal;

if FKino. ShowModal < > mrOk then Exit;

New (kino);

last := FindLast;

last. next := kino;

kino. prev := last;

kino. next := nil;

FKino. FormToRec (kino);

PrintList;

end;

procedure TForm1. FormCreate (Sender: TObject);

begin

Randomize;

end;

procedure TForm1. ButtonSaveAsClick (Sender: TObject);

var

kino: PKino;

f: file of TKino;

begin

if not SaveDialog1. Execute then Exit;

AssignFile (f, SaveDialog1. FileName);

Rewrite (f);

kino := head. next;

while kino < > nil do begin

Write (f, kino^);

kino := kino. next;

end;

CloseFile (f);

end;

procedure TForm1. ButtonLoadClick (Sender: TObject);

var

kino: PKino;

f: file of TKino;

begin

if not OpenDialog1. Execute then Exit;

AssignFile (f, OpenDialog1. FileName);

Reset (f);

ClearList;

kino := @head;

while not Eof (f) do begin

New (kino. next);

Read (f, kino. next^);

kino. next. prev := kino;

kino. next. next := nil;

kino := kino. next;

end;

CloseFile (f);

PrintList;

end;

procedure TForm1. ButtonEditClick (Sender: TObject);

var kino: PKino;

begin

if ListView1. ItemIndex < 0 then Exit;

kino := ListView1. Selected. Data;

FKino. RecToForm (kino);

if FKino. ShowModal < > mrOk then Exit;

FKino. FormToRec (kino);

PrintList;

end;

procedure TForm1. ButtonDelClick (Sender: TObject);

var kino: PKino;

begin

if ListView1. ItemIndex < 0 then Exit;

kino := ListView1. Selected. Data;

kino. prev. next := kino. next;

if kino. next < > nil then kino. next. prev := kino. prev;

Dispose (kino);

PrintList;

end;

procedure TForm1. Exit1Click (Sender: TObject);

begin

Close;

end;

procedure TForm1. ListView1DblClick (Sender: TObject);

begin

ButtonEdit. Click;

end;

procedure TForm1. ListView1KeyUp (Sender: TObject; var Key: Word;

Shift: TShiftState);

begin

if Key = VK_INSERT then ButtonAdd. Click;

if Key = VK_SPACE then ButtonEdit. Click;

if Key = VK_F2 then ButtonEdit. Click;

if Key = VK_DELETE then ButtonDel. Click;

end;

procedure TForm1. ESurnChange (Sender: TObject);

begin

PrintList;

end;

end.

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