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

бесплатно 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;

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

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





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