ПРОГРАММНОЕ СРЕДСТВО ДЛЯ РАСЧЕТА РАСХОДА ЛЕГКОВЫХ АВТОМОБИЛЕЙ
Частное учреждение образования
«ТЕХНИКУМ БИЗНЕСА И ПРАВА»
пРОГРАММНОЕ СРЕДСТВО ДЛЯ расчета расхода
легковых автомобилей
Пояснительная записка
к курсовому проекту по предмету
“Основы
алгоритмизации и программирование”
КП Т.999033.401
Руководитель
проекта ( Н.И. Савченкова )
Учащийся (
В.В. Матюшко )
2013
Содержание
Введение. 3
1 Постановка задачи. 5
1.1 Организационная сущность задачи. 5
1.2 Информационная модель. 5
1.3 Входные данные. 6
1.4 Постоянная информация. 6
1.5 Выходные данные. 6
2 Вычислительная система. 7
2.1 Используемые
технические средства. 7
2.2 Инструменты разработки. 7
3 Проектирование задачи. 8
3.1 Объектно-ориентированный анализ. 8
3.2 Концептуальный прототип. 9
3.3 Функции:
логическая и физическая организация и элементы управления. 12
4 Описание программного средства. 13
4.1 Общие сведения. 13
4.2 Функциональное назначение. 13
5 Методика испытаний. 14
5.1 Технические
требования. 14
5.2 Порядок
проведения испытаний. 14
5.2.1 Функциональное тестирование. 14
5.2.2 Полное тестирование. 15
6 Применение. 26
6.1 Назначение
программы.. 26
6.2 Условия
применения. 26
6.3 Справочная
система. 26
Заключение. 28
Литература. 29
Приложение А.. 30
Приложение Б. 43
Введение
На данный момент существуют программные
средства, позволяющие автоматизировать и облегчить расчет расхода топлива,
однако данные средства являются либо платными, либо содержат ряд сложных
дополнительных функций, которые крайне редко используются пользователем. К тому
же многие предприятия до сих пор ведут учет расхода топлива по имеющимся у них
в автопарке транспорту ручным способом.
Целью курсового проекта «Программное
средство для расчета расхода легковых автомобилей» является анализ предметной
области в области расчета расхода топлива для легковых автомобилей, а также
создание программы, позволяющей автоматизировать данный расчет. Данный
программный продукт позволит вести учет расхода топлива путем заполнения
электронного вида путевого листа, с указанием нормы расхода и дистанции. В
результате расчетов по имеющимся в системе путевым листам за заданный период программа
произведет вычисление общего расстояния и расхода топлива по каждому автомобилю,
а также суммирует общих расход по каждому виду топлива.
Для достижения цели курсового
проекта нужно решить следующие задачи:
– выполнить
объектно-ориентированный анализ и проектирование системы, результатом которой
будет модель системы;
– определить
вычислительную систему, необходимую для создания программного продукта;
– по модели выполнить проектирование
задачи;
– разработать программный продукт;
– описать созданный программный продукт;
– выбрать методику испытаний;
– описать процесс тестирования;
– привести примеры области применения.
Решение поставленных задач
отражено в пояснительной записке.
Пояснительная записка состоит из
6 разделов и содержит необходимую и достаточную информацию по использованию
данного программного продукта.
В первом разделе «Постановка задачи» описывается исследование предметной области, определение круга
задач, перечисляются основные функции программы.
Во втором
разделе «Вычислительная система» перечисляются требования
к аппаратному обеспечению и конфигурации компьютера, проводится характеристика
операционной системы, обоснование выбранной среды для разработки приложения.
В третьем
разделе «Проектирование задачи» проводится объектно-ориентированный
анализ задачи, строится алгоритм,
строится концептуальный прототип системы меню и элементов управленияв рамках среды разработки приложения.
В четвертом разделе «Описание
программного средства» содержится информация об обозначении и наименовании
приложения, о программном обеспечении, необходимом для функционирования программы,
о классах решаемых задач и назначении программы.
В пятом разделе «Методика
испытаний» описываются требования к техническим средствам для проведения
испытаний, требования к характеристикам программы применительно к условиям
эксплуатации, требования к информационной и программной совместимости.
Описывается проверка каждого пункта меню, каждой операции, которая выполняет
приложение. Моделируются все возможные действия пользователя при работе с
программой. Представляются результаты тестирования.
Шестой раздел
«Применение» предназначен для описания сведений о назначении программного
средства,классе решаемых задач, ограничениях,
накладываемых на область применения, требования к необходимым для данного программного
средства техническим и программным ресурсам, структуре справочной
системы, методике использования справочной системыи
области его применения.
В заключении будет
проанализировано выполнение поставленной задачи и выполненной работы, степень
ее соответствия проектным решениям.Приложения будут содержать тексты
программных модулей, схемы работы приложения.
Требуется разработать
программу,которая будет вести учет автомобилей организации, норм расхода
топлива, путевых листов на водителей, а также производить расчет расхода
топлива по каждому автомобилю и виду топлива за указанный период.
Согласно общим требованиям
стандартный графический интерфейс разрабатываемого приложения должен:
– содержать привычные и
понятные пользователю пункты меню или закладки, соответствующие функциям
обработки;
– сохранять стандартное
назначение и местоположение на экране графическихобъектов, работающих в
среде Windows.
Большинство программных
приложений работают в диалоговом режиме.Диалоговый режим –это способ
взаимодействия пользователя с программой, при котором происходит
непосредственный и двухсторонний обмен информацией, командами или инструкциями
между человеком и программой. Диалоговый режим подразумевает такую скорость
обработки данных, которая не сказывается на технологии действий пользователя.
Различают активные и пассивные диалоговые режимы.
Состав для диалоговых систем
представляет собой:
– главное меню в
виде закладок, где пользователю предлагается выбор функцийиз фиксированного
перечня программы для работы с ней:«Автомобили организации», «Водители», «Путевые
листы», «Отчет о расходе топлива по автомобилям за период». Каждая из закладок
отвечает за работу с той или иной информацией. На каждой из закладок
пользователь может вводить или удалять данные. На закладке «Отчет о расходе
топлива по автомобилям за период» пользователю предлагается указать период и
запустить обработку и формирование отчета о расходе топлива;
– действия
запрос-ответ, где при удалении у пользователя спрашивается подтверждение его
действия.
Пользователь
осуществляет заполнение БД программы и после внесения данных инициализацию
расчета расхода топлива, в результате чего получает сведенный по автомобилям и
видам топлива отчет о расходе.
При работе с
программным продуктом не должно быть трудностей, а созданная заранее справочная
система должна помочь в использовании программы и решении поставленных задач.
Входными данными
являются:
Таблица 1 – Входные данные
Функция
|
Входные
данные
|
Добавление
нового автомобиля в список
|
Марка
автомобиля
Регистрационный
номер автомобиля
Пробег
авто на момент ввода информации о нем
Вид
топлива автомобиля (выбирается из списка видов топлива)
|
Добавление
нового вида топлива
|
Наименование
вида топлива
|
Добавление
вида нормы расхода топлива на автомобиль
|
Дата
вступления в силу вида нормы расхода
Название
вида нормы расхода (выбирается из списка видов норм расхода)
Значение
нормы расхода (л/100 км.)
|
Добавление
нового вида нормы расхода
|
Наименование
вида нормы расхода
|
Добавление
водителя
|
ФИО
водителя
|
Добавление
путевого листа
|
Номер
путевого листа
Водитель
(выбирается из списка водителей системы)
Автомобиль
(выбирается из списка автомобилей системы)
Дата
начала
Дата
окончания
|
Добавление
информации в содержимое путевого листа
|
Дата
Вид
нормы расхода на автомобиль (выбирается из списка действующих норм на
указанную дату)
Расстояние
|
Функции
удаления
|
Указанная
информация к удалению (запись)
Подтверждение
удаления
|
Постоянной
информацией в данном проекте является имя файла БД MS ACCESS - autos.mdb, файл
которой должен находится в одном каталоге с файлом
разрабатываемой программы Autos.exe.
Выходными
данными являются текстовый файл report.txt, содержащие в себе информацию о расходе
топлива. Например:
Расход топлива
за период: 01.01.2013 - 27.03.2013
1. Lexus
LX 470 г.н.0004 ВМ-2 ДТ - 112,25
Итого по видам
топлива:
1. ДТ -
112,25
А такжек выходным
данным можно отнести запросы на подтверждение удаления и сообщения при неверном
указании входных данных.
Конфигурация
компьютера, на котором будет разрабатываться программное приложение:процессор
AthlonPalomino 2100+; оперативная память DDR 400 512 Мб;жёсткий диск HDD
Seagate 80Gb 4 Мб.
Инструментами
разработки будут являться:
- операционная система Windows
XP Professional;
- среда программирования
BorlandDelphi7.0;
- язык программирования
ObjectPascal.
Сегодня никем не опровергается
тот факт, что операционные системы семейства Windows завоевали не только
подавляющую часть белорусского рынка настольных операционных систем и в
корпоративном, и в домашнем секторе, но и немалую долю рынка серверных
операционных систем. Каковы бы ни были претензии к этим операционным системам и
к их производителю со стороны некоторых пользователей, нельзя отрицать того,
что именно среди операционных систем этого семейства большинство белорусских
потребителей находят тут сочетание цены, производительности, удобства,
функциональности и надежности которой удовлетворяет требованиям, предъявляемым
решаемыми задачами.
Для разработки данного
программного приложения была использована операционная система MicrosoftWindows
XP Professional. Данная операционная система является оптимальным решением для
предприятия любого размера. Данная версия операционной системы Windows сочетает
в себе преимущества Windows 2000 Professional (например, средства безопасности,
управляемость и надежность) с лучшими качествами Windows 98 и Windows ME
(поддержка Plug&Play, простой пользовательский интерфейс и передовые службы
поддержки). Это делает Windows XP Professional наиболее подходящей операционной
системой для настольных компьютеров, применяемых в корпоративной среде.
Независимо от того, где устанавливается Windows XP Professional – на одном
компьютере или в масштабе локальной сети, – эта система повышает вычислительные
возможности предприятия, одновременно сокращая совокупную стоимость
программного обеспечения всех настольных компьютеров.
Для реализации программы была
выбрана среда программированияDelphi, а именно пакет
BorlandDelphiEnterpriseVersion 7.0. BorlandDelphi 7 Studio позволяет создавать
самые различные программы: от простейших однооконных приложений до программ
управления распределенными базами. В состав пакета включены разнообразные
утилиты, обеспечивающие работу с базами данных, XML-документами, создание
справочной системы, решение других задач. Отличительной особенностью седьмой
версии является поддержка технологии .NET.
Язык программирования
ObjectPascal является последней версией семейства языков Pascal, реализующей
принципы объектно-ориентированного программирования. Этот язык является основой
системы визуального программирования Delphi. Наиболее существенным отличием от
традиционного языка Pascal является наличие достаточно сложных структур данных
(классы) и возможность средствами Pascal обращаться к функциям Windows API для
создания полноценных Windows-приложений. ObjectPascal позволяет использовать
множество самых разнообразных типов и структур данных. Все типы данных можно
разбить на три группы: простые (базовые), структурированные и пользовательские
типы, которые создаются на основе базовых и объединяют несколько переменных
разных типов в одной структуре данных.
Принципиальное различие между структурным и объектно-ориентированным
подходом (ООП) заключается в способе декомпозиции системы. ООП использует
объектную декомпозицию, при этом статическая структура системы описывается в
терминах объектов и связей между ними, а поведение системы описывается в
терминах обмена сообщениями между объектами. Каждый объект системы обладает
своим собственным поведением, моделирующим поведение объекта реального мира.
Концептуальной основой ООП является объектная модель. Основными ее элементами
являются: абстрагирование, инкапсуляция, наследование, полиморфизм,
модульность, иерархия.
В проектируемой системе используются стандартные классы TForm,TPageControl, TTabSheet, TDBGrid, TBitBtn, TDateTimePicker, TLabel, TDBEdit, TDBLookupComboBox, TSpeedButton, и т.п. подобные классы.
Таблица 2 – Используемые компоненты
Класс
компонента
|
Назначение
|
TForm
|
Компонент
TForm представляет собой окно программы,предназначенное
для размещения остальных компонентов, и организации диалога с пользователем.
|
TLabel
|
Компоненты
класса TLabel предназначены для размещения на форме
различного рода текстовых надписей.
|
TDBEdit
|
Компонент
класса TDBEdit представляет собой однострочный
редактор текста. С его помощью можно вводить и отображать достаточно длинные
текстовые строки.Значение вводимое в данный компонент однозначно связывается
с полем текущей записи указанного набора данных.
|
TPageControl
|
Компонент
TPageControl представляет собой контейнер для
хранения компонентов класса TTabSheet и представления
их в виде закладок
|
TTabSheet
|
Компонент
класса TTabSheet представляет собой закладку (область
или контейнер) для хранения других компонентов и группировки их по логической
принадлежности
|
TBitBtn
|
Компонент
класса TBitBtn представляет собой кнопку с возможностью помимно надписи на
ней размещения еще и изображения
|
TDBGrid
|
Компонент
класса TDBGrid представляет собой таблицу с заголовками для отображения
набора данных (результата запроса к БД)
|
TDateTimePicker
|
Компонент
класса TDateTimePicker представляет собой поле
длявода даты или выбора ее из календаря
|
TDBLookupComboBox
|
Компонент
класса TDBLookupComboBox представляет собой
раскрывающийся список содержащий значения из заданного поля одного набора
данных и сохраняющий выбранный результат в указанное поле другого набора
|
TSpeedButton
|
Представляет
собой кнопку, с возможностью определить для нее дополнительные эффекты такие
как прозрачность или вдавлинность и т.п.
|
Концептуальный прототип состоит
из описания внешнего пользовательского интерфейса – системы меню, диалоговых
окон и элементов управления. Кнопочная навигация дублирует часто используемые
пункты основного меню.
При создании приложения важную
роль играют формы, так как они являются основным диалоговым средством работы
пользователя. Разрабатываемое приложение будет многооконное. Оно будет содержать
несколько форм (модулей) – 7 штук. В приложении не предусмотрено меню. Оно
будет заменено компонентом класса TPageControl, имеющим
четыре вкладки, которые обеспечат быструю навигацию в программе, удобный доступ
к функциям приложения и структурируют их в однородные группы.
Приведем описание вкладок,
используемых на главной форме. Можно представить их в виде таблиц. Например,
Таблица 3 – Элементы управления и
визуализации
Размещение
|
Элемент
экрана
|
Класс
|
Действие
|
Форма
программы, вкладка«Автомобили организации»
|
DBGrid1– таблица для отображения списка автомобилей
|
TDBGrid
|
Выводит
список автомобилей
|
BitBtn1 - кнопка добавления новой записи об автомобиле
|
TBitBtn
|
Отображается
окно ввода данных о новом автомобиле и добавление записи
|
BitBtn2 – кнопка удаления текущей записи об автомобиле
|
TBitBtn
|
Отображается
подтверждение на удаление, и при подтверждении – удаление записи и обновление
таблицы DBGrid1
|
BitBtn3 – кнопка для отображение списка норм расхода
топлива для указанного автомобиля
|
TBitBtn
|
Отображается
окно для ввода новых или удаления имеющихся норм
|
Форма
программы, вкладка «Водители»
|
DBGrid2– таблица для отображения списка водителей
|
TDBGrid
|
Выводит
список водителей
|
BitBtn4 - кнопка добавления новой записи оводителе
|
TBitBtn
|
Отображается
окно ввода ФИО водителя и добавление записи
|
BitBtn5 – кнопка удаления текущей записи о водителе
|
TBitBtn
|
Отображается
подтверждение на удаление, и при подтверждении – удаление записи и обновление
таблицы DBGrid2
|
Продолжение таблицы 3
Форма
программы, вкладка «Путевые листы»
|
DBGrid3– таблица для отображения списка путевых листов
|
TDBGrid
|
Выводит
список путевых листов
|
BitBtn6 - кнопка добавления новой записи
|
TBitBtn
|
Отображается
окно ввода данных о новом путевом листе и добавление записи
|
BitBtn7 – кнопка удаления текущей записи
|
TBitBtn
|
Отображается
подтверждение на удаление, и при подтверждении – удаление записи и обновление
таблицы DBGrid3
|
BitBtn8 – кнопка для отображение содержимого путевого листа
|
TBitBtn
|
Отображается
окно для ввода новых или удаления имеющихся записей о содержимом путевого
листа
|
Форма
программы, вкладка «Отчет о расходе топлива по автомобилям за период»
|
DateTimePicker1
– воле ввода даты начала требуемого периода
|
ТDateTimePicker
|
|
DateTimePicker2
– воле ввода даты окончания требуемого периода
|
ТDateTimePicker
|
|
BitBtn9
– кнопка запуска формирования отчета
|
TBitBtn
|
Формирование
отчета по расходу топлива в текстовый фай report.txt и открытие его после формирования
в блокноте
|
Весь интерфейс программы
организован однотипно и интуитивно понятно, так что, описание остальных форм
программы не требуется.
Программа использует БД
состоящую из 7 таблиц, описание которых представлено ниже:
Таблица 4 – Структура таблицы «Autos» - список автомобилей
Имя
поля
|
Тип
поля
|
Назначение
|
Id_Auto
|
Счетчик
|
Однозначно идентифицирует
запись в таблице, первичный ключ
|
Marka
|
Текстовый
|
Марка авто
|
Number
|
Текстовый
|
Регистрационный номер
|
Start_Statement
|
Длинное
целое
|
Показания пробега
|
Id_vid_toplivo
|
Длинное
целое
|
ID
вида топлива
|
Таблица 5 – Структура таблицы «toplivo» - список видов
топлива
Имя
поля
|
Тип
поля
|
Назначение
|
Id_vid_toplivo
|
Счетчик
|
Однозначно идентифицирует
запись в таблице, первичный ключ
|
Naim_toplivo
|
Текстовый
|
Название топлива
|
Таблица 6 – Структура таблицы «Norms»
Имя
поля
|
Тип
поля
|
Назначение
|
Id_norma
|
Счетчик
|
Однозначно идентифицирует
запись в таблице, первичный ключ
|
ID_Auto
|
Длинное
целое
|
Номер записи (первичного ключа)
об автомобиле
|
Start_date
|
Дата/время
|
Дата вступления в силу нормы
|
Rasxod_na_100
|
Длинное
целое
|
Показания расхода л/100 км.
|
Id_vid_norma
|
Длинное
целое
|
ID вида
нормы
|
Таблица 7 – Структура таблицы «vid_norma»
- список видов норм
Имя
поля
|
Тип
поля
|
Назначение
|
Id_vid_norma
|
Счетчик
|
Однозначно идентифицирует
запись в таблице, первичный ключ
|
vid_norma
|
Текстовый
|
Название вида
|
Таблица 8 – Структура таблицы «Voditel» - список водителей
Имя
поля
|
Тип
поля
|
Назначение
|
Id_voditel
|
Счетчик
|
Однозначно идентифицирует
запись в таблице, первичный ключ
|
FIO
|
Текстовый
|
ФИО водителя
|
Таблица 9 – Структура таблицы «Put_lists»
- список путевых листов
Имя
поля
|
Тип
поля
|
Назначение
|
Id_Put_list
|
Счетчик
|
Однозначно идентифицирует
запись в таблице, первичный ключ
|
Number
|
Длинное
целое
|
Номер путевого листа
|
Id_voditel
|
Длинное
целое
|
ID водителя
|
Id_Auto
|
Длинное
целое
|
ID
авто
|
Data_start
|
Дата/время
|
Дата начала
|
Data_end
|
Дата/время
|
Дата окончания
|
Таблица 10 – Структура таблицы «Put_list_content» - содержимое путевого листа
Имя
поля
|
Тип
поля
|
Назначение
|
Id
|
Счетчик
|
Однозначно идентифицирует
запись в таблице, первичный ключ
|
Id_Put_list
|
Длинное
целое
|
ID путевого листа
|
Id_norma
|
Длинное
целое
|
IDнормы
расхода на авто
|
Distance
|
Длинное
целое
|
Расстояние
|
Data
|
Дата/время
|
Дата
|
Рассмотрим основные функции
программы. В программном приложении основные функции по добавлению, удалению и
редактированию данных будут производиться путем выборки и изменения информации
в базе данных. Ведение самой базы данных будет осуществляться стандартными
средствами Delphi.
В программном приложении «Autos.exe»
для обработки событий на главной форме используются следующие методы:
–procedureTFormMain.FormShow–
процедура обработки первого показа окна, осуществляет соединение с БД и
открытие необходимых наборов данных;
–procedure
TFormMain.BitBtn1Click – процедура вызова модального окна создания новой записи
об авто, и при положительном результате модального вызова – создание новой
записи об автомобиле в БД;
–procedureTFormMain.BitBtn2Click
– обработка удаления записи об автомобиле. При наличии записей об авто в БД
выдает запрос на подтверждение удаления, и при подтверждении удаляет запись об
авто из БД;
– procedureTFormMain.BitBtn3Click–
отображает модальное окно, содержащее список норм расхода для указанного авто.
На форме можно добавлять и удалять необходимые нормы;
–procedure
TFormMain.BitBtn4Click – обработка добавления водителя. Запрашивает ФИО и при
правильном указании – добавление записи о водителе в БД.
–procedure
TFormMain.BitBtn5Click - обработка удаления записи о водителе. При наличии
записей в БД выдает запрос на подтверждение удаления, и при подтверждении
удаляет запись из БД;
–procedureTFormMain.BitBtn7Click-
обработка удаления записи о путевомлисте. При наличии записей в БД выдает
запрос на подтверждение удаления, и при подтверждении удаляет запись из БД;
–procedure TFormMain.BitBtn6Click
– процедура вызова модального окна создания новой записи о путевом листе, и при
положительном результате модального вызова – создание новой записи БД;
–procedure
TFormMain.BitBtn8Click - отображает модальное окно, содержащее список, представляющий
содержимое путевого листа. На форме можно добавлять и удалять необходимое
содержимое;
–procedure
TFormMain.BitBtn9Click – осуществляет вычисление норм расхода на заданный
период. Сохранение результатов в текстовый файл report.txt и вывод его на
просмотр.
Для того чтобы начать работу с
программой, нужно запустить файл «Autos.exe». Его объем
составляет 890 килобайт. Все действия пользователя осуществляются при помощи
файла клавиатуры и мыши. Программный продукт функционирует в среде Windows.После
запуска программы, пользователю отображено главное окно программы.
В ходе работы программа
использует файлMSACCESS«autos.mdb», расположенный в директории, в которых хранится сам файл
программы.
Файл «autos.mdb» представляет собой БД в таблицах которой хранятся
вводимые пользователем данные.
Главным назначением программы
является по введенным пользователем данным осуществлять расчет расхода топлива
легковых автомобилей и выводить полученный результат. В программном продукте
реализованы функции, которые были определены на этапе объектно-ориентированного
программирования и анализа, т.е. хранение информации о автомобилях, водителях
путевых листах и расчет расхода топлива.
Средства защиты, разграничения
доступа к данным и сетевая поддержка не предусмотрены.
Для полноценного
функционирования разработанного программного продукта, качественного выполнения
всех поставленных задач, требуется ПК следующей конфигурации, характеристики
которого представлены ниже:
Таблица
11 – Минимальные системные требования
Элементы
конфигурации
|
Описание
характеристик
|
Процессор
|
AMD/Intel
200ГГц
|
Оперативная память
|
5Мб
|
Видео адаптер
|
16Мб
|
Дисковой накопитель
|
2Мб
|
Клавиатура
|
Совместимая с персональным компьютером
|
Мышь
|
Совместимая с персональным компьютером
|
Блок питания
|
200Вт
|
Монитор
|
15"
|
Операционная система
|
Windows
98\2000\XP\7
|
При функциональном тестировании
осуществляется проверка каждого пункта меню, каждой операции, с целью проверки
выполнения всех функций, определенных на этапе объектно-ориентированного
анализа и проектирования. Функциональное тестирование должно гарантировать
работу всех элементов управления в автономном режиме.
Протестируем функцию создания
записи о новом автомобиле:
Перейти на вкладку «Автомобили
организации»:
Рисунок 1 – Вкладка
«Автомобили организации»
Нажать кнопку «Добавить
автомобиль»;
В появившемся диалоговом окне
ввести данные и нажать сохранить:
Рисунок 2 – Окно
для ввода новой информации об авто
В результате будет добавлена
запись о новом авто:
Рисунок 3 – Результат
добавления новой записи об автомобиле
Далее произведем полное
тестирование и проверим выполнение всех функций все функции
Полное тестирование выполняется
после успешного завершения функционального тестирования, продемонстрировавшего
корректное выполнение всех функций, определенных на этапе проектирования.
Полное тестирование должно
показать работу программного продукта с момента запуска до завершения с
иллюстрацией реакций программы на некорректные действия пользователя.
Последовательность действий по
процессу полного тестирования приведена в таблице 12
Таблица 12 – Алгоритм полного
тестирования
Этап
тестирования
|
Ожидаемый
результат
|
Иллюстрация
полученного результата
|
Запуск
приложения «Autos.exe»
|
Активирование
главной формы на вкладке «Автомобили организации», открытие БД, отображение
списка авто в БД:
|
|
Добавление
новой записи об автомобиле:
1.Нажатие
кнопки «Добавить автомобиль»
|
Активизация
формы для ввода информации об автомобиле «Введите информацию»
|
|
2.Ввод
неполной информации об авто
|
|
|
3.Попытка
сохранения
|
Сообщение
о некорректности вводимых данных
|
|
4.Ввод
корректных данных
|
|
|
Продолжение таблицы 12
5.Попытка
сохранения
|
Сохранение
успешное, запись добавлена
|
|
Удаление
записи об автомобиле:
1.
Выделение необходимой записи и нажатие на кнопку «Удалить автомобиль»
|
Подтверждение
на удаление
|
|
2.1
Отмена подтверждения
|
Запись
не удалена и осталась в списке
|
|
2.2
Подтверждение
|
Запись
удалена
|
|
Просмотр
норм расхода на авто:
Выделение
необходимой записи и нажатие на кнопку «нормы расхода топлива»
|
Активизация
формы содержащей нормы расхода текущего авто
|
|
Продолжение таблицы 12
Удаление
нормы:
1.
Выделение необходимой записи и нажатие на кнопку «Удалить»
|
Подтверждение
на удаление
|
|
2.1
Отмена подтверждения
|
Запись
не удалена и осталась в списке
|
|
2.2
Подтверждение
|
Запись
удалена
|
|
Добавление
нормы расхода:
Нажатие
на кнопку «Добавить»
|
Активизация
формы для ввода информации об автомобиле «Введите информацию»
|
|
1. Ввод
неполной или некорректной информаци
|
|
|
Продолжение таблицы 12
2.
Попытка сохранения
|
Сообщение
об ошибке
|
|
3.1
Ввод корректной информации и сохранение
|
Сохранение
и отображение в списке:
|
|
3.2.1
Добавление нового вида названия нормы:
Нажатием
на кнопку «+» , расположенную возле списка норм
|
Запрос
названия
|
|
3.2.2
Отмена либо подтверждение без указания названия или названия в виде набора
пробелов
|
Закрытие
окна и отсутствие результата
|
Да
|
Продолжение таблицы 12
3.2.3
Ввод нового названия нормы и подтверждение
|
Норма
добавилась в выпадающий список
|
|
Отображение
списка водителей:
Переключение
на закладку «Водители»
|
Отображение
на закладке списка водителей БД
|
|
Удаление
водителя:
1.
Выделение водителя из списка
2.
Нажатие на кнопку «Удалить»
|
Запрос
подтверждения
|
|
3.1 Отмена подтверждения
|
Водитель
остался в списке
|
Да
|
Продолжение таблицы 12
3.2
Подтверждение удаления
|
Водитель
был удален из БД и исчез из списка
|
|
Добавление
водителя:
1.
Нажатие на кнопку «Добавить …»
|
Запрос
ФИО водителя
|
|
2.1 Указание
ФИО и подтверждение
|
Водитель
добавлен
|
|
2.2
Отмена либо подтверждение без указания названия или названия в виде набора
пробелов
|
Закрытие
окна запроса и отсутствие результата
|
Да
|
Продолжение таблицы 12
Отображение
списка путевых листов:
Переключение
на закладку «Путевые листы»
|
Отображение
на закладке списка путевых листов из БД
|
|
Удаление
водителя:
1.
Выделение листа из списка
2.
Нажатие на кнопку «Удалить…»
|
Запрос
подтверждения
|
|
3.1 Отмена подтверждения
|
Путевой
лист остался в списке
|
Да
|
3.2
Подтверждение удаления
|
Водитель
был удален из БД и исчез из списка
|
Да
|
Добавление
путевого листа:
Путем
нажатия на кнопку «Добавить…»
|
Отображение
формы для заполнения информации о путевом
|
|
2. Ввод
некорректных или неполных данных и попытка сохранения
|
Отображение
сообщения об ошибке
|
|
Продолжение таблицы 12
3. Ввод
полных корректных данных и сохранение
|
Путевой
создан и появился в списке
|
|
Редактирование
содержимого путевого листа
Нажать
на кнопку «Содержимое»
|
Отображение
формы содержимого путевого листа
|
|
Удаление
записи из содержимого:
1.
Выделение записи
2.
Нажатие на кнопку «Удалить»
|
Запрос
подтверждение
|
|
3.1
Отмена
|
Запись
не удалена
|
Да
|
3.2
Подтверждение
|
Запись
удалена
|
|
Продолжение таблицы 12
Добавление
записи содержимого путевого листа
Нажатие
на кнопку добавить
|
Активация
формы для новой записи
|
|
1.Указание
неполных или некорректных данных и попытка сохранения
|
Сообщение
об ошибке
|
|
2.
Указание корректных данных и попытка сохранения
|
Запись
добавлена
|
|
Формирование
отчета о расходе:
1. Переход
на вкладку «Отчет о расходе»
2.
Указание периода
3.
Нажатие на кнопку «Сформировать …»
|
Отчет
сформирован и открыт
|
|
При проведении полного
тестирования был выполнен конкретный пример действий пользователя и описаны
результаты, которые должны быть получены при работе программного продукта. Были
описаны все возможные действия пользователя и реакции программного продукта,
которые были ожидаемы и соответствовали запланированным в процессе
проектирования.
Разработанный программный
продукт «Autos.exe», предназначен для автоматизации процесса расчета расхода
топлива легковых автомобилей по данным путевых листов и норм расхода.
Программный продукт обеспечен
справочной системой, которая поможет пользователю в поиске или получении
справочной информации. Программный продукт обладает необходимым объемом информации
для реализации поставленной задачи.
Разработанное приложение имеет
понятный интерфейс, довольно просто в применении, но в тоже время позволяет
уменьшить затраты времени и материальных ресурсов, используемых при расчете за
счет автоматизации расчетных процессов или чего другого.
Необходимо отметить, что данное
программное средство не обладает средствами, ограничивающими доступ к нему, а
также средствами, препятствующими свободному распространения программы. Для
работы с приложением не требуется установка дополнительных компонентов и
специальных технических и программных ресурсов.
Требования к конфигурации
компьютера, на котором будет использоваться программное приложение:
– процессор AMD/Intel 200 ГГц:
– оперативная
память 5 Мб;
– жёсткий диск 2
Мб;
– монитор 15";
– клавиатура,
совместимая с ПК;
– мышь,
совместимая с ПК;
–
операционная система Windows 98\2000\XP\7.
Справочная система для данного
программного средства довольно проста. Она представляет собой описание возможных
действий для работы с программой. Вся справочная информация расположена в отдельном
файле справки, вызов которого осуществляется нажатием на кнопку с
вопросительным знаком, расположенную в заголовке главного окна программы.
На рисунке 4 представлен вид
справочного файла:
Рисунок
4 – Справочный файлHelp.doc
В рамках курсового
проектирования по предмету «Основы алгоритмизации и программирование» было спроектировано
и разработано программное приложение «Autos.exe», позволяющее автоматизировать процесс
хранения информации о путевых листах и расчета норм расхода топлива.
Программное средство имеет ряд
достоинств: простой и понятный интерфейс, небольшой объем памяти, занимаемый
приложением на различных носителях информации, удобно для быстрой обработки
информации.
В программе реализованы такие
задачи, как: ведение БД автомобилей, водителей и путевых листов, а также расчет
норм расхода топлива.
- разработана
выходная форма отчета;
- данные отчета
сохраняются в виде файла.
В процессе курсового
проектирования программный продукт прошел функциональное и полное тестирование,
которые доказали корректность выполнения всех определенных функций, отсутствие
сбоев и неадекватных реакций со стороны программы.
Возможными недостатками является
низкий уровень защиты данных, что и планируется доработать в последующих
версиях программы.
В процессе разработки программы
использовался в большом объеме тематический (по принципам расчета норм расхода
топлива на предприятиях) материал и материал по программированию, что способствовало
закреплению наработанных навыков и умений в этих интересных областях знаний.
Программный продукт получит
практическое внедрение или использование напредприятии РУП «Витебский ДСК»
завод КПД.
1
Багласова Т.Г. Методические указания по оформлению курсовых и дипломных
работ. -Мн.: ТБП, 2006
2
Грибанов В.П. и др. Основы алгоритмизации и программирование. – М.:
Бином, 1999
3
Культин Н.Б. Программирование в TurboPascal и Delphi. 2-ое изд.
переработанное и дополненное.–С-Пб: БХВ-Петербург, 2008
4
Леонтьев В.П. Новейшая энциклопедия персонального компьютера. – М.:
ОЛМА-ПРЕСС, 2002
5
Фаронов В.В. Delphi. Программирование на языке высокого уровня. –С-Пб:
Питер, 2005
6
ГОСТ 2.106-96. ЕСКД. Текстовые документы
7
ГОСТ 19.401-2000. ЕСПД. Текст программы
8
ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, программ, данных и систем
(обязательное)
Текст программы
unitUnitMain;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UnitData,
ExtCtrls, DBCtrls, Grids, DBGrids, ComCtrls, StdCtrls,
Buttons,
UnitAddAuto, UnitNorms, UnitAddList, UnitPutListContent, Math;
type
TFormMain =
class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3:
TTabSheet;
DBGrid1:
TDBGrid;
BitBtn1:
TBitBtn;
BitBtn2:
TBitBtn;
BitBtn3:
TBitBtn;
DBGrid2:
TDBGrid;
BitBtn4:
TBitBtn;
BitBtn5:
TBitBtn;
DBGrid3:
TDBGrid;
BitBtn6:
TBitBtn;
BitBtn7:
TBitBtn;
BitBtn8:
TBitBtn;
TabSheet4: TTabSheet;
DateTimePicker1: TDateTimePicker;
Label1:
TLabel;
DateTimePicker2: TDateTimePicker;
Label2:
TLabel;
BitBtn9:
TBitBtn;
procedureFormShow(Sender:
TObject);
procedure
BitBtn1Click(Sender: TObject);
procedure
BitBtn2Click(Sender: TObject);
procedure
BitBtn3Click(Sender: TObject);
procedure
BitBtn5Click(Sender: TObject);
procedure
BitBtn4Click(Sender: TObject);
procedure
BitBtn7Click(Sender: TObject);
procedure
BitBtn6Click(Sender: TObject);
procedure
BitBtn8Click(Sender: TObject);
procedure
BitBtn9Click(Sender: TObject);
procedureWMNCLButtonDown(varMsg
: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
FormMain:
TFormMain;
implementation
{$R *.dfm}
procedureTFormMain.FormShow(Sender:
TObject);
begin
DataM.ADOConnection.Open;
DataM.ADOTableAutos.Open;
DataM.ADOTableVoditel.Open;
DataM.ADOTableToplivo.Open;
DataM.ADOTableVidNorma.Open;
DataM.ADOTableput_list_all.Open;
end;
procedure
TFormMain.BitBtn1Click(Sender: TObject);
begin
DataM.ADOTableAutos.Insert;
ifFormAddAuto.ShowModal=mrOk
then
begin
DataM.ADOTableAutos.Post;
DataM.ADOTableAutos.Close;
DataM.ADOTableAutos.Open;
end
else
begin
DataM.ADOTableAutos.Cancel;
end;
end;
procedure
TFormMain.BitBtn2Click(Sender: TObject);
begin
if
(DataM.ADOTableAutos.RecordCount>0) then
if
(MessageDlg('ДействительноудалитьавтоизБД?',mtConfirmation,[mbYes,mbNo],0)=mrYes)
then
begin
DataM.ADOQuery.Close;
DataM.ADOQuery.SQL.Text:='DELETE
FROM AUTOS WHERE ID_AUTO='+DataM.ADOTableAutosId_Auto.asString;
DataM.ADOQuery.ExecSQL;
DataM.ADOQuery.Close;
DataM.ADOTableAutos.Close;
DataM.ADOTableAutos.Open;
DataM.ADOTableput_list_all.Close;
DataM.ADOTableput_list_all.Open;
end;
end;
procedure
TFormMain.BitBtn3Click(Sender: TObject);
begin
if
(DataM.ADOTableAutos.RecordCount>0) then
begin
FormNorms.Caption:='Нормырасходанаавто "'+DataM.ADOTableAutosMarka.Value+' г.н.
'+DataM.ADOTableAutosNumber.Value+'"';
DataM.ADOTableNorms.Open;
FormNorms.ShowModal;
DataM.ADOTableNorms.Close;
end;
end;
procedure
TFormMain.BitBtn5Click(Sender: TObject);
begin
if
(DataM.ADOTableVoditel.RecordCount>0) then
if
(MessageDlg('ДействительноудалитьводителяизБД?',mtConfirmation,[mbYes,mbNo],0)=mrYes)
then
begin
DataM.ADOTableVoditel.Delete;
end;
end;
procedure
TFormMain.BitBtn4Click(Sender: TObject);
var
fio:String;
begin
fio:=InputBox('УкажитеФИОводителя','ФИО:','');
if
(trim(fio)<>'') then
begin
DataM.ADOTableVoditel.Insert;
DataM.ADOTableVoditelFIO.Value:=fio;
DataM.ADOTableVoditel.Post;
end;
end;
procedure
TFormMain.BitBtn7Click(Sender: TObject);
begin
if
(DataM.ADOTableput_list_all.RecordCount>0) then
if
(MessageDlg('ДействительноудалитьпутевойлистизБД?',mtConfirmation,[mbYes,mbNo],0)=mrYes)
then
begin
DataM.ADOQuery.Close;
DataM.ADOQuery.SQL.Text:='DELETE
FROM PUT_LISTS WHERE
ID_PUT_LIST='+DataM.ADOTableput_list_allId_Put_list.asString;
DataM.ADOQuery.ExecSQL;
DataM.ADOQuery.Close;
DataM.ADOTableput_list_all.Close;
DataM.ADOTableput_list_all.open;
end;
end;
procedure
TFormMain.BitBtn6Click(Sender: TObject);
begin
DataM.ADOTableput_list_all.Insert;
DataM.ADOTableput_list_allData_start.Value:=Date;
DataM.ADOTableput_list_allData_end.Value:=Date;
FormAddList.DateTimePicker2.Date:=Date;
ifFormAddList.ShowModal=mrOk
then
begin
DataM.ADOTableput_list_all.Post;
DataM.ADOTableput_list_all.Close;
DataM.ADOTableput_list_all.open;
end
else
begin
DataM.ADOTableput_list_all.Cancel;
end;
end;
procedure
TFormMain.BitBtn8Click(Sender: TObject);
begin
if
(DataM.ADOTableput_list_all.RecordCount>0) then
begin
FormPutListsContent.Caption:='Содержимоепутевоголиста №'+DataM.ADOTableput_list_allNumber.AsString+' для
'+DataM.ADOTableput_list_allauto.AsString;
DataM.ADOTablePut_list_content.Open;
FormPutListsContent.ShowModal;
DataM.ADOTablePut_list_content.Close;
end;
end;
procedure
TFormMain.BitBtn9Click(Sender: TObject);
var
f:TextFile;
i:Integer;
begin
DataM.ADOStoredProcReport.Close;
DataM.ADOStoredProcReport.Parameters.FindParam('data_start_param').Value:=StrToDate(DateToStr(DateTimePicker1.Date));
DataM.ADOStoredProcReport.Parameters.FindParam('data_end_param').Value:=StrToDate(DateToStr(DateTimePicker2.Date));
DataM.ADOStoredProcReport.open;
DataM.ADOStoredProcAllToplivo.Close;
DataM.ADOStoredProcAllToplivo.Parameters.FindParam('data_start_param').Value:=StrToDate(DateToStr(DateTimePicker1.Date));
DataM.ADOStoredProcAllToplivo.Parameters.FindParam('data_end_param').Value:=StrToDate(DateToStr(DateTimePicker2.Date));
DataM.ADOStoredProcAllToplivo.open;
AssignFile(f,'report.txt');
Rewrite(f);
writeln(f,'Расходтопливазапериод: ',DateToStr(DateTimePicker1.Date),' -
',DateToStr(DateTimePicker2.Date));
i:=1;
if (DataM.ADOStoredProcReport.RecordCount>0)
then
begin
DataM.ADOStoredProcReport.RecNo:=1;
while (not
DataM.ADOStoredProcReport.Eof) do
begin
writeln(f,'
',i,'. ',DataM.ADOStoredProcReportMarka.asString,' г.н.',
DataM.ADOStoredProcReportNumber.AsString,' ', DataM.ADOStoredProcReportNaim_toplivo.Asstring,'
- ', floatToStr(RoundTo(DataM.ADOStoredProcReportrasxod.Value,-2)));
DataM.ADOStoredProcReport.Next;
inc(i);
end;
i:=1;
writeln(f,'Итого по
видам топлива:');
DataM.ADOStoredProcAllToplivo.RecNo:=1;
while (not
DataM.ADOStoredProcAllToplivo.Eof) do
begin
writeln(f,'
',i,'. ', DataM.ADOStoredProcAllToplivoNaim_toplivo.AsString,' - ', floatToStr(RoundTo(DataM.ADOStoredProcAllToplivoall_rasxod.Value,-2)));
DataM.ADOStoredProcAllToplivo.Next;
inc(i);
end;
end;
CloseFile(f);
DataM.ADOStoredProcReport.Close;
DataM.ADOStoredProcAllToplivo.Close;
WinExec('notepad.exe
report.txt',1);
end;
procedureTFormMain.WMNCLButtonDown(varMsg:
TWMNCLButtonDown);
begin
ifMsg.HitTest=HTHELP
then
showMessage('fsdfsfsd');
else
inherited;
end;
end.
unitUnitNorms;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
UnitData, Grids, DBGrids, StdCtrls, Buttons, UnitAddNorma;
type
TFormNorms =
class(TForm)
DBGrid1:
TDBGrid;
BitBtn1:
TBitBtn;
BitBtn2:
TBitBtn;
procedure
BitBtn2Click(Sender: TObject);
procedure
BitBtn1Click(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
FormNorms:
TFormNorms;
implementation
uses DB;
{$R *.dfm}
procedure
TFormNorms.BitBtn2Click(Sender: TObject);
begin
if
(DataM.ADOTableNorms.RecordCount>0) then
if
(MessageDlg('ДействительноудалитьнормудляавтоизБД?',mtConfirmation,[mbYes,mbNo],0)=mrYes)
then
begin
DataM.ADOQuery.Close;
DataM.ADOQuery.SQL.Text:='DELETE
FROM NORMS WHERE ID_NORMA='+DataM.ADOTableNormsId_norma.asString;
DataM.ADOQuery.ExecSQL;
DataM.ADOQuery.Close;
DataM.ADOTableNorms.Close;
DataM.ADOTableNorms.Open;
end;
end;
procedure
TFormNorms.BitBtn1Click(Sender: TObject);
begin
DataM.ADOTableNorms.Insert;
DataM.ADOTableNormsID_Auto.Value:=DataM.ADOTableAutosId_Auto.Value;
DataM.ADOTableNormsStart_date.Value:=Date;
FormAddNorma.DateTimePicker1.Date:=Date;
ifFormAddNorma.ShowModal=mrOk
then
begin
DataM.ADOTableNorms.Post;
end
else
begin
DataM.ADOTableNorms.Cancel;
end;
DataM.ADOTableNorms.Close;
DataM.ADOTableNorms.Open;
end;
end.
unitUnitPutListContent;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Buttons, UnitData, Grids, DBGrids, UnitAddPutListContent;
type
TFormPutListsContent
= class(TForm)
BitBtn2:
TBitBtn;
BitBtn1:
TBitBtn;
DBGrid1:
TDBGrid;
procedure
BitBtn1Click(Sender: TObject);
procedure
BitBtn2Click(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
FormPutListsContent:
TFormPutListsContent;
implementation
uses DB;
{$R *.dfm}
procedure
TFormPutListsContent.BitBtn1Click(Sender: TObject);
begin
DataM.ADOTablePut_list_content.Insert;
DataM.ADOTablePut_list_contentId_put_list.Value:=DataM.ADOTableput_list_allId_Put_list.Value;
DataM.ADOTablePut_list_contentData.Value:=Date;
DataM.ADONormsForAutoByDate.Parameters.FindParam('id_auto_param').Value:=DataM.ADOTableput_list_allId_Auto.Value;
DataM.ADONormsForAutoByDate.Parameters.FindParam('date_param').Value:=DataM.ADOTablePut_list_contentData.Value;
DataM.ADONormsForAutoByDate.Open;
FormAddPutListContent.DateTimePicker1.Date:=Date;
ifFormAddPutListContent.ShowModal=mrOk
then
begin
DataM.ADOTablePut_list_content.Post;
end
else
begin
DataM.ADOTablePut_list_content.Cancel;
end;
DataM.ADOTablePut_list_content.Close;
DataM.ADOTablePut_list_content.Open;
end;
procedure
TFormPutListsContent.BitBtn2Click(Sender: TObject);
begin
if
(DataM.ADOTablePut_list_content.RecordCount>0) then
if
(MessageDlg('Действительноудалитьзаписьизпутевоголиста?',mtConfirmation,[mbYes,mbNo],0)=mrYes)
then
begin
DataM.ADOQuery.Close;
DataM.ADOQuery.SQL.Text:='DELETE
FROM Put_list_content WHERE ID='+DataM.ADOTablePut_list_contentId.AsString;
DataM.ADOQuery.ExecSQL;
DataM.ADOQuery.Close;
DataM.ADOTablePut_list_content.Close;
DataM.ADOTablePut_list_content.open;
end;
end;
end.
unitUnitAddAuto;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
UnitData, StdCtrls, Buttons, Mask, DBCtrls;
type
TFormAddAuto
= class(TForm)
Label1:
TLabel;
Label2:
TLabel;
Label3:
TLabel;
DBEdit1:
TDBEdit;
DBEdit2:
TDBEdit;
DBEdit3:
TDBEdit;
BitBtn1:
TBitBtn;
BitBtn2:
TBitBtn;
Label4:
TLabel;
DBLookupComboBox1: TDBLookupComboBox;
SpeedButton1: TSpeedButton;
procedure
BitBtn1Click(Sender: TObject);
procedure SpeedButton1Click(Sender:
TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
FormAddAuto:
TFormAddAuto;
implementation
{$R *.dfm}
procedure
TFormAddAuto.BitBtn1Click(Sender: TObject);
begin
if (trim(DataM.ADOTableAutosMarka.Value)='')
then
begin
ShowMessage('Укажитемаркуавто!!!');
ModalResult:=mrNone;
exit;
end;
if
(trim(DataM.ADOTableAutosNumber.Value)='') then
begin
ShowMessage('Укажите
регистрационный номер авто!!!');
ModalResult:=mrNone;
exit;
end;
if
(trim(DBEdit3.Text)='') then
begin
ShowMessage('Укажитепробег!!!');
ModalResult:=mrNone;
exit;
end;
if
(DataM.ADOTableAutosStart_Statement.Value<0) then
begin
ShowMessage('Пробег не
может быть отрицательным!!!');
ModalResult:=mrNone;
end;
if
(trim(DBLookupComboBox1.Text)='') then
begin
ShowMessage('Укажитевидтоплива!!!');
ModalResult:=mrNone;
end;
end;
procedure
TFormAddAuto.SpeedButton1Click(Sender: TObject);
var
toplivo:String;
begin
toplivo:=InputBox('Укажитеназваниетоплива','Топливо:','');
if
(trim(toplivo)<>'') then
begin
DataM.ADOTableToplivo.Insert;
DataM.ADOTableToplivoNaim_toplivo.Value:=toplivo;
DataM.ADOTableToplivo.Post;
end;
end;
end.
unitUnitAddList;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Buttons, UnitData, ComCtrls, Mask, DBCtrls;
type
TFormAddList
= class(TForm)
Label1:
TLabel;
DBEdit1:
TDBEdit;
BitBtn1:
TBitBtn;
BitBtn2:
TBitBtn;
DateTimePicker1: TDateTimePicker;
DBEdit4:
TDBEdit;
Label4:
TLabel;
Label2:
TLabel;
DBEdit2:
TDBEdit;
DateTimePicker2: TDateTimePicker;
Label3:
TLabel;
Label5:
TLabel;
DBLookupComboBox1: TDBLookupComboBox;
DBLookupComboBox2: TDBLookupComboBox;
procedure
DateTimePicker1Change(Sender: TObject);
procedure
DateTimePicker2Change(Sender: TObject);
procedure
BitBtn1Click(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
FormAddList:
TFormAddList;
implementation
{$R *.dfm}
procedure
TFormAddList.DateTimePicker1Change(Sender: TObject);
begin
DataM.ADOTableput_list_allData_start.Value:=StrToDate(DateToStr(DateTimePicker1.Date));
end;
procedure
TFormAddList.DateTimePicker2Change(Sender: TObject);
begin
DataM.ADOTableput_list_allData_end.Value:=StrToDate(DateToStr(DateTimePicker2.Date));
end;
procedure
TFormAddList.BitBtn1Click(Sender: TObject);
begin
if
(trim(DBEdit4.Text)='') then
begin
ShowMessage('Укажите
номер путевого листа!!!');
ModalResult:=mrNone;
exit;
end;
if
(trim(DBLookupComboBox1.Text)='') then
begin
ShowMessage('Укажитеводителя!!!');
ModalResult:=mrNone;
exit;
end;
if
(trim(DBLookupComboBox2.Text)='') then
begin
ShowMessage('Укажитеавтомобиль!!!');
ModalResult:=mrNone;
exit;
end;
end;
end.
unitUnitAddNorma;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls, Buttons, Mask, DBCtrls, Unitdata, ComCtrls;
type
TFormAddNorma
= class(TForm)
Label1:
TLabel;
Label2:
TLabel;
Label3:
TLabel;
DBEdit1:
TDBEdit;
DBEdit3:
TDBEdit;
BitBtn1:
TBitBtn;
BitBtn2:
TBitBtn;
DateTimePicker1: TDateTimePicker;
DBLookupComboBox1: TDBLookupComboBox;
SpeedButton1: TSpeedButton;
procedure
BitBtn1Click(Sender: TObject);
procedure
DateTimePicker1Change(Sender: TObject);
procedure
SpeedButton1Click(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
FormAddNorma:
TFormAddNorma;
implementation
{$R *.dfm}
procedure
TFormAddNorma.BitBtn1Click(Sender: TObject);
begin
if
(trim(DBEdit1.Text)='') then
begin
ShowMessage('Укажите
дату вступления в силу нормы!!!');
exit;
end;
if
(trim(DBLookupComboBox1.Text)='') then
begin
ShowMessage('Укажите
наименование нормы!!!');
ModalResult:=mrNone;
exit;
end;
if
(trim(DBEdit3.Text)='') then
begin
ShowMessage('Укажите
норму расхода!!!');
ModalResult:=mrNone;
exit;
end;
if
(DataM.ADOTableNormsRasxod_na_100.Value<0) then
begin
ShowMessage('Норма
расхода не может быть отрицательной!!!');
ModalResult:=mrNone;
end;
end;
procedure
TFormAddNorma.DateTimePicker1Change(Sender: TObject);
begin
DataM.ADOTableNormsStart_date.Value:=StrToDate(DateToStr(DateTimePicker1.Date));
end;
procedure
TFormAddNorma.SpeedButton1Click(Sender: TObject);
var
norma:String;
begin
norma:=InputBox('Укажитеназваниевиданормы','Виднормы:','');
if
(trim(norma)<>'') then
begin
DataM.ADOTableVidNorma.Insert;
DataM.ADOTableVidNormavid_norma.Value:=norma;
DataM.ADOTableVidNorma.Post;
end;
end;
end.
unitUnitAddPutListContent;
interface
uses
Windows,
Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
UnitData, DBCtrls, ComCtrls, StdCtrls, Buttons, Mask;
type
TFormAddPutListContent
= class(TForm)
Label1:
TLabel;
Label2:
TLabel;
Label3:
TLabel;
DBEdit1:
TDBEdit;
DBEdit3:
TDBEdit;
BitBtn1:
TBitBtn;
BitBtn2:
TBitBtn;
DateTimePicker1: TDateTimePicker;
DBLookupComboBox1: TDBLookupComboBox;
procedure
BitBtn1Click(Sender: TObject);
procedure
DateTimePicker1Change(Sender: TObject);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
FormAddPutListContent:
TFormAddPutListContent;
implementation
{$R *.dfm}
procedure
TFormAddPutListContent.BitBtn1Click(Sender: TObject);
begin
if
(trim(DBEdit1.Text)='') then
begin
ShowMessage('Укажитедату!!!');
ModalResult:=mrNone;
exit;
end;
if
(trim(DBLookupComboBox1.Text)='') then
begin
ShowMessage('Укажите
наименование нормы!!!');
ModalResult:=mrNone;
exit;
end;
if
(trim(DBEdit3.Text)='') then
begin
ShowMessage('Укажитерасстояние!!!');
ModalResult:=mrNone;
exit;
end;
if
(DataM.ADOTablePut_list_contentDistance.Value<0) then
begin
ShowMessage('Расстояние
не может быть отрицательным!!!');
ModalResult:=mrNone;
end;
end;
procedure
TFormAddPutListContent.DateTimePicker1Change(Sender: TObject);
begin
DataM.ADOTablePut_list_contentData.Value:=StrToDate(DateToStr(DateTimePicker1.Date));
DataM.ADONormsForAutoByDate.Close;
DataM.ADONormsForAutoByDate.Parameters.FindParam('date_param').Value:=DataM.ADOTablePut_list_contentData.Value;
DataM.ADONormsForAutoByDate.Open;
end;
end.
unitUnitData;
interface
uses
SysUtils,
Classes, DB, ADODB, MATH;
type
TDataM =
class(TDataModule)
ADOConnection:
TADOConnection;
ADOTableAutos:
TADOTable;
ADOTableAutosId_Auto:
TAutoIncField;
ADOTableAutosMarka:
TWideStringField;
ADOTableAutosNumber:
TWideStringField;
ADOTableAutosStart_Statement:
TIntegerField;
DataSourceAutos:
TDataSource;
ADOTableNorms:
TADOTable;
ADOTableNormsId_norma:
TAutoIncField;
ADOTableNormsID_Auto:
TIntegerField;
ADOTableNormsStart_date:
TDateTimeField;
ADOTableNormsNaim_norma:
TWideStringField;
ADOTableNormsRasxod_na_100: TFloatField;
DataSourceNorms:
TDataSource;
ADOTableVoditel:
TADOTable;
ADOTableVoditelId_voditel:
TAutoIncField;
ADOTableVoditelFIO:
TWideStringField;
DataSourceVoditel:
TDataSource;
ADOTableput_list_all:
TADOTable;
ADOTableput_list_allId_Put_list:
TAutoIncField;
ADOTableput_list_allNumber:
TIntegerField;
ADOTableput_list_allId_voditel:
TIntegerField;
ADOTableput_list_allId_Auto:
TIntegerField;
ADOTableput_list_allData_start:
TDateTimeField;
ADOTableput_list_allData_end:
TDateTimeField;
ADOTableput_list_allFIO:
TWideStringField;
ADOTableput_list_allauto:
TWideStringField;
DataSourceput_list_all:
TDataSource;
ADOTableAutosAutoFull:
TStringField;
ADOQuery:
TADOQuery;
ADOTableAutosId_vid_toplivo:
TIntegerField;
ADOTableAutosNaim_toplivo:
TWideStringField;
ADOTableToplivo:
TADOTable;
DataSourcetoplivo:
TDataSource;
ADOTableToplivoId_vid_toplivo:
TAutoIncField;
ADOTableToplivoNaim_toplivo:
TWideStringField;
ADOTableVidNorma:
TADOTable;
DataSourceVidNorma:
TDataSource;
ADOTableVidNormaId_vid_norma:
TAutoIncField;
ADOTableVidNormavid_norma:
TWideStringField;
ADOTableNormsId_vid_norma:
TIntegerField;
ADOTablePut_list_content:
TADOTable;
DataSourcePut_list_content:
TDataSource;
ADOTablePut_list_contentId:
TAutoIncField;
ADOTablePut_list_contentId_put_list:
TIntegerField;
ADOTablePut_list_contentData:
TDateTimeField;
ADOTablePut_list_contentId_norma:
TIntegerField;
ADOTablePut_list_contentDistance:
TFloatField;
ADOTablePut_list_contentvid_norma:
TWideStringField;
ADONormsForAutoByDate:
TADOStoredProc;
ADONormsForAutoByDateId_norma:
TAutoIncField;
ADONormsForAutoByDatevid_norma:
TWideStringField;
ADONormsForAutoByDatedata:
TDateTimeField;
DataSourceNormsForAuto:
TDataSource;
ADOStoredProcReport:
TADOStoredProc;
ADOStoredProcReportAll_distance:
TFloatField;
ADOStoredProcReportId_Auto:
TAutoIncField;
ADOStoredProcReportMarka:
TWideStringField;
ADOStoredProcReportNumber:
TWideStringField;
ADOStoredProcReportNaim_toplivo:
TWideStringField;
ADOStoredProcReportrasxod:
TFloatField;
ADOStoredProcAllToplivo:
TADOStoredProc;
ADOStoredProcAllToplivoNaim_toplivo:
TWideStringField;
ADOStoredProcAllToplivoall_rasxod:
TFloatField;
procedure
ADOTableNormsRasxod_na_100GetText(Sender: TField;
var Text:
String; DisplayText: Boolean);
procedureADOTableAutosCalcFields(DataSet:
TDataSet);
procedureADOTablePut_list_contentDistanceGetText(Sender:
TField;
var Text:
String; DisplayText: Boolean);
private
{ Private
declarations }
public
{ Public
declarations }
end;
var
DataM:
TDataM;
implementation
{$R *.dfm}
procedure
TDataM.ADOTableNormsRasxod_na_100GetText(Sender: TField;
var Text:
String; DisplayText: Boolean);
begin
Text:=FloatToStr(roundTo(Sender.AsFloat,-2));
end;
procedureTDataM.ADOTableAutosCalcFields(DataSet:
TDataSet);
begin
ADOTableAutosAutoFull.Value:=ADOTableAutosMarka.Value+'
г.н.'+ADOTableAutosNumber.Value;
end;
procedureTDataM.ADOTablePut_list_contentDistanceGetText(Sender:
TField;
var Text:
String; DisplayText: Boolean);
begin
Text:=FloatToStr(roundTo(Sender.AsFloat,-2));
end;
end.
(справочное)
Схема работы
Рисунок
Б.1 – Схема работы алгоритма «Добавление записей»