База данных «Почтовое отделение»
Данное программное обеспечение разработано с целью замены бумажной картотеки, экономии драгоценного времени и упрощении работы в почтовом отделении. Программа предназначена для работников почтовых отделений, где ведется подсчет количества корреспонденции и количества отправителей и получателей. Программа имеет достаточно простой и интуитивно понятный интерфейс, который позволяет достаточно легко… Читать ещё >
База данных «Почтовое отделение» (реферат, курсовая, диплом, контрольная)
СОДЕРЖАНИЕ
- ВВЕДЕНИЕ
- 1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ. КЛАССЫ И ОБЪЕКТЫ В PASCAL
- 1.1 Объявление класса. Поля и методы
- 1.2 Объявление объекта. Инициализация полей
- 1.3 Обращение к полям и методам объекта
- 1.4 Инициализация полей объекта
- 1.5 Операция присваивания объектов
- 1.6 Библиотеки классов. Ограничение доступа к полям и методам
- 2. ПРАКТИЧЕСКАЯ ЧАСТЬ. РАЗРАБОТКА ПРИЛОЖЕНИЯ ДЛЯ ДОСТУПА К БАЗЕ ДАННЫХ
- 2.1 Структура и интерфейс приложения
- 2.2 Структурная схема взаимодействия объектов
- 2.3 Листинг программного кода.
- 2.4 Требования к программному и аппаратному обеспечению
- 2.5 Руководство пользователя
- ЗАКЛЮЧЕНИЕ
- СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
Исторически сложилось так, что программирование возникло и развивалось как процедурное программирование, которое предполагает, что основой программы является алгоритм, процедура обработки данных. Объектно-ориентированное программирование — это методика разработки программ, в основе которой лежит понятие объекта как некоторой структуры, описывающей объект реального мира, его поведение. Задача, решаемая с использованием методики объектно-ориентированного программирования, описывается в терминах объектов и операций над ними, а программа при таком подходе представляет собой набор объектов и связей между ними. Другими словами можно сказать, что объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает наше поведение. Оно является естественной эволюцией более ранних нововведений в разработке языков программирования. Объектно-ориентированное программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.
Использование объектно-ориентированного программирования является хорошим решением при разработке крупных программных проектов. Чем проект объемнее и сложнее, тем больше выгоды вы получите при использовании объектно-ориентированной технологии программирования. Одним из наибольших преимуществ объектно-ориентированного программирования является возможность многократного использования программного кода. Если вы, к примеру, создали класс, то можете порождать от него новые классы и изменять их свойства и функциональное назначение.
В качестве примера объектно-ориентированного языка в дальнейшем будем рассматривать Object Pascal. Языковые расширения Object Pascal предоставляют все средства объектно-ориентированного программирования: большую структурированность и модульность, большую абстрактность и встроенную непосредственно в язык возможность повторного использования. Все эти характеристики соответствуют коду, который является более структурированным, более гибким и более легким для обслуживания.
Объектно-ориентированное программирование требует оставить в стороне характерные представления о программировании, которые долгие годы рассматривались как стандартные. Однако после того, как это сделано, объектно-ориентированное программирование становится простым, наглядным и превосходным средством разрешения многих проблем, которые доставляют неприятности традиционному программному обеспечению.
Целью данной работы была разработка информационно-справочной системы и рассмотрение теоретического вопроса Классы и объекты в Pascal.
1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ. КЛАССЫ И ОБЪЕКТЫ В PASCAL
Объектная модель, реализованная в Borland Pascal, по современным меркам является упрощенной, но она позволяет изучить основные приемы объектно-ориентированного программирования и оценить его достоинства и недостатки.
В настоящей главе рассмотрены средства, используемые для объявления классов и объектов, и принципы создания «универсальных» классов.
1.1 Объявление класса. Поля и методы
С точки зрения синтаксиса класс представляет собой структурный тип данных, в котором помимо полей разрешается описывать прототипы (заголовки) процедур и функций, работающих с этими полями данных. По форме описание класса напоминает запись.
Как уже упоминалось ранее, процедуры и функции, заголовки которых описаны в классе, получили название методов.
Описание типа класс выполняется следующим образом:
Туре <�имя класса> = object
<�описание полей класса>
<�прототипы методов>
end;…
Тела методов класса описываются после объявления класса. Причем в заголовке метода можно не повторять списка параметров, но перед именем метода необходимо указать имя класса, отделив его от имени метода точкой:
Procedure <�имя класса>.<�имя метода>;
<�локальные ресурсы процедуры>
Begin
<�тело процедуры>
End;…
Function <�имя класса>. <�имя метода>;
<;покальные ресурсы функции>
Begin
<�тело процедуры>
End;…
1.2 Объявление объекта. Инициализация полей
Описав класс, мы можем объявить любое количество объектов этого класса, причем можно объявить отдельные объекты, массивы объектов и указатели на объекты данного класса.
Например:
Var A.'TRoom; {объект, А класса TRoom}
B:array[1.5] of TRoom; {массив объектов типа TRoom}
Type pTRoom=^TRoom; {тип указателя на объекты класса TRoom}
Var рС: pTRoom; {указатель на объекты класса TRoom}
Как и для любой другой динамической переменной, для динамического объекта необходимо выделить память, а после его использования — освободить память.
Выделение памяти осуществляют процедурой New или функцией New.
Например:
New (pC); или pC:=New (pTRoom);…
Для освобождения памяти используют процедуру Dispose. Например:
Dispose (рС);…
Работа с динамическими объектами классов, построенных с использованием наследования со сложным полиморфизмом, имеет свои особенности.
1.3 Обращение к полям и методам объекта
Обращение к полям и методам
объекта выполняется так же, как к полям записей:
* с использованием точечной нотации:
<�имя объекта>.<�имя поля> или <�имя объекта>.<�имя метода>;
* с использованием оператора with:
with <�имя объекта> do
begin
…<�имя поля>…
…<�имя метода>…
end; …
Например:
а) v:=A. length;
б) s:= A. Square;
в) s:=s+В[i], Square;
T)pC4ength:=3;…
1.4 Инициализация полей объекта
программный аппаратный листинг поле Поля объекта должны инициализироваться.
Инициализация полей объекта может осуществляться тремя способами:
* прямым занесением в поле, например:
Program ex;
Type TRoom = object
length, width: real;{поля: длина и ширина комнаты}
function Square;real;{мотод определения площади}
end;
Function TRoom. Square; {тело метода определения площади}
Begin
Square:^ length" ^ width;
End;
Var A:TRoom; {объявляем объект-переменную}
Begin
AJength:-3.5; {инициализируем поля объекта}
У4. width:-5J;
1.гИе1п (*Площадъ комнаты равна A. Square);
End
* с использованием типизированных констант — синтаксис описания совпадает с синтаксисом типизированных констант типа «запись»:
Program ex;
Type TRoom = object
length, width: real;{nonH: длина и ширина комнаты}
function Square;real;{MQTOJX определения площади}
end;
Function TRoom. Square; {тело метода определения площади}
Begin
Square:^ length" ^ width;
End;
Const
A:TRoom = (length:3.5; width:5.1); {объявляем константу}
Begin
WriteLn ('Площадь комнаты равна A.Square);
End
* посредством специального метода — очень часто в качестве такого метода используют специальную инициализирующую процедуру, которую рекомендуется называть Init:
Program ex;
Type TRoom = object
length, width. real;{пояя: длина и ширина комнаты}
function Square: real;{MQTOJX определения площади}
procedure //i//(7,H';/'^aO;{инициализирующий метод}
end;
{метод определения площади}
Function TRoom. Square;
Begin
Square: = length* width;
End;
{инициализирующий метод}
Procedure TRoontlnit;
Begin
length:=l; width:-w;
End;
Var A:TRoom; {объявляем объект-переменную}
{основная программа}
Begin
AJnit (3.5y5.1); {инициализируем поля объекта}
WriteLn ('Площадь комнаты равна A. Square);
End.
1.5 Операция присваивания объектов
Над объектами одного класса определена операция присваивания. Физически при этом происходит копирование полей одного объекта в другой методом «поле за полем»:
Const A: TRoom=(length:3.7;:5,2);
Var B: TRoom;.,
В:=А; {теперь B. length=3.7, а B. width=5.2}
Существуют некоторые особенности выполнения операции присваивания для объектов родственных классов и полиморфных объектов.
1.6 Библиотеки классов. Ограничение доступа к полям и методам
Одним из достоинств ООП является возможность создания библиотек классов, на базе которых затем конструируют классы для реализации объектов реальной задачи. Библиотечные классы при этом описывают в интерфейсной части модуля, а тела методов — в разделе реализации.
Например:
Unit Room;
Interface
Type TRoom = object
length, width: real; {поля: длина и ширина комнаты}
function Square: real; {метод определения площади}
procedure /w/Y (7,w.Te (2/j;{инициализирующий метод}
end;
Implementation
Function TRoom. Square; {метод определения площади}
Begin
Square:= length" ^ width;
End;
Procedure TRoom. Init; {инициализирующий метод}
Begin
length: =1;
width: =w;
End;
End.
В этом случае основная программа будет подключать соответствующий модуль и работать с классом, его полями и методами, как с ресурсами библиотеки:
Program ex;
Uses /loom;{подключаем модуль с описанием класса TRoom}
Var A:TRoom; {объявляем объект-переменную}
Begin
AJnit (3.5y5.1); {инициализируем поля объекта}
WriteLnCКомната: длина= ', AJength,
V ширииа= A.width);
WriteLnCПлощадь комнаты = A.Square);
End.
В Borland Pascal можно ограничить доступ к полям и методам класса в пределах модуля. Для этого описание класса делится на специальные секции:
public-секция, содержащая описание общих или общедоступных полей и методов класса;
private — секция, содержащая описание внутренних или скрытых полей и методов класса.
В описании класса эти секции могут чередоваться, причем, если секции компонент не указаны, то по умолчанию принимается, что эти компоненты доступны как общие:
Unit <�имя модуля>;
Interface
Туре <�имя класса>= object
<�описание общих полей и методов>
private
<�описание внутренних полей и методов>
public
<�описание общих полей и методов>
private
<�описание внутренних полей и методов>
end;…
Например, в нашем случае, если объекты класса TRoom используются только для получения информации о площади комнаты, то можно поля описать в секции private, но тогда доступ к этим полям из программы станет невозможным:
Unit RoomHiden;
Interface
Type TRoom = object
private {скрытые компоненты класса}
length, width: real; {поля: длина и ширина комнаты}
public {общие компоненты класса}
function Square. real;{метод определения площади}
procedure Init (l, w: real);{инициализирующий метод}
end;
Implementation
Function TRoom. Square; {метод определения площади}
Begin
Square:= length" ^ width;
End;
Procedure TRoomJnit; {инициализирующий метод}
Begin
length: =1; width: =w;
End;
End.
Сокрытие некоторых полей и методов класса упрощает интерфейс класса, т. е. программист, использующий библиотечный класс, не получает лишней для него информации о внутренних механизмах реализации состояния и поведения объектов данного класса. Одновременно с этим программист, занимающийся разработкой библиотечных классов, получает возможность вносить изменения в реализацию класса, не заботясь об изменении программ, использующих объекты данного класса.
2. ПРАКТИЧЕСКАЯ ЧАСТЬ. РАЗРАБОТКА ПРИЛОЖЕНИЯ ДЛЯ ДОСТУПА К БАЗЕ ДАННЫХ
2.1 Структура и интерфейс приложения
Разработка приложения осуществлялась с помощью программного пакета разработки программного обеспечения Delphi 2009 For Windows System 32. C помощью этой объектной ориентированной среды разработки создавалось программное обеспечения с доступом к базе данных Microsoft Access 2010. В ходе разработки приложения использовались стандартные наборы компонентов, функций, входящих в состав среды программирования Delphi 2009. Первым шагом при разработке приложения с доступом к БД было создание визуальной компоновки форм, размещение основных компонентов отвечающих за обеспечение доступа к базе данных. Непосредственно сама БД создавалась в программе Microsoft Access 2010, структура базы разрабатывалась под систему управления базой данных почтовая корреспонденция и в результате имеет несколько основных таблиц заполнения это виды корреспонденции, корреспонденция, операции, сотрудники.
Основной технологией для создания подключения к БД являлась технология ADO которая представляет собой основная модель доступа к данным для приложений, основанных на Microsoft NET. ADO (от англ. ActiveX Data Objects — «объекты данных ActiveX») — интерфейс программирования приложений для доступа к данным, разработанный компанией Microsoft (MS Access, MS SQL Server) и основанный на технологии компонентов ActiveX. ADO позволяет представлять данные из разнообразных источников (реляционных баз данных, текстовых файлов и т. д.) в объектно-ориентированном виде. В моем приложении для доступа к БД использовались следующие компоненты: ADOConnection, ADOTable, ADOQuery и DataSourse, DBGrid. Компонент ADOConnection обеспечивает доступ непосредственно к самой БД по двойному нажатию на компоненте ADOConnection появится окно Form1. ADOConection1ConectionString (Рисунок 2.1) .
Рисунок 2.1 — Окно подключения к БД.
По щелчку по кнопке Build откроется окно свойств связи с данными (Рисунок 2.1). При этом перед установкой подключения необходимо выбрать провайдера в данном случае при связях с БД MS Access и другие БД используется провайдер Microsoft.Jet.OLEDB.4.0 Provider.
Рисунок 2.2 — Окно свойств канала передачи данных.
Щелкая по нему откроется окно подключения к самой базе все что остается это указать путь к БД.
Далее обеспечивается связь компонентов DataSourse, ADOTable между собой и компонента DBGrid с компонентом DataSourse, вся связь осуществляется через свойства объектов. Компонент DBGrid служит вывода данных БД, следует запомнить что компонент DBGrid не хранит данные, а выводит их. В приложении технология ADO реализует доступ к базе которая содержит несколько таблиц и именно эти таблицы выводятся на компонент DBGrid и пользователь непосредственно работающий с программой видит отображаемые таблицы.
Так же в приложении реализован алгоритм который обеспечивает заполнение обработку и сохранение данных в текстовой файл для последующего его открытия, редактирования и просмотра. Для непосредственного удобства в программе была разработана система экспорта содержимого DBGrid в Excel что в значительной мере улучшает и упрощает работу с приложением. Основную часть в разработке приложения помимо доступа к БД составляет и вход в БД под разными пользователями которые могли работать с программой, главной особенностью алгоритма является ограничение прав каждого пользователя в работе с приложением. С помощью компонента ADOTable основного алгоритма поиска реализуется поиск по БД во всех таблицах базы, поиск представляет собой фильтрацию по основным критериям фильтрования которые выбираются из соответствующего меню. Сам алгоритм работает следующим образом сначала проверяются поля куда вводятся данные если данные пусты то выводится сообщение о пустом поле, после фильтр ADOTable неактивен, выбирается критерий поиска и сравнивается с введенным значением далее активируем фильтр. Основной принцип алгоритма заключается в компоненте ADOTable и его фильтре данных.
Следующий алгоритм, алгоритм подсчета суммы продукции и количества записей в таблице. Реализуется с помощью компонента ADOQuery принцип работы компонентов технологии ADO схож в данном алгоритме с подошью свойства SQL Add идет выбор таблицы и поля где будет проводится сумма, вывод результата осуществляется свойством Fields и может выводится практически в любой компонент поддерживающий вывод. Для подсчета количества записей в таблице реализуется тот же самый алгоритм, но с учетом вывода не суммы, а количества записей IntToStr (ADOQuery2.RecordCount) стандартная система вывода информации преобразования целого типа в строковый.
С помощью реализации технологии ADO в разработанном приложении реализуется алгоритмы добавления, удаления, редактирования, перемещения по таблице что обеспечивает программе приемлемый вид. В разработке приложения так же использовались компоненты
· ComboBox
· RadioButton
· ToolBar
· PageControl
· Panel
· MainMenu
· Button
· BitBtn
· Image
· ImageList
· StatusBar
· ProgressBar
· Edit
Приведенные выше компоненты обеспечивают приложению функциональность, именно наличие этих и других компонентов в языке программирования представляет его средой разработки программного обеспечения. Так ImageList служит для присвоения изображения в формате bmp, ico различным визуальным компонентам которые используются в программе. Компонент StatusBar служит для вывода дополнительных, данных алгоритм реализован в программе на подсчет и вывод данных таблицы БД. Интерфейс приложения разработан под удобства пользователя он разбит на несколько частей:
1. Главное меню
В меню файл осуществляется :
· Выбор пользователя Меню->Файл->Выбор пользователя;
· Извещение Меню->Файл->Извещение;
· Квитанция Меню->Файл->Квитанция;
· Выход Меню->Фаил->Выход;
В меню управления осуществляется:
· Переход в начало БД Управление->В начало;
· Переход назад Управление->Назад;
· Переход вперед Управление->Вперед;
· Переход в конец БД Управление->В конец;
В меню опций осуществляется:
· Изменение цвета таблицы отображаемой БД Опции->Изменение цвета;
Рисунок 2.3 — Главное меню
2. Визуальное меню управления
В меню визуального управления осуществляется:
· В начало — переход в начало БД;
· Назад — переход на одну строку назад;
· Вперед — переход на одну строку вперед;
· В конец — переход в конец БД;
· Добавить — добавление новой записи в БД;
· Изменить — изменение записи в БД;
· Удалить — удаление записи из БД;
· Квитанция — вывод формы для печати квитанции;
· Извещение — Вывод формы для формирования извещения.
Рисунок 2.4 — Меню визуального управления
3. Рабочая область
В рабочей области осуществляется:
· Вывод таблиц БД;
· Поиск и фильтрация;
· Подсчет количества отправителей и получателей;
· Общее количество записей в строках.
Рисунок 2.5 — Рабочая область
4. Таблицы
В таблицах осуществляется:
· Виды корреспонденции — вывод наименований видов корреспонденции;
· Корреспонденция — вывод данных об отправителях и получателях почтовой корреспонденции, адресов, стоимости и дат;
· Операции — вывод информации о приеме и получении корреспонденции;
· Сотрудники — вывод информации о сотрудниках;
Рисунок 2.6 — БД Виды корреспонденции Рисунок 2.7 — БД Корреспонденция Рисунок 2.8 — БД Операции Рисунок 2.9 — БД Сотрудники
5. Выбор пользователя
В выборе пользователя осуществляется:
· Выбор пользователя администратор Логин (Администратор) Пароль (0000);
· Выбор пользователя приемщик Логин (Приемщик) Пароль(0000);
· Выбор пользователя продавец Логин (Менеджер) Пароль(0000);
Выбор пользователя является основой базы данных, каждый пользователь обладает определенными правами.
Администратор — осуществляет администрирование системы и базы данных, разграничение прав доступа и адаптации системы к нуждам пользователей.
Приемщик — осуществляет создание и ведение каталога почтовой корреспонденции, формирования прайс-листа на доставку почтовой корреспонденции и книги суммарного учета, заполнение стандартных входных форм для принятия корреспонденции.
Менеджер — осуществляет запись и регистрацию отправителей и получателей почтовой корреспонденции, используя определенные формы, и формирует статистические отчеты по доставленной или не доставленной корреспонденции за определенный период времени.
Рисунок 2.10 — Выбор пользователя
2.2 Структурная схема взаимодействия объектов
2.3 Листинг программного кода
Листинг программного кода для формы входа в БД.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class (TForm)
ListBox1: TListBox;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Timer1: TTimer;
Label4: TLabel;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click (Sender: TObject);
procedure BitBtn2Click (Sender: TObject);
procedure ListBox1Click (Sender: TObject);
procedure FormActivate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1. BitBtn1Click (Sender: TObject);
begin
case Listbox1. ItemIndex of
0: if (edit1.Text='Администратор') and (edit2.Text='0000') then
begin
Form2.Show;
showmessage ('Здравствуйте Администратор.');
Form2.Caption:='Вы в базе под логином администратор';
Form2.ToolButton9.Enabled:=False;
Form2.GroupBox5.Visible:=False;
end
Else
showmessage ('Неверный логин или пароль');
1: if (edit1.Text='Приемщик') and (edit2.Text='0000') then
begin
Form2.Show;
Form2.Caption:='Вы в базе под логином Приемщик';
showmessage ('Здравствуйте Приемщик.');
Form2.ToolButton9.Enabled:=False;
Form2.GroupBox5.Visible:=True;
end
Else
showmessage ('Неверный логин или пароль');
2: if (edit1.Text='Менеджер')and (edit2.Text='0000') then
begin
Form2.Show;
Form2.Caption:='Вы в базе под логином Менеджер';
showmessage ('Здравствуйте Менеджер.');
Form2.GroupBox5.Visible:=False;
Form2.ToolButton9.Enabled:=True;
end
Else
showmessage ('Вы указали неверный логин или пароль');
end;
end;
procedure TForm1. BitBtn2Click (Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1. ListBox1Click (Sender: TObject);
begin
with TCustomListBox (Sender) do
if ItemIndex >= 0 then
begin
Form1.Caption:='Вход в базу данных почта как '+Items[ItemIndex];
Edit1.Text := Items[ItemIndex];
end;
end;
procedure TForm1. FormActivate (Sender: TObject);
begin
Label4.Caption := DateTimeToStr (Now);
end;
end.
Листинг программного кода для формы БД.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, ADODB, ComCtrls, StdCtrls, ExtCtrls, DBCtrls,
ImgList, ToolWin, Buttons, OleServer, EXCEL2000, ComObj, ExcelXP, Menus,
GIFImg, jpeg;
type
TForm2 = class (TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
DBGrid2: TDBGrid;
Panel1: TPanel;
GroupBox1: TGroupBox;
Edit1: TEdit;
ComboBox1: TComboBox;
RadioButton2: TRadioButton;
RadioButton1: TRadioButton;
GroupBox2: TGroupBox;
ComboBox2: TComboBox;
Edit2: TEdit;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOTable2: TADOTable;
DataSource2: TDataSource;
Panel2: TPanel;
DBGrid1: TDBGrid;
GroupBox3: TGroupBox;
ComboBox3: TComboBox;
Edit3: TEdit;
RadioButton3: TRadioButton;
RadioButton4: TRadioButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
GroupBox4: TGroupBox;
N2: TMenuItem;
N3: TMenuItem;
ComboBox4: TComboBox;
Edit4: TEdit;
DBGrid3: TDBGrid;
ADOTable3: TADOTable;
DataSource3: TDataSource;
ADOQuery1: TADOQuery;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton3: TToolButton;
ToolButton5: TToolButton;
ToolButton7: TToolButton;
ToolButton9: TToolButton;
ToolButton11: TToolButton;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
ADOQuery2: TADOQuery;
GroupBox5: TGroupBox;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
BitBtn7: TBitBtn;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Panel3: TPanel;
GroupBox6: TGroupBox;
ComboBox5: TComboBox;
Edit5: TEdit;
RadioButton5: TRadioButton;
RadioButton6: TRadioButton;
GroupBox7: TGroupBox;
ComboBox6: TComboBox;
Edit6: TEdit;
ADOQuery3: TADOQuery;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
Excel1: TMenuItem;
N10: TMenuItem;
N13: TMenuItem;
Ds1: TMenuItem;
N14: TMenuItem;
ColorDialog1: TColorDialog;
ProgressBar1: TProgressBar;
Image2: TImage;
ToolBar2: TToolBar;
StatusBar1: TStatusBar;
ToolButton12: TToolButton;
TabSheet5: TTabSheet;
ADOTable4: TADOTable;
ADOQuery4: TADOQuery;
DataSource4: TDataSource;
DBGrid4: TDBGrid;
BitBtn8: TBitBtn;
GroupBox8: TGroupBox;
ComboBox7: TComboBox;
Edit7: TEdit;
RadioButton8: TRadioButton;
RadioButton9: TRadioButton;
GroupBox9: TGroupBox;
ComboBox8: TComboBox;
Edit8: TEdit;
ImageList1: TImageList;
procedure ToolButton1Click (Sender: TObject);
procedure ToolButton3Click (Sender: TObject);
procedure ToolButton5Click (Sender: TObject);
procedure ToolButton7Click (Sender: TObject);
procedure ToolButton9Click (Sender: TObject);
procedure ToolButton11Click (Sender: TObject);
procedure Edit1Change (Sender: TObject);
procedure Edit2Change (Sender: TObject);
procedure Edit3Change (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure N6Click (Sender: TObject);
procedure Edit4Change (Sender: TObject);
procedure PageControl1Change (Sender: TObject);
procedure BitBtn1Click (Sender: TObject);
procedure BitBtn2Click (Sender: TObject);
procedure BitBtn3Click (Sender: TObject);
procedure BitBtn5Click (Sender: TObject);
procedure BitBtn6Click (Sender: TObject);
procedure BitBtn7Click (Sender: TObject);
procedure Edit5Change (Sender: TObject);
procedure Edit6Change (Sender: TObject);
procedure N9Click (Sender: TObject);
procedure N14Click (Sender: TObject);
procedure N10Click (Sender: TObject);
procedure N13Click (Sender: TObject);
procedure Ds1Click (Sender: TObject);
procedure BitBtn4Click (Sender: TObject);
procedure BitBtn8Click (Sender: TObject);
procedure Edit7Change (Sender: TObject);
procedure Edit8Change (Sender: TObject);
procedure ToolButton12Click (Sender: TObject);
procedure Excel1Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
ExcelApp: variant;
row :integer;
col:integer;
i, k, j:integer;
implementation
uses Unit1, Unit3, Unit4, Unit5, Unit6, Unit7, Unit8;
{$R *.dfm}
procedure TForm2. ToolButton1Click (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
1: ADOTable1. First;
2: ADOTable2. First;
3: ADOTable3. First;
4: ADOTable4. First;
end;
end;
procedure TForm2. ToolButton3Click (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
1: ADOTable1. Prior;
2: ADOTable2. Prior;
3: ADOTable3. Prior;
4: ADOTable4. Prior;
end;
end;
procedure TForm2. ToolButton5Click (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
1: ADOTable1. Next;
2: ADOTable2. Next;
3: ADOTable3. Next;
4: ADOTable4. Next;
end;
end;
procedure TForm2. ToolButton7Click (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
1: ADOTable1. Last;
2: ADOTable2. Last;
3: ADOTable3. Last;
4: ADOTable4. Last;
end;
end;
procedure TForm2. ToolButton9Click (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
1:AdoTable1.Insert;
2:ADOTable2.Insert;
3:ADOTable3.insert;
4:begin
ADOTable4.Insert;
Form7.Show;
end;
end;
end;
procedure TForm2. ToolButton11Click (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
1: ADOTable1. Edit;
2: ADOTable2. Edit;
3: ADOTable3. Edit;
4: ADOTable4. Edit;
end;
end;
procedure TForm2. ToolButton12Click (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
1: ADOTable1. Delete;
2: ADOTable2. Delete;
3: ADOTable3. Delete;
4: ADOTable4. Delete;
end;
end;
procedure TForm2. Edit1Change (Sender: TObject);
begin
if ((Length (Edit1.Text) > 0) and (Length (ComboBox1.Text) > 0)) then
begin
ADOTable1.Filtered:=false;
if RadioButton1. Checked then
ADOTable1.Filter:=Combobox1.Text + ' LIKE '+ #39 + Edit1. Text + '%' + #39
else
ADOTable1.Filter:=Combobox1.Text + ' LIKE '+ #39+ '%' + Edit1. Text + '%' + #39;
ADOTable1.Filtered:=true;
end
else ADOTable1. Filtered:=false;
end;
procedure TForm2. Edit2Change (Sender: TObject);
begin
if Length (Edit2.Text) > 0 then
begin
ADOTable1.Filtered:=false;
ADOTable1.Filter:=Combobox2.Text + ' = ' + #39 + Edit2. Text + #39;
ADOTable1.Filtered:=true;
end
else ADOTable1. Filtered:=false;
end;
procedure TForm2. Edit3Change (Sender: TObject);
begin
if ((Length (Edit3.Text) > 0) and (Length (ComboBox3.Text) > 0)) then
begin
ADOTable2.Filtered:=false;
if RadioButton3. Checked then
ADOTable2.Filter:=Combobox3.Text + ' LIKE '+ #39 + Edit3. Text + '%'+ #39
else
ADOTable2.Filter:=Combobox3.Text + ' LIKE '+ #39+ '%' + Edit3. Text + '%' + #39;
ADOTable2.Filtered:=true;
end
else ADOTable2. Filtered:=false;
end;
procedure TForm2. Edit4Change (Sender: TObject);
begin
if Length (Edit4.Text) > 0 then
begin
ADOTable2.Filtered:=False;
ADOTable2.Filter:=ComboBox4.Text + '=' + #39 + Edit4. Text + #39;
ADOTable2.Filtered:=True;
end
else ADOTable2. Filtered:=False;
end;
//Меню в верху.
procedure TForm2. N10Click (Sender: TObject);
begin
case PageControl1. ActivePageIndex of
1: if ColorDialog1. Execute then DBGrid2. Color:=ColorDialog1.Color;
2: if ColorDialog1. Execute then DBGrid1. Color:=ColorDialog1.Color;
3: if ColorDialog1. Execute then DBGrid3. Color:=ColorDialog1.Color;
end;
end;
procedure TForm2. N13Click (Sender: TObject);
begin
Form5.Show;
end;
procedure TForm2. N14Click (Sender: TObject);
begin
Form1.Close;
end;
procedure TForm2. N3Click (Sender: TObject);
begin
Case PageControl1. ActivePageIndex of
1: ADOTable1. First;
2: ADOTable2. First;
3: ADOTable3. First;
4: ADOTable4. First;
end;
end;
procedure TForm2. N4Click (Sender: TObject);
begin
Case PageControl1. ActivePageIndex of
1: ADOTable1. Prior;
2: ADOTable2. Prior;
3: ADOTable3. Prior;
4: ADOTable4. Prior;
end;
end;
procedure TForm2. N5Click (Sender: TObject);
begin
Case PageControl1. ActivePageIndex of
1: ADOTable1. Next;
2: ADOTable2. Next;
3: ADOTable3. Next;
4: ADOTable4. Next;
end;
end;
procedure TForm2. N6Click (Sender: TObject);
begin
Case PageControl1. ActivePageIndex of
1: ADOTable1. Last;
2: ADOTable2. Last;
3: ADOTable3. Last;
4: ADOTable4. Last;
end;
end;
procedure TForm2. N9Click (Sender: TObject);
begin
Form1.Show;
end;
procedure TForm2. PageControl1Change (Sender: TObject);
begin
case pageControl1. ActivePageIndex of
0: ADOTable1. Next;
1: ADOTable2. Next;
end;
case PageControl1. ActivePageIndex of
0: begin
StatusBar1.Panels[0]. Text:='Система управления базой';
StatusBar1.Panels[1]. Text:='';
end;
1: begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD ('SELECT * FROM виды_корреспонденции Where код_кор');
ADOQuery1.Active:=True;
StatusBar1.Panels[0]. Text: ='Количество записей '+IntToStr (ADOQuery1. RecordCount);
StatusBar1.Panels[1]. Text:='';
end;
2: begin
ADOQuery2.Active:=False;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.ADD ('SELECT * FROM корреспонденция Where уч_номер');
ADOQuery2.Active:=True;
StatusBar1.Panels[0]. Text:='Количество записей '+IntToStr (ADOQuery2.RecordCount);
StatusBar1.Panels[1]. Text:='';
end;
3: begin
ADOQuery3.Active:=False;
ADOQuery3.SQL.Clear;
ADOQuery3.SQL.ADD ('SELECT * FROM операции Where код_операции');
ADOQuery3.Active:=True;
StatusBar1.Panels[0]. Text:='Количество записей '+IntToStr (ADOQuery3.RecordCount);
StatusBar1.Panels[1]. Text:='';
end;
4: begin
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.ADD ('SELECT * FROM сотрудники Where код_сотрудника');
ADOQuery4.Active:=True;
StatusBar1.Panels[0]. Text:='Количество записей '+IntToStr (ADOQuery4.RecordCount);
StatusBar1.Panels[1]. Text:='';
end;
end;
end;
procedure TForm2. BitBtn1Click (Sender: TObject);
begin
TabSheet2.Show;
PageControl1Change (PageControl1);
end;
procedure TForm2. BitBtn2Click (Sender: TObject);
begin
TabSheet3.Show;
PageControl1Change (PageControl1);
end;
procedure TForm2. BitBtn3Click (Sender: TObject);
begin
TabSheet4.Show;
PageControl1Change (PageControl1);
end;
procedure TForm2. BitBtn4Click (Sender: TObject);
begin
Form5.Show;
end;
procedure TForm2. BitBtn5Click (Sender: TObject);
begin
ADOTable1.Insert;
end;
procedure TForm2. BitBtn6Click (Sender: TObject);
begin
ADOTable1.Edit;
end;
procedure TForm2. BitBtn7Click (Sender: TObject);
begin
ADOTable1.Delete;
end;
procedure TForm2. BitBtn8Click (Sender: TObject);
begin
TabSheet5.Show;
PageControl1Change (PageControl1);
end;
procedure TForm2. Ds1Click (Sender: TObject);
begin
Form3.Show;
end;
procedure TForm2. Edit5Change (Sender: TObject);
begin
if ((Length (Edit5.Text) > 0) and (Length (ComboBox5.Text) > 0)) then
begin
ADOTable3.Filtered:=false;
if RadioButton5. Checked then
ADOTable3.Filter:=Combobox5.Text + ' LIKE '+ #39 + Edit5. Text + '%'+ #39
else
ADOTable3.Filter:=Combobox5.Text + ' LIKE '+ #39+ '%' + Edit5. Text + '%' + #39;
ADOTable3.Filtered:=true;
end
else ADOTable3. Filtered:=false;
end;
procedure TForm2. Edit6Change (Sender: TObject);
begin
if Length (Edit6.Text) > 0 then
begin
ADOTable3.Filtered:=false;
ADOTable3.Filter:=Combobox6.Text + ' = ' + #39 + Edit6. Text + #39;
ADOTable3.Filtered:=true;
end
else ADOTable3. Filtered:=false;
end;
procedure TForm2. Edit7Change (Sender: TObject);
begin
if ((Length (Edit7.Text) > 0) and (Length (ComboBox7.Text) > 0)) then
begin
ADOTable4.Filtered:=false;
if RadioButton8. Checked then
ADOTable4.Filter:=Combobox7.Text + ' LIKE '+ #39 + Edit7. Text + '%'+ #39
else
ADOTable4.Filter:=Combobox7.Text + ' LIKE '+ #39+ '%' + Edit7. Text + '%' + #39;
ADOTable4.Filtered:=true;
end
else ADOTable4. Filtered:=false;
end;
procedure TForm2. Edit8Change (Sender: TObject);
begin
if Length (Edit8.Text) > 0 then
begin
ADOTable4.Filtered:=false;
ADOTable4.Filter:=Combobox8.Text + ' = ' + #39 + Edit8. Text + #39;
ADOTable4.Filtered:=true;
end
else ADOTable4. Filtered:=false;
end;
procedure TForm2. Excel1Click (Sender: TObject);
begin
Form8.show;
end;
end.
Листинг программного кода для формы редактора заказов.
unit Unit7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls, DB, ADODB, ImgList, ComCtrls, ToolWin;
type
TForm7 = class (TForm)
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
LabeledEdit4: TLabeledEdit;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton3: TToolButton;
LabeledEdit5: TLabeledEdit;
LabeledEdit6: TLabeledEdit;
LabeledEdit7: TLabeledEdit;
LabeledEdit8: TLabeledEdit;
LabeledEdit9: TLabeledEdit;
LabeledEdit10: TLabeledEdit;
LabeledEdit11: TLabeledEdit;
LabeledEdit12: TLabeledEdit;
LabeledEdit13: TLabeledEdit;
CheckBox1: TCheckBox;
procedure ToolButton1Click (Sender: TObject);
procedure ToolButton3Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form7: TForm7;
implementation
uses Unit2;
{$R*.dfm}
procedure TForm7. ToolButton1Click (Sender: TObject);
begin
Form2.ADOTable2.Insert;
Form2.ADOTable2.Edit;
Form2.ADOTable2.FieldByName ('уч_номер').Value:=LabeledEdit5.Text;
Form2.ADOTable2.FieldByName ('код_операции').Value:=LabeledEdit1.Text;
Form2.ADOTable2.FieldByName ('код_вида_кор').Value:=LabeledEdit2.Text;
Form2.ADOTable2.FieldByName ('код_сотрудника').Value:=LabeledEdit3.Text;
Form2.ADOTable2.FieldByName ('получатель').Value:=LabeledEdit4.Text;
Form2.ADOTable2.FieldByName ('адрес_получ').Value:=LabeledEdit6.Text;
Form2.ADOTable2.FieldByName ('отправитель').Value:=LabeledEdit7.Text;
Form2.ADOTable2.FieldByName ('адрес_отпрв').Value:=LabeledEdit8.Text;
Form2.ADOTable2.FieldByName ('дата').Value:=LabeledEdit9.Text;
Form2.ADOTable2.FieldByName ('ценность').Value:=LabeledEdit10.Text;
Form2.ADOTable2.FieldByName ('вес').Value:=LabeledEdit11.Text;
Form2.ADOTable2.FieldByName ('цена').Value:=LabeledEdit12.Text;
Form2.ADOTable2.FieldByName ('номер_квитанции').Value:=LabeledEdit13.Text;
Form2.ADOTable2.Post;
form7.Close;
end;
procedure TForm7. ToolButton3Click (Sender: TObject);
begin
form7.Close;
end;
end.
2.4 Требования к программному и аппаратному обеспечению
Операционная система: Windows 2000/2003 Professional/Vista.
Процессор: Pentium4, частота 700Мгц или выше.
Оперативная память: 6Мб.
Память на жестком диске: 4Мб.
Клавиатура, мышь.
2.5 Руководство пользователя
Использование программного обеспечения начинается со входа в базу данных пользователя. Пользователь должен ввести свой логин и пароль в соответствии со своей квалификацией. Пользователю могут соответствовать три вида квалификации: Администратор, Приемщик и Менеджер. Каждый из пользователей имеет свой уникальный пароль. В нашем случае все три пользователя имеют пароль: 0000.
После входа в базу данных пользователь приступает непосредственно к своим обязанностям. Администратор осуществляет администрирование системы и базы данных, Приемщик осуществляет создание и ведение каталога почтовой корреспонденции, Менеджер осуществляет запись и регистрацию отправителей и получателей. Администратор не ограничен в правах и способен использовать все возможности программы. Менеджер и Приемщик ограничены в правах и выполняют строго определенные функции. Для приемщика существует определенное поле, через которое он ведет каталог почтовой корреспонденции. Для менеджера существует определенная форма через которую ведется запись и регистрация отправителей и получателей.
Управление в программе ведется с помощью кнопок находящихся в верхней части приложения. Кнопки имеют следующие функции: В начало — возврат в самое начало таблицы; Вперед — перемещение по таблице на строку вниз; Назад — перемещение по таблице на строку вверх; В конец — перемещение в самый низ таблицы; Добавить — переход к форме менеджера; Изменить — редактирование данных в строке; Удалить — удаление строки с данными; Квитанция — вывод формы для создания квитанции; Извещение — вывод формы для формирования извещения.
Заключение
Данное программное обеспечение разработано с целью замены бумажной картотеки, экономии драгоценного времени и упрощении работы в почтовом отделении. Программа предназначена для работников почтовых отделений, где ведется подсчет количества корреспонденции и количества отправителей и получателей. Программа имеет достаточно простой и интуитивно понятный интерфейс, который позволяет достаточно легко управлять данным приложением. В программе собраны все основные функции, необходимые для полноценного функционирования системы почтового отделения. Каждый из сотрудников способен осуществлять строго свои обязанности в соответствии со своей квалификацией, так как алгоритм данного программного обеспечения предусматривает разделение сотрудников в зависимости от выполнения ими определенных функций. Еще одно важное преимущество данной программы заключается в том, что она позволяет исключить какие-либо ошибки при учете корреспонденции, тем самым повысить надежность работы почтового отделения.
При разработке данного программного обеспечения, был получен бесценный опыт работы с базами данных, который пригодится в будущем, так как реляционные базы данных нашли широкое применение практически во всех сферах деятельности и имеют огромную пользу.
1. Технологии Delphi. Разработка приложений для бизнеса. Учебный курс Авторы: Бобровский С. 1-е издание, 2007 год, 720 стр. изд. Питер
2. Практикум по информатике под редакцией Е. К. Хеннера. Москва, 2001 г.
3. Жуков А. Изучаем De1phi. Москва, 2005 г.
4. Никулин Е. Компьютерная геометрия и алгоритмы машинной графики. — СПб.: Питер, 2004. — 416 с.
5. Порев В. Н. Компьютерная графика. — СПб.: БлВ — Петербург, 2002. — 432 с.
6. Культюнов Н. Б. Delphi 6. программирование на Object Pascal. — СПб.: БХВ — Петербург, 2002. — 432 с.
7. Краснов М. В. DirectX. Графика в проектах Delphi. — СПб.: БХВ — Петербург, 2004. — 352 с. 9. Мозговой М. В. Занимательное протраММИрОВaJП1е. Самоучитель. — СПб.: Питер, 2001. 528 с.
8. Тихомиров Ю. OpenGL. Программирование трехмерной графики. СПб.: Пшер, 2004. — 304 с.
9. Шишкин Е. В., Боресков А. В. Компьютерная Графика. Полигональные модели. — М. :ДИАЛОГ — МИФИ, 2000. — 464 с.
10. Архангельский А. Я. «Приемы программирования в Delphi на основе VCL. — М.: ООО «Бином-Пресс», 2006 г. — 944 с.: ил.
11.Культин Н. Б. «Основы программирования в Delphi 7. — СПб.: БХВ-Петербург. 2003. — 608с.
12. М. В. Сухарев «Основы Delphi. Профессиональный подход — СПб.: Наука и Техника, 2004. — 600 с.
13. Фараонов В. В. «ТurboPascal. — СПб.: БХВ-Петербург, 2004. — 1056 с.
14. Гофман В. Э., Хомоненко А. Д. Delphi. Быстрый старт. — СПб.: БХВ-Петербург, 2003. — 288 с.
15. Фленов М. Е. Библия Delphi. — СПб.: БХВ-Петербург, 2004. — 880 с.