42908

Разработка программы по учету покупок

Курсовая

Информатика, кибернетика и программирование

Стек – это линейный список в котором добавление новых элементов и удаление существующих производится только с одного конца называемого вершиной стека. Это сокращение помогает запомнить механизм работы стека. Значением указателя представляющего стек является ссылка на вершину стека и каждый элемент стека содержит поле ссылки на соседний нижний элемент.Описание процедур Процедура Функция Параметры Описание dd b:Integer Общее колво элементов p:TPElemВершина стека В стек добавляется элемент.

Русский

2013-10-31

4.71 MB

1 чел.

РОССИЙСКАЯ ФЕДЕРАЦИЯ

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО профессионального образования

ТЮМЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Институт математики, естественных наук

и информационных технологий

Кафедра программного обеспечения

КУРСОВАЯ РАБОТА

по курсу: «Информатика»

на тему: «Разработка программы по учету покупок»

Выполнил:

студент 126-2 группы

Рожина Софья

                 Павловна   

Проверил:

к.п.н., доцент                                                                          

Плотоненко Ю.А.

Тюмень, 2013

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ 2

ПОСТАНОВКА ЦЕЛИ И ЗАДАЧ РАБОТЫ 3

РЕАЛИЗАЦИЯ ПРОГРАММЫ 5

ОПИСАНИЕ АЛГОРИТМОВ. 9

РЕАЛИЗАЦИЯ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА 27

ЗАКЛЮЧЕНИЕ. 32

СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ 33

ПРИЛОЖЕНИЕ 1 34

ВВЕДЕНИЕ

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

Стек – это линейный список, в котором добавление новых элементов и удаление существующих производится только с одного конца, называемого вершиной стека. Стек часто называют структурой LIFO (сокращение LIFO означает Last In – First Out, т.е. последним пришел – первым вышел). Это сокращение помогает запомнить механизм работы стека.

Значением указателя, представляющего стек, является ссылка на вершину стека, и каждый элемент стека содержит поле ссылки на соседний, "нижний" элемент.

Работа состоит из 41 листов, содержит 19 рисунков и 1 таблицу. В разделе «Постановка цели и задач» написаны цель и задачи работы. В разделе «Описание алгоритмов» представлены процедуры работы со стеком. В разделе «Реализация пользовательского интерфейса» написана инструкция по использованию программы, с краткими пояснениями, скриншотами. В разделе «Заключение» представлены итоги курсовой работы. Указан «Список используемых источников», в котором перечислена литература, использованная при написании программы. В «Приложении 1» приводится код программы, код разбит на листинги.


ПОСТАНОВКА ЦЕЛИ И ЗАДАЧ РАБОТЫ

Цель

Разработка программы для хранения информации о совершенных покупках.

Задачи

1. Изучить технологию работы с динамическими структурами данных.

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

3.Реализовать алгоритмы с помощью языка программирования Delphi.

4.Провести отладку и тестирование программы.

5.Написать отчет о проделанной работе (вы его читаете).

Функционал программы

Предусмотреть возможность для хранения следующей информации:

  1.  наименование товара,
  2.  место покупки,
  3.  цена,
  4.  дата покупки.
  5.  Предусмотреть возможность добавления, изменения и удаление записи и отображения данных на экран. Для хранения данных использовать стек.
  6.  Получить список мест покупки и наименований товаров, приобретенных в четвертом квартале прошлого года.
  7.  Найти максимальную стоимость покупок, сделанных по каждому из встречающихся мест покупки.
  8.  Найти количество покупок за каждый квартал прошлого года.
  9.  Определить общую стоимость покупок, сделанных за указанный период в указанном месте.

Формат входных и выходных данных

а. Формат входных данных

  1.  Наименование товара – строковый тип данных (string).
  2.  Место покупки – строковый тип данных (string).
  3.  Цена товара - целочисленный тип данных (integer).
  4.  Дата покупки - тип данных содержащий значение даты и времени (TDateTime).

б . Формат выходных данных

  1.  Имя товара.
  2.  Место покупки.
  3.  Цена товара.
  4.  Дата покупки.

РЕАЛИЗАЦИЯ ПРОГРАММЫ

Таблица 1.Описание процедур

Процеду-ра/Функ-ция

Параметры

Описание

Add

b:Integer (Общее кол-во элемен-тов)

p:TPElem(Вершина стека)

В стек добавляется элемент. Входной параметр-вершина стека. Код программы представлен в Приложении 1. Листинг 1

Del

p:TPElem(Вершина стека)

Входным параметром является вершина стека, удаляется верхний элемент стека. Код программы представлен в Приложении 1. Листинг 2.

Del1

p:TPElem(Вершина стека)

Входным параметром является вершина стека, удаляются все элементы стека путем повторения процедуры Del . Код программы представлен в Приложении 1. Листинг 5.

Edit

b:Integer (Общее кол-во элемен-тов)

p:TPElem(Вершина стека)

Вводится номер элемента для изменения, новые данные перезаписываются на место старых данных, входной параметр вершина стека. Код программы представлен в Приложении 1. Листинг 6.

Vivod

b:Integer (Общее кол-во элемен-тов)

p:TPElem(Вершина стека)

Выводится заданный элемент стека. В процедуре цикл, проходит по всему стеку, если находит элемент с заданным номером, выводит его.  Код программы представлен в Приложении 1. Листинг 4.

Printall

p:TPElem(Вершина стека)

Выводится стек, путем прохождения по всем элементам от вершины, входным параметром является вершина стека. Код программы представлен в Приложении 1. Листинг 3.

Help

p:TPElem(Вершина стека)

Процедура-справка, выводит список для выбора действий, входным параметром является вершина стека. Код программы представлен в Приложении 1. Листинг 12.

Pomog

k:Integer (Номер элемента)

p:TPElem(Вершина стека)

Выводит элемент стека (Для процедур one, two, three, four) .Код программы представлен в Приложении 1. Листинг 7.

One

p:TPElem(Вершина стека)

В процедуре цикл, проходит по всему стеку, если находит элемент, у которого дата покупки входит в 4 квартал прошлого года, то выводит элемент.
Входной параметр – вершина стека. Код программы представлен в Приложении 1. Листинг 8.

Two

p:TPElem(Вершина стека)

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

Three

p:TPElem(Вершина стека)

Вывод количества покупок за каждый квартал прошлого года, проходит по стеку, определяет, какому кварталу принадлежит запись, и увеличивает счетчик для каждого квартала. Выводит квартал и количество приобретенных товаров за каждый из них. Предлагает вывести товары, приобретенные за каждый квартал. При положительном ответе проходит по стеку и при принадлежности нужному кварталу (по порядку) выводит номер записи, товар, место покупки, цену и дату покупки. Код программы представлен в Приложении 1. Листинг 10.

Four

p:TPElem(Вершина стека)

Вывод общей стоимости покупок, сделанных за заданный период в заданном месте, проходит по стеку, если дата входит в указанный период и место покупки совпадает с указанным местом, суммирует цены. Предлагает вывести товары, приобретенные за указанный период в указанном месте покупки. Если ответ положительный, то проходит по стеку, и если дата покупки входит в указанный период и место покупки совпадает с указанным местом, то выводит номер записи, товар, место покупки, цену и дату покупки.
Входной параметр – вершина стека.  Код программы представлен в Приложении 1. Листинг 11.

Vibor

W:string(строка для ввода команды)

p:TPElem(Вершина стека)

b:Integer (Общее кол-во элемен-тов)

k:Integer(счетчик номера элементов)

Процедура предлагает пользователю ввести команду. Как только пользователь вводит команду, программа ищет эту программу и переходит на нужную процедуру. Код программы представлен в Приложении 1. Листинг 12.

ОПИСАНИЕ АЛГОРИТМОВ.

1.Добавление элемента в стек.

В процедуре Add реализован алгоритм добавления элемента в стек согласно блок-схеме на рисунке 1. В этой процедуре выполняются следующие действия:

1.Выделение памяти под элемент линейного списка.

2.Ввод данных пользователем.

3. Проверка на содержание в стеке элементов.

4.Если стек содержит элементы, то создается ссылка на предыдущий элемент, и вершиной стека становится текущий указатель. Если же стек не содержит элементов, то вершиной стека становится текущий указатель, но не создается ссылка на предыдущий элемент, т.к. это единственный элемент в стеке.

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

Код программы представлен в Приложении 1 Листинг 1

2.Удаление из стека.

         В процедуре Del реализован алгоритм удаления элемента из стека согласно блок-схеме на рисунке 2. В этой процедуре выполняются следующие действия:

1.Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

2.Проверка на наличие элементов в стеке.

3.Если в стеке есть элементы, то указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись), и освобождается выделенная под вершину стека память (с помощью функции Dispose).  Если же в стеке нет элементов, то программа выведет сообщение, что стек пуст.

Рис. 2.Удаление элемента из стека

Код программы представлен в Приложении 1 Листинг 2.

3.Вывод стека.

В процедуре  Printall реализован алгоритм вывода стека согласно блок-схеме на рисунке 3.

Рис. 3.Вывод стека

В этой процедуре выполняются следующие действия:

1.Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

2.Обнуляется счетчик номера элементов(j).

3. Проверка на наличие элементов в стеке.

4.Если в стеке есть элементы, то начинается цикл, пока указатель не будет указывать на nil, выполняются действия:

1.Увеличивается счетчик номера записей(j) на 1.

2.Вывод номера записи (j).

3.Вывод самой записи.

4. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

Цикл заканчивает свою работу, когда в стеке больше нет элементов (указатель равен nil).

5.Если в стеке нет элементов, то программа выведет запись, что стек пуст.

Код программы представлен в Приложении 1 Листинг 3.

4.Вывод элемента стека.

В процедуре  Print реализован алгоритм вывода элемента стека согласно блок-схеме на рисунке 4. В этой процедуре выполняются следующие действия:

1.Программа запрашивает у пользователя номер записи, которую нужно вывести.

2.Пользователь вводит номер записи(j).

3. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

4.Проверяется, есть ли в стеке запись с данным номером (не является ли j отрицательным числом, не превышает ли j общее количество элементов, не пуст ли стек).

5.Если номер записи выходит за пределы существующих записей или в стеке нет элементов, то программа выведет, что такого элемента не существует.

Если же номер записи указан корректно, запись существует и стек не пуст, то программа продолжает свою работу.

6.Счетчику номера элементов(i) присваивается значение 1.

7. Пока указатель не будет указывать на nil или пока номер элемента меньше  номера, указанного пользователем будет происходить цикл:

1. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

2.Счетчик номера элементов(i) увеличивается на 1.

Как только найден элемент с нужным номером, то цикл прекращается.

8.Выводится номер указанного элемента (j).

9.Выводится сама запись.

Рис. 4.Вывод элемента стека.

Код программы представлен в Приложении 1 Листинг 4.

5.Удаление стека.

В процедуре  Del1 реализован алгоритм удаления  стека согласно блок-схеме на рисунке 5. В этой процедуре выполняются следующие действия:

1. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

2. Проверка на наличие элементов в стеке.

3.Если в стеке нет элементов, то программа выведет сообщение, что стек пуст.

Если в стеке есть элементы, то начинается цикл, пока указатель не будет указывать на nil, выполняются действия:

1.Выполняется процедура Del(описана выше).

Цикл заканчивает свою работу, когда в стеке больше нет элементов (указатель равен nil).

4.Программа выводит сообщение о том, что стек пуст.

Рис. 5.Удаление стека

Код программы представлен в Приложении 1 Листинг 5.

6.Редактирование элемента стека.

В процедуре  Edit реализован алгоритм редактирования элемента стека согласно блок-схеме на рисунке 6. В этой процедуре выполняются следующие действия:

1.Программа запрашивает у пользователя номер записи, которую нужно изменить.

2.Пользователь вводит номер записи(j).

3.Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

4.Проверяется, есть ли в стеке запись с данным номером (не является ли j отрицательным числом, не превышает ли j общее количество элементов, не пуст ли стек).

5.Если номер записи выходит за пределы существующих записей или в стеке нет элементов, то программа выведет, что такого элемента не существует.

6.Если же номер записи указан корректно, запись существует и стек не пуст, то программа продолжает свою работу.

7.Программа выводит исходную запись с помощью процедуры Vivod (описана выше).

8. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

9. Счетчику номера элементов(i) присваивается значение 1.

10.  Пока указатель не будет указывать на nil или пока номер элемента меньше  номера, указанного пользователем будет происходить цикл:

1. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

2.Счетчик номера элементов(i) увеличивается на 1.

Как только найден элемент с нужным номером, то цикл прекращается.

11.Пользователь вводит новые данные, которые записываются на место старых.

Рис. 6.Редактирование элемента стека

Код программы представлен в Приложении 1 Листинг 6.

7.Получить список мест покупки и наименований товаров, приобретенных в четвертом квартале прошлого года.

В процедуре  One реализован алгоритм получения записей, с датой покупки, входящей в 4 квартал прошлого года, согласно блок-схеме на рисунке 7. В этой процедуре выполняются следующие действия:

1. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

2. Проверка на наличие элементов в стеке.

3.Если в стеке нет элементов, программа выводит сообщение о том, что стек пуст.

Если в стеке есть элементы, программа продолжает свою работу.

4.Программа присваивает переменным D1 и D2 даты начала и конца 4 квартала прошлого года.

5.Обнуляется счетчик номеров элементов(k).

6.Пока в стеке есть элементы, работает цикл:

1.Счетчик номеров элементов(k) увеличивается на 1.

2.Проверяется, входит ли дата покупки в данной записи в указанный

        период (дата меньше или равна D1 и больше D2).

3.Если дата не входит в указанный период, то программа продолжает свою работу.

Если дата входит в указанный период, то запись выводится на экран с помощью вспомогательной процедуры Pomog(Ссылка на программный код данной процедуры находится в Приложении 1 Листинг 7). Программа продолжает свою работу.

4. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

Цикл заканчивает свою работу, когда в стеке больше нет элементов (указатель равен nil).

Рис.7.Список товаров, приобретенных в 4 квартале прошлого года

Код программы представлен в Приложении 1 Листинг 8.

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

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

1.Обнуляются переменные для записи максимальных цен.

2.Обнуляются записи, для сохранения номера записи.

3. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

4. Обнуляется счетчик номеров элементов(k).

5. Проверка на наличие элементов в стеке.

6.Если в стеке нет элементов, программа выводит сообщение о том, что стек пуст.

Если в стеке есть элементы, программа продолжает свою работу.

  1.  Пока в стеке есть элементы, работает цикл.

1.Увеличивается счетчик номеров элементов(k) на 1.

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

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

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

4. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

Цикл заканчивает свою работу, когда в стеке больше нет элементов (указатель равен nil).

7.Программа выводит элементы с максимальной стоимостью покупки на экран с помощью вспомогательной процедуры Pomog(Ссылка на программный код данной процедуры находится в Приложении 1 Листинг 7).

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

Код программы представлен в Приложении 1 Листинг 9.

9.Найти количество покупок за каждый квартал прошлого года.

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

1.Обнуляются переменные количества покупок.

2. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

3. Проверка на наличие элементов в стеке.

4. Если в стеке нет элементов, программа выводит сообщение о том, что стек пуст.

Если в стеке есть элементы, программа продолжает свою работу.

5.Переменным D1,D2,D3,D4,D5 присваиваются начала каждого квартала прошлого года и начало первого квартала данного года.

6. Пока в стеке есть элементы, работает цикл:

1.Проверяется, какому кварталу прошлого года принадлежит дата покупки.

2.Если найден нужный период, то переменная количества покупок данного периода увеличивается на 1; Программа продолжает свою работу.

3. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

Цикл заканчивает свою работу, когда в стеке больше нет элементов (указатель равен nil).

7.Программа выводит информацию о том, сколько покупок сделано в каждом из кварталов прошлого года и предлагает вывести записи, покупок которых совершены в прошлом году.

8.Если пользователь ответил положительно, то программа продолжает работу;.

Если пользователь ответил отрицательно, выполняется выход из процедуры.

9.Программа выводит номер квартала.

10. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

11. Обнуляется счетчик номеров элементов(k).

12.Пока в стеке есть элементы, работает цикл:

1.Счетчик номеров элементов(k) увеличивается на 1.

2.Проверяется, входит ли дата покупки в данной записи в указанный

        период (дата заданного квартала).

3.Если дата не входит в указанный период, то программа продолжает свою работу.

Если дата входит в указанный период, то запись выводится на экран с помощью вспомогательной процедуры Pomog(Ссылка на программный код данной процедуры находится в Приложении 1 Листинг 7). Программа продолжает свою работу.

4. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

Цикл заканчивает свою работу, когда в стеке больше нет элементов (указатель равен nil).

13.Пункты с  9 по 12 повторяются для каждого из кварталов прошлого года.

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

Код программы представлен в Приложении 1 Листинг 10.

10.Определить общую стоимость покупок, сделанных за указанный период в указанном месте.

В функции Four реализован алгоритм нахождения общей стоимости покупок, сделанных за указанный период в указанном месте, согласно блок-схеме на рисунке 10. В этой процедуре выполняются следующие действия:

1.Обнуляется переменная общей стоимости покупок.

2.Пользователь указывает начало и конец периода(D1 и D2).

3.Пользователь указывает место покупки(Mesto1).

4. Указателю присваивается вершина стека (т.е. стек рассматривается с его вершины).

5. Проверка на наличие элементов в стеке.

6. Если в стеке нет элементов, программа выводит сообщение о том, что стек пуст.

Если в стеке есть элементы, программа продолжает свою работу.

7.Пока в стеке есть элементы, работает цикл:

1.Программа проверяет, входит ли дата покупки в указанный период и совпадает ли место покупки с указанным.

2.Если дата или местно не совпадают, то программа продолжает свою работу.

Если дата и место совпали с указанными, то в переменную общей стоимости записывается цена из данной записи.

3. Указателю стека присваивается предыдущая запись (т.е. вершиной стека становится предыдущая запись).

Цикл заканчивает свою работу, когда в стеке больше нет элементов (указатель равен nil).

8.Программа присваивает функции значение переменной суммы.

Рис.10..Нахождение общей стоимости покупок, сделанных в указанном месте за указанный период.

Код программы представлен в Приложении 1 Листинг 11.

РЕАЛИЗАЦИЯ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА

Запускаем программу (Kursovaya31.exe), для получения списка команд нужно ввести Help и нажать Enter. Как показано на рисунке 11.

Рис. 11. Интерфейс help

Если пользователь ввел Add, то выполняется добавление элементов в стек как показано на рисунке 12.

Рис. 12. Процедура Add

Если пользователь ввел Delete, то выполняется удаление верхнего элемента стека.

Если пользователь ввел Delete all, то выполняется удаление всего стека. как показано на рисунке 13

Рис. 13. Процедура Del1

Если пользователь ввел Edit, то выполняется изменение элемента стека как показано на рисунке 14

Рис. 14. Процедура Edit

Если пользователь ввел Print, то выполняется Вывод заданного элемента стека как показано на рисунке 15

Рис. 15. Процедура Print

Если пользователь ввел Printall, то выполняется Вывод стека.

Если пользователь ввел Help, то выполняется Вывод справки.

Если пользователь ввел One, то выполняется  вывод товаров, приобретенных в 4 квартале прошлого года, как показано на рисунке 16

Рис.16. работа процедуры One

Если пользователь ввел Two, то выполняется вывод максимальной стоимости покупок, сделанных в каждом из мест, как показано на рисунке 17

Рис.17. работа процедуры Two

Если пользователь ввел Three, то выполняется вывод количества покупок за каждый квартал прошлого года (y – вывод списка покупок) , как показано на рисунке 18

Рис.18. работа процедуры Three

Если пользователь ввел Four, то выполняется вывод общей стоимости покупок, сделанных за заданный период в заданном месте, как показано на рисунке 19

Рис.19. работа процедуры Four

Если пользователь ввел Exit, то выполняется выход из программы.

После чего, выбрав интересующую нас команду, вводим соответствующее

ей значение в появившееся поле « Введите команду:» и далее следуем инструкциям.

В случае если при запуске программы вы увидели непонятные иероглифы:

Клик правой кнопкой > Свойства > Шрифт: LucidaConsole> ОК

ЗАКЛЮЧЕНИЕ.

В результате выполнения курсовой работы была реализована программа для обработки информации и приобретен опыт работы со стеком и динамическими массивами. Для хранения данных в программном обеспечении используется – стек. В программе реализованы следующие процедуры работы с данными: добавление, удаление, редактирование записи. В процессе работы со стеком сформировался навык производить операции на нем по определенным критериям, например поиск по дате. Получены новые знания о некоторых возможностях языка программирования Delphi, например, со встроенными функциями, такими как Length, StrToInt, StrToDate и т.д., а также с типами и динамическими указателями.

Постановка задачи в курсовой работе реализована полностью.


СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

1. блог Jakeroid’а: личный блог о программировании, компьютерах и саморазвитии. Очередь и стек в Delphi 7, 2011. URL: http:/jakeroid.com/ochered-i-stek-v-delphi.html (дата обращения 26.12.2012)

2.   Бобровский С. Delphi 7. Учебный курс. – Санкт-Петербург: Питер, 2005. – 736 с.

3.  Дистанционная подготовка по информатике. Стек. Отличия стека от списка. Основные операции со стеком,  URL:  http:/informatics.mccme.ru/moodle/mod/book/view.php?id=543 (дата обращения 26.12.2012)

4.  Культин  Н.Б. Основы программирования в Delphi 7. - Санкт-Петербург: БХВ-Петербург, 2007. – 594 с.

5. Язык паскаль. Программирование для начинающих. Процедуры, обслуживающие стек,  2011. URL:  http:/pas1.ru/steckdinamic (дата обращения 26.12.2012)

6.  Язык паскаль. Программирование для начинающих. Стек(«»магазин»), 2010. URL: http:/pas1.ru/stack (дата обращения 26.12.2012)


ПРИЛОЖЕНИЕ 1

Листинг 1.Добавление элемента в стек

procedure Add(var b:Integer; p:TPElem);

var g:string;

begin

 Writeln;

 New(p);

 Writeln('Введите наименование товара:');

 Readln(p^.Tovar);

 Writeln('Введите место покупки:');

 Readln(p^.Mesto);

 Writeln('Введите цену товара:');

 Readln(p^.Cena);

 Writeln('Введите дату покупки(дд.мм.гггг):');

 Readln(g);

 TryStrToDate(g,p^.Date_P);

 if p<>nil then p^.prev := top;

 top := p;

 b:=b+1;

end;

Листинг 2.Удаление элемента из стека

procedure Del(p:TPElem);

Begin

p := top;

if p <> nil then

begin

 top := p^.prev;

 dispose(p);

 b:=b-1;

end else writeln('Стек пуст');

end;

Листинг 3.Вывод стека

procedure Printall(p:TPElem);

 var j:Integer;

 begin

   p:=top;

   j:=0;

   if p <> nil then

   begin

     Tabl;

     while p<>nil do

     begin

       inc(j);

       if Length(IntToStr(j))=1 then write(j, '    ');

       if Length(IntToStr(j))=2 then write(j, '   ');

       if Length(IntToStr(j))=3 then write(j, '  ');

       if Length(p^.Tovar)=17 then write(p^.Tovar, '     ');

       if Length(p^.Tovar)=12 then write(p^.Tovar, '          ');

       if Length(p^.Tovar)=5 then write(p^.Tovar, '                 ');

       if Length(p^.Tovar)=7 then write(p^.Tovar, '               ');

       if Length(p^.Tovar)=13 then write(p^.Tovar, '         ');

       if Length(p^.Mesto)=7 then write(p^.Mesto, '            ');

       if Length(p^.Mesto)=6 then write(p^.Mesto, '             ');

       if Length(p^.Mesto)=8 then write(p^.Mesto, '           ');

       if Length(p^.Mesto)=3 then write(p^.Mesto, '                ');

       if Length(IntToStr(p^.Cena))=4 then write(p^.Cena, '     ')

       else write(p^.Cena, '    ');

       Writeln(DateToStr(p^.Date_P));

       p:=p^.prev;

     end

   end else writeln('Стек пуст');

  end;

Листинг 4.Вывод элемента стека

procedure Vivod(b:Integer; p:TPElem);

var i,j:Integer;

begin

 if W='print' then

 begin

   Writeln('Какую запись вывести?');

   Readln(j);

 end;

 p:=top;

 if (j>0) and(j<=b) and (p<>nil) then

 begin

   i:=1;

   while (p<>nil) or (i<j) do

   begin

     p:=p^.prev;

     Inc(i);

     if i=j then

     begin

       Tabl;

       if Length(IntToStr(j))=1 then write(j, '    ');

       if Length(IntToStr(j))=2 then write(j, '   ');

       if Length(IntToStr(j))=3 then write(j, '  ');

       if Length(p^.Tovar)=17 then write(p^.Tovar, '     ');

       if Length(p^.Tovar)=12 then write(p^.Tovar, '          ');

       if Length(p^.Tovar)=5 then write(p^.Tovar, '                 ');

       if Length(p^.Tovar)=7 then write(p^.Tovar, '               ');

       if Length(p^.Tovar)=13 then write(p^.Tovar, '         ');

       if Length(p^.Mesto)=7 then write(p^.Mesto, '            ');

       if Length(p^.Mesto)=6 then write(p^.Mesto, '             ');

       if Length(p^.Mesto)=8 then write(p^.Mesto, '           ');

       if Length(p^.Mesto)=3 then write(p^.Mesto, '                ');

       if Length(IntToStr(p^.Cena))=4 then write(p^.Cena, '     ')

       else write(p^.Cena, '    ');

       Writeln(DateToStr(p^.Date_P));

     end;

   end;

 end else Writeln('нет такой записи');

end;

Листинг 5.Удаление стека 

procedure Del1(p:TPElem);

begin

 p:=top;

 if p<>nil then

 begin

 while p<>nil do

 Del;

 end else writeln('Стек пуст');

end;

Листинг 6. Редактирование элемента стека

procedure Edit(b:Integer; p:TPElem);

 var g:string;

 var j:Integer;

 var i:Integer;

begin

   Writeln('Какой элемент редактировать??');

   Readln(j);

   p:=top;

   if (j>0) and (j<=b) and (p<>nil) then

   begin

     Writeln('Исходная запись:');

     Vivod(b);

     p:=top;

     i:=1;

     while (p<>nil) and (i<j) do

     begin

       p:=p^.prev;

       Inc(i);

       if (i=j) then

       begin

         writeln('введите новое наименование товара:');

         Readln(p^.Tovar);

         writeln('Введите новое место покупки:');

         Readln(p^.Mesto);

         writeln('Введите новую цену товара:');

         Readln(p^.Cena);

         Writeln('Введите новую дату покупки(дд.мм.гггг.):');

         readln(g);

         TryStrToDate(g,p^.Date_P);

       end;

     end;

   end else Writeln('нет такой записи');

end;

Листинг 7.Вывод элемента стека

procedure Pomog(k:integer; p:TPElem);

begi

 if Length(IntToStr(k))=1 then write(k, '    ');

 if Length(IntToStr(k))=2 then write(k, '   ');

 if Length(IntToStr(k))=3 then write(k, '  ');

 if Length(p^.Tovar)=17 then write(p^.Tovar, '     ');

 if Length(p^.Tovar)=12 then write(p^.Tovar, '          ');

 if Length(p^.Tovar)=5 then write(p^.Tovar, '                 ');

 if Length(p^.Tovar)=7 then write(p^.Tovar, '               ');

 if Length(p^.Tovar)=13 then write(p^.Tovar, '         ');

 if Length(p^.Mesto)=7 then write(p^.Mesto, '            ');

 if Length(p^.Mesto)=6 then write(p^.Mesto, '             ');

 if Length(p^.Mesto)=8 then write(p^.Mesto, '           ');

 if Length(p^.Mesto)=3 then write(p^.Mesto, '                ');

 if Length(IntToStr(p^.Cena))=4 then write(p^.Cena, '     ')

 else write(p^.Cena, '    ');

 Writeln(DateToStr(p^.Date_P));

end;

Листинг 8.Задание №2

procedure one(p:TPElem);

   var k:Integer;

   var D1,D2:TDateTime;

   var Y,Mn,D:Word;

 begin

   writeln;

   Writeln('Список товаров, приобретенных в 4 квартале прошлого года:');

   p:=top;

   if p=nil then Writeln('Стек пуст ')

   else

   begin

   DecodeDate(Data,Y,Mn,D);

   D1:=EncodeDate(Y-1,10,01);

   D2:=EncodeDate(Y,01,01);

   k:=0;

   Tabl;

   while p<>nil do

   begin

    Inc(k);

    if (p^.Date_P>D1) and (p^.Date_P<D2) then

    begin

     Pomog(k);

    end;

    p:=p^.prev;

   end;

   end;

 end;

Листинг 9. Задание №3

procedure two(p:TPElem);

 var j,n,n1,n2,n3,n4:Integer;

 var m,m1,m2,m3,m4,k:Integer;

   procedure two2(b:integer);

   begin

     n:=0;

     n1:=0;

     n2:=0;

     n3:=0;

     n4:=0;

     m:=0;

     m1:=0;

     m2:=0;

     m3:=0;

     m4:=0;

     p:=top;

     j:=0;

     if p<>nil then

     begin

       while p<>nil do

       begin

         Inc(j);

         if (p^.Mesto='Связной') and (p^.Cena>n) then

         begin

           n:=p^.Cena;

           m:=j;

         end;

         if (p^.Mesto='МВидео') and (p^.Cena>n1) then

         begin

           n1:=p^.Cena;

           m1:=j;

         end;

         if (p^.Mesto='Евросеть') and (p^.Cena>n2) then

         begin

           n2:=p^.Cena;

           m2:=j;

         end;

         if (p^.Mesto='МТС') and (p^.Cena>n3) then

         begin

           n3:=p^.Cena;

           m3:=j;

         end;

         if (p^.Mesto='Эксперт') and (p^.Cena>n4) then

         begin

           n4:=p^.Cena;

           m4:=j;

         end;

         p:=p^.prev;

       end;

     end else Writeln('Стек пуст');

    end;

 procedure mm1(k,j:integer);

 begin

  while (p<>nil) or (k<j) do

   begin

     p:=p^.prev;

     Inc(k);

     if (k+1)=j then

     begin

       Pomog(k);

     end;

   end;

 end;

begin

 Writeln;

 Writeln('Максимальная стоимость покупки в каждом из магазинов');

 Tabl;

 two2(b);

 p:=top;

 j:=m;

 k:=0;

 mm1(k,j);

 p:=top;

 j:=m1;

 k:=0;

 mm1(k,j);

 p:=top;

 j:=m2;

 k:=0;

 mm1(k,j);

 p:=top;

 j:=m3;

 k:=0;

 mm1(k,j);

 p:=top;

 j:=m4;

 k:=0;

 mm1(k,j);

end;

Листинг 10. Задание №4

procedure three(p:TPElem);

 var s,s1,s2,s3,k:Integer;

     D1,D2,D3,D4,D5:TDateTime;

     otv:string;

     Y,Mn,D:Word;

begin

 s:=0;

 s1:=0;

 s2:=0;

 s3:=0;

 p:=top;

 if p=nil  then Writeln('Стек пуст')

 else begin

 DecodeDate(Data,Y,Mn,D);

 D1:=EncodeDate(Y-2,12,31);

 D2:=EncodeDate(Y-1,04,01);

 D3:=EncodeDate(Y-1,07,01);

 D4:=EncodeDate(Y-1,10,01);

 D5:=EncodeDate(Y,01,01);

 while p<>nil do

 begin

  if (p^.Date_P>D1) and (p^.Date_P<D2) then s:=s+1;

  if (p^.Date_P>=D2) and (p^.Date_P<D3) then s1:=s1+1;

  if (p^.Date_P>=D3) and (p^.Date_P<D4) then s2:=s2+1;

  if (p^.Date_P>=D4) and (p^.Date_P<D5) then s3:=s3+1;

  p:=p^.prev;

 end;

 Writeln('За I квартал прошлого года продано  ', s, ' товаров');

 Writeln('За II квартал прошлого года продано  ', s1, ' товаров ');

 Writeln('За III квартал прошлого года продано  ', s2, ' товаров ');

 Writeln('За IV квартал прошлого года продано  ', s3, ' товаров ');

 Writeln('Вывести список товаров?(да-y/нет-n)'); Readln(otv);

 otv:=AnsiLowerCase(otv);

 if otv='y' then

 begin

   Writeln('I квартал прошлого года:');

   p:=top;

   k:=0;

   while p<>nil do

   begin

     Inc(k);

     if (p^.Date_P>D1) and (p^.Date_P<D2) then Pomog(k);

     p:=p^.prev;

   end;

   Writeln('II квартал прошлого года:');

   p:=top;

   k:=0;

   while p<>nil do

   begin

     Inc(k);

     if (p^.Date_P>=D2) and (p^.Date_P<D3) then Pomog(k);

     p:=p^.prev;

   end;

   Writeln('III квартал прошлого года:');

   p:=top;

   k:=0;

   while p<>nil do

   begin

     Inc(k);

     if (p^.Date_P>=D3) and (p^.Date_P<D4) then Pomog(k);

     p:=p^.prev;

   end;

   Writeln('IV квартал прошлого года:');

   p:=top;

   k:=0;

   while p<>nil do

   begin

     Inc(k);

     if (p^.Date_P>=D4) and (p^.Date_P<D5) then Pomog(k);

     p:=p^.prev;

   end;

 end;

 end;

end;

Листинг 11. Задание №5

function four(p:TPElem):integer;

  var D1,D2:TDateTime;

      Mesto1,otv,g,g1:string;

      q,k:Integer;

begin

 q:=0;

 Writeln('Укажите начало периода(дд.мм.гггг):'); Readln(g);

 TryStrToDate(g,D1);

 Writeln(' Укажите конец периода(дд.мм.гггг):'); Readln(g1);

 TryStrToDate(g1,D2);

 Writeln('Укажите место покупки:'); Readln(Mesto1);

 p:=top;

 if p=nil  then Writeln('Стек пуст')

 else begin

 while p<>nil do

 begin

   if (p^.Date_P>D1) and (p^.Date_P<D2) and (p^.Mesto=Mesto1) then

   q:=q+p^.Cena;

   p:=p^.prev;

 end;

 four:=q;

 end;

end;

Листинг 12. Выбор дейстия

procedure Vibor(W:string; p:TPElem; b,k:Integer);

begin

 W:=AnsiLowerCase(W);

 if (W='print') or (W='printall') or (W='help') or (W='delete') or (W='delete all') or (W='edit') or (W='exit')

 or (W='one') or (W='two') or (W='three') or (W='four') or (W='add') then

 begin

   if W='print' then

   begin

     Vivod(b);

   end;

   if W='printall' then

   Begin

     Printall;

   end;

   if W='help' then

   begin

     help;

   end;

   if W='delete' then

   begin

     Del;

   end;

   if W='delete all' then

   begin

     Del1;

   end;

   if W='add' then

   begin

     Add(b);

   end;

   if W='edit' then

   begin

     Edit(b);

   end;

   if W='exit' then

   begin

     f:=1;

   end;

   if (W='one') then

   begin

     one;

   end;

   if (W='two') then

   begin

     two;

   end;

   if (W='three') then

   begin

     three;

   end;

   if (W='four') then

   begin

     q:=four;

     Writeln('Общая стоимость покупок в указанном месте за указанное время равно', q, ' рублей');

   end;

 end else Writeln('Такой команды не существует');

end;


 

А также другие работы, которые могут Вас заинтересовать

82097. МЕТАФІЗИКА УКРАЇНСЬКОЇ ІДЕЇ В КОНТЕКСТІ ЇЇ ЕТНОСОЦІАЛЬНИХ ЗМІН НА МЕЖІ ТИСЯЧОЛІТЬ 1.89 MB
  Звертання філософів до метафізичного аналізу ідеї українського етносу відображає історичні аспекти змін звичайних та надзвичайних форм національного буття інформаційного суспільства, хоча впродовж майже 200 років підкреслювання тези про метафізичні засади будь-чого вважали проявом нібито антинаукового світогляду.
82098. Проектирование беспроводной сети Wi-Fi на основе стандарта 802.11n в общежитии № 2 Алматинского Института Энергетики и Связи 1.64 MB
  Перечень подлежащих разработке в дипломном проекте вопросов или краткое содержание дипломного проекта: Общие понятия беспроводного доступа WiFi характеристики стандарты. Выбор оборудования системы беспроводного доступа. Расчет зоны покрытия точек доступа Охрана безопасности и жизнедеятельности...
82099. Проектирование и расчеты электрических сетей освещения цехов промышленных предприятий 4.22 MB
  Целью данного пособия является оказание методической помощи при изучении курса МДК 01.03 «Электрическое и электромеханическое оборудование» студентами выпускных курсов колледжа по специальности 140448 Техническая эксплуатация и обслуживание электрического и электромеханического оборудования.
82100. СТАНОВЛЕНИЕ ЛОКАЛЬНЫХ РЕЖИМОВ РОСТА И РАЗВИТИЯ В ГОРОДАХ МОСКОВСКОЙ ОБЛАСТИ: ВОЗМОЖНОСТИ И ОГРАНИЧЕНИЯ 414 KB
  Вышеперечисленные исследования власти в городах России в теоретическом плане базируются как на западном, так и на отечественном опыте изучения локальной политики. Однако несмотря на относительную популярность данного направления в последнее время малые и средние города в рамках данного направления...
82101. Анализ содержательной модели американского инфлайт-издания «AmericanWay» 1.82 MB
  Авиажурнал (или инфлайт-журнал) будучи одним из представителей корпоративных СМИ, стал участником медиа соревнований. Мы предлагаем остановить свое внимание на журналах данного вида бортовой прессы и исследовать их содержательную модель.
82102. Зиянды шығыстың таралуын есептеу 130.8 KB
  Құрылыс материалдардың даму тендециясының бірі өндірістің бірден өсуі,өнімдердің сапасын жоғарлату, жаңа өнімдерді шығаруды ұйымдастыру, цементтің-кірпіштің тиімді түрлерін шығару, қазіргі заманның қуатты қондырғыларын пайдалану болып табылады.
82103. Алгоритм ориентирования сверхлегкого БПЛА по данным бортового фото-видео регистратора 1.45 MB
  В современном мире для решения задач мониторинга местности все чаще стали применятся беспилотные летательные аппараты БПЛА которые могут выполнять поставленную им задачу например полет по маршруту по заданным точкам в автоматическом режиме.
82104. СОБЫТИЙНЫЙ МЕНЕДЖМЕНТ В РАЗВИТИИ ТУРИСТИЧЕСКОЙ ИНДУСТРИИ РЕГИОНА (НА ПРИМЕРЕ ВОЛОГОДСКОЙ ОБЛАСТИ) 594 KB
  Важно также учитывать влияние глобальных процессов, таких как социальная мобильность, медиатизация и урбанизация, на преобразования, происходящие в регионах. Эти процессы интересны тем, что они приводят к интенсификации взаимосвязей между центральными и региональными системами.
82105. Электрогидравлический привод подачи фрезерного станка 1.61 MB
  Отсчет перемещения стола 10 относительно станины 9 осуществляется линейным индуктосином 11, который является индуктивным датчиком перемещения. Измерение осуществляется за счет сдвига вектора магнитной индукции при перемещении движка индуктосина относительно основной шкалы...