ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение среднего профессионального образования
Уфимский колледж статистики информатики и вычислительной техники
УТВЕРЖДАЮ
Заместитель директора
по учебной работе
__________З.З. Курмашева
«___» ___________ 2008 г.
|
УЧЕТ ПОСТУПЛЕНИЯ И ВЫДАЧИ КНИГ
Пояснительная записка к курсовому проекту
Руководитель проекта __________Е.И. Марковникова
«___» ____________2008г.
|
Выполнил студент гр. 3П-3
___________Юсупов А. М.
«___» ____________2008г.
|
2008
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ
Государственное образовательное учреждение СПО
Уфимский колледж статистики, информатики и вычислительной техники
УТВЕРЖДАЮ
Председатель цикловой комиссии информатики и программирования
/Каримова Р. Ф.
« » 2008 г.
ЗАДАНИЕ
на курсовой проект студента дневного отделения группы 3П-3 специальность 230105 Фамилия, Имя, Отчество:
Юсупова Айдара Марсовича
Предмет: Технология разработки программных продуктов
Тема курсового проекта:
Учет поступления и выдачи книг
Исходные данные: контрольный пример, постановка задачи
1) При выполнении курсового проекта должна быть предоставлена записка,
состоящая из следующих разделов и подразделов:
Введение
1 Постановка задачи
Описание предметной области
Функциональная схема задачи
Схема данных
Описание входной информации
Описание структуры базы данных
Описание выходной информации
Контрольный пример
Общие требования к продукту
- Экспериментальный раздел
Обоснование выбора языка программирования
Описание программы
Тестирование программного продукта
Руководство пользователя
Заключение
Приложение
2) Графическая часть должна содержать: Лист 1 ER-диаграмма
3) Список литературы
Задание к исполнению получил «_______ »_______________ 2008 г.
Студент: Юсупов Айдар Марсович
Срок окончания «_____ »_______________ 2008 г.
Руководитель курсового проекта Марковникова Е. И. /_______
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение среднего профессионального образования
Уфимский колледж статистики, информатики и вычислительной техники
ЗАКЛЮЧЕНИЕ
На курсовой проект по теме: «Учет поступления и выдачи книг»
Студента – Юсупова А. М., группы 3П-3, специальности 230105, дневного отделения.
Текст заключения: ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Руководитель курсового проекта:
___________ /Е.И. Марковникова / “____” _____________ 2008 г.
АННОТАЦИЯ
Пояснительная записка к курсовому проекту содержит постановку и программу решения задачи «Учет поступления и выдачи книг».
Задача на курсовой проект написана в среде Delphi 7 на языке Object Pascal, автоматизирована программой Project1.exe, прошла отладочное тестирование.
СОДЕРЖАНИЕ
Лист
Введение 8
1. Постановка задачи 9
1.1 Описание предметной области 9
1.2 Функциональная схема задачи 10
1.3 Схема данных 11
1.4 Описание входной информации 13
1.5 Описание структуры базы данных 15
1.6 Описание выходной информации 19
1.7 Контрольный пример 19
1.8 Общие требования к продукту 21
2. Экспериментальный раздел 22
2.1 Обоснование выбора языка программирования 22
2.2 Описание программы 25
2.3 Протокол тестирование программного продукта 27
2.3.1 Тестирование на данных контрольного примера 27
2.3.2 Тестирование на некорректных данных 29
2.4 Руководство пользователя 31
Заключение 36
Список литературы 37
Приложение А Результат решения 38
Приложение Б Код программы 40
Введение
На сегодняшний день практически не возможно представить жизнь современного человека без вычислительных машин, которые становятся всё более значимыми во всех отраслях производства и науки. Современный компьютер – это универсальное многофункциональное электронное автоматическое устройство, которое в современном обществе взяло на себя значительную часть работ связанных с обработкой информации. По историческим меркам компьютерные технологии ещё очень молоды и находятся на самом начальном этапе своего развития, но уже сегодня они преобразовывают и вытесняют старые технологии обработки информации и этот процесс в будущем будет только ускорятся. Потому что компьютерные технологии позволяют облегчить труд и являются более эффективными и надежными.
Появилась необходимость использовать информационные технологии в предприятиях для автоматизации получения и выдачи книг со склада, с целью облегчить труд и сделать его наиболее эффективным
1 Постановка задачи
1.1 Описание предметной области
Требуется разработать информационную систему для автоматизации учета получения и выдачи книг на складе. Каждая книга на складе может быть из разных издательств и по разной цене. Каждая книга, хранящаяся на складе, характеризуется следующими параметрами:
- Издатиельство;
- Автор;
- Название;
- Тираж;
- Цена.
С данной информационной системой должны работать следующие группы пользователей:
-бухгалтеры материального стола;
-кладовщики.
При работе с системой секретарь выполняет следующие функции:
- Принимает заявки от магазинов;
- Оформляет заявки на новые книги в издательство;
- Ведет учет полностью обработанных и частично обработанных заявок.
Кладовщик ведет учет поступления книги от издательств и выдачу книг магазинам.
Входной информацией служат накладные на принимаемые на склад книги и заявки на приобретение книги от магазинов.
Выходной информацией является отчет о частично и полностью обработанных заявок, и сводная ведомость.
Задача выполняется по мере поступления книг на склад или получения заявок от магазинов.
1.2 Функциональная схема задачи
1.3 Схема данных
Издательство Магазин
ER-диаграмма
1.4 Описание входной информации
Входной информацией является:
· Список книг, поступающий из издательства по мере требования;
· Список заявок, поступающий из магазинов по мере требования;
Таблица 1. Описание входных документов
Наименование документа (шифр)
|
Дата поступления документа
|
Откуда поступает документ
|
Список книг
|
По мере требования
|
Издательство
|
Список заявок
|
По мере требования
|
Магазин
|
Таблица 2. Описание реквизитов входных документов
Наименование документа
|
Наименование реквизита
|
Шифр реквизита
|
Форма представления
|
Длина
байт
|
Список книг
|
Издательство
|
Издательство
|
Строка
|
10
|
Название книги
|
Название книги
|
Строка
|
10
|
Автор
|
Автор
|
Строка
|
10
|
Тираж
|
Тираж
|
Число
|
-
|
Цена
|
Цена
|
Число
|
-
|
Список заявок
|
Название магазина
|
Магазин
|
Строка
|
10
|
Название книги
|
Название книги
|
Строка
|
10
|
Автор
|
Автор
|
Строка
|
10
|
Требуемое количество
|
Треб. кол
|
Число
|
-
|
Формы входных документов
Список книг
Издательство
|
Название книги
|
Автор
|
Тираж
|
Цена
|
Список заявок
Магазин
|
Название книги
|
Автор
|
Требуемое количество
|
1.5 Описание структуры базы данных
Таблица 3. Описание структуры базы данных
Назначение (содержимое) таблицы
|
Физическое имя
таблицы
|
Наименование полей
|
Шифр поля
|
Форма представления
|
Диапазон значений
|
Список книг
|
f1. db
|
Ключ
|
ID
|
Автоинкремент
|
-
|
Название издательства
|
Издательство
|
Строка
|
10
|
Название книги
|
Назв. книги
|
Строка
|
10
|
Фамилия автора
|
Автор
|
Строка
|
10
|
Тираж
|
Тираж
|
Число
|
-
|
Цена
|
Цена
|
Число
|
-
|
Список заявок
|
f2. db
|
Номер заказа
|
№ заказа
|
Автоинкремент
|
-
|
Название магазина
|
Магазин
|
Строка
|
10
|
Название книги
|
Назв. книги
|
Строка
|
10
|
Фамилия автора
|
Автор
|
Строка
|
10
|
Требуемое количество
|
Треб. кол
|
Число
|
-
|
Дополнительный список заявок
|
f3. db
|
Номер заказа
|
№ заказа
|
Число
|
-
|
Название издетельства
|
Издательство
|
Строка
|
10
|
Количество выданных книг
|
Выдано
|
Число
|
-
|
Цена
|
Цена
|
Число
|
-
|
Сумма
|
Сумма
|
Число
|
-
|
Примечание: символ «*» означает первичный ключ.
1.6 Описание выходной информации
Выходной информацией является:
- Ведомость удовлетворенных заказов;
- Ведомость неудовлетворенных заказов;
- Сводная ведомость;
Таблица 4. Описание выходных документов
Наименование документа
|
Периодичность выдачи
|
Срок выдачи
|
Количество экземпляров
|
Куда передается
|
Ведомость удовлетворенных заказов
|
Каждый месяц
|
1 день
|
1
|
В бухалтерию
|
Ведомость неудовлетворенных заказов
|
Каждый месяц
|
1 день
|
1
|
В бухалтерию
|
Сводная ведомость
|
Каждый месяц
|
1 день
|
1
|
В бухалтерию
|
Таблица 5. Описание реквизитов выходных документов
Наименование документа
|
Наименование реквизита
|
Шифр реквизита
|
Форма представления
|
Длина
байт
|
1
|
2
|
3
|
4
|
5
|
Ведомость удовлетворенных заказов
|
Номер заказа
|
№ группы
|
Число
|
10
|
Название магазина
|
Магазин
|
Строка
|
10
|
Название книги
|
Наз. книги
|
Строка
|
10
|
Фамилия автора
|
Автор
|
Строка
|
10
|
Название издательства
|
Издательство
|
Строка
|
10
|
Количество выданных книг
|
Выдано
|
Число
|
-
|
Ведомость неудовлетворенных заказов
|
Номер заказа
|
№ заказа
|
Число
|
-
|
Название магазина
|
Магазин
|
Строка
|
10
|
Продолжение Таблица 5
1
|
2
|
3
|
4
|
5
|
Название книги
|
Наз. книги
|
Строка
|
10
|
Фамилия автора
|
Автор
|
Строка
|
10
|
Требуемое количество
|
Треб. кол
|
Число
|
-
|
Сводная ведомость
|
Название издательства
|
Издательство
|
Строка
|
10
|
Название книги
|
Наз. книги
|
Строка
|
10
|
Фамилия автора
|
Автор
|
Строка
|
10
|
Количество выданных книг
|
Выдано
|
Число
|
-
|
Цена выданных книг
|
Сумма
|
Число
|
-
|
Формы выходных документов
Ведомость удовлетворенных заявок
№ заказа
|
Магазин
|
Название книги
|
Автор
|
Издательство
|
Выдано
|
Ведомость неудовлетворенных заявок
№ заказа
|
Магазин
|
Название книги
|
Автор
|
Треб. кол-во
|
Сводная ведомость
Издательство
|
Название книги
|
Автор
|
Кол-во книг
|
Сумма
|
Итого:
|
1.7 Контрольный пример
Входные данные контрольного примера представлены в виде таблиц.
Рисунок 1 - Список книг
В магазин пришли следующие заявки:
Магазин
|
Название книги
|
Автор
|
Требуемое количество
|
Библиосфера
|
Сказки
|
Пушкин
|
5000
|
Подземка
|
Том Сойер
|
Твен
|
4000
|
Книга
|
Сказки
|
Пушкин
|
1500
|
Библиосфера
|
ТРПП
|
Орлов
|
4000
|
Книга
|
ТРПП
|
Орлов
|
600
|
Снэма
|
ГДЗ
|
Полкин
|
800
|
Результат контрольного примера
Ведомость удовлетворенных заявок
№ заказа
|
Магазин
|
Название книги
|
Автор
|
Издательство
|
Выдано
|
1
|
Библиосфера
|
Сказки
|
Пушкин
|
Москва
|
5000
|
3
|
Книга
|
Сказки
|
Пушкин
|
Белая река
|
1500
|
4
|
Библиосфера
|
ТРПП
|
Орлов
|
Белая река
|
4000
|
Ведомость неудовлетворенный заявок
№ заказа
|
Магазин
|
Название книги
|
Автор
|
Требуемое количество
|
2
|
Подземка
|
Том Сойер
|
Твен
|
400
|
5
|
Книга
|
ТРПП
|
Орлов
|
100
|
6
|
Снэма
|
ГДЗ
|
Полкин
|
300
|
Сводная ведомость
Издательство
|
Название книги
|
Автор
|
Кол-во книг
|
Сумма
|
Белая река
|
Сказки
|
Пушкин
|
1500
|
150000
|
Белая река
|
ТРПП
|
Орлов
|
4000
|
600000
|
Белая река
|
ТРПП
|
Орлов
|
500
|
75000
|
Москва
|
Сказки
|
Пушкин
|
5000
|
500000
|
Москва
|
Том Сойер
|
Твен
|
600
|
48000
|
КПИ
|
Том Сойер
|
Твен
|
3000
|
240000
|
КПИ
|
ГДЗ
|
Полкин
|
500
|
30000
|
Итого:
|
1643000
|
1.8 Общие требования к продукту
Данная программа предназначена для автоматизации получения и выдачи книг. При помощи этого программного продукта можно получать ведомости удовлетворенных и не удовлетворенных заявок, а также получать сводную ведомость.
Для правильной работы программы необходима следующая конфигурация компьютера:
- Процессор Intel Celeron 800 Мгц
- Оператывная память объемом 64Мб
- Оборудование для ввода (мышь, клавиатура)
- Оборудование вывода (монитор и принтер)
- Жесткий диск
Программный продукт поставляется в виде исплняемого файла(exe) и файлов базы данных.
Программа использует понятный пользователю интерфейс состоящий из функциональных клавиш. Для работы с программой не требуетрся дополнительного обучения, программа проста в использовании.
2 Экспериментальный раздел
2.1 Обоснование выбора языка программирования
Для создания программы использовалась среда разработки Delphi. Delphi - язык и среда программирования, относящаяся к классу RAD (Rapid Application Development - “Средство быстрой разработки приложений”) средств CASE - технологии. Delphi сделала разработку мощных приложений Windows быстрым процессом, доставляющим вам удовольствие. Приложения Windows, для создания которых требовалось большое количество человеческих усилий например в С++, теперь могут быть написаны одним человеком, использующим Delphi.
Интерфейс Windows обеспечивает полное перенесение CASE-технологий в интегрированную систему поддержки работ по созданию прикладной системы на всех фазах жизненного цикла работы и проектирования системы. Delphi обладает широким набором возможностей, начиная от проектировщика форм и кончая поддержкой всех форматов популярных баз данных. Среда устраняет необходимость программировать такие компоненты Windows общего назначения, как метки, пиктограммы и даже диалоговые панели. Работая в Windows , можно видеть одинаковые “объекты” во многих разнообразных приложениях. Диалоговые панели (например Choose File и Save File) являются примерами многократно используемых компонентов, встроенных непосредственно в Delphi, который позволяет приспособить эти компоненты к имеющийся задаче, чтобы они работали именно так, как требуется создаваемому приложению. Также здесь имеются предварительно определенные визуальные и невизуальные объекты, включая кнопки, объекты с данными, меню и уже построенные диалоговые панели. С помощью этих объектов можно, например, обеспечить ввод данных просто несколькими нажатиями кнопок мыши, не прибегая к программированию. Это наглядная реализация применений CASE- технологий в современном программировании приложений. Та часть, которая непосредственно связана с программированием интерфейса пользователя системой, получила название визуальное программирование.
Выгоды от проектирования в среде Windows с помощью Delphi:
- Устраняется необходимость в повторном вводе данных;
- Обеспечивается согласованность проекта и его реализации;
- Увеличивается производительность разработки и переносимость программ.
Визуальное программирование как бы добавляет новое измерение при создании приложений, давая возможность изображать эти объекты на экране монитора до выполнения самой программы. Без визуального программирования процесс отображения требует написания фрагмента кода, создающего и настающего объект “по месту”. Увидеть закодированные объекты было возможно только в ходе исполнения программы. При таком подходе достижение того, чтобы объекты выглядели и вели себя заданным образом, становится утомительным процессом, который требует неоднократных исправлений программного кода с последующей прогонкой программы и наблюдения за тем, что в итоге получилось.
Благодаря средствам визуальной разработки можно работать с объектами, держа их перед глазами и получая результаты практически сразу. Способность видеть объекты такими, какими они появляются в ходе исполнения программы, снимает необходимость проведения множества операций вручную, что характерно для работы в среде, не обладающей визуальными средствами — вне зависимости от того, является она объектно-ориентированной или нет. После того, как объект помещен в форму среды визуального программирования, все его атрибуты сразу отображаются в виде кода, который соответствует объекту как единице, исполняемой в ходе работы программы.
Размещение объектов в Delphi связано с более тесными отношениями между объектами и реальным программным кодом. Объекты помещаются в вашу форму, при этом код, отвечающий объектам, автоматически записывается в исходный файл. Этот код компилируется, обеспечивая, существенно более высокую производительность, чем визуальная среда, которая интерпретирует информацию лишь в ходе исполнения программы.
Три основные части разработки интерфейса следующие: проектирование панели, проектирование диалога и представление окон. Для общего пользовательского доступа также должны учитываться условия применения архитектуры прикладных систем.
Сегодня появилась реальная возможность с помощью моделирования на современных многофункциональных средствах обработки и отображения информации, таких как Delphi конкретизировать тип и характеристики используемых информационных моделей, выявить основные особенности будущей деятельности операторов, сформулировать требования к параметрам аппаратно-программных средств интерфейса взаимодействия и т.д.
Использование типовых решений, модульного принципа проектирования систем отображения и обработки информации приобретает всё более широкие масштабы, что, впрочем, вполне естественно.
Особый упор при внедрении данных задач следует, конечно, придавать современным CASE-средствам разработки программ, так как они наиболее оптимально позволяют проектировать решения, в основе которых лежат, в первую очередь, требования к согласованному пользовательскому интерфейсу, каковым и является интерфейс Windows. Никакие продукты других фирм, доступные сегодня, не обеспечивают одновременную простоту использования, производительность и гибкость в такой степени, как Delphi. Этот язык заполнил брешь между языками 3-го и 4-го поколений, соединив их сильные стороны и создав мощную и производительную среду разработки.
2.2 Описание программы
Модульная схема
Описание программы
Программа Учет.exe имеет модульную структуру и состоит из 6 модулей: Unit 1 (База Данных), Unit 2 (Ввод заявок и поступающих книг), Unit 3 (Выдача ведомостей), Unit 4 (Изменение пароля), Unit 5 (Выбор пользователя и ввод пароля).
Unit 1 (База Данных) – содержит средства просмотра базы данных, располагаются кнопки для перехода на другие формы и процедуры выдачи ведомостей. При нажатии на кнопку N21 выполняется процедура TForm1.N21Click, которая осуществляет переход на форму Form2 для заполнения заявки от магазина. При нажатии на кнопку N18 выполняется процедура TForm1.N18Click, которая осуществляет переход на форму Form3 для отображения ведомости удовлетворенных заявок. При нажатии на кнопку N19 выполняется процедура TForm1.N19Click, которая осуществляет переход на форму Form3 для отображения ведомости неудовлетворенных заявок. При нажатии на кнопку N17 выполняется процедура TForm1.N17Click, которая осуществляет переход на форму Form3 для отображения сводной ведомости. При нажатии на кнопку N9 выполняется процедура TForm1.N9Click, которая осуществляет переход на форму Form4 для изменения пароля. При нажатии на кнопку N11 выполняется процедура TForm1.N118Click, которая осуществляет переход на форму Form2 для удаления записей. При нажатии на кнопку N2 выполняется процедура TForm1.N2Click, которая осуществляет выход из программы.
Unit 2 (Ввод заявок и поступающих книг) – в этом модуле располагаются средства для ввода заявок, ввода поступающих книг и удалений записей из базы данных;
Unit 3 (Отображение ведомостей). При переходе на эту форму автоматически выдаёться нужная ведомость.
При нажатии кнопки Button1 («Выход»), выполняется процедура Tform3.Button1Click, которая осуществляет закрытие Form3.
Unit 4 (Именение пароля). Содержит поля для ввода нового пароля. При нажатии на кнопку Button1 («Сохранить») выполняется процедура Tform4.Button1Click, которая осуществляет сохранение нового пароля. Есди поставить галочку в CheckBox1 («Отображать пароль при вводе»), то при вводе пароля он не будет закрываться звездочками.
При нажатии кнопки Button2 («Выход») выполняется процедура Tform4.Button2Click, которая осуществляет закрытие Form4.
Unit 5 (Выбор пользователь и ввод пароля). При выборе RadioButton1 («Пользователь») то будет выбрано загрузка программы в режиме пользовате и не будут доступно удаление записей. При выборе RadioButton2 («Администратор») появиться окно ввода пароля. При нажатии кнопки Button1 («Принять»), выполняется процедура Tform5.Button1Click, которая осуществляет выбор пользователя и проверку пароля. При нажатии кнопки Button2 («Выход»), выполняется процедура Tform5.Button2Click, которая осуществляет выход из программы.
Код модулей программы предствлен в Приложении Б
2.3 Протокол тестирование программного продукта
2.3.1 Тестирование на данных контрольного примера
Тестирование программного продукта на данных контрольного примера:
- При тестировании программного продукта на данных контрольного примера обработка данных, то есть вывод ведомостей осуществляется корректно.
Тестирование программного продукта на данных контрольного примера показало что данные тестирования полностью совпадают с ожидаемыми результатами.
Результат работы программы приведен в приложении А
Исходные данные
Вид таблиц в программе Database Desktop:
Рисунок 2 - Список книг
Вид таблицы в программе
2.3.2 Тестирование на некорректных данных
Данный программный продукт удовлетворяет всем функциональным требованиям, имеет дружественный к пользователю интерфейс, легок и понятен в пользовании, исключает появлении системных ошибок.
Тестирование программного продукта на некорректных данных:
- При входе в программу в первый раз выводиться сообщение: «Задайте пароль»;
- При входе в программу и не выборе пользователя выводится сообщение: «Выберите пользователя»;
- При входе в программу за «Администратора» и не вводе пароля выводится сообщение: «Пароль не введен»;
- При вводе неправильного пароля выводится сообщение: «Забыли пароль?»;
- При пятикратном вводе неправильного пароль выводится сообщение: «Множественный ввод неправильного пароля, программа будет закрыта»;
- При введении заявки из магазина и не заполнении всех полей выводится сообщение: «Заполни все поля»;
- При введении получении книг из издательства не заполнении всех полей выводится сообщение: «Заполни все поля»;
- При удалении записи и не выборе номера таблицы выводится сообщение: «Выбери таблицу»;
- При удалении записи и не вводе номера записи выводится сообщение: «Заполни все поля»;
- При удалении несуществующей записи выводится сообщение: «Данная запись не существует»
- При добавлении новой книги если введена уже существующая в базе данных выводятся сообщения: «Данная книга уже существует», «Тираж добавиться к существующей книге»;
- При вводе нового пароля меньше 4 символов выводится сообщение «Пароль слишком короткий»;
- При вводе нового пароля разным в двух полях выводится сообщение «Введены разные Пароли»;
2.4 Руководство пользователя
Программа устанавливается с диска. Путем копирование папки «Учет» в рабочую папку на жестком диске. Для правильной работы программы необходимо чтобы на компьютере пользователя были установлены следующие программные продукты : Borland Delphi7, Borland Database Engine Administrator, Database Desktop. Программа запускается путем запуска приложения «Учет.exe».
Руковдство по использованию продукта
При запуске приложения открывается форма выбора пользователя (рисунок 3), в которой производится выбор пользователя, а также ввод пароля для пользователя «Администратор».
Рисунок 3 – Форма выбора пользователя
Перед тем как перейти к ведомостям необходимо выбрать пользователя. В случае если пользователь не был выбран высветится сообщение об ошибке (рисунок 4).
Рисунок 4 - Сообщение об ошибке
При выборе из меню «Склад» кнопку «Получения книг» окрывается окно для заполнение данных о поступившей книге(рисунок 5).
Рисунок 5 – Получение книг
При нажатии кнопки «Отправить в изд.» выводиться окошко (рисунок 6). В котором при нажатии кнопки «Да» будет выдан список требуемых книг для заказа на склад (рисунок 7).
Рисунок 6
Рисунок 7 – Список требуемых книг
При выборе пункта меню «Заявки» нажатии кнопки «На книгу» окрывается окно для вывода заявки (рисунок 8). В котором необходимо заполнить все поля и затем нажать кнопку «Отправить заявку».
Рисунок 8 – Заявка на книгу
При нажатии кнопки «Доп. тираж» окрывается окно для ввода дополнительного тиража (рисунок 9). В котором необходимо заполнить все поля и затем нажать кнопку «Отправить заявку».
Рисунок 9 – Заявка на дополнительный тираж
При выборе пункта меню «Ведомости» подменю «Для заказов» и нажатия кнопок «Удовлет. заказы» или «Неудовлет. заказы» окрывается окно для вывода соответствующей ведомости (рисунок 10,11).
Рисунок 10 – Ведомость удовлетворенных заказов
Рисунок 11 – Ведомость неудовлетворенных заказов
При нажатии кнопки «Сводная ведомость» окрывается окно для вывода ведомости (рисунок 12).
Рисунок 12
Заключение
В ходе написания курсового проекта была разработана структура и алгоритм приложения «Учет выдачи и получения книг». При этом были изучены новые информационные технологии, были приобретены навыки в области построения и обработки баз данных.
Результатом работы стало создание программы учета книг.
Программа написана на языке Object Pascal с использованием среды зазработки Delphi 7.
Данная программа предназначена для работы на складах. Программа имеет возможность выдавать ведомости об удовлетворенных и неудовлетворенных заявках, сводную ведомость. Программный продукт имеет дружественный пользователю интерфейс, для работы с программой не требуется дополнительное обучение.
Программа прошла тестирование в результате, которого были выявлены и устранены некоторые недостатки. Приложение было выполнено на данных контрольного примера. Полученные результаты полностью совпали с результатами ручного просчета.
Список литературы
1. Флёнов М. Е. Программирование в Delphi глазами хакера. – СПб.: БХВ - Петербург, 2007. – 368 с.: ил. Приложение А
Результат решения
Рисунок 13 – Сводная ведомость
Рисунок 14 Ведомость неудовлетворенных заявок
Продолжение приложения А
Рисунок 15 Ведомость удовлетворенных заявок
Приложение Б
Код программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, DB, DBTables, Grids, DBGrids, ExtCtrls, DBCtrls, StdCtrls, registry,
ComCtrls;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
MainMenu1: TMainMenu;
N1: TMenuItem;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
StatusBar1: TStatusBar;
Timer1: TTimer;
N25: TMenuItem;
DBGrid3: TDBGrid;
N6: TMenuItem;
N9: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N2: TMenuItem;
procedure clearf2;
procedure N12Click(Sender: TObject);
Продолжение приложения Б
procedure FormShow(Sender: TObject);
procedure find(kol:integer);
procedure Timer1Timer(Sender: TObject);
procedure N25Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure N11Click(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure N19Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N22Click(Sender: TObject);
procedure N2Click(Sender: TObject);
end;
var
F1: TForm1;
kn,q,w,i,j:integer;
implementation
uses Unit2, Unit3, Unit4, Unit5, Unit6;
{$R *.dfm}
procedure TForm1.find(kol:integer);
var v:boolean;
begin
v:=true;
f3.SG1.Cells[0,0]:='№ заказа';
f3.SG1.Cells[1,0]:='Магазин';
f3.SG1.Cells[2,0]:='Название книги';
f3.SG1.Cells[3,0]:='Автор';
f3.SG1.Cells[4,0]:='Треб. кол-во';
f3.SG1.ColCount:=5;
f3.SG1.Width:=515;
f3.Width:=530;
if kol=0 then
Продолжение приложения Б
begin
f3.SG1.Cells[4,0]:='Издательство';
f3.SG1.Cells[5,0]:='Выдано';
f3.SG1.ColCount:=6;
f3.SG1.Width:=615;
f3.Width:=630;
end;
f3.SG1.RowCount:=1;
i:=1;
DM6.T2.RecNo:=1;
while not(DM6.T2.Eof) do
begin
if kol=0 then
begin
if DM6.T2.FieldByName('Треб. кол').AsInteger=0 then
begin
f3.SG1.Cells[0,i]:=DM6.T2.FieldByName('№ заказа').AsString;
f3.SG1.Cells[1,i]:=DM6.T2.FieldByName('Магазин').AsString;
f3.SG1.Cells[2,i]:=DM6.T2.FieldByName('Наз. книги').AsString;
f3.SG1.Cells[3,i]:=DM6.T2.FieldByName('Автор').AsString;
DM6.T3.RecNo:=1;
while not(DM6.T3.Eof) do
begin
if DM6.T2.FieldByName('№ заказа').AsString=DM6.T3.FieldByName('№ заказа').AsString then
begin
f3.SG1.Cells[4,i]:=DM6.T3.FieldByName('Издательство').AsString;
f3.SG1.Cells[5,i]:=DM6.T3.FieldByName('Выдано').AsString;
inc(i);
f3.SG1.RowCount:=f3.SG1.RowCount+1;
DM6.T3.Delete;
end
else
DM6.T3.Next;
Продолжение приложения Б
end;
DM6.T2.Delete;
end
else
DM6.T2.Next;
end;
if kol<>0 then
begin
if DM6.T2.FieldByName('Треб. кол').AsInteger>0 then
begin
f3.SG1.Cells[0,i]:=DM6.T2.FieldByName('№ заказа').AsString;
f3.SG1.Cells[1,i]:=DM6.T2.FieldByName('Магазин').AsString;
f3.SG1.Cells[2,i]:=DM6.T2.FieldByName('Наз. книги').AsString;
f3.SG1.Cells[3,i]:=DM6.T2.FieldByName('Автор').AsString;
f3.SG1.Cells[4,i]:=DM6.T2.FieldByName('Треб. кол').AsString;
inc(i);
f3.SG1.RowCount:=f3.SG1.RowCount+1;
end;
DM6.T2.Next;
end;
end;
end;
procedure TForm1.clearf2;
begin
f2.Edit1.Clear;
f2.Edit2.Clear;
f2.Edit3.Clear;
f2.Edit4.Clear;
f2.Edit5.Clear;
f2.Edit4.SetFocus;
end;
procedure clearf3;
begin
for w:=0 to f3.SG1.Rowcount do
Продолжение приложения Б
for i:=0 to f3.SG1.ColCount do
f3.SG1.Cells[w,i]:=' ';
end;
procedure TForm1.N12Click(Sender: TObject);
begin
f2.ComboBox1.Visible:=false;
f2.Edit1.Visible:=true;
f2.Edit2.Visible:=true;
f2.Edit3.Visible:=true;
f2.Edit4.Visible:=true;
f2.Edit5.Visible:=true;
f2.Label1.Visible:=true;
f2.Label2.Visible:=true;
f2.Label3.Visible:=true;
f2.Label4.Visible:=true;
f2.Label5.Visible:=true;
f2.Button1.Caption:='Добавить';
f2.Label3.Caption:='Тираж';
f2.Label4.Caption:='Издательство';
f2.Caption:='Получение книг';
f2.Width:=652;
f2.Height:=135;
f2.Button1.Top:=40;
f2.Button2.Top:=70;
f2.Show;
clearf2;
kn:=2;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
f5.Visible:=false;
f4.Visible:=false;
if unit5.user then N6.Enabled:=false;
end;
Продолжение приложения Б
procedure TForm1.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels[0].Text:=DateTimeToStr(now);
end;
procedure TForm1.N25Click(Sender: TObject);
begin
i:=1;
if MessageBox(0,'Отправить заявку в издательство','Информация',mb_YesNo)=6 then
begin
f3.sg1.Cells[0,0]:='Название книги';
f3.SG1.Cells[1,0]:='Автор';
f3.SG1.Cells[2,0]:='Требуемое кол-во книг';
DM6.T2.RecNo:=1;
f3.Caption:='Список требуемых книг';
f3.SG1.ColCount:=3;
f3.SG1.RowCount:=2;
while not(DM6.T2.Eof) do
begin
if DM6.T2.FieldByName('Треб. кол').Asinteger>0 then
f3.SG1.Cells[0,i]:=DM6.T2.FieldByName('Наз. книги').AsString;
f3.SG1.Cells[1,i]:=DM6.T2.FieldByName('Автор').AsString;
f3.SG1.Cells[2,i]:=DM6.T2.FieldByName('Треб. кол').AsString;
inc(i);
f3.SG1.RowCount:=f3.SG1.RowCount+1;
DM6.T2.Next;
end;
end;
f3.SG1.RowCount:=f3.SG1.RowCount-1;
F3.Show;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
f4.show;
f4.Caption:='Изменить пароль';
Продолжение приложения Б
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
DBGrid1.Columns[0].Width:=15;
DBGrid2.Columns[0].Width:=45;
DBGrid3.Columns[0].Width:=45;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageBox(0,'Вам что выйти захотелось? (Да/Нет)','Выход',mb_YesNo)=6 then
begin
application.Destroying;
f5.Close;
f4.close;
end;end;
procedure TForm1.N11Click(Sender: TObject);
begin
f2.Caption:='Удаление записей';
f2.Button1.Caption:='Удалить';
f2.Show;
kn:=3;
f2.ComboBox1.ItemIndex:=-1;
f2.ComboBox1.Visible:=true;
f2.ComboBox1.Text:='';
f2.Button1.Top:=80;
f2.Button2.Top:=110;
f2.Label1.Visible:=false;
f2.Label2.Visible:=false;
f2.Label3.Visible:=false;
f2.Label5.Visible:=false;
f2.Label6.Visible:=true;
f2.Edit1.Visible:=false;
f2.Edit2.Visible:=false;
f2.Edit3.Visible:=false;
Продолжение приложения Б
f2.Edit5.Visible:=false;
f2.Label4.Caption:='Номер ID записи или номер заказа';
f2.Height:=175;
f2.Width:=225;
clearf2;
end;
procedure TForm1.N18Click(Sender: TObject);
begin
f3.Show;
f3.Caption:='Ведомость для удовлетворённых заказов';
clearf3;
find(0);
end;
procedure TForm1.N19Click(Sender: TObject);
begin
f3.Show;
f3.Caption:='Ведомость для неудовлетворённых заказов';
clearf3;
find(1);
end;
procedure TForm1.N17Click(Sender: TObject);
var sum:integer;
begin
f3.Show;
f3.SG1.RowCount:=1;
clearf3;
f3.Caption:='Сводная ведомость';
f3.SG1.Cells[0,0]:='Издательство';
f3.SG1.Cells[1,0]:='Название книги';
f3.SG1.Cells[2,0]:='Автор';
f3.SG1.Cells[3,0]:='Кол-во книг';
f3.SG1.Cells[4,0]:='Сумма';
f3.SG1.ColCount:=5;
w:=1;
i:=1;
Продолжение приложения Б
sum:=0;
DM6.T3.RecNo:=1;
while not(DM6.T3.eof) do
begin
f3.SG1.Cells[0,i]:=DM6.T3.FieldByName('Издательство').AsString;
DM6.T2.Locate('№ заказа',DM6.T3.FieldByName('№ заказа').AsInteger,[]);
f3.SG1.Cells[1,i]:=DM6.T2.FieldByName('Наз. книги').AsString;
f3.SG1.Cells[2,i]:=DM6.T2.FieldByName('Автор').AsString;
f3.SG1.Cells[3,i]:=DM6.T3.FieldByName('Выдано').AsString;
f3.SG1.Cells[4,i]:=DM6.T3.FieldByName('Сумма').AsString;
sum:=sum+DM6.T3.FieldByName('Сумма').asInteger;
inc(i);
f3.SG1.RowCount:=f3.SG1.RowCount+1;
DM6.T3.Next;
end;
f3.SG1.RowCount:=f3.SG1.RowCount+1;
f3.SG1.Cells[3,i]:='Итого:';
f3.SG1.Cells[4,i]:=inttostr(sum);
end;
procedure TForm1.N21Click(Sender: TObject);
begin
f2.Edit5.Visible:=false;
f2.Label5.Visible:=false;
f2.Label1.Visible:=true;
f2.Label2.Visible:=true;
f2.Label3.Visible:=true;
f2.Label6.Visible:=true;
f2.Edit1.Visible:=true;
f2.Edit2.Visible:=true;
f2.Edit3.Visible:=true;
f2.Label4.Caption:='Магазин';
f2.ComboBox1.Visible:=false;
f2.Button1.Caption:='Отправить заявку';
Продолжение приложения Б
f2.Button1.Top:=40;
f2.Button2.Top:=70;
f2.Caption:='Заявка на книгу';
f2.Width:=525;
f2.Height:=135;
f2.show;
kn:=0;
clearf2;
end;
procedure TForm1.N22Click(Sender: TObject);
begin
f2.Edit5.Visible:=false;
f2.Label5.Visible:=false;
f2.Label1.Visible:=true;
f2.Label2.Visible:=true;
f2.Label3.Visible:=true;
f2.Label6.Visible:=true;
f2.Edit1.Visible:=true;
f2.Edit2.Visible:=true;
f2.Edit3.Visible:=true;
f2.Label4.Caption:='Магазин';
f2.ComboBox1.Visible:=false;
f2.Button1.Caption:='Отправить заявку';
f2.Button1.Top:=40;
f2.Button2.Top:=70;
f2.Caption:='Заявка на дополнительный тираж';
f2.Width:=525;
f2.Height:=135;
f2.Show;
kn:=1;
clearf2;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Продолжение приложения Б
if MessageBox(0,'Вам что выйти захотелось? (Да/Нет)','Выход',mb_YesNo)=6 then
begin
application.Destroying;
f5.Close;
f4.close;
close;
end;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Button2: TButton;
Edit4: TEdit;
Edit5: TEdit;
Label5: TLabel;
ComboBox1: TComboBox;
Label6: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
Продолжение приложения Б
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
end;
var
F2: TForm2;
implementation
uses Unit1, DB, Unit3, Unit6;
{$R *.dfm}
procedure TForm2.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm2.Button1Click(Sender: TObject);
var i,ost:integer;
za:array [0..3] of string;
begin
dm6.T1.Close;
dm6.T2.Close;
dm6.T3.Close;
dm6.T1.Open;
dm6.T2.Open;
dm6.T3.Open;
DM6.T1.RecNo:=1;
DM6.T2.RecNo:=1;
DM6.T3.RecNo:=1;
za[0]:=edit1.Text;
za[1]:=edit2.Text;
za[2]:=edit3.Text;
za[3]:=edit4.Text;
//заявка
if unit1.kn=0 then
if (edit1.Text='')and(edit2.Text='')and(edit3.Text='')and(edit4.Text='')then
messageBox(0,'Заполни все поля','Ошибка',0)
else
begin
Продолжение приложения Б
DM6.T2.Append;
DM6.T2.FieldByName('Магазин').AsString:=za[3];
DM6.T2.FieldByName('Наз. книги').AsString:=za[0];
DM6.T2.FieldByName('Автор').AsString:=za[1];
DM6.T2.FieldByName('Треб. кол').AsString:=za[2];
DM6.T2.Post;
DM6.T2.Refresh;
ost:=strtoint(za[2]);
while ((ost<>0) and (not(DM6.T1.Eof))) do
begin
if (DM6.T1.FieldByName('Наз. книги').AsString=za[0])and(DM6.T1.FieldByName('Автор').AsString=za[1]) then
begin
if ost>=DM6.T1.fieldbyname('Тираж').AsInteger then
begin
ost:=ost-DM6.T1.fieldbyname('Тираж').AsInteger;
DM6.T2.Edit;
DM6.T2.FieldByName('Треб. кол').AsInteger:=ost;
DM6.T2.Post;
DM6.T2.Refresh;
DM6.T3.AppendRecord([DM6.T2.FieldByName('№ заказа').AsInteger,DM6.T1.FieldByName('Издательство').AsString,
DM6.T1.fieldbyname('Тираж').AsInteger,DM6.T1.fieldbyname('Цена').AsInteger,
DM6.T1.fieldbyname('Тираж').AsInteger*DM6.T1.fieldbyname('Цена').AsInteger]);
DM6.T3.Refresh;
DM6.T1.Edit;
DM6.T1.Delete;
DM6.T1.Refresh;
end
else
begin
DM6.T1.Edit;
DM6.T1.fieldbyname('Тираж').AsInteger:=DM6.T1.fieldbyname('Тираж').AsInteger-ost;
Продолжение приложения Б
DM6.T1.Post;
DM6.T1.Refresh;
DM6.T3.AppendRecord([DM6.T2.FieldByName('№ заказа').AsInteger,DM6.T1.FieldByName('Издательство').AsString,
strtoint(za[2]),DM6.T1.fieldbyname('Цена').AsInteger,DM6.T1.fieldbyname('Цена').AsInteger*strtoint(za[2])]);
DM6.T2.Edit;
DM6.T2.FieldByName('Треб. кол').AsInteger:=0;
DM6.T2.Post;
ost:=0;
DM6.T3.Refresh;
end;
end;
DM6.T1.Next;
end;
f1.clearf2;
end;
if unit1.kn=1 then
begin
DM6.T2.Append;
DM6.T2.FieldByName('Магазин').AsString:=za[3];
DM6.T2.FieldByName('Наз. книги').AsString:=za[0];
DM6.T2.FieldByName('Автор').AsString:=za[1];
DM6.T2.FieldByName('Треб. кол').AsString:=za[2];
DM6.T2.Post;
DM6.T2.Refresh;
f1.clearf2;
end;
//получение книг
if unit1.kn=2 then
if (edit1.Text='')and(edit2.Text='')and(edit3.Text='')and(edit4.Text='')and(edit5.Text='')then
messageBox(0,'Заполни все поля','Ошибка',0)
Продолжение приложения Б
else
begin
//добавление если такая запись уже существует
if not varisnull(DM6.T1.Lookup('Издательство;Наз. книги;Автор;Цена',VarArrayOf([za[3], za[0], za[1], Edit5.text]),'Цена')) then
begin
messageBox(0,'Данная книга уже существует','Ошибка',0);
MessageBox(0,'Тираж добавиться к существующей книге','Соощение',0);
DM6.T1.Locate('Издательство;Наз. книги;Автор;Тираж;Цена',VarArrayOf([za[3], za[0], za[1], za[2], Edit5.text]),[]);
DM6.T1.Edit;
DM6.T1.FieldByName('Тираж').AsInteger:=DM6.T1.FieldByName('Тираж').AsInteger+strtoint(za[2]);
DM6.T1.Post;
DM6.T1.Refresh;
f1.clearf2;
end
else
begin
//добление новой записи
DM6.T1.Append;
DM6.T1.FieldByName('Издательство').AsString:=za[3];
DM6.T1.FieldByName('Наз. книги').AsString:=za[0];
DM6.T1.FieldByName('Автор').AsString:=za[1];
DM6.T1.FieldByName('Тираж').AsString:=za[2];
DM6.T1.FieldByName('Цена').AsString:=Edit5.text;
DM6.T1.Post;
DM6.T1.Refresh;
f1.clearf2;
end;
//просмотр необработанных заявок
if MessageBox(0,'Просмотреть необработанные заявки','Соощение',mb_YesNo)=6 then
Продолжение приложения Б
if (DM6.T2.Locate('Наз. книги;Автор;',VarArrayOf([za[0], za[1]]),[]))and(DM6.T2.FieldByName('Треб. кол').AsInteger<>0) then
begin
DM6.T1.Locate('Издательство;Наз. книги;Автор;',VarArrayOf([za[3], za[0], za[1]]),[]);
if DM6.T2.FieldByName('Треб. кол').AsInteger>=strtoint(za[2]) then
begin
DM6.T3.Append;
DM6.T3.FieldByName('№ заказа').AsString:=DM6.T2.FieldByName('№ заказа').AsString;
DM6.T3.FieldByName('Издательство').AsString:=za[3];
DM6.T3.FieldByName('Выдано').AsString:=za[2];
DM6.T3.FieldByName('Цена').AsString:=DM6.T1.fieldbyname('Цена').asstring;
DM6.T3.FieldByName('Сумма').AsInteger:=strtoint(za[2])*DM6.T1.fieldbyname('Цена').asinteger;
DM6.T3.Post;
DM6.T3.Refresh;
DM6.T3.Open;
DM6.T1.Edit;
DM6.T1.Delete;
DM6.T1.Refresh;
DM6.T2.Edit;
DM6.T2.FieldByName('Треб. кол').AsInteger:=DM6.T2.FieldByName('Треб. кол').AsInteger-strtoint(za[2]);
DM6.T2.Post;
DM6.T2.Refresh;
end
else
begin
DM6.T3.Append;
DM6.T3.FieldByName('№ заказа').AsString:=DM6.T2.FieldByName('№ заказа').AsString;
DM6.T3.FieldByName('Издательство').AsString:=za[3];
Продолжение приложения Б
DM6.T3.FieldByName('Выдано').AsInteger:=DM6.T2.FieldByName('Треб. кол').AsInteger;
DM6.T3.FieldByName('Цена').AsString:=DM6.T1.fieldbyname('Цена').asstring;
DM6.T3.FieldByName('Сумма').AsInteger:=strtoint(za[2])*DM6.T1.fieldbyname('Цена').asinteger;
DM6.T3.Post;
DM6.T3.Refresh;
DM6.T1.Edit;
DM6.T1.FieldByName('Тираж').AsInteger:=strtoint(za[2])-DM6.T2.FieldByName('Треб. кол').AsInteger;
DM6.T1.Post;
DM6.T1.Refresh;
DM6.T2.Edit;
DM6.T2.FieldByName('Треб. кол').AsInteger:=0;
DM6.T2.Post;
DM6.T2.Refresh;
end;
end;
end;
//удаление
if unit1.kn=3 then
if (edit4.Text='') then
messageBox(0,'Заполни все поля','Ошибка',0)
else
if ComboBox1.ItemIndex=-1 then messageBox(0,'Выбери таблицу','Ошибка',0)
else
case ComboBox1.ItemIndex of
0:
if DM6.T1.Locate('ID',edit4.Text,[])=false then messageBox(0,'Данной записи не существует!','Ошибка',0)
else
begin
DM6.T1.Edit;
DM6.T1.Delete;
DM6.T1.Refresh;
Продолжение приложения Б
end;
1:
if DM6.T2.Locate('№ заказа',edit4.Text,[])=false then messageBox(0,'Данной записи не существует!','Ошибка',0)
else
if MessageBox(0,'Вы нарушите целостность данных'+#13+'Продолжить?','Опасность',mb_YesNo)=6 then
begin
DM6.T2.Edit;
DM6.T2.Delete;
DM6.T2.Refresh;
end;
2:
if DM6.T3.Locate('№ заказа',edit4.Text,[])=false then messageBox(0,'Данной записи не существует!','Ошибка',0)
else
if MessageBox(0,'Вы нарушите целостность данных'+#13+'Продолжить?','Опасность',mb_YesNo)=6 then
begin
DM6.T3.Edit;
DM6.T3.Delete;
DM6.T3.Refresh;
end;
end;
DM6.T1.RecNo:=1;
end;
procedure TForm2.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9':;
#8:;
else key:=chr(0);
end;
end;
Продолжение приложения Б
procedure TForm2.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
case key of
'0'..'9':;
#8:;
else key:=chr(0);
end;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm3 = class(TForm)
SG1: TStringGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
F3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
close;
end;
end.
unit Unit4;
interface
uses
Продолжение приложения Б
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, registry;
type
TForm4 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
GroupBox1: TGroupBox;
Edit2: TEdit;
Label2: TLabel;
Button1: TButton;
CheckBox1: TCheckBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var
F4: TForm4;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);
var
Reg:TRegistry;
begin
if (length(edit1.Text)>4)and(edit1.Text=edit2.Text) then
begin
Reg:=TRegIniFile.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('.pwd', true);
Reg.WriteString('pwd', edit1.Text);
Reg.CloseKey;
f1.Show;
Продолжение приложения Б
f4.Visible:=false;
end
else
begin
if length(edit1.Text)>4 then
messageBox(0,'Пароль слишком короткий','Ошибка',0)
else messageBox(0,'Введены разные пароли','Ошибка',0)
end;
end;
procedure TForm4.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked then
begin
edit1.PasswordChar:=#0;
edit2.PasswordChar:=#0;
end
else
begin
edit1.PasswordChar:='*';
edit2.PasswordChar:='*';
end;
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
edit1.PasswordChar:='*';
edit2.PasswordChar:='*';
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
close;
end;
end.
unit Unit5;
Продолжение приложения Б
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry;
type
TForm5 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
CheckBox1: TCheckBox;
Button2: TButton;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure RadioButton2Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
end;
var
F5: TForm5;
user:Boolean;
kol:integer;
implementation
uses Unit1, Unit4;
{$R *.dfm}
procedure TForm5.Button1Click(Sender: TObject);
var
Reg:TRegistry;
begin
user:=false;
if (not(RadioButton1.Checked))and(not(RadioButton2.Checked)) then
Продолжение приложения Б
messageBox(0,'Выбери пользователя','Ошибка',0) else
if RadioButton1.Checked then
begin
user:=true;
f1.Show;
end;
if RadioButton2.Checked then
if edit1.Text='' then
begin
messageBox(0,'Пароль не введен','Ошибка',0);
edit1.SetFocus;
end
else
begin
Reg:=TRegIniFile.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('.pwd', false);
if (reg.ReadString('pwd')<>edit1.Text)and(kol<=3) then
begin
messageBox(0,'Забыли пароль?','Ошибка',0);
edit1.Clear;
Edit1.SetFocus;
kol:=kol+1;
end
else
f1.Show;
if kol>=4 then
begin
messageBox(0,'Множественный ввод неправильного пароля'+#13+'Программа будет закрыта','Ошибка',0);
Reg.CloseKey;
f5.Close;
end;
end;
end;
Продолжение приложения Б
procedure TForm5.FormCreate(Sender: TObject);
var Reg:TRegistry;
begin
kol:=0;
f5.Height:=145;
edit1.PasswordChar:='*';
Reg:=TRegIniFile.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
if Reg.OpenKey('.pwd', false)=false then
begin
showmessage('Задайте пароль');
Application.CreateForm(TForm4, F4);
f4.show;
Reg.CloseKey;
end;
end;
procedure TForm5.CheckBox1Click(Sender: TObject);
begin
if checkbox1.Checked then
edit1.PasswordChar:=#0
else
edit1.PasswordChar:='*';
end;
procedure TForm5.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm5.RadioButton2Click(Sender: TObject);
begin
edit1.Visible:=true;
label1.Visible:=true;
CheckBox1.Visible:=true;
f5.Height:=195;
Label1.Top:=72;
Продолжение приложения Б
edit1.Top:=88;
CheckBox1.Top:=110;
Button1.Top:=128;
Button2.Top:=160;
end;
procedure TForm5.RadioButton1Click(Sender: TObject);
begin
edit1.Visible:=false;
label1.Visible:=false;
CheckBox1.Visible:=false;
f5.Height:=145;
Button1.Top:=80;
Button2.Top:=112;
RadioButton1.Enabled:=false;
RadioButton2.Enabled:=false;
end;
end.
|