Программная реализация курьерского заказа - Курсовая работа

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


Аннотация к работе
Аналитический обзор литературы 1.1 Динамические структурыгде: имя - имя переменной-указателя; Тип - тип переменной, на которую указывает переменная-указатель; ^ - объявляемая переменная является указателем. Например, если в программе объявлен указатель р: ^integer, то говорят: ^р - "указатель целого типа" или "р - это указатель на целое". Помимо адреса переменной, указателю можно присвоить значение другого указателя при условии, что они являются указателями на переменную одного типа. Указатель можно использовать для доступа к переменной, адрес которой содержит указатель. Например, если р является указателем на тип real, то в результате выполнения процедуры new(p); будет выделена память для переменной типа real (создана переменная типа real), и переменная-указатель р будет содержать адрес памяти, выделенной для этой переменной.Чтобы предоставить пользователю возможность быстрого доступа к данным и комфортного их использования, в программе было задействовано минимальное количество элементов, на которые и возложено все управление программой. В частности такими элементами является таблица LISTZAKSTRINGGRID, в которую выводится список существующих заказов и информация о них, текстовая область MEMOCOUR, которая используется для вывода заказов текущего курьера, списки FIOCOURLISTBOX, OTTIMECOURLISTBOX, DOTIMECOURLISTBOX, WEIGHTCOURLISTBOX и VOLUMECOURLISTBOX для вывода данных о курьере и панели с несколькими кнопками: кнопки добавления, редактирования и удаления.Для работы с информацией, полученной из текстовых файлов, используются односвязные списки, такие как списки заказов и курьеров. В записи zakaz определены следующие поля, содержащие данные о заказе: - name:string; - название товара; dohour:time; - до какого времени необходимо доставить заказ; В записи courier определены следующие поля, характеризующие курьера: - number:integer; - номер курьера; Поле POINTZAK записи courier содержит следующие поля: - zak:Tzakaz; - указатель заказ данного курьера;При запуске программы пользователь увидит окно с управляющими элементами (кнопками), таблицей и несколькими списками (рисунок 5.1). Перемещение между кнопками осуществляется курсором. Выбор конкретной функции происходит по нажатию на кнопку. Для добавления заказа необходимо нажать на пункт Добавление, после чего в появившемся окне (Рисунок 5.2.) ввести нужную информацию и нажать кнопку подтверждения. После нажатия кнопки Сохранить окно автоматически закроется.SHOWMESSAGEPOS("Wrong FIO",Left Width div 2-50,top Height div 2-50); if(OTHOUR23) then raise Exception.Create("error with hour"); SHOWMESSAGEPOS("Ioeaea a iiea ?anu aey ia?aea a?aiaie ?aaiou",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Ioeaea a iiea Ieioou aey ia?aea a?aiaie ?aaiou",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Ioeaea a iiea ?anu aey eiioa a?aiaie ?aaiou",Left Width div 2-50,top Height div 2-50);SHOWMESSAGEPOS("Wrong volume",Left Width div 2-50,top Height div 2-50); try begin if WEIGHTCOUREDIT.Text="" then raise Exception.Create("error with weight"); SHOWMESSAGEPOS("Ioeaea a iiea Aan",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Wrong weight",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Wrong name",Left Width div 2-50,top Height div 2-50);SHOWMESSAGEPOS("Wrong volume",Left Width div 2-50,top Height div 2-50); try begin if VESEDIT.Text="" then raise Exception.Create("error with weight"); SHOWMESSAGEPOS("Ioeaea a iiea Aan",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Wrong weight",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Wrong FIO",Left Width div 2-50,top Height div 2-50);SHOWMESSAGEPOS("Wrong volume",Left Width div 2-50,top Height div 2-50); try begin if EDITWEIGHTCOUREDIT.Text="" then raise Exception.Create("error with weight"); SHOWMESSAGEPOS("Ioeaea a iiea Aan",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Wrong weight",Left Width div 2-50,top Height div 2-50); SHOWMESSAGEPOS("Wrong name",Left Width div 2-50,top Height div 2-50);Begin SHOWMESSAGEPOS("Wrong volume",Left Width div 2-50,top Height div 2-50); try begin if CHANGEVESEDIT.Text="" then raise Exception.

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

ВВЕДЕНИЕ

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

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

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

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

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

В работе задействованы динамические списки записей и типизированные файлы. Так же организован удобный пользовательский интерфейс для просмотра и редактирования информации. Этому способствовали методы, используемые средой разработки Delphi7. список программный пользовательский интерфейс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 currentnil 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 CURRCOURNIL 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 CURRZAKNIL 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 CURRCURNIL 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(PREVZAKNIL) 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(PREVCURNIL) then

PREVCUR.next:=nil;

closefile(f1);

CURRZAK:=LISTZAK;

while(CURRZAKNIL) 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 CURRCOURLISTNIL 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 CURRZAKNIL 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 CURRCOURLISTNIL 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 CURRZAKLISTNIL 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(CURZAKNIL)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 (inil) 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(CURZAKNIL)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(CURZAKNIL)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(CURZAKNIL)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(CURZAKNIL)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(CURCURNIL)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 CURRLISTZAKNIL do begin

CURRLISTZAK.zak.ADDTOCOUR:=false;

CURRLISTZAK:=CURRLISTZAK.next;

end;

CURRZAK:=LISTZAK;

while CURRZAKNIL 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 COURZAKBUFFNIL 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.NUMBERLISTZAKSTRINGGRID.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.NUMBERLISTZAKSTRINGGRID.Row do begin prev:=DELZAK;

DELZAK:=DELZAK.next;

end;

CURRCOUR:=LISTCOUR;

while CURRCOURNIL do begin

PREVZAK:=nil;

CURRZAK:=CURRCOUR.POINTZAK;

While CURRZAKNIL 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 CURZAKCOURNIL 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;
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?