Программная реализация курьерского заказа

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

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

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

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

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

СОДЕРЖАНИЕ

Введение

1. Аналитический обзор литературы

1.1 Динамические структуры

1.2 Постановка задачи

2. Разработка алгоритма

3. Разработка программного средства

4. Руководство пользователя

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

Приложение

ВВЕДЕНИЕ

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

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

· Время доставки заказа и время работы курьера;

· Объем заказа и максимальный объем, который может доставить курьер;

· Вес заказа и грузоподъемность автомобиля курьера;

Соответственно, исходя из заданных параметров, будут формироваться два списка: список курьеров и для каждого из них список заказов. Данная работа посвящена программной реализации такой структуры на языке Delphi.

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

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

1. АНАЛИТИЧЕСКИЙ ОБЗОР ЛИТЕРАТУРЫ

1.1 Динамические структуры данных

Динамические структуры данных - данные, размер которых может меняться во время работы программы.

Обычно переменная хранит некоторые данные. Однако помимо обычных, существуют переменные, которые ссылаются на другие переменные. Такие переменные называются указателями. Указатель -- это переменная, значением которой является адрес другой переменной или структуры данных. Графически указатель может быть изображен так, как на рисунке 1.

Рисунок 1. Переменная-указатель

Указатель, как и любая другая переменная программы, должна быть объявлена в разделе объявления. В общем виде объявление указателя выглядит следующим образом: Имя: ^ Тип;

где: имя -- имя переменной-указателя; Тип -- тип переменной, на которую указывает переменная-указатель; ^ - объявляемая переменная является указателем.

Примеры объявления указателей: p1: ^integer; р2: ^real;

p1 -- это указатель на переменную типа integer, a p2 -- указатель на переменную типа real.

Тип переменной, на которую ссылается указатель, называют типом указателя. Например, если в программе объявлен указатель р: ^integer, то говорят: ^р -- "указатель целого типа" или "р -- это указатель на целое".

В начале работы программы переменная-указатель "ни на что не указывает". В этом случае говорят, что значение указателя равно NIL. Зарезервированное слово NIL соответствует значению указателя, который ни на что не указывает.

Идентификатор NIL можно использовать в инструкциях присваивания и в условиях. Например, если переменные p1 и р2 объявлены как указатели, то инструкция p1 := NIL;

устанавливает значение переменной, а инструкция if р2 = NIL then ShowMessage('Указатель р2 не инициализирован!');

проверяет, инициализирован ли указатель р2.

Указателю можно присвоить значение -- адрес переменной соответствующего типа (в тексте программы адрес переменной -- это имя переменной, перед которым стоит оператор @). Ниже приведена инструкция, после выполнения которой переменная р будет содержать адрес переменной n, р := @n;

Помимо адреса переменной, указателю можно присвоить значение другого указателя при условии, что они являются указателями на переменную одного типа. Например, если переменные p1 и р2 являются указателями типа integer, то в результате выполнения инструкции: p2 := p1;

Указатель можно использовать для доступа к переменной, адрес которой содержит указатель. Например, если р указывает на переменную i, то в результате выполнения инструкции: р^ : = 5;

значение переменной i будет равно пяти. В приведенном примере значок ^ показывает, что значение пять присваивается переменной, на которую указывает переменная-указатель.

Динамической переменной называется переменная, память для которой выделяется во время работы программы.

Выделение памяти для динамической переменной осуществляется вызовом процедуры new. У процедуры new один параметр -- указатель на переменную того типа, память для которой надо выделить. Например, если р является указателем на тип real, то в результате выполнения процедуры new(p); будет выделена память для переменной типа real (создана переменная типа real), и переменная-указатель р будет содержать адрес памяти, выделенной для этой переменной.

У динамической переменной нет имени, поэтому обратиться к ней можно только при помощи указателя.

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

Например, если р -- указатель на динамическую переменную, память для которой выделена инструкцией new(p), то инструкция dispose (р) освобождает занимаемую динамической переменной память.

Создание, использование и уничтожение динамических переменных

Var p1,p2,p3:^ Integer; // указатели на переменные типа integer

begin

// создание динамических переменных типа integer

// выделение памяти для динамических переменных

New(p1);

New(p2);

New(p3);

р1^ := 5;

р2^ := 3;

р3^ := р1^ + р2^;

ShowMessage('Суммачиселравна ' + IntToStr(р3^));

// уничтожение динамических переменных, освобождение памяти

Dispose(p1);

Dispose(р2);

Dispose(р3);

end;

В начале работы процедура создает три динамические переменные. Две переменные, на которые указывают p1 и р2, получают значение в результате выполнения инструкции присваивания. Значение третьей переменной вычисляется как сумма первых двух.

Списки

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

Список можно изобразить графически, как показано на рисунке 2.

Рисунок 2. Графическое изображение списка.

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

Для того чтобы программа могла использовать список, надо определить тип компонентов списка и переменную-указатель на первый элемент списка. Ниже приведен пример объявления компонента списка студентов:

type

TPStudent = ^TStudent; // указатель на переменную типа TStudent

// описание типа элемента списка

TStudent = record

FIO: string[60]; // фамилия

group: integer; // номергруппы

address: string[60]; // домашний адрес

next: TPStudent; // указатель на следующий элемент списка

end;

var head: TPStudent; // указатель на первый элемент списка

Добавлять данные можно в начало, в конец или в нужное место списка. Во всех этих случаях необходимо корректировать указатели. На рисунке 3 изображен процесс добавления элементов в начало списка.

Добавление элемента в начало динамического списка

type

TPStudent=^TStudent; // указательнатип TStudent

TStudent = record

f_name:string[20]; // фамилия

l_name: string[20]; // имя

next: TPStudent; // следующийэлементсписка

end;

var head: TPStudent; // начало (голова) списка, добавить элемент в начало списка

procedure add;

var

curr: TPStudent; // новыйэлементсписка

begin

new(curr); // выделить память для элемента списка

curr^.f_name := `Сидоров';

curr^. l _ name := `Иван';

// добавление в начало списка

curr^.next := head; head := curr;

end;

Рисунок 3. Добавление элементов в список

Вывод целого списка:

var

curr: TPStudent; // текущий элемент списка

n:integer; // длина (кол-во элементов) списка

st:string; // строковое представление списка

begin

n := 0; st := '';

curr := head; // указатель на первый элемент списка

while curr <> NIL do begin

n := n + 1;

st := st + curr^.f_name + ' ' + curr^.1_name+#13;

curr := curr^.next; // указатель на следующий элемент

end;

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

Удаление элемента из списка

Для того чтобы удалить узел, необходимо скорректировать значение указателя узла, который находится перед удаляемым узлом (рисунок 4).

Рисунок 4. Удаление элемента из списка.

Поскольку узел является динамической переменной, то после исключения узла из списка занимаемая им память должна быть освобождена. Освобождение динамической памяти, или, как иногда говорят, "уничтожение переменной", выполняется вызовом процедуры dispose. У процедуры dispose один параметр -- указатель на динамическую переменную. Память, занимаемая этой динамической переменной, должна быть освобождена. Для примера:

Var р: ^integer;

begin

new(p);

{ инструкции программы }

dispose(p);

end

1.2 Постановка задачи

Разработать программное средство, которое имеет список заказов на покупку товаров на следующие сутки. Каждая запись списка содержит: номер заказа, адрес доставки, время доставки (от… ,до …), объем заказа в м3, вес в кг. Также имеется список курьеров. Каждая запись списка содержит: номер курьера, ФИО курьера, время работы (от… ,до …), грузоподъемность автомобиля, max объем груза за одну перевозку. Требуется:

· Наиболее эффективно распределить заказы между курьерами;

· Выдать список всех заказов курьера;

· Предусмотреть возможность добавлять, удалять и корректировать записи из списков, а так же просматривать списки полностью

2. РАЗРАБОТКА АЛГОРИТМА

При разработке представленной программы значительное внимание было уделено интерфейсу. Чтобы предоставить пользователю возможность быстрого доступа к данным и комфортного их использования, в программе было задействовано минимальное количество элементов, на которые и возложено все управление программой. В частности такими элементами является таблица ListZakStringGrid, в которую выводится список существующих заказов и информация о них, текстовая область MemoCour, которая используется для вывода заказов текущего курьера, списки FIOCourListBox, OtTimeCourListBox, DoTimeCourListBox, WeightCourListBox и VolumeCourListBox для вывода данных о курьере и панели с несколькими кнопками: кнопки добавления, редактирования и удаления. Все это позволило сделать программу очень наглядной и простой, не в ущерб ее функциональности.

Условно программу можно разделить на 3 этапа:

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

2) В качестве второго этапа можно принять этап распределения заказов между курьерами.

3) На третьем этапе, этапе завершения, происходит сохранение данных обратно в текстовые файлы.

Работу процедуры сохранения данных в файл отображает рисунок 4.1.

3. РАЗРАБОТКА ПРОГРАММНОГО СРЕДСТВА

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

В записи zakaz определены следующие поля, содержащие данные о заказе:

- name:string; - название товара;

- number:integer; - номер товара;

- adress:string; - адрес доставки заказа;

- othour:time; - с какого времени осуществляется доставка;

- dohour:time; - до какого времени необходимо доставить заказ;

- ves:integer; - вес товара;

- volume:integer; - объем товара;

- next:Tzakaz; - указатель на следующий элемент списка;

- addToCour:boolean; - логический элемент, отображающий добавление заказа какому-либо курьеру;

В записи courier определены следующие поля, характеризующие курьера:

- number:integer; - номер курьера;

- fiocour:string; - ФИО курьера;

- ottime:time; - с какого времени работает курьер;

- dotime:time; - до которого времени работает курьер;

- Volume:integer; - максимальный объем заказа, перевозимого курьером;

- weight:integer; - грузоподъемность автомобиля курьера;

- next:Tcourier; - указатель на следующий элемент списка;

- NowWeight:integer; - текущий вес заказов, добавленных курьеру;

- NowVolume:integer; - текущий объем, добавленный курьеру;

- PointZak:TCurZakaz; - указатель на список заказов данного курьера;

Поле PointZak записи courier содержит следующие поля:

- zak:Tzakaz; - указатель заказ данного курьера;

- next:TCurZakaz; - указатель на следующий элемент списка;

В программе используются следующие переменные:

istZak, listCour - указатели на начало списков курьеров и заказов;

temp, current, prev - указатели для работы со списками

Все остальные переменные являются вспомогательными или производными от выше изложеных.

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

Таблица 1 "Основные процедуры и функции"

Подпрограмма

Назначение

TMainWind.FormCreate(Sender: TObject);

Считывание данных с файлов, создание списков курьеров и заказов.

TMainWind.AddZakButtonClick(Sender: TObject);

Добавление нового заказа.

TMainWind.AddCourButtonClick;

Добавление нового курьера.

TMainWind.FormClose;

Сохранение данных в файлы.

TMainWind.DisplayCourList;

Вывод списка курьеров в форму.

TMainWind.DisplayZakList;

Вывод списка заказов в таблицу.

TMainWind.GetCourierByIndex;

Нахождение записи выделенного курьера.

TMainWind.FIOCourListBoxClick

Вывод в форму всех заказов курьера.

TMainWind.AddZakazToCur(zak:TZakaz):boolean;

Распределение заказов по курьерам.

TMainWind.ChangeCourButtonClick(Sender: TObject);

Редактирование записи курьера.

TMainWind.DeleteCourButtonClick(Sender: TObject);

Удаление записи курьера.

TMainWind.ChangeZakButtonClick(Sender: TObject);

Редактирование записи заказа.

TMainWind.DeleteZakButtonClick(Sender: TObject);

Удаление заказа.

4. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

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

Рисунок 5.1

Перемещение между кнопками осуществляется курсором. Выбор конкретной функции происходит по нажатию на кнопку.

Для добавления заказа необходимо нажать на пункт Добавление, после чего в появившемся окне (Рисунок 5.2.) ввести нужную информацию и нажать кнопку подтверждения. Далее произойдет добавление новой записи и ее распределение курьеру. После нажатия кнопки Сохранить окно автоматически закроется.

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

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

Рисунок 5.2.

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

Выход из программы. Для осуществления выхода из программы достаточно закрыть окно главной формы.

Прочее. Для корректной работы программного средства в папке с программой должны находиться файлы courierи zakaz с символьным представлением данных записей.

СПИСОК ЛИТЕРАТУРЫ

1.Бобровский, С.И., Delphi 7. Учебный курс. - СПб.: Питер, 2004.- 736с.

2.Фаронов, В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие / В.В.Фаронов. М. : Издательство "ОМД групп", 2003. - 616с.

3.Глухова Л. А., ФадееваЕ.П., ФадееваЕ.Е. Основы алгоритмизации программирования: Лаб. Практикум для студ. спец. I-40 01 01 "Программное обеспечение информационных технологий" дневной формы обуч. В 4 ч. Ч.2. -Мн.: БГУИР, 2005.

ПРИЛОЖЕНИЕ

ТЕКСТ ПРОГРАММЫ

unit MainWindowUnit;

interface

uses

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

Dialogs, StdCtrls, ExtCtrls, NewOrderUnit, GlobalTypes, NewCourierUnit,

EditCourUnit, Grids, EditZakUnit;

type

TMainWind = class(TForm)

TableGroupBox: TGroupBox;

GroupBox2: TGroupBox;

ZakazGroupBox: TGroupBox;

AddCourButton: TButton;

ChangeCourButton: TButton;

DeleteCourButton: TButton;

AddZakButton: TButton;

ChangeZakButton: TButton;

DeleteZakButton: TButton;

MemoCour: TMemo;

FIOCourListBox: TListBox;

OtTimeCourListBox: TListBox;

DoTimeCourListBox: TListBox;

VolumeCourListBox: TListBox;

WeightCourListBox: TListBox;

FIOCourLabel: TLabel;

OtTimeCourLabel: TLabel;

DoTimeCourLabel: TLabel;

VolumeCourLabel: TLabel;

WeightCourLabel: TLabel;

ZakListLabel: TLabel;

ListZakStringGrid: TStringGrid;

procedure AddZakButtonClick(Sender: TObject);

procedure AddCourButtonClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

procedure DisplayCourList;

Procedure DisplayZakList;

Procedure Number;

Procedure NumberZak;

procedure FIOCourListBoxClick(Sender: TObject);

procedure OtTimeCourListBoxClick(Sender: TObject);

procedure DoTimeCourListBoxClick(Sender: TObject);

procedure VolumeCourListBoxClick(Sender: TObject);

procedure WeightCourListBoxClick(Sender: TObject);

function AddZakazToCur(zak:TZakaz):boolean;

function GetCourierByIndex(index:integer;var prevCour:Tcourier):TCourier;

procedure ChangeCourButtonClick(Sender: TObject);

procedure DeleteCourButtonClick(Sender: TObject);

procedure ChangeZakButtonClick(Sender: TObject);

procedure DeleteZakButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainWind: TMainWind;

zak:zakaz;

cour:courier;

listZak:Tzakaz;

listCour:TCourier;

implementation

{$R *.dfm}

{Добавление нового заказа}

procedure TMainWind.AddZakButtonClick(Sender: TObject);

var

temp,current,prev:Tzakaz;

i:integer;

begin

NewZakForm.ShowModal;

if(NewOrderUnit.ifAddButClick=true) then

begin

temp:=NewOrderUnit.newZak;

temp.addToCour:=false;

AddZakazToCur(temp);

If ListZak=nil then

begin

ListZak:=temp;

ListZak.number:=1;

ListZak.next:=nil;

end

else

begin

i:=1;

current:=ListZak;

While current<>nil do

begin

if current.dohour.hour>temp.dohour.hour then

break

else

if current.dohour.hour=temp.dohour.hour then

if current.dohour.min>=temp.dohour.min then

break;

prev:=current;

current:=current.next;

inc(i);

end;

if i=1 then

begin

temp.next:=listZak;

listZak:=temp;

end

else

begin

temp.next:=current;

prev.next:=temp;

end;

end;

numberZak;

DisplayZakList;

end;

end;

{Добавление нового курьера}

procedure TMainWind.AddCourButtonClick(Sender: TObject);

var

tempCour,CurrCour,PrevCour:TCourier;

j:integer;

begin

NewCourForm.ShowModal;

if(NewCourierUnit.ifAddButClick=true) then

begin

tempCour:=NewCourierUnit.NewCour;

If ListCour=nil then

begin

ListCour:=tempCour;

ListCour.number:=1;

ListCour.next:=nil;

end

else

begin

j:=1;

currCour:=ListCour;

While currCour<>nil do

begin

if currCour.dotime.hour>tempCour.dotime.hour then

break

else

if currCour.dotime.hour=tempCour.dotime.hour then

if currCour.dotime.min>=tempCour.dotime.min then

break;

prevCour:=currCour;

currCour:=currCour.next;

inc(j);

end;

if j=1 then

begin

tempCour.next:=ListCour;

ListCour:=tempCour;

end

else

begin

tempCour.next:=currCour;

prevCour.next:=tempCour;

end;

end;

Number;

DisplayCourList;

end;

end;

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

procedure TMainWind.FormClose(Sender: TObject; var Action: TCloseAction);

var

f1:textfile;

currZak:Tzakaz;

currCur:TCourier;

begin

assignfile(f1,'zakaz.txt');

rewrite(f1);

currZak:=listZak;

while currZak<>nil do

begin

writeln(f1,currZak.number);

writeln(f1,currZak.name);

writeln(f1,currZak.adress);

writeln(f1,currZak.othour.hour);

writeln(f1,currZak.othour.min);

writeln(f1,currZak.dohour.hour);

writeln(f1,currZak.dohour.min);

writeln(f1,currZak.volume);

writeln(f1,currZak.ves);

currZak:=currZak.next;

end;

closefile(f1);

assignfile(f1,'courier.txt');

rewrite(f1);

currCur:=listCour;

while currCur<>nil do

begin

writeln(f1,currCur.number);

writeln(f1,currCur.fiocour);

writeln(f1,currCur.ottime.hour);

writeln(f1,currCur.ottime.min);

writeln(f1,currCur.dotime.hour);

writeln(f1,currCur.dotime.min);

writeln(f1,currCur.volume);

writeln(f1,currCur.weight);

currCur:=currCur.next;

end;

closefile(f1);

end;

{Считывание данных при открытии}

procedure TMainWind.FormCreate(Sender: TObject);

var

f1:textfile;

currZak,prevZak:Tzakaz;

currCur,prevCur:TCourier;

begin

assignfile(f1,'zakaz.txt');

reset(f1);

prevZak:=nil;

while not eof(f1) do

begin

new(currZak);

readln(f1,currZak.number);

readln(f1,currZak.name);

readln(f1,currZak.adress);

readln(f1,currZak.othour.hour);

readln(f1,currZak.othour.min);

readln(f1,currZak.dohour.hour);

readln(f1,currZak.dohour.min);

readln(f1,currZak.volume);

readln(f1,currZak.ves);

currZak.addToCour:=false;

if(prevzak=nil) then

listZak:=currZak

else

prevZak.next:=currZak;

prevZak:=currZak;

end;

if(prevZak<>nil) then

prevZak.next:=nil;

closefile(f1);

NumberZak;

DisplayZakList;

assignfile(f1,'courier.txt');

reset(f1);

prevCur:=nil;

while not eof(f1) do

begin

new(currCur);

readln(f1,currCur.number);

readln(f1,currCur.fiocour);

readln(f1,currCur.ottime.hour);

readln(f1,currCur.ottime.min);

readln(f1,currCur.dotime.hour);

readln(f1,currCur.dotime.min);

readln(f1,currCur.volume);

readln(f1,currCur.weight);

currCur.NowWeight:=0;

currCur.NowVolume:=0;

currCur.PointZak:=nil;

if(prevCur=nil) then

listCour:=currCur

else

prevCur.next:=currCur;

prevCur:=currCur;

end;

if(prevCur<>nil) then

prevCur.next:=nil;

closefile(f1);

currZak:=listZak;

while(currZak<>nil) do

begin

AddZakazToCur(currZak);

currZak:=currZak.next;

end;

Number;

DisplayCourList;

end;

{Вывод списка курьеров в форму}

procedure TMainWind.DisplayCourList;

var

CurrCourList:TCourier;

begin

FIOCourListBox.Clear;

OtTimeCourListBox.Clear;

DoTimeCourListBox.Clear;

VolumeCourListBox.Clear;

WeightCourListBox.Clear;

CurrCourList:=ListCour;

while CurrCourList<>nil do

begin

FIOCourListBox.Items.Add(IntToStr(CurrCourList.number)+')'+CurrCourList.fiocour);

OtTimeCourListBox.Items.Add('Hour:'+IntToStr(CurrCourList.ottime.hour)+' Min:'+IntToStr(CurrCourList.ottime.min));

DoTimeCourListBox.Items.Add('Hour:'+IntToStr(CurrCourList.dotime.hour)+' Min:'+IntToStr(CurrCourList.dotime.min));

VolumeCourListBox.Items.Add(IntToStr(CurrCourList.Volume));

WeightCourListBox.Items.Add(IntToStr(CurrCourList.Weight));

CurrCourList:=CurrCourList.next;

end;

end;

//вывод списка заказов в таблицу//

Procedure TMainWind.DisplayZakList;

var

currZak:TZakaz;

i:integer;

begin

for i:=0 to ListZakStringGrid.RowCount-1 do

ListZakStringGrid.Rows[i].Clear;

with ListZakStringGrid do

begin

Cells[0,0]:='?';

Cells[1,0]:='Eiy';

Cells[2,0]:='aa?an';

Cells[3,0]:='a?aiy ';

Cells[4,0]:='ainoaaee n:';

Cells[5,0]:='ai:';

Cells[7,0]:='aan';

Cells[8,0]:='iauai';

end;

currZak:=ListZak;

while currZak<>nil do

begin

with ListZakStringGrid do

begin

Cells[0,currZak.number]:=IntToStr(currZak.number);

Cells[1,currZak.number]:=currZak.name;

Cells[2,currZak.number]:=currZak.adress;

Cells[3,currZak.number]:=IntToStr(currZak.othour.hour);

Cells[4,currZak.number]:=IntToStr(currZak.othour.min);

Cells[5,currZak.number]:=IntToStr(currZak.dohour.hour);

Cells[6,currZak.number]:=IntToStr(currZak.dohour.min);

Cells[7,currZak.number]:=IntToStr(currZak.ves);

Cells[8,currZak.number]:=IntToStr(currZak.volume);

end;

currZak:=currZak.next;

end;

end;

{Присваивание номеров курьерам}

Procedure TMainWind.Number;

var

CurrCourList:Tcourier;

i:integer;

begin

i:=1;

CurrCourList:=ListCour;

while CurrCourList<>nil do

begin

CurrCourList.number:=i;

CurrCourList:=CurrCourList.next;

inc(i);

end;

end;

{Присваивание номеров заказам}

Procedure TMainWind.NumberZak;

var

CurrZakList:TZakaz;

i:integer;

begin

i:=1;

CurrZakList:=ListZak;

while CurrZakList<>nil do

begin

CurrZakList.number:=i;

CurrZakList:=CurrZakList.next;

inc(i);

end;

end;

procedure TMainWind.FIOCourListBoxClick(Sender: TObject);

var

curZak:TCurZakaz;

prev:Tcourier;

begin

IF FIOCourListBox.ItemIndex>=0 then

begin

DoTimeCourListBox.ItemIndex:=FIOCourListBox.ItemIndex;

OtTimeCourListBox.ItemIndex:=FIOCourListBox.ItemIndex;

VolumeCourListBox.ItemIndex:=FIOCourListBox.ItemIndex;

WeightCourListBox.ItemIndex:=FIOCourListBox.ItemIndex;

MemoCour.Clear;

curZak:=GetCourierByIndex(FIOCourListBox.ItemIndex,prev).PointZak;

while(curZak<>nil)do

begin

MemoCour.Lines.Add(curZak.zak.name+' '+curZak.zak.adress+' n:'+IntToStr(curZak.zak.othour.hour)+'.'+IntToStr(curZak.zak.othour.min)+' ai:'+IntToStr(curZak.zak.dohour.hour)+'.'+IntToStr(curZak.zak.dohour.min)+' aan:'+IntToStr(curZak.zak.ves)+' iauai:'+IntToStr(curZak.zak.volume));

curZak:=curZak.next;

end;

end;

end;

{нахождение записи выделенного курьера}

function TMainWind.GetCourierByIndex(index:integer;var prevCour:Tcourier):TCourier;

var

temp, curCour:Tcourier;

i:integer;

begin

curCour:=listCour;

i:=0;

while (i<index) and (curCour<>nil) do

begin

prevCour:=CurCour;

CurCour:=curCour.next;

inc(i);

end;

GetCourierByIndex:=curCour;

end;

procedure TMainWind.OtTimeCourListBoxClick(Sender: TObject);

var

curZak:TCurZakaz;

prev:Tcourier;

begin

IF OtTimeCourListBox.ItemIndex>=0 then

begin

FIOCourListBox.ItemIndex:=OtTimeCourListBox.ItemIndex;

DoTimeCourListBox.ItemIndex:=OtTimeCourListBox.ItemIndex;

VolumeCourListBox.ItemIndex:=OtTimeCourListBox.ItemIndex;

WeightCourListBox.ItemIndex:=OtTimeCourListBox.ItemIndex;

MemoCour.Clear;

curZak:=GetCourierByIndex(OtTimeCourListBox.ItemIndex,prev).PointZak;

while(curZak<>nil)do

begin

MemoCour.Lines.Add(curZak.zak.name+' '+curZak.zak.adress+' n:'+IntToStr(curZak.zak.othour.hour)+'.'+IntToStr(curZak.zak.othour.min)+' ai:'+IntToStr(curZak.zak.dohour.hour)+'.'+IntToStr(curZak.zak.dohour.min)+' aan:'+IntToStr(curZak.zak.ves)+' iauai:'+IntToStr(curZak.zak.volume));

curZak:=curZak.next;

end;

end;

end;

procedure TMainWind.DoTimeCourListBoxClick(Sender: TObject);

var

curZak:TCurZakaz;

prev:Tcourier;

begin

IF DoTimeCourListBox.ItemIndex>=0 then

begin

FIOCourListBox.ItemIndex:=DoTimeCourListBox.ItemIndex;

OtTimeCourListBox.ItemIndex:=DoTimeCourListBox.ItemIndex;

VolumeCourListBox.ItemIndex:=DoTimeCourListBox.ItemIndex;

WeightCourListBox.ItemIndex:=DoTimeCourListBox.ItemIndex;

MemoCour.Clear;

curZak:=GetCourierByIndex(DoTimeCourListBox.ItemIndex,prev).PointZak;

while(curZak<>nil)do

begin

MemoCour.Lines.Add(curZak.zak.name+' '+curZak.zak.adress+' n:'+IntToStr(curZak.zak.othour.hour)+'.'+IntToStr(curZak.zak.othour.min)+' ai:'+IntToStr(curZak.zak.dohour.hour)+'.'+IntToStr(curZak.zak.dohour.min)+' aan:'+IntToStr(curZak.zak.ves)+' iauai:'+IntToStr(curZak.zak.volume));

curZak:=curZak.next;

end;

end;

end;

procedure TMainWind.VolumeCourListBoxClick(Sender: TObject);

var

curZak:TCurZakaz;

prev:Tcourier;

begin

IF VolumeCourListBox.ItemIndex>=0 then

begin

FIOCourListBox.ItemIndex:=VolumeCourListBox.ItemIndex;

OtTimeCourListBox.ItemIndex:=VolumeCourListBox.ItemIndex;

DoTimeCourListBox.ItemIndex:=VolumeCourListBox.ItemIndex;

WeightCourListBox.ItemIndex:=VolumeCourListBox.ItemIndex;

MemoCour.Clear;

curZak:=GetCourierByIndex(VolumeCourListBox.ItemIndex,prev).PointZak;

while(curZak<>nil)do

begin

MemoCour.Lines.Add(curZak.zak.name+' '+curZak.zak.adress+' n:'+IntToStr(curZak.zak.othour.hour)+'.'+IntToStr(curZak.zak.othour.min)+' ai:'+IntToStr(curZak.zak.dohour.hour)+'.'+IntToStr(curZak.zak.dohour.min)+' aan:'+IntToStr(curZak.zak.ves)+' iauai:'+IntToStr(curZak.zak.volume));

curZak:=curZak.next;

end;

end;

end;

procedure TMainWind.WeightCourListBoxClick(Sender: TObject);

var

curZak:TCurZakaz;

prev:Tcourier;

begin

IF WeightCourListBox.ItemIndex>=0 then

begin

FIOCourListBox.ItemIndex:=WeightCourListBox.ItemIndex;

OtTimeCourListBox.ItemIndex:=WeightCourListBox.ItemIndex;

DoTimeCourListBox.ItemIndex:=WeightCourListBox.ItemIndex;

VolumeCourListBox.ItemIndex:=WeightCourListBox.ItemIndex;

MemoCour.Clear;

curZak:=GetCourierByIndex(WeightCourListBox.ItemIndex,prev).PointZak;

while(curZak<>nil)do

begin

MemoCour.Lines.Add(curZak.zak.name+' '+curZak.zak.adress+' n:'+IntToStr(curZak.zak.othour.hour)+'.'+IntToStr(curZak.zak.othour.min)+' ai:'+IntToStr(curZak.zak.dohour.hour)+'.'+IntToStr(curZak.zak.dohour.min)+' aan:'+IntToStr(curZak.zak.ves)+' iauai:'+IntToStr(curZak.zak.volume));

curZak:=curZak.next;

end;

end;

end;

{Добавление заказов курьерам}

function TMainWind.AddZakazToCur(zak:TZakaz):boolean;

var

curCur:Tcourier;

curCurZak,prevCurZak,temp:TCurZakaz;

Begin

if(zak = nil) then exit;

curCur:=listCour;

while(curCur<>nil)do

begin

if (zak.addToCour) then break;

if(curCur.Volume-curCur.NowVolume>=zak.volume) then

if(curCur.weight-curCur.NowWeight>=zak.ves) then

if (((curCur.ottime.hour<zak.othour.hour) or((curCur.ottime.hour=zak.othour.hour) and (curCur.ottime.min<=zak.othour.min))) and

((curCur.dotime.hour>zak.othour.hour) or (( curCur.dotime.hour=zak.othour.hour) and (curCur.dotime.min>=zak.othour.min)))) or

(((curCur.ottime.hour<zak.dohour.hour) or((curCur.ottime.hour=zak.dohour.hour) and (curCur.ottime.min<=zak.dohour.min))) and

((curCur.dotime.hour>zak.dohour.hour) or (( curCur.dotime.hour=zak.dohour.hour) and (curCur.dotime.min>=zak.dohour.min)))) or

(((curCur.ottime.hour>zak.othour.hour) or((curCur.ottime.hour=zak.othour.hour) and (curCur.ottime.min>=zak.othour.min))) and

((curCur.dotime.hour<zak.othour.hour) or (( curCur.dotime.hour=zak.othour.hour) and (curCur.dotime.min<=zak.othour.min))))

then

begin

new(temp);

temp.zak:=zak;

temp.next:=curCur.PointZak;

curCur.PointZak:=temp;

curCur.NowWeight:=curCur.NowWeight+zak.ves;

curCur.NowVolume:=CurCur.NowVolume+zak.volume;

zak.addToCour:=true;

break;

end;

curCur:=curCur.next;

end;

AddZakazToCur:=zak.addToCour;

end;

{Редактирование курьеров}

procedure TMainWind.ChangeCourButtonClick(Sender: TObject);

var

CurrListZak:TCurZakaz;

CurrZak:TZakaz;

Prev:Tcourier;

begin

tempBuffer:=GetCourierByIndex(FIOCourListBox.ItemIndex,prev);

EditCourForm.ShowModal;

if EditCourUnit.ifEditButClick=true then

begin

CurrListZak:=tempBuffer.PointZak;

tempBuffer.PointZak:=nil;

while CurrListZak<>nil do

begin

CurrListZak.zak.addToCour:=false;

CurrListZak:=CurrListZak.next;

end;

currZak:=ListZak;

while currZak<>nil do

begin

AddZakazToCur(currZak);

currZak:=currZak.next;

end;

DisplayCourList;

end;

end;

{Удаление курьеров}

procedure TMainWind.DeleteCourButtonClick(Sender: TObject);

var

DelCour,PrevCour:TCourier;

CourZakBuff:TCurZakaz;

begin

PrevCour:=nil;

DelCour:=GetCourierByIndex(FIOCourListBox.ItemIndex,prevCour);

if FIOCourListBox.ItemIndex=0 then

begin

CourZakBuff:=DelCour.PointZak;

ListCour:=DelCour.next;

dispose(DelCour);

end

else

begin

CourZakBuff:=DelCour.PointZak;

prevCour.next:=DelCour.next;

end;

while courZakBuff<>nil do

begin

CourZakBuff.zak.addToCour:=false;

AddZakazToCur(CourZakBuff.zak);

CourZakBuff:=CourZakBuff.next;

end;

number;

DisplayCourList;

end;

{Редактирование заказов}

procedure TMainWind.ChangeZakButtonClick(Sender: TObject);

var

currZak,temp:Tzakaz;

begin

If ListZakStringGrid.Row>=0 then

begin

currZak:=listZak;

while currZak.number<>ListZakStringGrid.Row do

currZak:=currZak.next;

tempBufZak:=currZak;

ChangeZakForm.ShowModal;

end;

DisplayZakList;

AddZakazToCur(tempBufZak);

end;

{Удаление заказов}

procedure TMainWind.DeleteZakButtonClick(Sender: TObject);

var

Prev,DelZak,curZakCour:Tzakaz;

PrevZak,CurrZak:TCurZakaz;

CurrCour:Tcourier;

ifZakDelete:boolean;

begin

ifZakDelete:=false;

DelZak:=ListZak;

Prev:=nil;

while DelZak.number<>ListZakStringGrid.Row do

begin

prev:=delZak;

DelZak:=DelZak.next;

end;

currCour:=ListCour;

while CurrCour<>nil do

begin

prevZak:=nil;

currZak:=CurrCour.PointZak;

While currZak<>nil do

begin

If currZak.zak.number=DelZak.number then

begin

if prevZak=nil then

begin

CurrCour.PointZak:=CurrZak.next;

dispose(currZak);

end

else

begin

PrevZak.next:=currZak.next;

dispose(currZak);

end;

ifZakDelete:=true;

break;

end;

PrevZak:=CurrZak;

currzak:=currzak.next;

end;

if not ifZakDelete then

CurrCour:=CurrCour.next

else

break;

end;

if prev=nil then

begin

listZak:=DelZak.next;

dispose(DelZak);

end

else

begin

Prev.next:=DelZak.next;

dispose(DelZak);

end;

NumberZak;

DisplayZakList;

curZakCour:=ListZak;

while curZakCour<>nil do

begin

AddZakazToCur(CurZakCour);

curZakCour:=curZakCour.next;

end;

MemoCour.Clear;

DisplayCourList;

end;

end.

unit GlobalTypes;

interface

Type

time=record

hour:integer;

min:integer;

end;

Tzakaz=^zakaz;

zakaz=record

name:string;

number:integer;

adress:string;

othour:time;

dohour:time;

ves:integer;

volume:integer;

next:Tzakaz;

addToCour:boolean;

end;

TCurZakaz=^curZakaz;

curZakaz=record

zak:Tzakaz;

next:TCurZakaz;

end;

Tcourier=^courier;

courier=record

number:integer;

fiocour:string;

ottime:time;

dotime:time;

//time:integer;

Volume:integer;

weight:integer;

next:Tcourier;

NowWeight:integer;

NowVolume:integer;

PointZak:TCurZakaz;

end;

var

tempBuffer:Tcourier;

tempBufZak:Tzakaz;

implementation

end.

unit NewCourierUnit;

interface

uses

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

Dialogs, StdCtrls, GlobalTypes;

type

TNewCourForm = class(TForm)

AddCourGroupBox: TGroupBox;

FIOCourEdit: TEdit;

OtHourCourEdit: TEdit;

DoHourCourEdit: TEdit;

VolCourEdit: TEdit;

WeightCourEdit: TEdit;

OtMinCourEdit: TEdit;

DoMinCourEdit: TEdit;

AddCourButton: TButton;

FIOCourLabel: TLabel;

OtTimeLabel: TLabel;

DoTimeLabel: TLabel;

VolCourLabel: TLabel;

WeightCourLabel: TLabel;

procedure FormCreate(Sender: TObject);

procedure AddCourButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

NewCourForm: TNewCourForm;

NewCour:TCourier;

ifAddButClick: boolean;

implementation

{$R *.dfm}

procedure TNewCourForm.FormCreate(Sender: TObject);

begin

ifAddButClick:=false;

end;

procedure TNewCourForm.AddCourButtonClick(Sender: TObject);

var

FIO:string;

OtHour,OtMinute,DoHour,DoMinute,Volume,Weight:integer;

begin

ifAddButClick:=false;

FIO:=FIOCourEdit.Text;

If FIO='' then

begin

ShowMessagePos('Wrong FIO',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtHour:=StrToInt(OtHourCourEdit.Text);

if(OtHour<0)or(OtHour>23) then

raise Exception.Create('error with hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey ia?aea a?aiaie ?aaiou',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtMinute:=StrToInt(OtMinCourEdit.Text);

if(OtMinute<0)or(OtMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ?aaiou',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoHour:=StrToInt(DoHourCourEdit.Text);

if(DoHour<0)or(DoHour>23) then

raise Exception.Create('error with Hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey eiioa a?aiaie ?aaiou',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoMinute:=StrToInt(DoMinCourEdit.Text);

if(DoMinute<0)or(DoMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ?aaiou',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if OtHour>DoHour then

raise Exception.Create('error with time');

end;

except

ShowMessagePos('Ioeaea ?acieou a?aiaie',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if (OtHour=DoHour) and (OtMinute>DoMinute) then

raise Exception.Create('error with time');

end;

except

ShowMessagePos('Ioeaea ?acieou a?aiaie',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if VolCourEdit.Text='' then

raise Exception.Create('error with volum');

end;

except

ShowMessagePos('Ioeaea a iiea Iauai',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

Volume:=StrToInt(VolCourEdit.Text);

If Volume<=0 then

Begin

ShowMessagePos('Wrong volume',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

if WeightCourEdit.Text='' then

raise Exception.Create('error with weight');

end;

except

ShowMessagePos('Ioeaea a iiea Aan',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

Weight:=StrToInt(WeightCourEdit.Text);

If Weight<=0 then

Begin

ShowMessagePos('Wrong weight',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

ifAddButClick:=true;

//создание списка курьеров

new(NewCour);

NewCour.fiocour:=fio;

NewCour.ottime.hour:=OtHour;

NewCour.ottime.min:=OtMinute;

NewCour.dotime.hour:=DoHour;

NewCour.dotime.min:=DoMinute;

NewCour.Volume:=volume;

NewCour.weight:=Weight;

NewCour.NowWeight:=0;

NewCour.NowVolume:=0;

NewCour.PointZak:=nil;

NewCourForm.Close();

end;

end.

unit NewOrderUnit;

interface

uses

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

Dialogs, StdCtrls, GlobalTypes;

type

TNewZakForm = class(TForm)

ChangeZakGroupBox: TGroupBox;

NameZakEdit: TEdit;

AdrZakEdit: TEdit;

OtHourEdit: TEdit;

DoHourEdit: TEdit;

VolEdit: TEdit;

VesEdit: TEdit;

NameZakLabel: TLabel;

AdrLabel: TLabel;

OtTimeZakLabel: TLabel;

DoTimeZakLabel: TLabel;

VolZakLabel: TLabel;

WeightZakLabel: TLabel;

NewAddZakButton: TButton;

OtMinuteEdit: TEdit;

DoMinuteEdit: TEdit;

procedure FormCreate(Sender: TObject);

procedure NewAddZakButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

NewZakForm: TNewZakForm;

newZak:Tzakaz;

ifAddButClick:boolean;

implementation

{$R *.dfm}

procedure TNewZakForm.FormCreate(Sender: TObject);

begin

ifAddButClick:=false;

end;

procedure TNewZakForm.NewAddZakButtonClick(Sender: TObject);

var

name,adress:string;

OtHour,OtMinute,DoHour,DoMinute,Volume,Weight:integer;

begin

ifAddButClick:=false;

name:=NameZakEdit.Text;

If name='' then

begin

ShowMessagePos('Wrong name',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

adress:=AdrZakEdit.Text;

If adress='' then

begin

ShowMessagePos('Wrong adress',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtHour:=StrToInt(OtHourEdit.Text);

if(OtHour<0)or(OtHour>23) then

raise Exception.Create('error with hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey ia?aea a?aiaie ainoaaee',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtMinute:=StrToInt(OtMinuteEdit.Text);

if(OtMinute<0)or(OtMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ainoaaee',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoHour:=StrToInt(DoHourEdit.Text);

if(DoHour<0)or(DoHour>23) then

raise Exception.Create('error with Hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey eiioa a?aiaie ainoaaee',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoMinute:=StrToInt(DoMinuteEdit.Text);

if(DoMinute<0)or(DoMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ainoaaee',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if OtHour>DoHour then

raise Exception.Create('error with time');

end;

except

ShowMessagePos('Ioeaea ?acieou a?aiaie',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if (OtHour=DoHour) and (OtMinute>DoMinute) then

raise Exception.Create('error with time');

end;

except

ShowMessagePos('Ioeaea ?acieou a?aiaie',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if VolEdit.Text='' then

raise Exception.Create('error with volum');

end;

except

ShowMessagePos('Ioeaea a iiea Iauai',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

Volume:=StrToInt(VolEdit.Text);

If Volume<=0 then

Begin

ShowMessagePos('Wrong volume',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

if VesEdit.Text='' then

raise Exception.Create('error with weight');

end;

except

ShowMessagePos('Ioeaea a iiea Aan',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

Weight:=StrToInt(VesEdit.Text);

If Weight<=0 then

Begin

ShowMessagePos('Wrong weight',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

//nicaaiea nienea

ifAddButClick:=true;

New(NewZak);

NewZak.name:= name;

NewZak.adress:=adress;

NewZak.othour.hour:=othour;

NewZak.othour.min:=otminute;

NewZak.dohour.hour:=dohour;

NewZak.dohour.min:=dominute;

NewZak.volume:=volume;

NewZak.ves:=weight;

NewZakForm.Close();

end;

end.

unit EditCourUnit;

interface

uses

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

Dialogs, StdCtrls, GlobalTypes;

type

TEditCourForm = class(TForm)

EditCourGroupBox: TGroupBox;

EditFIOCourLabel: TLabel;

EditOtTimeLabel: TLabel;

EditDoTimeLabel: TLabel;

EditVolCourLabel: TLabel;

EditWeightCourLabel: TLabel;

EditFIOCourEdit: TEdit;

EditOtHourCourEdit: TEdit;

EditDoHourCourEdit: TEdit;

EditVolCourEdit: TEdit;

EditOtMinCourEdit: TEdit;

EditDoMinCourEdit: TEdit;

EditCourButton: TButton;

EditWeightCourEdit: TEdit;

procedure FormCreate(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure EditCourButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

EditCourForm: TEditCourForm;

EditCour:TCourier;

ifEditButClick: boolean;

implementation

{$R *.dfm}

procedure TEditCourForm.FormCreate(Sender: TObject);

begin

ifEditButClick:=false;

end;

procedure TEditCourForm.FormActivate(Sender: TObject);

begin

EditFIOCourEdit.Text:=GlobalTypes.tempBuffer.fiocour;

EditOtHourCourEdit.Text:=IntToStr(tempBuffer.ottime.hour);

EditOtMinCourEdit.Text:=IntToStr(tempBuffer.ottime.min);

EditDoHourCourEdit.Text:=IntToStr(tempBuffer.dotime.hour);

EditDoMinCourEdit.Text:=IntToStr(tempBuffer.dotime.min);

EditVolCourEdit.Text:=IntToStr(tempBuffer.Volume);

EditWeightCourEdit.Text:=IntToStr(tempBuffer.weight);

end;

procedure TEditCourForm.EditCourButtonClick(Sender: TObject);

var

FIO:string;

OtHour,OtMinute,DoHour,DoMinute,Volume,Weight:integer;

begin

ifEditButClick:=false;

FIO:=EditFIOCourEdit.Text;

If FIO='' then

begin

ShowMessagePos('Wrong FIO',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtHour:=StrToInt(EditOtHourCourEdit.Text);

if(OtHour<0)or(OtHour>23) then

raise Exception.Create('error with hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey ia?aea a?aiaie ?aaiou',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtMinute:=StrToInt(EditOtMinCourEdit.Text);

if(OtMinute<0)or(OtMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ?aaiou',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoHour:=StrToInt(EditDoHourCourEdit.Text);

if(DoHour<0)or(DoHour>23) then

raise Exception.Create('error with Hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey eiioa a?aiaie ?aaiou',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoMinute:=StrToInt(EditDoMinCourEdit.Text);

if(DoMinute<0)or(DoMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ?aaiou',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if OtHour>DoHour then

raise Exception.Create('error with time');

end;

except

ShowMessagePos('Ioeaea ?acieou a?aiaie',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if (OtHour=DoHour) and (OtMinute>DoMinute) then

raise Exception.Create('error with time');

end;

except

ShowMessagePos('Ioeaea ?acieou a?aiaie',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if EditVolCourEdit.Text='' then

raise Exception.Create('error with volum');

end;

except

ShowMessagePos('Ioeaea a iiea Iauai',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

Volume:=StrToInt(EditVolCourEdit.Text);

If Volume<=0 then

Begin

ShowMessagePos('Wrong volume',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

if EditWeightCourEdit.Text='' then

raise Exception.Create('error with weight');

end;

except

ShowMessagePos('Ioeaea a iiea Aan',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

Weight:=StrToInt(EditWeightCourEdit.Text);

If Weight<=0 then

Begin

ShowMessagePos('Wrong weight',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

ifEditButClick:=true;

tempBuffer.fiocour:=fio;

tempBuffer.ottime.hour:=OtHour;

tempBuffer.ottime.min:=OtMinute;

tempBuffer.dotime.hour:=DoHour;

tempBuffer.dotime.min:=DoMinute;

tempBuffer.Volume:=volume;

tempBuffer.weight:=Weight;

tempBuffer.NowWeight:=0;

tempBuffer.NowVolume:=0;

Close();

end;

end.

unit EditZakUnit;

interface

uses

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

Dialogs, StdCtrls, GlobalTypes, Grids;

type

TChangeZakForm = class(TForm)

AddGroupBox: TGroupBox;

NameZakLabel: TLabel;

AdrLabel: TLabel;

OtTimeZakLabel: TLabel;

DoTimeZakLabel: TLabel;

VolZakLabel: TLabel;

WeightZakLabel: TLabel;

NameChangeZakEdit: TEdit;

AdrChangeZakEdit: TEdit;

ChangeOtHourEdit: TEdit;

ChangeDoHourEdit: TEdit;

ChangeVolEdit: TEdit;

ChangeVesEdit: TEdit;

ChangeZakButton: TButton;

ChangeOtMinuteEdit: TEdit;

ChangeDoMinuteEdit: TEdit;

procedure FormActivate(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ChangeZakButtonClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

ChangeZakForm: TChangeZakForm;

IfChangeButClick: boolean;

implementation

{$R *.dfm}

procedure TChangeZakForm.FormCreate(Sender: TObject);

begin

IfChangeButClick:=false;

end;

procedure TChangeZakForm.FormActivate(Sender: TObject);

begin

NameChangeZakEdit.Text:=tempBufZak.name;

AdrChangeZakEdit.Text:=tempBufZak.adress;

ChangeOtHourEdit.Text:=IntToStr(tempBufZak.othour.hour);

ChangeOtMinuteEdit.Text:=IntToStr(tempBufZak.othour.min);

ChangeDoHourEdit.Text:=IntToStr(tempBufZak.dohour.hour);

ChangeDoMinuteEdit.Text:=IntToStr(tempBufZak.dohour.min);

ChangeVesEdit.Text:=IntToStr(tempBufZak.ves);

ChangeVolEdit.Text:=IntToStr(tempBufZak.volume);

end;

procedure TChangeZakForm.ChangeZakButtonClick(Sender: TObject);

var

name,adress:string;

OtHour,OtMinute,DoHour,DoMinute,Volume,Weight:integer;

begin

ifChangeButClick:=false;

name:=NameChangeZakEdit.Text;

If name='' then

begin

ShowMessagePos('Wrong name',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

adress:=AdrChangeZakEdit.Text;

If adress='' then

begin

ShowMessagePos('Wrong adress',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtHour:=StrToInt(ChangeOtHourEdit.Text);

if(OtHour<0)or(OtHour>23) then

raise Exception.Create('error with hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey ia?aea a?aiaie ainoaaee',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

OtMinute:=StrToInt(ChangeOtMinuteEdit.Text);

if(OtMinute<0)or(OtMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ainoaaee',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoHour:=StrToInt(ChangeDoHourEdit.Text);

if(DoHour<0)or(DoHour>23) then

raise Exception.Create('error with Hour');

end;

except

ShowMessagePos('Ioeaea a iiea ?anu aey eiioa a?aiaie ainoaaee',Left+Width div 2-50,top + Height div 2-50);

exit;

end;

try

begin

DoMinute:=StrToInt(ChangeDoMinuteEdit.Text);

if(DoMinute<0)or(DoMinute>59) then

raise Exception.Create('error with minute');

end;

except

ShowMessagePos('Ioeaea a iiea Ieioou aey ia?aea a?aiaie ainoaaee',Left+Width div 2-50,top+Height div 2-50);

exit;

end;

try

begin

if OtHour>DoHour then


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

  • Создание автоматизированной системы – "Агентство по трудоустройству". Проектирование таблиц для хранения данных. Разработка запросов и отчетов, предназначенных для просмотра, редактирования и вывода информации. Разработка пользовательского интерфейса.

    курсовая работа [4,9 M], добавлен 29.01.2011

  • Технология разработки пользовательского интерфейса в среде Delphi. Создание таблицы, меню, форм для ввода и редактирования данных. Принципы организации меню как элемента интерфейса пользователя. Реализация сортировки, фильтрации, вычислений в таблице.

    курсовая работа [1,6 M], добавлен 13.11.2012

  • Формирование требований к системе. Описание входной и выходной информации. Концептуальное и логическое проектирование структуры и пользовательского интерфейса. Выбор средств реализации подсистемы. Реализация функциональности программного средства.

    курсовая работа [1,3 M], добавлен 28.08.2012

  • Формирование на экране меню для выбора функций. Элементы пользовательского интерфейса. Описание внутренних переменных, входных и выходных данных языка программирования Си. Выбор пользователем функции. Создание программы "Список коммерческих банков".

    курсовая работа [491,9 K], добавлен 17.03.2015

  • Разработка и программная реализация сайта и базы данных, наполнение базы данных тестовой информацией о товарах. Инструментальные средства создания сайта. Организация тестирования сайта, модуль визуализации интерфейса. Создание запросов в базе данных SQL.

    курсовая работа [1,4 M], добавлен 24.12.2012

  • Программная реализация настольного приложения с использованием языка программирования C#. Проектирование и структура пользовательского интерфейса, требования к нему и оценка функциональности. Разработка руководства пользователя и его использование.

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

  • Требования к составу и параметрам технических средств. Выбор языка программирования. Структурная схема программного продукта. Проектирование пользовательского интерфейса. Создание системы и заполнение базы данных. Разработка форм ввода-вывода информации.

    курсовая работа [1,2 M], добавлен 30.01.2016

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

    курсовая работа [1,2 M], добавлен 21.01.2011

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

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

  • Средства для отображения информации в виде отчетов для редактирования и занесения новых данных в систему. Графическая диаграмма IDEFO функциональной модели предметной области. Связи между атрибутами. Разработка пользовательского интерфейса системы.

    курсовая работа [2,3 M], добавлен 21.10.2012

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