Разработка программы по учету покупок - Курсовая работа

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

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Значением указателя, представляющего стек, является ссылка на вершину стека, и каждый элемент стека содержит поле ссылки на соседний, "нижний" элемент. Add b:Integer (Общее колво элементов) p:TPELEM(Вершина стека) В стек добавляется элемент. Printall p:TPELEM(Вершина стека) Выводится стек, путем прохождения по всем элементам от вершины, входным параметром является вершина стека. One p:TPELEM(Вершина стека) В процедуре цикл, проходит по всему стеку, если находит элемент, у которого дата покупки входит в 4 квартал прошлого года, то выводит элемент. Если же стек не содержит элементов, то вершиной стека становится текущий указатель, но не создается ссылка на предыдущий элемент, т.к. это единственный элемент в стеке.В результате выполнения курсовой работы была реализована программа для обработки информации и приобретен опыт работы со стеком и динамическими массивами. В программе реализованы следующие процедуры работы с данными: добавление, удаление, редактирование записи.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^.

Введение
В данной курсовой работе необходимо написать программное обеспечение для работы с информацией и ее обработкой, реализовать ее на языке программирования 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)

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


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

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





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