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

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

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

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

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

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

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

New(p1);

New(p2);(p3);

р1^ := 5;

р2^ := 3;

р3^ := р1^ + р2^;(Суммачиселравна + IntToStr(р3^));

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

Dispose(p1);

Dispose(р2);(р3);;

 

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

Списки

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

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

 

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

 

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

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

 

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

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

FIO: string[60]; // фамилия: integer; // номергруппы: string[60]; // домашний адрес: TPStudent; // указатель на следующий элемент списка;head: TPStudent; // указатель на первый элемент списка

 

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

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

=^TStudent; // указательнатип TStudent= record_name:string[20]; // фамилия_name: string[20]; // имя: TPStudent; // следующийэлементсписка

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

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

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

curr^.f_name := Сидоров;^. l _ name := Иван;

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

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

end;

 

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

 

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

 

var: TPStudent; // текущий элемент списка:integer; // длина (кол-во элементов) списка:string; // строковое представление списка:= 0; st := ;:= head; // указатель на первый элемент списка

while curr <> NIL do begin:= n + 1;:= st + curr^.f_name + + curr^.1_name+#13; := curr^.next; // указатель на следующий элемент;

 

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

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

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

 

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

 

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

 

 

Var р: ^integer;

begin

new(p);

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

 

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

 

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

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

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

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

 

 

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

 

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

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

) Первый этап заключается в загрузке в та