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

Разработка программного обеспечения для работы с информацией и ее обработкой на языке программирования Delphi. Описание алгоритмов процедуры работы со стеком - добавление, удаление элементов, редактирование записи. Инструкция по использованию программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 06.02.2013
Размер файла 2,9 M

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

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

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

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

Введение

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

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

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

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

1. Постановка цели и задач работы

Цель

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

Задачи

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

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

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

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

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

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

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

наименование товара,

место покупки,

цена,

дата покупки.

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

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

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

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

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

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

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

1. Наименование товара - строковый тип данных (string).

2. Место покупки - строковый тип данных (string).

3. Цена товара - целочисленный тип данных (integer).

4. Дата покупки - тип данных содержащий значение даты и времени (TDateTime).

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

1. Имя товара.

2. Место покупки.

3. Цена товара.

4. Дата покупки.

2. Реализация программы

Таблица 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.

3. Описание алгоритмов

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. Увеличивается счетчик номеров элементов(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.

4. Реализация пользовательского интерфейса

Запускаем программу (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 и т.д., а также с типами и динамическими указателями.

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

программа delphi стек алгоритм

Список используемых источников

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;

Размещено на Allbest.ru


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

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

    курсовая работа [355,7 K], добавлен 21.09.2010

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

    курсовая работа [506,5 K], добавлен 21.02.2011

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

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

  • Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.

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

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

    отчет по практике [700,5 K], добавлен 24.11.2014

  • Требования по разработке программы часов, особенности и преимущества языка Delphi 7. Разработка блок-схем алгоритмов и описание процесса программирования. Основные процедуры для реализации, назначение, функционирование и условие работы с программой.

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

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

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

  • Требования к функциональным характеристикам программы, составу и параметрам технических средств, программной совместимости. Особенности программирования в среде Access. Описание интерфейса программы, ввод и редактирование данных, добавление новых книг.

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

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

    курсовая работа [434,1 K], добавлен 27.08.2012

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

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

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