Автоматизация вещевого учета на военном складе - дипломная работа готовая

ООО "Диплом777"

8:00–20:00 Ежедневно

Никольская, д. 10, оф. 118

Дипломная работа на тему Автоматизация вещевого учета на военном складе

36

ДИПЛОМНЫЙ ПРОЕКТ НА ТЕМУ:

Автоматизация вещевого учета на военном складе

Содержание

Введение

I. Специальная часть

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

2. Формализация

3. Описание среды программирования

3.1 Требования к техническому обеспечению

3.2 Требования к программному обеспечению

4.1 Алгоритмизация задачи

4.1.1 Описание алгоритма

4.1.2 Структурная схема

4.2 Программирование

4.3 Аномалии и защитное программирование

4.4 Тестирование и отладка

5. Анализ результатов решения

6. Инструкция пользователю

II. Экономическая часть

Заключение

Литература

Приложение

программный приложение автоматизация учет

Введение

Военный вещевой склад занимается хранением и выдачей вещевого имущества личному составу военнослужащих.

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

Автоматизированный учет поступающего довольствия упростит и систематизирует выдачу и обеспечение военнослужащих РФ материальным имуществом.

I. Специальная часть

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

Цель дипломного проекта разработать программное приложение по автоматизированному вещевому учету на военном складе, которое позволит:

автоматизировать процесс учёта;

вести контроль/отчетность по выдачам;

производить поиск имущества/наименований на складе;

формировать и выводить на печать отчеты;

Так же приложение должно содержать;

* вкладки с учетными формами и отчетами – с помощью, которых можно быстро найти нужную информацию и произвести необходимые операции для ведения учета;

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

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

2. Формализация

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

Взаимосвязь показана в схеме данных:

Как правило, разработка проекта реализации задачи выполняется в несколько этапов и начинается с анализа той информации, которая является выходной (формы и отчеты для Access). Только после выяснения структуры и состава этой информации, формулировки запросов для получения отчетов можно сделать вывод о структуре и составе таблиц данных. Необходимым этапом формализации задачи является нормализация базы данных, которая, по сути, представляет собой процесс оптимизации хранения и использования информации в таблицах.

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

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

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

Наиболее часто используется приведение к третьей нормальной форме (3NF). В результате устраняется избыточность данных и упрощается процесс изменения структуры БД.

На следующем этапе уточняется структура полей в таблицах, и определяются правила ввода. В Borland Delphi 7 проектируем входные и выходные формы и отчеты. На заключительном этапе создается меню и различные интерфейсные промежуточные формы. Затем, в процессе отладки и доработки, возможен возврат на любой этап процесса разработки.

3. Описание среды программирования

Для написания приложения была выбрана среда визуального программирования Borland Delphi 7.

Синтаксис Borland Delphi 7 основан на языке программирования Object Pascal. Borland Delphi 7 полностью поддерживает ООП (объектно-ориентированное программирование), что значительно расширяет возможности среды.

Еще одним немаловажным достоинством выбранной среды Borland Delphi 7 является то, что Borland Delphi 7 во всем мире считается одним из самых простых сред программирования, и в отличие от всех широко распространенных сред программирования, является строго типизированным, что позволяет свести количество ошибок практически к нулю (за исключением логических ошибок алгоритма).

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

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

3.1 Требования к техническому обеспечению

Минимальные требования:

процессор Pentium 2;

операционная система Windows 2000;

ОЗУ 64 Мб;

свободное место на жестком диске 50 Мб для приложения.

Рекомендуемые требования:

любой процессор Intel/AMD;

операционная система Windows XP;

ОЗУ 128 Мб;

свободное место на жестком диске 50 Мб.

Для ввода данных необходимо наличие:

клавиатуры;

компьютерной мыши.

3.2 Требования к программному обеспечению

Microsoft Windows 98/2000/XP.

Microsoft Office 97/2000.

4. Методика разработки приложения

4.1 Алгоритмизация задачи

4.1.1 Описание алгоритма

БД «Автоматизация вещевого учета на Военном складе » создавалась с нуля на Access 2003.

Таблица №1: Вещевое имущество.

Имя поля

Тип данных

Формат поля/Размер поля

Обязательное поле

1

2

3

4

Код Вещевого имущества

Счетчик

Длинное целое

Да

Наименование

Текстовый

50

Да

Размер

Числовой

50

Нет

Таблица №2: Выдача.

Имя поля

Тип данных

Формат поля/Размер поля

Обязательное поле

1

2

3

4

Код вещевого имущества

Числовой

Длинное целое

Да

Выдано

Текстовый

40

Да

Дата

Дата/время

Да

Размер

Числовой

Длинное целое

Да

Сотрудник

Текстовый

40

Да

Номер накладной

Числовой

Длинное целое

Да

Таблица №3: Поступление.

Имя поля

Тип данных

Формат поля/Размер поля

Обязательное поле

1

2

3

4

Код вещевое имущество

Числовой

Длинное целое

Да

Номер накладной

Числовой

Длинное целое

Да

Пришло

Текстовый

40

Да

Дата

Дата/время

Да

Размер

Числовой

Длинное целое

Да

Таблица №4: Склад

Имя поля

Тип данных

Формат поля/Размер поля

Обязательное поле

1

2

3

4

Код вещевого имущества

Счётчик

Длинное целое

Да

Количество

Числовой

Длинное целое

Да

Таблица №5: Пользователи

Имя поля

Тип данных

Формат поля/Размер поля

Обязательное поле

1

2

3

4

Ключ

(Ключевое поле)

Счётчик

Длинное целое

Да

Логин

Текстовый

40

Да

Пароль

Текстовый

30

Да

Доступ

Логический

Да/Нет

Да

Приложение имеет следующие формы:

Форма «Поступление Довольствия».

Форма нужна для просмотра интересующей вас информации о поступлениях довольствия и накладных.

Форма содержит в себе следующую информацию:

Код вещевого имущества;

Поступило (Наименование предмета);

Количество;

Дата поступления;

Размер;

Номер накладной;

Форма «Выдача довольствия»

Форма нужна для просмотра интересующей вас информации о выдачах довольствия.

Форма содержит в себе следующую информацию:

Код имущества;

Выдано (наименование предмета);

Количество;

Размер;

Дата выдачи;

Номер накладной;

Получатель;

Форма «Состояние склада».

Форма нужна для просмотра интересующей вас информации о количестве довольствия на складе, поиск по наименованию и отчет.

Форма содержит в себе следующую информацию:

Наименование предмета;

Количество;

Форма «Новый предмет».

Форма нужна для добавления нового предмета, если такой отсутствует на складе.

Форма содержит в себе следующую информацию:

Код вещевого имущества;

Наименование предмета;

Размер;

Приложение имеет следующие отчеты:

Отчет «Отчет о поступлениях»

С помощью этого отчета можно посмотреть, о предметах, поступавших на склад за промежуток времени.

Отчет содержит следующую информацию:

Наименование предмета;

Пришло (количество);

Дата поступления;

Размер;

Номер накладной;

Отчет «Отчет о выдачах»

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

Отчет содержит следующую информацию:

Наименование предмета;

Выдано (количество);

Дата Выдачи;

Размер;

Номер накладной;

Получатель;

4.1.2 Структурная схема

36

4.2 Программирование

В соответствии со структурной программой, приведенной выше в пункте 4.1.2.«Структура приложения» в представленном приложении разработаны программные модули на Borland Delphi 7.А также запросы на языке Microsoft Access 2000. Тексты программных модулей и запросов приведены в пункте V. «Приложение».

4.3 Аномалии и защитное программирование

В ходе выполнения приложения возможно появление на экране сообщений:

1. Сообщение «проверьте правильность заполнения полей.

Ошибка возникает при не полном заполнении полей формы.

При этом оператор должен:

1.1. Проверить правильность заполнения полей.

1.2. Возможно, причиной ошибки послужила отсутствие записи в каком либо поле.

4.4 Тестирование и отладка

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

Для написания приложения на Borland Delphi я пользовалась движком отладки Borland Debugger Engine. Он имеет некоторые средства отладки такие как:

Контрольная точка остановки приложения (Toggle Breakpoint). Приложение выполняется в нормальном режиме и прерывает свое выполнение на точках остановки приложения.

Запуск приложения до команды, выделенной курсором (Run to Cursor). Приложение выполняется до команды, выделенной курсором в исходном коде. Дальнейшее выполнение приложения осуществляется командами Step Over и Trace Into.

Переход выполнения приложения по адресу (Go to Address). Приложение выполняется до команды по заданному адресу. Далее можно выполнять программу по одной команде на низком уровне.

Окно слежения за переменными, записями и массивами (Inspect window).

Окно слежения за изменениями значений переменных (Evaluate/Modify window).

Окно слежения за выполнением на низком уровне (CPU window).

Тестирование – процесс многократного выполнения приложения с целью выявления ошибок. При тестировании должны использоваться следующие принципы:

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

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

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

необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);

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

следует сохранять использованные тесты (для повышения эффективности повторного тестирования приложения после ее модификации или установки у заказчика);

следует учитывать так называемый «принцип скопления ошибок»: вероятность наличия не обнаруженных ошибок в некоторой части приложения прямо пропорциональна числу ошибок, уже обнаруженных в этой части;

Хотя приложение прошло тестирование успешно, в ней, тем не менее, могут содержаться ошибки, т.к.

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

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

5. Анализ результатов решения

Результатом решения поставленной задачи являются отчеты и формы. Формы представляют собой ведение статистики на производстве, отчеты являются дополнительной статистической информацией. В соответствии с пунктом 4.4 тестирование и отладка производились непосредственно во время разработки проекта. После завершения работы над приложением было еще раз произведено полное тестирование.

Все найденные ошибки были успешно устранены.

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

6. Инструкция пользователю

Приложение управления учетом состоит из пяти частей: формы поступления довольствия, формы выдача довольствия, формы состояния склада, формы добавления предмета и отчетов.

Запуск приложения может осуществляется различными способами:

– из главного меню Windows

– иконкой на рабочем столе

– запуск приложения Automation_of_stock_taking.exe

Главная форма содержит следующие вкладки:

Операции по складу;

Отчеты;

Помощь;

Поступление довольствия – эта вкладка открывает форму, позволяющую формировать накладную по поступлению довольствия и формировать отчет.

Выдача- формировать накладную по выдаваемому довольствию со склада.

Состояние склада- позволяет просматривать предметы, находящиеся на складе и выводить на печать.

Новый предмет- позволяет добавлять предмет на склад если такой отсутствует.

Отчеты – показывает отчет по поступлениям (выдачам) за заданный период

Часть «Поступление довольствия» содержит перечень предметов и возможность формирования новых накладных.

На форме имеются:

Таблица поступлений

Диалоговые окна и кнопки для формирования накладных

Для формирования накладной поступления следует выбрать предмет из выпадающего списка, ввести номер накладной, размер , выбрать дату, количество, и нажать кнопку «Ок»

Часть «Выдача довольствия» содержит перечень предметов и возможность формирования новой накладной для выдачи довольствия со склада.

На форме имеются:

Таблица выдачи

Диалоговые окна и кнопки для формирования накладной.

Для формирования накладной выдачи следует выбрать предмет из выпадающего списка, ввести количество, размер, дату, номер накладной, выбрать ответственное лицо и нажать кнопку «Ок».

Часть «Состояние склада» содержит сведения о количестве предметов хранящихся на складе.

На форме имеются:

Перечень предметов

Количество предметов

Поле для поиска предмета с кнопкой

Кнопка для формирования отчета о состоянии склада

Кнопка для выхода

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

При нажатии на кнопку «Сформировать отчет»данные из таблицы на форме будут перемещены в таблицу Excel что дает возможность печати данных для отчетной информации.

При нажатии на кнопку «Выход» данная форма будет закрыта.

Часть «Новый предмет» служит для добавления нового предмета на склад.

На форме имеются:

Таблица с наименованием предметов

Поле для записи нового предмета

Поле для введения размера

Часть «Отчеты» служит для вывода отчетов о поступлениях (выдачах) предметов довольствия со склада за заданный промежуток времени.

II. Экономическая часть

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

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

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

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

Расчёт затрат на разработку и внедрение проекта.

Распределение трудоемкости по стадиям разработки:

Табл.1

Этап разработки

Содержание работ

Трудоемкость, ч.

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

Разработка проекта, сбор необходимой информации, согласование проекта

12

Технический проект

Корректировка проекта. Разработка приложения, пояснительной записки. Согласование и утверждение проекта.

45

Рабочий проект

Описание приложения на языке программирования с комментариями, корректировка и тестирование приложения

85

Документация и поддержка проекта

Разработка и сдача документации, сопутствующей проекту

30

ИТОГО

172

Коэффициент сложности задачи c характеризует относительную сложность приложения по отношению к данной задаче, реализующей стандартные методы решения, сложность которой принята равной 1единице (величина с лежит в пределах от 0,5 до 1,5). Так как этот программный продукт не сложен в написании , включает в себя алгоритмы ввода данных, написан на языке Borland Delphi 7, с использованием СУБД Microsoft Access 2000, сложность задачи устанавливаем 0,8.

c = 0,8 – коэффициент сложности приложения

Коэффициент коррекции приложения p – увеличение объема работ за счет внесения изменений в алгоритм или программу по результатам уточнения постановок (величина p лежит в пределах от 0 до 0,5). С учетом того, что была поставлена четко задача, доработки все же были. Поэтому возьмем коэффициент = 0,2

p = 0,2 – коэффициент коррекции приложения в ходе разработки.

Коэффициент увеличения затрат труда, вследствие недостаточного описания задачи, в зависимости от сложности задачи принимается (от 1 до 1,5), данная задача, практически не потребовала уточнения и больших доработок, примем b = 1,2.

b = 1,2 – коэффициент увеличения затрат труда, вследствие недостаточного описания задачи.

Коэффициент квалификации разработчика k определяется в зависимости от стажа работы и составляет для работающих:

-до 2х лет – 0,8;

-от 3х до 5 лет – 1,0;

-от 5 до 8 – 1,2;

-свыше 8 лет – 1,5.

Разработчик данного программного продукта которому было поручено это задание, имел опыт работы по специальности 1 год и поэтому не считается квалифицированным специалистом, примем k = 0,8.

k = 0,8 – коэффициент квалификации разработчика.

Теперь посчитаем заработную плату основную. Оклад работника 3600 руб. Значит:

ЗПосн = ЗП * с * (1 + p) * b * k = 3600 * 0,8 * (1 + 0,2) * 1,2 * 0,8 = 3317 руб. в месяц.

Дополнительная заработная плата (ЗПдоп), в виде премии, в момент реализации проекта не выплачивалась. Суммарные затраты на производственном предприятии остаются такими же как и основная.

172 часа – потрачено на разработку и внедрение программного продукта разработчиком.

Страховые отчисления (СО) берут в размер 26% от основной и дополнительной заработной платы. Найдём фондовые отчисления:

СО = ЗПосн * 26% = 3317 * 26% =862 руб.

8*22=176 количество рабочих часов в месяц.

Суммарные затраты предприятия на заработную плату за время написания программного продукта с учётом фондовых отчислений составят:

ЗПобщая = ЗПсум + СО = (3317+ 862)*172/176= 4048 руб.

Содержание и эксплуатация вычислительной техники.

Число часов отладки приложения составляет: 45 + 85 + 30 = 160

Стоимость 1 машинного часа рассчитывается следующим образом:

Стоимость электроэнергии + Амортизация оборудования + Затраты на ремонт / Фвт,

где Фвт – действительный фонд времени работы вычислительного комплекса.

Стоимость 1 КВТ/час электроэнергии составляет: 3 руб.

Один компьютер потребляет 30 ВТ в час.

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

8 ч. * 22 дня * 12 мес. * 0,3 КВТ/час * 3 руб. / КВТ/ч. = 1900,8

Амортизация зависит от срока использования компьютера . Так как срок его эксплуатации 3 года, то амортизация ещё начисляется.

Амортизация = Стоимость ПК /Срок использования ПК.

Стоимость ПК равна 24000 руб. Количество лет полезного использования 4 года, значит: 24000 / 4 = 6000 руб. в год.

Затраты на ремонт ЭВМ составляют 5% от его стоимости ПК:

24000 руб. * 5% = 1200 руб.

Действительный фонд времени работы вычислительного комплекса рассчитываем так:

Фвт = Фном – Фпроф

Фном – номинальный фонд времени работы вычислительного комплекса.

Фпроф – годовые затраты времени на профилактические работы (5% = Фном).

ПК работает в среднем 2112 ч. в год (Фном).Время ремонта ЭВМ в среднем занимает 5% времени работы ПК (Фпроф).Значит:

Фвт=Фном -Фпроф= (8ч. * 22 дн. * 12 мес.) – (8ч.* 22 дн.* 12 мес.* 0,05)=2112-106=2006 ч.

Стоимость 1 машинного часа работы = 1200+ 6000 + 1900 / 2006 = 4,5 р.

Содержание и эксплуатация вычислительного комплекса составляет:

4,5 р. * 160ч. = 720р. при написании приложения.

Новый ПК для приложения «Автоматизация вещевого учета на Военном складе» .Срок эксплуатации ПК находящегося в отделе 3 года, и он оснащен современной операционной Windows XP и программным продуктом Office 2003,которой достаточно для полноценной работы данного программного продукта.

Смета затрат на разработку приложения:

Табл.2

Наименование статьи расходов

Затраты, руб.

1

Суммарная заработная плата исполнителя

3317

2

Страховые отчисления

862

3

Содержание и эксплуатация вычислительного комплекса

720

ИТОГО:

4899

Экономический эффект от реализации и внедрения программного продукта.

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

Так как реальной экономии затрат добиться сложно, экономическим эффектом нашего проекта будет экономия рабочего времени сотрудника, вследствие чего он сможет выполнять большее количество работы.

До внедрения программного продукта сотрудник в среднем выполнял 8 операций по поиску и выводу в печати товара на складе. Ранее на поиск товара уходило 15 мин., а так же на поиск данных по выполнению операций уходило, около 13 мин. Следовательно:

Т1 = 15 + 13 = 28 мин.

После внедрения программного продукта тестирование показало, что время выполнения операции уменьшилось и стало = 10 мин.: на поиск товара требовалось 5 минут:

Т2= 10+5=18 мин

?Т = Т1 – Т2 = 28 -18 = 10 мин. 0,16 – экономия времени.

Мы добились экономии времени за счёт внедрения программного продукта. Удобный и простой в использовании интерфейс, формы для быстрого ввода информации, способствуют экономии времени.

Основная заработная плата одного сотрудника на производственном предприятии 9000 руб. в месяц. В месяц сотрудник работает (8ч. * 22рабочих дня) 176

Стоимость 1 ч.(Р) работы:

Рч = 9000 / 176 = 51,1 руб.

Также учтём Страховые отчисления, которые берём в размере 26%.

26% = 0,26

Рфо = (9000 * 0,26) / 176 = 13,2 руб.

Рсум = Рч + Рфо = 51,1 + 13,2 = 64,3 руб./ч

Рассчитаем годовой экономический эффект:

Перемножим выигранное время, количество операций в день, количество рабочих дней в месяце и количество рабочих месяцев:

?Тгод = (0,16* 8) * 22 * 12 = 337,92 ч.

Рассчитаем, сколько составит годовая экономия при внедрении программного продукта:

?Тгод * Рсум =

337,92 * 64,3 = 21 728,2 руб/год

Вычтем затраты:

21 728,2 руб – 4899= 16 829,2 руб/ экономический эффект.

Теперь посчитаем, за какое количество времени окупится приложение: Затраты /годовая экономия:

4899 / 21728,2 = 0,2

Программный продукт окупился менее чем за пол года . Это маленький срок, окупаемости. Сотрудник будет экономить время, работая с приложением, и обслуживать большее количество людей. Это и будет увеличивать прибыль.

III. Заключение

В данном дипломном проекте была реализована задача автоматизации вещевого учёта на военном складе.

Разработанное программное обеспечение

Достоинства программного продукта:

*удобство и простота в эксплуатации ;

*небольшой объем занимаемой памяти;

Разработанное программное обеспечение, позволяет осуществлять:

-автоматизированный учёт предметов довольствия

– контроль за движением довольствия в определённый период времени

-выводить на печать необходимую для работы на складе информацию.

Произведённая экономическая оценка эффективности от внедрения приложения свидетельствует об экономической рентабельности проекта. Срок окупаемости данного приложения составит 2, 5месяца

Литература

1.А.Я. Архангельский Программирование в Borland Delphi 7 -М.: Издательство «Бином», 2010.

2. Понамарев В. Базы данных в Delphi 7 – СПб.: Питер, 2011.

3. Жуков А. Изучаем Delphi. – СПб.: Питер, 2009.

4. Петров В.Н. Информационные системы. Учебник – СПб.: Питер, 2002.

Приложение

Рисунок №1 Входная форма.

Рисунок №2 Главное окно приложения.

Рисунок 2-2Форма «Поступление довольствия».

Рисунок 2-3 Форма «Выдача довольствия»

Рисунок 2-4 Форма «Состояние склада».

Рисунок 2-5 Форма «Добавление предмета».

Рисунок 2-6 Форма «Отчеты».

Рисунок 2-7 «Отчет по поступлению».

Рисунок 2-8 «Отчет по выдачам».

Исходный код приложения.

Главная форма

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DB, ADODB, Grids, DBGrids, jpeg, ExtCtrls, Menus,

XPMan;

type

TMainF = class(TForm)

DataSource1: TDataSource;

ADOConnection1: TADOConnection;

ADOQuery1: TADOQuery;

DBGrid1: TDBGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

N9: TMenuItem;

N10: TMenuItem;

Image1: TImage;

N11: TMenuItem;

XPManifest1: TXPManifest;

procedure GridSelectAll(Grid: TDBGrid);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N10Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainF: TMainF;

search:string;

implementation

uses Come, Leave, Sklad, About, Otchet, New;

{$R *.dfm}

procedure TMainF.GridSelectAll(Grid: TDBGrid);

begin

Grid.SelectedRows.Clear;

with Grid.Datasource.DataSet do

begin

First;

DisableControls;

try

while not EOF do

begin

Grid.SelectedRows.CurrentRowSelected:=true;

Next;

end;

finally

EnableControls;

end;

end;

end;

procedure TMainF.Button1Click(Sender: TObject);

begin

Postup.Show;

end;

procedure TMainF.Button2Click(Sender: TObject);

begin

Vydach.Show;

end;

procedure TMainF.Button3Click(Sender: TObject);

begin

SkladF.Show;

end;

procedure TMainF.Button5Click(Sender: TObject);

begin

Application.Terminate;

end;

procedure TMainF.Button6Click(Sender: TObject);

begin

AboutF.Show;

end;

procedure TMainF.Button4Click(Sender: TObject);

begin

Vxod.Show;

end;

procedure TMainF.Button7Click(Sender: TObject);

begin

OtchetF.Show;

end;

procedure TMainF.Button8Click(Sender: TObject);

begin

WinExec(‘hh.ex);………….Справку

end;

procedure TMainF.N4Click(Sender: TObject);

begin

Postup.Show;

end;

procedure TMainF.N5Click(Sender: TObject);

begin

Vydach.Show;

end;

procedure TMainF.N7Click(Sender: TObject);

begin

OtchetF.Show;

end;

procedure TMainF.N6Click(Sender: TObject);

begin

SkladF.Show;

end;

procedure TMainF.N2Click(Sender: TObject);

begin

MainF.Close;

end;

procedure TMainF.N11Click(Sender: TObject);

begin

newt.show;

end;

procedure TMainF.N10Click(Sender: TObject);

begin

AboutF.Show;

end;

end.

Форма «Поступление довольствия »

unit Come;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, ExtCtrls, Grids, DBCtrls, Menus;

type

TPostup = class(TForm)

Goods: TComboBox;

// Razm:TComboBox1;

GoodsL: TLabel;

Dat: TDateTimePicker;

DatL: TLabel;

KolUp: TUpDown;

Kol: TEdit;

KolL: TLabel;

OK: TButton;

Tab: TStringGrid;

Nomer: TEdit;

Label1: TLabel;

Label2: TLabel;

Razm: TComboBox;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

Button1: TButton;

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure OKClick(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Postup: TPostup;

m:integer;

implementation

uses Main, ComObj;

{$R *.dfm}

procedure TPostup.FormCreate(Sender: TObject);

begin

Tab.Cells[0,0]:=’Код вещевого имущества’;

Tab.Cells[1,0]:=’Поступило’;

Tab.Cells[2,0]:=’Количество’;

Tab.Cells[3,0]:=’Дата поступления’;

Tab.Cells[4,0]:=’Размер’;

Tab.Cells[5,0]:=’Номер накладной’;

end;

procedure TPostup.FormShow(Sender: TObject);

var j:longint;

begin

Goods.Text:=”;

Nomer.Text:=”;

Razm.Text:=”;

Dat.Date:=Date;

Goods.Items.Clear;

Razm.Items.Clear;

Kol.Text:=’1′;

Tab.RowCount:=2;

for j:=0 to 5 do

Tab.Cells[j,1]:=”;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Наименование FROM Вещевое_имущество’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

MainF.GridSelectAll(MainF.DBGrid1);

if MainF.DBGrid1.SelectedRows.Count>0 then

for j:=0 to MainF.DBGrid1.SelectedRows.Count-1 do

begin

MainF.DBGrid1.DataSource.DataSet.GotoBookmark(pointer(MainF.DBGrid1.SelectedRows.Items[j]));

Goods.Items.Add(MainF.DBGrid1.Fields[0].AsString);

end;

Goods.ItemIndex:=-1;

m:=1;

end;

procedure TPostup.OKClick(Sender: TObject);

var s,id,k,k_s,d,r,n:string; j:integer;

begin

if Goods.Text<>” then

try

if StrToInt(Kol.Text)>0 then

begin

n:=Nomer.Text;

r:=Razm.Text;

s:=Goods.Text;

d:=DateToStr(Dat.Date);

k:=Kol.Text;

if Goods.ItemIndex=-1 then

begin

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’INSERT INTO Вещевое_имущество (Наименование) VALUES (“‘+s+'”)’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.ExecSQL;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Код_вещевого_имущества FROM Вещевое_имущество WHERE Наименование = “‘+s+'”‘;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

id:=MainF.DBGrid1.Fields[0].AsString;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’INSERT INTO Приход (Номер_накладной ,Код_вещевого_имущества, Пришло, Дата, Размер) VALUES ( “‘+n+'”, “‘+id+'”, “‘+k+'”, “‘+d+'”, “‘+r+'”)’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.ExecSQL;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’INSERT INTO Склад (Код_вещевого_имущества, Количество) VALUES (“‘+id+'”, “‘+k+'”)’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.ExecSQL;

end

else

begin

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Код_вещевого_имущества FROM Вещевое_имущество WHERE Наименование = “‘+s+'”‘;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

id:=MainF.DBGrid1.Fields[0].AsString;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’INSERT INTO Приход (Номер_накладной, Код_вещевого_имущества, Пришло, Дата, Размер) VALUES ( “‘+n+'”, “‘+id+'”, “‘+k+'”, “‘+d+'”, “‘+r+'”)’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.ExecSQL;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Количество FROM Склад WHERE Код_вещевого_имущества= ‘+id;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

k_s:=IntToStr(StrToInt(MainF.DBGrid1.Fields[0].AsString)+StrToInt(k));

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’UPDATE Склад SET Количество = “‘+k_s+'” WHERE Код_вещевого_имущества = ‘+id;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.ExecSQL;

end;

Tab.Cells[0,m]:=id;

Tab.Cells[1,m]:=s;

Tab.Cells[2,m]:=k;

Tab.Cells[3,m]:=d;

Tab.Cells[4,m]:=r;

Tab.Cells[5,m]:=n;

m:=m+1;

Tab.RowCount:=m;

Goods.Text:=”;

Goods.Items.Clear;

Kol.Text:=’1′;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Наименование FROM Вещевое_имущество’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

////

Razm.Text:=”;

Razm.Items.Clear;

Kol.Text:=’1′;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Наименование FROM Вещевое_имущество’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

////

MainF.GridSelectAll(MainF.DBGrid1);

if MainF.DBGrid1.SelectedRows.Count>0 then

for j:=0 to MainF.DBGrid1.SelectedRows.Count-1 do

begin

MainF.DBGrid1.DataSource.DataSet.GotoBookmark(pointer(MainF.DBGrid1.SelectedRows.Items[j]));

Goods.Items.Add(MainF.DBGrid1.Fields[0].AsString);

end;

Goods.ItemIndex:=-1;

end

else ShowMessage(‘Количество должно быть положительным!’);

except ShowMessage(‘Проверьте заполнение всех полей!’);

end;

end;

procedure TPostup.N2Click(Sender: TObject);

begin

MainF.Show;

Postup.Close;

end;

procedure TPostup.N3Click(Sender: TObject);

begin

Postup.Close;

end;

procedure TPostup.Button1Click(Sender: TObject);

var

book: Variant;

i, j: Integer;

begin

book := CreateOleObject(‘Excel.Application’);

book.Visible:=true;

book.WorkBooks.open(‘H:Накладная.xls’) ;

// book.WorkBooks.Add;

book.Worksheets[3].Delete;

book.Worksheets[2].Delete;

book.Worksheets[1].Name:=’Поступление довольствия’;

book.ActiveSheet.Range[‘C2’].Value := Nomer.Text;

for i := 1 to Tab.ColCount-1 do

for j := 0 to Tab.RowCount-1 do

book.Cells[j+5, i+1].value := Tab.Cells[i,j];

end;

end.

Форма «Выдача довольствия»

unit Leave;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls, ExtCtrls, Grids, Menus, DB, ADODB;

type

TVydach = class(TForm)

GoodsL: TLabel;

Goods: TComboBox;

Kol: TEdit;

KolUp: TUpDown;

KolL: TLabel;

DatL: TLabel;

OK: TButton;

Tab: TStringGrid;

CenaL: TLabel;

Label1: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

Razmer1: TComboBox;

Label2: TLabel;

Sotr: TComboBox;

Button1: TButton;

ADOTable1: TADOTable;

DataSource1: TDataSource;

Nomer: TEdit;

Dat: TDateTimePicker;

ADOTable1__: TIntegerField;

ADOTable1DSDesigner: TWideStringField;

ADOTable1DSDesigner2: TDateTimeField;

ADOTable1DSDesigner3: TIntegerField;

ADOTable1DSDesigner4: TWideStringField;

ADOTable1DSDesigner5: TWideStringField;

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure OKClick(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Vydach: TVydach;

x:integer;

implementation

uses Main, ComObj, StrUtils;

{$R *.dfm}

procedure TVydach.FormCreate(Sender: TObject);

begin

Tab.Cells[0,0]:=’Код имущества’;

Tab.Cells[1,0]:=’Выдано’;

Tab.Cells[2,0]:=’Количество’;

Tab.Cells[3,0]:=’Размер’;

Tab.Cells[4,0]:=’Дата выдачи’;

Tab.Cells[5,0]:=’Номер накладной’;

Tab.Cells[6,0]:=’Получатель’;

end;

procedure TVydach.FormShow(Sender: TObject);

var j:longint;

begin

Goods.Text:=”;

Dat.Date:=Date;

Goods.Items.Clear;

Kol.Text:=”;

Nomer.Text:=”;

Tab.RowCount:=2;

for j:=0 to 6 do

Tab.Cells[j,1]:=”;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Наименование FROM Вещевое_имущество’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

MainF.GridSelectAll(MainF.DBGrid1);

if MainF.DBGrid1.SelectedRows.Count>0 then

for j:=0 to MainF.DBGrid1.SelectedRows.Count-1 do

begin

MainF.DBGrid1.DataSource.DataSet.GotoBookmark(pointer(MainF.DBGrid1.SelectedRows.Items[j]));

Goods.Items.Add(MainF.DBGrid1.Fields[0].AsString);

end;

Goods.ItemIndex:=0;

x:=1;

end;

procedure TVydach.OKClick(Sender: TObject);

var s,id,k,k_s,d,c,rr,ss:string; j:integer;

label met1,met2;

begin

try

if (StrToInt(Kol.Text)>0) and (StrToInt(Nomer.Text)>0) then

begin

ss:=Sotr.Text;

rr:=Nomer.Text;

s:=Goods.Text;

d:=DateToStr(Dat.Date);

k:=Kol.Text;

c:=Razmer1.Text;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Код_вещевого_имущества FROM Вещевое_имущество WHERE Наименование = “‘+s+'”‘;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

id:=MainF.DBGrid1.Fields[0].AsString;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Количество FROM Склад WHERE Код_вещевого_имущества = ‘+id;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

if StrToInt(k)>StrToInt(MainF.DBGrid1.Fields[0].AsString) then goto met1

else k_s:=IntToStr(StrToInt(MainF.DBGrid1.Fields[0].AsString)-StrToInt(k));

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’INSERT INTO Выдача (Код_вещевого_имущества, Выдано, Размер, Дата, Сотрудник) VALUES (“‘+id+'”, “‘+k+'”, “‘+c+'”, “‘+d+'”, “‘+ss+'”)’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.ExecSQL;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’UPDATE Склад SET Количество = “‘+k_s+'” Where Код_вещевого_имущества = ‘+id;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.ExecSQL;

Tab.Cells[0,x]:=id;

Tab.Cells[1,x]:=s;

Tab.Cells[2,x]:=k;

Tab.Cells[3,x]:=c;

Tab.Cells[4,x]:=d;

tab.Cells[5,x]:=rr;

tab.Cells[6,x]:=ss;

x:=x+1;

Tab.RowCount:=x;

Goods.Text:=”;

Goods.Items.Clear;

Goods.Text:=”;

Kol.Text:=”;

Razmer1.Text:=”;

Nomer.Text:=”;

Sotr.Text:=”;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Наименование FROM Вещевое_имущество’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

MainF.GridSelectAll(MainF.DBGrid1);

if MainF.DBGrid1.SelectedRows.Count>0 then

for j:=0 to MainF.DBGrid1.SelectedRows.Count-1 do

begin

MainF.DBGrid1.DataSource.DataSet.GotoBookmark(pointer(MainF.DBGrid1.SelectedRows.Items[j]));

Goods.Items.Add(MainF.DBGrid1.Fields[0].AsString);

end;

Goods.ItemIndex:=0;

goto met2;

met1:

ShowMessage(‘Количество выдаваемого имущества превышает количество имущества на складе! На складе всего ‘+MainF.DBGrid1.Fields[0].AsString+’ ед!’);

met2:

end

else ShowMessage(‘Количество должно быть положительным!’);

except ShowMessage(‘Проверьте правильность заполнения!’);

end;

end;

procedure TVydach.N2Click(Sender: TObject);

begin

Vydach.Close;

MainF.Show;

end;

procedure TVydach.N3Click(Sender: TObject);

begin

Vydach.Close;

end;

procedure TVydach.Button1Click(Sender: TObject);

var

book: Variant;

i, j: Integer;

begin

book := CreateOleObject(‘Excel.Application’);

book.Visible:=true;

book.WorkBooks.open(‘H:Накладная.xls’) ;

// book.WorkBooks.Add;

book.Worksheets[3].Delete;

book.Worksheets[2].Delete;

book.Worksheets[1].Name:=’Выдача довольствия’;

book.ActiveSheet.Range[‘C2’].Value := Nomer.Text;

book.ActiveSheet.Range[‘C4’].Value := Sotr.Text;

for i := 1 to Tab.ColCount-1 do

for j := 0 to Tab.RowCount-1 do

book.Cells[j+5, i+1].value := Tab.Cells[i,j];

end;

end.

Форма «Состояние склада»

unit Sklad;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls;

type

TSkladF = class(TForm)

Tab: TStringGrid;

Label1: TLabel;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

Button3: TButton;

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

SkladF: TSkladF;

implementation

uses Main, ComObj;

{$R *.dfm}

procedure TSkladF.FormCreate(Sender: TObject);

begin

Tab.Cells[0,0]:=’Наименование предмета’;

Tab.Cells[1,0]:=’Количество’;

end;

procedure TSkladF.FormShow(Sender: TObject);

var j,k:longint; sdf:string;

begin

Tab.RowCount:=2;

for j:=0 to 1 do

Tab.Cells[j,1]:=”;

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT * FROM Склад’;

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

MainF.GridSelectAll(MainF.DBGrid1);

if MainF.DBGrid1.SelectedRows.Count>0 then

begin

Tab.RowCount:=MainF.DBGrid1.SelectedRows.Count+1;

for j:=0 to MainF.DBGrid1.SelectedRows.Count-1 do

begin

MainF.DBGrid1.DataSource.DataSet.GotoBookmark(pointer(MainF.DBGrid1.SelectedRows.Items[j]));

Tab.Cells[0,j+1]:=MainF.DBGrid1.Fields[0].AsString;

Tab.Cells[1,j+1]:=MainF.DBGrid1.Fields[1].AsString;

end;

for j:=1 to Tab.RowCount-1 do

begin

MainF.ADOQuery1.Close;

MainF.ADOQuery1.SQL.Clear;

search:=’SELECT Наименование FROM Вещевое_имущество WHERE Код_вещевого_имущества = ‘+Tab.Cells[0,j];

MainF.ADOQuery1.SQL.Add(search);

MainF.ADOQuery1.Open;

Tab.Cells[0,j]:=MainF.DBGrid1.Fields[0].AsString;

end;

end;

for j:=1 to Tab.RowCount-2 do

for k:=j+1 to Tab.RowCount-1 do

if Tab.Cells[0,j]>Tab.Cells[0,k] then

begin

sdf:=Tab.Cells[0,j];

Tab.Cells[0,j]:=Tab.Cells[0,k];

Tab.Cells[0,k]:=sdf;

sdf:=Tab.Cells[1,j];

Tab.Cells[1,j]:=Tab.Cells[1,k];

Tab.Cells[1,k]:=sdf;

end;

end;

procedure TSkladF.Button3Click(Sender: TObject);

begin

SkladF.Close;

end;

procedure TSkladF.Button2Click(Sender: TObject);

var

book: Variant;

i, j: Integer;

begin

book := CreateOleObject(‘Excel.Application’);

book.Visible:=true;

book.WorkBooks.Add;

book.Worksheets[3].Delete;

book.Worksheets[2].Delete;

book.Worksheets[1].Name:=’Выдача довольствия’;

for i := 0 to Tab.ColCount-1 do

for j := 0 to Tab.RowCount-1 do

book.Cells[j+1, i+1].value := Tab.Cells[i,j];

end;

procedure TSkladF.Button1Click(Sender: TObject);

var i : integer;

begin

for i := 0 to Tab.RowCount -1 do

begin

if Tab.Cells[0,i] = Edit1.Text then

begin

Tab.Row := i;

ShowMessage(‘Найдена запись на ‘ + IntToStr(i) + ‘ строке.’)

MessageBox(handle,PChar(‘Такого предмета нет’), PChar(‘Внимание’), 48)

else MessageBox(handle,PChar(‘Такого предмета нет’), PChar(‘Внимание’), 48);

end;

end;

MessageBox(handle,PChar(‘Такого предмета нет’), PChar(‘Внимание’), 48)

end;

end.

Форма «Новый предмет»

unit New;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask, DBCtrls, ExtCtrls, Grids, DBGrids, DB, ADODB,

Menus;

type

TNewT = class(TForm)

DataSource1: TDataSource;

ADOTable1: TADOTable;

DBGrid1: TDBGrid;

DBNavigator1: TDBNavigator;

DBEdit1: TDBEdit;

DBEdit2: TDBEdit;

Label1: TLabel;

Label2: TLabel;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

procedure N2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

NewT: TNewT;

implementation

uses Main;

{$R *.dfm}

procedure TNewT.N2Click(Sender: TObject);

begin

Mainf.show;

NewT.Close;

end;

procedure TNewT.FormCreate(Sender: TObject);

begin

end;

end.

Форма «Отчеты за период».

unit Otchet;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, Printers, Grids, DBGrids, DB, ADODB, Menus;

type

TOtchetF = class(TForm)

Com: TRadioButton;

Lev: TRadioButton;

Prnt: TButton;

S: TLabel;

Po: TLabel;

OK: TButton;

PrinterSetupDialog1: TPrinterSetupDialog;

DataSource1: TDataSource;

ADOTable1: TADOTable;

DBGrid1: TDBGrid;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

D1: TDateTimePicker;

D2: TDateTimePicker;

//procedure probel(k:integer);

procedure OKClick(Sender: TObject);

procedure PrntClick(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

OtchetF: TOtchetF;

implementation

uses Main;

{$R *.dfm}

procedure TOtchetF.OKClick(Sender: TObject);

begin

if Com.Checked then

begin

ADOTable1.Active := False;

ADOTable1.TableName := ‘Запрос на приход’;

ADOTable1.Filter := ‘Дата >= ‘ + DateToStr(D1.Date)+ ‘ AND Дата <= ‘ + DateToStr(D2.Date);

ADOTable1.Filtered := True;

ADOTable1.Active := True;

DBGrid1.Visible:=True;

end else begin

ADOTable1.Active := False;

ADOTable1.TableName := ‘Запрос на расход’;

ADOTable1.Filter := ‘Дата >= ‘ + DateToStr(D1.Date)+ ‘ AND Дата <= ‘ + DateToStr(D2.Date);

ADOTable1.Filtered := True;

ADOTable1.Active := True;

DBGrid1.Visible:=True;

end;

Abort;

end;

procedure TOtchetF.PrntClick(Sender: TObject);

var Prntr:TPrinter;

begin

Prntr:=Printer;

OtchetF.ClientHeight:=685;

OK.Visible:=false;

OtchetF.Show;

ShowMessage(‘Для правильной печати нужно, чтобы “Настройка печати” не накладывалась на форму отчета при нажатии кнопки ОК.’);

if PrinterSetupDialog1.Execute then

begin

Prntr.BeginDoc;

Prntr.Canvas.CopyRect(Rect(100,150,Prntr.PageWidth-100,Prntr.PageHeight-150),OtchetF.Canvas,Rect(0,0,OtchetF.ClientWidth,OtchetF.ClientHeight));

Prntr.EndDoc;

end

else

begin

OK.Visible:=true;

OtchetF.ClientHeight:=717;

end;

end;

procedure TOtchetF.FormClose(Sender: TObject; var Action: TCloseAction);

begin

OtchetF.ClientHeight:=717;

OK.Visible:=true;

end;

procedure TOtchetF.N2Click(Sender: TObject);

begin

OtchetF.Close;

MainF.Show;

end;

procedure TOtchetF.N3Click(Sender: TObject);

begin

OtchetF.Close;

end;

procedure TOtchetF.FormCreate(Sender: TObject);

begin

end;

end.

Форма «Вход».

Unit Vxod;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, DB, ADODB;

type

TVxod = class(TForm)

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

LoginEdit: TEdit;

PasswordEdit: TEdit;

Button3: TButton;

UserQuery: TADOQuery;

ADOConnection1: TADOConnection;

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure GClick(Sender: TObject);

procedure graf(k:longint);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Vxod: TVxod;

implementation

uses Main;

{$R *.dfm}

procedure TVxod.Button3Click(Sender: TObject);

begin

Messagedlg(‘Введите Ваши имя пользователя и пароль!’,mtinformation,[mbOk],0);

end;

procedure TVxod.Button2Click(Sender: TObject);

begin

Application.Terminate;

end;

procedure TVxod.Button1Click(Sender: TObject);

var

Login:string;

Dostup:boolean;

begin

If (LoginEdit.Text<>”) and (PasswordEdit.Text<>”) then //поля не пустые

begin

UserQuery.Active:=false;

UserQuery.Parameters.ParamByName(‘log’).Value:=LoginEdit.Text;

UserQuery.Active:=true;

If UserQuery.RecordCount<>0 then

begin

If UserQuery.FieldByName(‘Пароль’).AsString=PasswordEdit.Text then begin

Login:=LowerCase(LoginEdit.Text);

If UserQuery.FieldByName(‘Доступ’).AsString=’True’ then Dostup:=true //and Form2.Show//есть доступ

//then Form2.Show;

else Dostup:=false;

MainF.Show //Close;

end

else Showmessage(‘Пароль неверный!’);

end;

end

else ShowMessage(‘Введите имя пользователя и пароль!’);//пустые поля

end;

procedure TVxod.FormCreate(Sender: TObject);

begin

end;

end.

Поделиться работой
Поделиться в telegram
Поделиться в whatsapp
Поделиться в vk
Поделиться в facebook
Поделиться в twitter
Леонид Федотов
Леонид Федотов
Окончил НИУ ВШЭ факультет компьютерных наук. Сам являюсь кандидатом наук. По специальности работаю 13 лет, за это время создал 8 научных статей и 2 диссертации. В компании подрабатываю в свободное от работы время уже более 5 лет. Нравится помогать школьникам и студентам в решении контрольных работ и написании курсовых проектов. Люблю свою профессию за то, что это направление с каждым годом становится все более востребованным и актуальным.

Статьи по дипломным