Реферат: Учёт поступления и выдачи книг
Название: Учёт поступления и выдачи книг Раздел: Рефераты по информатике Тип: реферат | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение среднего профессионального образования Уфимский колледж статистики информатики и вычислительной техники
УЧЕТ ПОСТУПЛЕНИЯ И ВЫДАЧИ КНИГ Пояснительная записка к курсовому проекту
2008 ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ РФ Государственное образовательное учреждение СПО Уфимский колледж статистики, информатики и вычислительной техники УТВЕРЖДАЮ Председатель цикловой комиссии информатики и программирования /Каримова Р. Ф. « » 2008 г. ЗАДАНИЕ на курсовой проект студента дневного отделения группы 3П-3 специальность 230105 Фамилия, Имя, Отчество: Юсупова Айдара Марсовича Предмет: Технология разработки программных продуктов Тема курсового проекта: Учет поступления и выдачи книг Исходные данные: контрольный пример, постановка задачи 1) При выполнении курсового проекта должна быть предоставлена записка, состоящая из следующих разделов и подразделов: Введение 1 Постановка задачи Описание предметной области Функциональная схема задачи Схема данных Описание входной информации Описание структуры базы данных Описание выходной информации Контрольный пример Общие требования к продукту
Обоснование выбора языка программирования Описание программы Тестирование программного продукта Руководство пользователя Заключение Приложение 2) Графическая часть должна содержать: 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. Описание реквизитов входных документов
Формы входных документов Список книг
Список заявок
1.5 Описание структуры базы данных Таблица 3. Описание структуры базы данных
Примечание: символ «*» означает первичный ключ. 1.6 Описание выходной информации Выходной информацией является:
Таблица 4. Описание выходных документов
Таблица 5. Описание реквизитов выходных документов
Продолжение Таблица 5
Формы выходных документов Ведомость удовлетворенных заявок
Ведомость неудовлетворенных заявок
Сводная ведомость
1.7 Контрольный пример Входные данные контрольного примера представлены в виде таблиц. Рисунок 1 - Список книг В магазин пришли следующие заявки:
Результат контрольного примера Ведомость удовлетворенных заявок
Ведомость неудовлетворенный заявок
Сводная ведомость
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. |