РефератыИнформатикаУчУчёт поступления и выдачи книг

Учёт поступления и выдачи книг

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ


Государственное образовательное учреждение среднего профессионального образования


Уфимский колледж статистики информатики и вычислительной техники




УТВЕРЖДАЮ


Заместитель директора


по учебной работе


__________З.З. Курмашева


«___» ___________ 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.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Учёт поступления и выдачи книг

Слов:7207
Символов:107843
Размер:210.63 Кб.