Создание программного обеспечения для небольшого супермаркета

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    3,62 Mb
  • Опубликовано:
    2011-12-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание программного обеспечения для небольшого супермаркета

ОГЛАВЛЕНИЕ

ПЕРЕЧЕНЬ СОКРАЩЕНИЙ, СИМВОЛОВ, СПЕЦИАЛЬНЫХ ТЕРМИНОВ

ВВЕДЕНИЕ

.АНАЛИЗ ДЕЯТЕЛЬНОСТИ СУПЕРМАРКЕТА

.1       Общая схема построения системы

.2 Функциональная схема подсистемы «Учет и реализация товара»

. ОСНОВНЫЕ ПРИНЦИПЫ СОЗДАНИЯ БАЗЫ ДАННЫХ

.1 Требования, предъявляемые к базе данных

.2 Основы построения базы данных

. СРЕДА DELPHI КАК СРЕДСТВО ДЛЯ РАЗРАБОТКИ АСУ

.1Программный продукт Delphi

.2 Объектно-ориентированный язык

. ОПИСАНИЕ ПРОГРАММЫ

.1 Структура базы данных

.2 Интерфейс программы

.3 Руководство пользователя

. РАЗРАБОТКА ПРОГРАММЫ

.1 Создание базы данных

.2 Разработка главной формы режима «Администратор»

.3 Разработка формы «Вход в программу»

.4 Разработка формы Добавление товара

.5 Разработка формы Изменение товара

.6 Разработка формы Смена пароля

.7 Разработка формы Единицы измерения

.8 Разработка отчетов

.9 Разработка формы режима Кассир

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЯ

ПЕРЕЧЕНЬ СОКРАЩЕНИЙ, СИМВОЛОВ, СПЕЦИАЛЬНЫХ ТЕРМИНОВ


БД    база данных

СУБД         система управления базами данных

АСУ автоматизированная система управления

АБД  администратор баз данных

SQL  Structured Query Language

MIS  информационная система руководства

НФ    нормальная форма

НФ    Первая нормальная форма

НФ    Вторая нормальная форма

ЗНФ Третья нормальная форма

ВВЕДЕНИЕ

Большинство людей уже не могут обходиться в своей жизни без компьютерных и информационных технологий, которые распространились почти во все сферы деятельности. В некоторых областях информатизация и компьютеризация и вовсе стали неотъемлемыми частями, благодаря которым повышается эффективность деятельности. Ярчайший пример здесь - торговля. Автоматизация плотно вошла в торговлю, она значительно упрощает ведение дел и повышает уровень прибыли.

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

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

Современное состояние развития супермаркетов позволяет выделить три составляющие автоматизации, в которых у них возникает необходимость:

·              самих торговых или кассовых мест;

·              учета товарооборота магазина;

·              бухгалтерского учета супермаркета, а также расчетов с поставщиками, покупателями.

Небольшой магазин (3-10 кассовых мест, небольшая торговая площадь) может иметь упрощенный учет, если, например, является частным предприятием или предприятием на едином налоге. При этом небольшой магазин может быть частью другой торговой сети или другой компании, поэтому для него иногда достаточно провести автоматизацию торгового зала, а все остальное сделает более крупная, централизованная структура, в которую он входит.

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

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

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

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

-       Рассмотреть структуру работы и основные принципы работы супермаркета

-       Раскрыть понятие баз данных

-       Разработать структуру базы данных супермаркета

-       Разработать приложение для работы с базами данных супермаркета

Теоретическую основу исследования составили сайты разработчиков АСУ.

Объектом исследования явились супермаркеты.

Предметом исследования явилась деятельность супермаркета.

Научная новизна работы заключается в создании нового программного обеспечения для лучшего решения автоматизации деятельности супермаркета.

1.АНАЛИЗ ДЕЯТЕЛЬНОСТИ СУПЕРМАРКЕТА

1.1 Общая схема построения системы

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

Рисунок 1. Схема построения системы управления супермаркетом

Центром любой подобной АСУ всегда является мощный энергонезависимый сервер, хранящий информацию о деятельности всех подсистем супермаркета в виде совокупности распределенных баз данных. Каждая база данных содержит одну или несколько информационных таблиц, содержание которых определяется названием БД и может различаться по внутренним характеристикам; одна и та же база данных может использоваться для работы различных подсистем путем выделения из нее соответствующей информационной таблицы.

Из-за некритичности рассматриваемой АСУ во времени (определенные задержки в выполнении тех или иных операций не грозят системе аварийным сбоем и не подвергают опасности жизнь людей) система не содержит объединенного пульта управления, информация на который выводится со всех интегрированных подсистем и подвергается посекундному контролю опытных операторов; вместо этого каждая из подсистем включает в себя определенное количество оборудованных дисплеями оконечных рабочих мест, выводящиеся на которые и снимаемая с которых информация строго систематизирована по своему характеру.

Каждая из подсистем супермаркета включает в себя программное и аппаратное обеспечение, обеспечивающие: 1) извлечение данных из БД, связанных с соответствующей подсистемой; 2) запись в БД измененных или новых данных; 3) связь с внешними устройствами, необходимыми для функционирования подсистемы. Разделение супермаркета на подсистемы необходимо для реализации на базе каждой из подсистем определенного подмножества функций, схожих по предметной области; подобное разделение также необходимо с целью организации подразделений АСУ, выполняющих контроль за подотчетной каждому из них подсистемой. Несмотря на то, что подсистемы связаны между собой совместно используемыми базами данных, разделение по предметной области четко определяет круг задач, выполняемых каждой из подсистем.

1.2 Функциональная схема подсистемы «Учет и реализация товара»

По характеру своей деятельности супермаркет - организация, целью которой является продажа населению продуктов и прочих товаров широкого потребления с целью получения прибыли. В связи с этим естественным представляется отведение большинства реализуемых АСУ функций соответствующей подсистеме.)       Генерация списков товаров, присутствующих на складах; эта функция необходима для быстрого определения товаров, закончившийся запас которых на витринах может быть оперативно пополнен без необходимости заказа новых партий товара поставщику;) Генерация списков товаров, отсутствующих на складах, для оформления поставщику соответствующего заказа;)         Генерация списков товаров, имеющихся в наличии на складах и на витринах, срок годности которых истек; эта функция необходима для списания соответствующих товаров и оформления поставщику новых заказов на эти товары; при этом стоимость списанных товаров засчитывается в чистый убыток супермаркета;)   Смена цен товаров в БД при изменении последних;)          Автоматизированное начисление наценок на товары в соответствии с текущим экономическим положением супермаркета;) Занесение в товарную БД наименований товаров, отсутствовавших в ней ранее, при поступлении соответствующих товаров от поставщика с последующим назначением этим товарам уникальных идентификационных номеров и цен, определяемых поставщиком; увеличение числа товарных единиц при поступлении от поставщика товаров, присутствовавших в БД;)         Сверка идентификационных номеров товаров при покупке последних пользователем супермаркета, автоматическое определение цен товаров по этим номерам и уменьшение числа соответствующих единиц товара в БД в соответствии с размером сделанной пользователем покупки. При этом стоимость купленных товаров записывается в чистую прибыль супермаркета.

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

Выбранная нами структурная схема автоматизированной системы управления супермаркетом достаточно удобна как для рядового сотрудника, так и для инженера АСУ. Согласно этой схеме, по которой весь супермаркет разделен на обозримое количество подсистем, значительно упрощается поиск и локализация системных сбоев и ошибок в распределении потоков данных, а каждый сотрудник отвечает лишь за подведомственный ему, достаточно малый участок одной из подсистем. В связи с этим выбор такой схемы построения АСУ «Супермаркет» следует признать удачным и рекомендовать его к выбору всех системоаналитиков.

2. ОСНОВНЫЕ ПРИНЦИПЫ СОЗДАНИЯ БАЗЫ ДАННЫХ

2.1 Требования, предъявляемые к базе данных

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

Роль базы данных очень важна. Все, с чем мы ежедневно сталкиваемся скорее всего, зарегистрировано в той или иной базе.

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

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

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

К современным базам данных, а следовательно, и к СУБД, на которых они строятся, предъявляются следующие основные требования.

-       Высокое быстродействие (малое время отклика на запрос). Время отклика - промежуток времени от момента запроса к БД до фактического получения данных.

-       Простота обновления данных.

-       Независимость данных.

-       Совместное использование данных многими пользователями.

-       Безопасность данных - защита данных от преднамеренного или непреднамеренного нарушения секретности, искажения или разрушения.

-       Стандартизация построения и эксплуатации БД (фактически СУБД).

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

-       Дружелюбный интерфейс пользователя.

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

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

Она предполагает:

-       отсутствие неточно введенных данных или двух одинаковых записей об одном и том же факте;

-       защиту от ошибок при обновлении БД;

-       невозможность удаления (или каскадное удаление) связанных данных разных таблиц;

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

-       сохранность данных при сбоях техники (восстановление данных).

Защита данных от несанкционированного доступа предполагает ограничение доступа к конфиденциальным данным и может достигаться:

-       введением системы паролей;

-       получением разрешений от администратора базы данных (АБД);

-       запретом от АБД на доступ к данным;

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

Три последние процедуры легко выполняются в рамках языка структуризованных запросов Structured Query Language - SQL, часто называемого SQL2.

2.2 Основы построения базы данных

Первоначально (начало 60-х годов) использовалась файловая система хранения. Для решения преимущественно инженерных задач, характеризующихся небольшим количеством данных и значительным объемом вычислений, данные хранились непосредственно в программе. Применялся последовательный способ организации данных, имелась их высокая избыточность, идентичность логической и физической структур и полная зависимость данных. С появлением экономико-управленческих задач (MIS), отличающихся большими объемами данных и малой долей вычислений, указанная организация данных оказалась неэффективной. Требовалось упорядочение данных, которое, как выяснилось, возможно было проводить по двум критериям: использование (информационные массивы); хранение (базы данных). Первоначально применяли информационные массивы, но вскоре стало ясно превосходство баз данных. Использование файлов для хранения только данных было предложено Мак Гри в 1959 году. Были разработаны методы доступа (в том числе произвольного) к таким файлам, при этом физическая и логическая структуры уже различались, а физическое расположение данных можно было менять без изменения логического представления.

В конце 70-х годов появились современные СУБД, обеспечивающие физическую и логическую независимость, безопасность данных, обладающие развитыми языками БД. Последнее десятилетие характеризуется появлением распределенных и объектно-ориентированных баз данных, характеристики которых определяются приложениями средств автоматизации проектирования и интеллектуализации БД.

Прежде чем рассматривать процедуры работы с базой данных, дадим набор характеристик БД и пояснения к нему.

Существует два подхода к построению БД, базирующихся на двух подходах к созданию автоматизированной системы управления (АСУ).

Первый из них, широко использовавшийся в 80-е годы и потому получивший название классического (традиционного), связан с автоматизацией документооборота (совокупность документов, движущихся в процессе работы предприятия). Исходными и выходными координатами являлись документы.

К 90-м годам сформировался второй, современный подход, связанный с автоматизацией управления. Он предполагает первоначальное выявление стандартных алгоритмов приложений (алгоритмов бизнеса в зарубежной терминологии), под которые определяются данные, а стало быть, и база данных. Объектно-ориентированное программирование только усилило значимость этого подхода.

В работе БД возможен одно- и многопользовательский (несколько пользователей подключаются к одному компьютеру через разные порты) режимы.

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

Создать саму БД (не СУБД) средствами Delphi очень сложно, даже невозможно. Если выбрать двух- или трехзвенную архитектуру, не обойтись без сервера БД, который создать собственными силами очень трудно (да и ни к чему, если на рынке предлагаются десятки таких программ, а в Интернете при желании можно найти и бесплатный, но вполне приличный сервер MySQL).

Если речь идет о файл-серверной БД, то и здесь понадобятся специальные средства. В Delphi для этих целей обычно используется утилита Database Desktop.

Могут также применяться промышленные СУБД «Paradox*-, «dBASE» (корпорации Borland), «FoxPro», «Access» (корпорации Microsoft) и др. В рамках данной дипломной работы используются средства Database Desktop и сервер InterBase, так как они входят в комплект поставки Delphi и являются собственными продуктами корпорации Borland.

Создание БД начинается с ее проектирования. На этом этапе анализируются информационные потоки с целью определить набор таблиц и их полей. Процесс проектирования в немалой степени зависит от опыта и интуиции разработчика, то есть является творческим, однако некоторые его моменты можно формализовать. Одной из таких формализации является требование, согласно которому реляционная база данных должна быть нормализована.

Нормализованной называется БД, в которой выполняется как минимум 3 условия. Выполнение условия называется приведением БД к соответствующей нормальной форме.

Первая нормальная форма (1НФ) требует, чтобы каждое поле таблицы было неделимым и не содержало повторяющихся групп. Пусть в таблице хранится информация о книгах. Эту информацию можно держать в единственном поле, но это противоречит 1НФ. В соответствии с ней в таблице должны быть поля Название, Автор, Издательство и др., совокупность которых дает исчерпывающую информацию о книге. Это облегчает реализацию таких запросов к БД, которые позволят узнать количество разных авторов, количество книг одного автора, количество книг, выпущенных определенным издательством, и т. п. Повторяющимися являются поля, содержащие сходную информацию. Если, например, таблица содержит информацию о покупателе и купленных им книгах, то, в соответствии с 1НФ, список книг должен выделяться в отдельную таблицу.

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

Вторая нормальная форма (2НФ) требует, чтобы все поля одной таблицы зависели от первичного ключа - только в этом случае первичный ключ, как и требуется, будет определять уникальную информацию. Допустим, что мы в таблице отпуска книг составили первичный ключ по полям Номер накладной и Покупатель. Нетрудно заметить, что такой ключ будет избыточным: поле Покупатель однозначно определяется номером накладной, поэтому, в соответствии с 2НФ, оно не может входить в первичный ключ.

Третья нормальная форма (ЗНФ) требует, чтобы значение любого поля, не входящего в первичный ключ, никак не зависело от значения других полей. Если в таблице накладных содержатся поля Книга и Отпускная цена, второе поле явно зависит от первого и по требованию ЗНФ должно быть вынесено в отдельную таблицу. Общее правило выполнения ЗНФ таково: в таблице должны быть только не зависящие друг от друга поля, однозначно определяющие некоторый факт, вся дополнительная информация о значении полей должна выноситься в отдельные таблицы. Например, в той же накладной на продажу книг должно быть поле Покупатель, но не должно быть характеризующих его полей Город, Адрес, Телефон и т. п. - эти данные должны быть в отдельной таблице Покупатели.

Как уже говорилось, проектирование БД - творческий процесс, а описанные выше требования носят лишь рекомендательный характер. На практике безусловное выполнение этих требований (в особенности ЗНФ) приводит к появлению множества небольших по объему таблиц и может существенно замедлять работу с СУБД. Для повышения скорости ее работы проектировщики часто идут на сознательное нарушение описанных требований.

Единицей хранящейся в БД информации является таблица. Каждая таблица представляет собой совокупность строк и столбцов, где строки соответствуют экземпляру объекта, конкретному событию или явлению, а столбцы - атрибутам (признакам, характеристикам, параметрам) этого объекта, события, явления.

В терминах БД столбцы таблицы называются полями, а ее строки - записями.

Базы данных, между отдельными таблицами которых существуют связи, называются реляционными (от relation - связь, отношение).

Связанные отношениями таблицы взаимодействуют по принципу главная (master) - детальная (detail).

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

Первичные ключи облегчают установление связи между таблицами.

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

Если в таблице нет полей с уникальными значениями, для создания первичного ключа в нее обычно вводят дополнительное числовое поле, значениями которого СУБД может распоряжаться по своему усмотрению.

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

3. СРЕДА DELPHI КАК СРЕДСТВО ДЛЯ РАЗРАБОТКИ АСУ

3.1 Программный продукт Delphi

- это среда разработки, используемой прежде всего для создания и поддержки приложений, предназначенных как для отдельных персональных компьютеров, так и для серверов. Delphi, как и разработанные с ее помощью приложения, могут функционировать под практически любой 32 разрядной операционной системой типа Windows. Это довольно легкая в изучении среда, и в то же время довольно сложная.имеет пользовательский графический интерфейс, подобный Visual Basic и C++. На данный момент множество фирм приняло за стандарт данный интерфейс для собственных приложений. Весь исходный текст программы на Delphi пишется на языке Object Pascal, практически ничем не отличающимся от принципов, заложенных в такой знаменитой программной оболочке. Синтаксис, принцип модуля, процедуры, функции, все взято за основу.

О Delphi говорят как о среде быстрого создания приложений. Это технология визуального программирования, т.е. пользователь оформляет свою будущую программу, и видит результаты своей работы еще до запуска самой программы. В принципе, сам процесс написания приложения разделяется на две части. Первая - программист располагает на окна своей программы необходимые элементы, позиционирует, устанавливает нужные размеры, меняет свойства. Вторая - собственно, написание программного кода, описание свойств элементов, доступных только во время работы приложения, описание реакций на событие появление окна, нажатия на кнопку и др. Для задания каких-либо свойств элементу разрабатываемого приложения вовсе не обязательно писать массивные текстовые строки, достаточно изменить это свойство в инспекторе объектов (так называемом мониторе свойств выбранного элемента). Это изменение автоматически дополнит или модифицирует программный код.

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

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

Контекстно-зависимое внедрение файлов справки позволяет поднять уровень проектируемого приложения на порядок выше.

При работе в среде программирования посредством так называемого BDE (Borland Database Engine), системного администратора баз данных, можно получать прямой доступ к таким стандартным форматам данных, как dBASE, Paradox, FoxPro, Access, ASCII таблицам. Набор драйверов Borland SQL Links обеспечивает все необходимые соединения с SQL-серверами.

Интерфейс среды разработки Delphi состоит из следующих окон.

Главное окно. Оно располагается в верхней части экрана, в котором располагается меню, панель инструментов и палитра компонентов. Панель инструментов представляет собой набор кнопок для быстрого доступа к необходимой функции меню. На палитре компонентов, представляющей собой множественные тематические страницы, располагаются визуальные и невизуальные компоненты вашей будущей программы (невизуальные компоненты видны только при проектировании приложения). Пожалуйста, не перепутайте инструменты и компоненты. Главное окно остается открытым все время работы IDE. Закрывая его, вы тем самым закрываете Delphi и все открытые в нем окна.

Рис.2. Главное окно

Инспектор объектов. Окно Object Inspector содержит две страницы. На первой, Properties, постоянно отображаются все доступные свойства выбранного компонента. В левой колонке содержится список, в правой - текущие значения по умолчанию. На второй странице, Events, возможные обработчики событий для выбранного компонента. В левой колонке - названия, в правой - соответствующие свойства или процедуры. На рисунке 2 вы можете видеть Object Inspector с установленными свойствами формы.

Рис. 3. Инспектор объектов

Каждый объект в Delphi, даже само окно разрабатываемого приложения, имеют определенные свойства. Например цвет, размер, отображаемый текст и т.п. Эти свойства можно менять еще до запуска проектируемой программы на выполнение. В зависимости от изменяемого свойства результат можно просматривать уже сразу.

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

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

Если в программе три окна, то они будут взаимодействовать в процессе работы с тремя так называемыми модулями (Unit). Все эти модули и отображаются в редакторе.

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

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

Рис. 4. Окно редактора кода

Проектировщик форм. Каждое Windows-приложение выполняется в собственном окне. Минимальное количество таких окон равна 1. Delphi при запуске автоматически предлагает пользователю новый проект, открывая пустое (незаполненное) окно под названием Form1 и назначает его главным окном. Главное окно в проекте может быть только одно. Все другие создаваемые окна будут дочерними. Закрывая главное окно стандартной кнопкой закрытия окна, или программно, вы закрываете и все дочерние окна.

Рис. 5. Проектировщик форм

При запуске Delphi можно увидеть уже открытый новый проект для создания приложения. Запустить его на выполнение можно нажатием на кнопку F9, выбрав соответствующий пункт "Run" в меню "Run" или выбором одноцветной кнопки на панели инструментов. Происходит сравнительно недолгий процесс компиляции (преобразование удобочитаемых для вас данных в удобочитаемую форму для компьютера), в результате которого создается EXE файл. Далее этот файл, в случае успешного создания, запускается на выполнение. Во время выполнения из множества окон Delphi остается только главное окно и окно редактора кода.

При закрытии запущенной программы Delphi автоматически переводит окна в то состояние, которое было до запуска проекта на выполнение. Снова на экране появляется инспектор объектов и редактор формы.

Для сохранения всех файлов проекта выбираем пункт Save All, находящийся в меню File. Delphi предлагает сохранить модуль программы Unit1 как… Сохраним его под этим же названием, что и предлагается. Замечание: сколько существует окон в вашей программе, столько и будет модулей (Unit). Поэтому имеет смысл сохранять каждый проект в отдельный каталог. Особенно, если в программе много окон. Далее будет предложено сохранить проект как… т.е. задать название всего проекта. Как будет называться проект, под таким же именем и будут создаваться исполняемые EXE файлы. Названия файлов должны состоять из одного слова или слов, написанных английскими буквами, цифры допустимы только начиная со второго символа, пробелы - недопустимы (используйте в таких случаях знак подчеркивания).

Перечень сохраняемых при этом файлов на диске:- файл проекта. Содержит он основной код программы, ссылки на все окна (формы) проекта и относящиеся к ним модули. В нем также содержится код инициализации. Имеет одноименное название с проектом.- pascal файл. Он содержит текст, который вы видите в окне редактора кода так называемого модуля программы.- delphi form. Представляет собой файл с полными данными о проектировщике формы. Позиция, размер, расположенные компоненты и пр. Форма приложения является неотъемлемой частью модуля PAS и имеет то же название.- двоичный файл модуля. Имеет одноименное название с модулем.- ресурсный файл. Содержит в себе иконки, значки указателя мыши, картинки, звуки., DSK - содержат настройки проекта.- содержит настройки конфигурации проекта.- откомпилированная программа. Сохраняется автоматически при запуске проекта на выполнение. Обновляется в момент компиляции. Имеет одноименное название проекта. Полностью самостоятельное приложение.

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

3.2 Объектно-ориентированный язык

Любая программа в Delphi состоит из файла проекта (файл с расширением dpr) и одного или нескольких модулей (файлы с расширениями pas). Каждый из таких файлов описывает программную единицу Object Pascal.

Файл проекта представляет собой программу, написанную на языке Object Pascal и предназначенную для обработки компилятором. Эта программа автоматически создается Delphi и содержит лишь несколько строк. Чтобы увидеть их, запустите Delphi и щелкните по опции Project | View Source главного меню. Delphi покажет окно кода с закладкой Project1, содержащее такой текст:

program Projecti;, Unit1 in 'Unit1.pas' {fmExample};

{$R *.RES}.Initialize;.CreateForm(TfmExample, fmExample);.Run;

end.

В окне кода жирным шрифтом выделяются так называемые зарезервированные слова, а курсивом - комментарии (так же выделяются зарезервированные слова и комментарии в книге). Как видим, текст программы начинается зарезервированным словом program и заканчивается словом end с точкой за ним. Замечу, что сочетание end со следующей за ней точкой называется терминатором программной единицы: как только в тексте программы встретится такой терминатор, компилятор прекращает анализ программы и игнорирует оставшуюся часть текста.

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

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

{$R *.RES}

на самом деле не является комментарием. Этот специальным образом написанный фрагмент кода называется директивой компилятора (в нашем случае - указание компилятору на необходимость подключения к программе так называемого файла ресурсов). Директивы начинаются символом $, который стоит сразу за открывающей фигурной скобкой.

Поскольку речь зашла о комментариях, замечу, что в Object Pascal в качестве ограничителей комментария могут также использоваться пары символов (*, *) и //. Скобки (*...*) используются подобно фигурным скобкам т. е. комментарием считается находящийся в них фрагмент текста, а символы // указывают компилятору, что комментарий располагается за ними и продолжается до конца текущей строки:

{Это комментарий}

(*Это тоже комментарий*)

//Все символы до конца этой строки составляют комментарий

Слово Program со следующим за ним именем программы и точкой с запятой образуют заголовок программы. За заголовком следует раздел описаний, в котором программист (или Delphi) описывает используемые в программе идентификаторы. Идентификаторы обозначают элементы программы, такие как типы, переменные, процедуры, функции (об элементах программы мы поговорим чуть позже). Здесь же с помощью предложения, которое начинается зарезервированным словом uses (использовать) программист сообщает компилятору о тех фрагментах программы (модулях), которые необходимо рассматривать как неотъемлемые составные части программы и которые располагаются в других файлах. Строки, Unit1 in 'Unitl.pas' {fmExample};

указывают, что помимо файла проекта в программе должны использоваться модули Forms И Unit1. модуль Forms является стандартным (т. е. уже известным Delphi), а модуль Unit1 - новым, ранее неизвестным, и Delphi в этом случае указывает также имя файла с текстом модуля (in 'uniti.pas') и имя связанного с модулем файла описания формы {fmExample}.

Собственно тело программы начинается со слова begin (начать) и ограничивается терминатором end с точкой. Тело состоит из нескольких операторов языка Object Pascal. В каждом операторе реализуется некоторое действие - изменение значения переменной, анализ результата вычисления, обращение к подпрограмме и т. п. В теле нашей программы - три исполняемых оператора:

Application.Initialize;.CreateForm(TfmExample, fmExample);

Application.Run;

Каждый из них реализует обращение к одному из методов объекта Application. Объектом называется специальным образом оформленный фрагмент программы, заключающий в себе данные и подпрограммы для их обработки. Данные называются полями объекта, а подпрограммы - его методами. Объект в целом предназначен для решения какой-либо конкретной задачи и воспринимается в программе как неделимое целое (иными словами, нельзя из объекта “выдернуть” отдельное поле или метод). Объекты играют чрезвычайно важную роль в современных языках программирования. Они придуманы для того, чтобы увеличить производительность труда программиста и одновременно повысить качество разрабатываемых им программ. Два главных свойства объекта - функциональность и неделимость - делают его самостоятельной или даже самодостаточной частью программы и позволяют легко переносить объект из одной программы в другую. Разработчики Delphi придумали для нас с вами сотни объектов, которые можно рассматривать как кирпичики, из которых программист строит многоэтажное здание программы. Такой принцип построения программ называется объектно-ориентированным программированием (ООП). В объекте Application собраны данные и подпрограммы, необходимые для нормального функционирования Windows-программы в целом. Delphi автоматически создает объект-программу Application для каждого нового проекта. Строка.Initialize;

означает обращение к методу Initialize объекта Application. Прочитав эту строку, компилятор создаст код, который заставит процессор перейти к выполнению некоторого фрагмента программы, написанного для нас разработчиками Delphi. После выполнения этого фрагмента (программисты говорят: после выхода из подпрограммы) управление процессором перейдет к следующей строке программы, в которой вызывается метод CreateForm и т. д.

Модули - это программные единицы, предназначенные для размещений фрагментов программ. С помощью содержащегося в них программного кода реализуется вся поведенческая сторона программы. Любой модуль имеет следующую структуру:

-       заголовок

-       секция интерфейсных объявлений

-       секция реализации

Заголовок открывается зарезервированным словом Unit за которым следует имя модуля и точка с запятой. Секция интерфейсных объявлений открывается зарезервированным словом Interface, a секция реализации - словом implementation. Терминатором модуля, как и терминатором программы, является end с точкой. Следующий фрагмент программы является синтаксически правильным вариантом модуля:Unit1;

// Секция интерфейсных объявлений

// Секция реализации.

В секции интерфейсных объявлений описываются программные элементы (типы, классы, процедуры и функции), которые будут “видны” другим программным модулям, а в секции реализации раскрывается механизм работы этих элементов. Разделение модуля на две секции обеспечивает удобный механизм обмена алгоритмами между отдельными частями одной программы. Он также реализует средство обмена программными разработками между отдельными программистами. Получив откомпилированный “посторонний” модуль, программист получает доступ только к его интерфейсной части, в которой, как уже говорилось, содержатся объявления элементов. Детали реализации объявленных процедур, функций, классов скрыты в секции реализации и недоступны другим модулям.

Щелкните по закладке Unit1 окна кода, и вы увидите такой текст:

unit Unit1;, Messages, SysUtils, Classes, Graphics, Controls,, Dialogs, StdCtrls, Buttons, ExtCtrls;= class(TForm): TPanel;: TBitBtn;: TBitBtn;: TEdit;: TLabel;: TMemo;

{ Private declarations } public

{ Public declarations } end;: TfmExample;

implementation

$R *.DFM}.

Весь этот текст сформирован Delphi, но в отличие от файла проекта программист может его изменять, придавая программе нужную функциональность. В интерфейсной секции описан один тип (класс - fmExample) и один объект (переменная fmExample).

Вот описание класса:= class(TForm): TPanel;: TBitBtn;: TBitBtn;: TEdit;: TLabel;: TMemo;

{ Private declarations } public

{ Public declarations } end;

Классы служат основным инструментом реализации мощных возможностей Delphi. Класс является образцом, по которому создаются объекты, и наоборот, объект - это экземпляр реализации класса. Образцы для создания элементов программы в Object Pascal называются типами, таким образом, класс TfmExamplel -это тип. Перед его объявлением стоит зарезервированное слово type (тип), извещающее компилятор о начале раздела описания типов.

Стандартный класс TForm реализует все нужное для создания и функционирования пустого Windows-окна. Класс TfmExamplel порожден от этого класса, о чем свидетельствует строка= class(TForm)

в которой за зарезервированным словом class в скобках указывается имя родительского класса. Термин “порожден” означает, что класс TfmExample унаследовал все возможности родительского класса TForm и добавил к ним собственные в виде дополнительных компонентов, которые, как вы помните, мы вставили в форму fmExample. Перечень вставленных нами компонентов и составляет значительную часть описания класса.

Свойство наследования классами-потомками всех свойств родительского класса и обогащения их новыми возможностями является одним из фундаментальных принципов объектно-ориентированного программирования. От наследника может быть порожден новый наследник, который внесет свою лепту в виде дополнительных программных заготовок и т. д. В результате создается ветвящаяся иерархия классов, на вершине которой располагается самый простой класс TObject (все остальные классы в Delphi порождены от этого единственного прародителя), а на самой нижней ступени иерархии - мощные классы-потомки, которым по плечу решение любых проблем.

Элементы программы - это минимальные неделимые ее части, еще несущие в себе определенную значимость для компилятора. К элементам относятся:

·              зарезервированные слова;

·              идентификаторы;

·              типы;

·              константы;

·              переменные;

·              метки;

·              подпрограммы;

·              комментарии.

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

Идентификаторы - это слова, которыми программист обозначает любой другой элемент программы, кроме зарезервированного слова, идентификатора или комментария. Идентификаторы в Object Pascal могут состоять из латинских букв, арабских цифр и знака подчеркивания. Никакие другие символы или специальные знаки не могут входить в идентификатор. Из этого простого правила следует, что идентификаторы не могут состоять из нескольких слов (нельзя использовать пробел) или включать в себя символы кириллицы (русского алфавита).

Типы - это специальные конструкции языка, которые рассматриваются компилятором как образцы для создания других элементов программы, таких как переменные, константы и функции. Любой тип определяет две важные для компилятора вещи: объем памяти, выделяемый для размещения элемента (константы, переменной или результата, возвращаемого функцией), и набор допустимых действий, которые программист может совершать над элементами данного типа. Замечу, что любой определяемый программистом идентификатор должен быть описан в разделе описаний (перед началом исполняемых операторов). Это означает, что компилятор должен знать тот тип (образец), по которому создается определяемый идентификатором элемент.

Константы определяют области памяти, которые не могут изменять своего значения в ходе работы программы. Как и любые другие элементы программы, константы могут иметь свои собственные имена. Объявлению имен констант должно предшествовать зарезервированное слово const (от англ. constants - константы). Например, мы можем определить константы const= 1024;= Kbyte*Kbyte;= 1024*Mbyte;

чтобы вместо длинных чисел

(1024*1024) и 1073741824

(1024*1024*1024) писать, соответственно, Mbyte и Gbyte. Тип константы определяется способом ее записи и легко распознается компилятором в тексте программы, поэтому программист может не использовать именованные константы (т. е. не объявлять их в программе явно).

Переменные связаны с изменяемыми областями памяти, т. е. с такими ее участками, содержимое которых будет меняться в ходе работы программы. В отличие от констант переменные всегда объявляются в программе. Для этого после идентификатора переменной ставится двоеточие и имя типа, по образу которого должна строиться переменная. Разделу объявления переменной (переменных) должно предшествовать слово var. Например:: Integer;: Byte;

Здесь идентификатор inValue объявляется как переменная типа integer, а идентификатор byValue - как переменная типа Byte. Стандартный (т. е. заранее определенный в Object Pascal) тип integer определяет четырехбайтный участок памяти, содержимое которого рассматривается как целое число в диапазоне от -2 147 483 648 до+2 147 483 647, а стандартный тип Byte - участок памяти длиной 1 байт, в котором размещается беззнаковое целое число в диапазоне от 0 до 2554.[Все приводимые в книге сведения относительно диапазона возможных значений и объема памяти стандартных типов относятся к Delphi 32. Для 16-разрядной версии 1 эти величины имеют другие значения, например, тип Integer в версии 1 занимает 2 банта и имеет диапазон значении от -32 768 до+32 767.]

Метки - это имена операторов программы. Метки используются очень редко и только для того, чтобы программист смог указать компилятору, какой оператор программы должен выполнятся следующим. Метки, как и переменные, всегда объявляются в программе. Разделу объявлений меток предшествует зарезервированное сло-во label (метка).

Подпрограммы - это специальным образом оформленные фрагменты программы. Замечательной особенностью подпрограмм является их значительная независимость от остального текста программы. Говорят, что свойства подпрограммы локализуются в ее теле. Это означает, что, если программист что-либо изменит в подпрограмме, ему, как правило, не понадобится в связи с этим изменять что-либо вне подпрограммы. Таким образом, подпрограммы являются средством структурирования программ, т. е. расчленения программ на ряд во многом независимых фрагментов. Структурирование неизбежно для крупных программных проектов, поэтому подпрограммы используются в Delphi-программах очень часто.

В Object Pascal есть два сорта подпрограмм: процедуры и функции. Функция отличается от процедуры только тем, что ее идентификатор можно наряду с константами и переменными использовать в выражениях, т. к. функция имеет выходной результат определенного типа.

4. ОПИСАНИЕ ПРОГРАММЫ


4.1 Структура базы данных

База данных АСУ «Супермаркет» состоит из 3 таблиц. В таблице supermarket.db содержаться сведения о товарах данного магазина. Таблица supermarket.db содержит следующие поля: kod - код товара, name - наименование товара, trademark - фирма-производитель, kind - вид товара, ed_izm - единица измерения, cena - цена за единицу, kol_vo - количество товара, имеющегося в наличии. Еесли kol_vo равно 0, значит, товара на данный момент в наличии нет.

В таблице postuplenie.db хранятся сведения о поступлении товара на склад. Таблица состоит из следующих полей: kod - номер поступления, name - код товара, naimen - наименование товара, data_post - дата поступления, kol_vo - количество товара.

В таблицу chek.db записывается товар, приобретаемый покупателем. Эта таблица постоянно обновляется при каждой покупке. Таблица содержит следующие поля: kod - код товара, name - наименование товара, trademark - фирма-производитель, cena - цена за единицу, kol_vo - количество товара, приобретаемого товара, summa - стоимость приобретаемого товара.

Связь между таблицами осуществляется посредством процедур. При поступлении товара (при добавлении записей в таблицу postuplenie.db), поле kol_vo в таблице supermarket.db увеличивается. При покупке товара (при добавлении записи в таблицу chek.db) поле kol_vo в таблице supermarket.db уменьшается.

4.2 Интерфейс программы

Программа АСУ «Супермаркет» имеет два режима работы: режим кассира и режим администратора.

При запуске программы открывается окно выбора пользователя. (Рис. 6)

Рисунок 6. Окно выбора пользователя

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

Рисунок 7. Режим администратора

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

На форме размещены таблица товаров (supermarket.db) и таблица поступления товаров (postuplenie.db). Над каждой таблицей размещены кнопки для работы с этими таблицами.

При выборе пользователя Кассир открывается окно работы в режиме Кассир. (Рис. 8)

Рисунок 8. Режим Кассир

Режим Кассир предназначен для фиксирования операции реализации товара в виде чека. На форме расположены 2 таблицы: таблица товаров (supermarket.db) и таблица приобретаемого товара (chek.db).

Таблицы chek.db заполняется автоматически при вводе кода товара и количества. Поле Summa вычисляется автоматически.

Печать чека и создание нового выполняется с помощью соответствующих кнопок.

4.3 Руководство пользователя

При запуске программы открывается окно выбора режима работы с АСУ «Супермаркет». В окне необходимо выбрать пользователя и ввести пароль.

Рассмотрим режим Администратора.

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

Пункт главного меню Данные содержит команды для работы с таблицами Данные о товаре и Данные о поступлении.

Сведения о товарах хранятся в таблице «Данные о товаре». Для работы с таблицей предназначены кнопки над таблицей и пункты главного меню. При добавлении товара открывается окно добавления нового товара (Рис 9).

Рисунок 9. Добавление товара

При нажатии кнопки Добавить данные записываются в таблицу и окно закрывается. Фирма-производитель, вид, единицы измерения выбираются из списков.

При нажатии кнопки Изменить открывается окно Изменение товара (Рис 10).

Рисунок 10. Изменение товара

Для просмотра таблицы используются кнопки Вперед и Назад. Кнопка Отмена закрывает окно. При нажатии кнопки Изменить данные товаре записываются в таблицу.

Удалить товар можно при нажатии кнопки Удалить и выборе пункта меню Данные - Удалить.

Поступление товара оформляется с помощью кнопки Поступление товара и при помощи пункта меню Данные - Поступление товара. При нажатии вышеперечисленных кнопок, появляется окно Поступление товара (Рис 11).

Рисунок 11. Поступление товара

Наименование товара выбирается из списка (источник - таблица Данные о товаре). Код товара ставится автоматически. При нажатии кнопки Добавить производятся следующие действия:

.        Запись добавляется в таблицу Данные о поступлении

.        Поле Количество соответствующего товара в таблице Данные о товаре увеличивается

.        Поля вода очищаются и можно добавлять следующую запись

Поля № п\п и Дата поступления заполняются автоматически.

Пункт главного меню Сервис содержит следующие подпункты:

Смена пароля

Добавить (единицы измерения, фирму-производителя, вид товара)

При выборе команды Смена пароля открывается следующее окно (Рис. 12).

Рисунок 12. Смена пароля

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

При добавлении товара, либо изменении, такие данные как вид товара, фирма-производитель и единицы измерения, выбираются из списков. Для изменения списков выбирается пункт меню Сервис - Добавить, далее в подпунктах выбирается необходимое поле. При выборе поля откроется соответствующая форма (Рис. 13).

Рисунок 13. Добавление единиц измерения

Пункт главного меню Отчеты предназначен для формирования и распечатки отчетов. Отчет можно сформировать по отсутствующим товарам, присутствующим товарам и полный отчет (Рис. 14).

Рисунок 14. Отчет

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

5. РАЗРАБОТКА ПРОГРАММЫ


5.1 Создание базы данных

Для создания таблиц воспользуемся программой Database Desktop. Создадим таблицу со следующей структурой (рис. 15).

Рисунок 15. Структура таблицы supermarket.db

Аналогично создадим таблицы postuplenie.db и chek.db.

Таблица 1. Список полей таблицы postuplenie.db

Наименование поля

Тип данных

kod

Autoincrement(счетчик)

name

Longinteger (целое)

naimen

Alpha (строковый) - 15 символов

data_post

Date (Дата)

kol_vo

Number (вещественное)


Таблица 2. Список полей таблицы chek.db

Наименование поляТип данных


kod

Number (вещественное)

name

Alpha (строковый) - 25 символов

trademark

Alpha (строковый) - 25 символов

cena

Number (вещественное)

kol_vo

Number (вещественное)

summa

Number (вещественное)


5.2 Разработка главной формы режима «Администратор»

Создадим новый проект в Delphi. Создадим форму согласно рисунку 16.

Рис. 16. Форма

Добавим на форму следующие компоненты для работы с базами данных: Table1, DataSource1, DbGrid1, Table2, DataSource2, DbGrid2.

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

Листинг1.TForm1.FormCreate(Sender: TObject);.ShowMainForm:=false;:=Application.ExeName; // полный путь и название запущенной программы

Path:=ExtractFileDir(Path); // отбрасываем название программы. Остается путь.Path[Length(Path)]<>'\' then Path:=Path+'\'; // если последний символ не \ то добавить его

{Последняя строка нужна для присвоения последнего символа '\',

потому что при обрезке файла 'C:\PROG.EXE' получим 'C:\',

а при обрезке 'C:\WINDOWS\PROG.EXE' получим 'C:\WINDOWS' }

form1.table1.databasename:= Path;.table1.tablename:='supermarket.db';.Query1.DatabaseName:=Path;.table2.databasename:= Path;.table2.tablename:='postuplenie.DB';.Query2.DatabaseName:=Path;.Active:=true;

end;

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

В таблице DbGrid1 названия полей таблицы отображаются на английском языке. Для того чтобы заменить их на русский, щелкаем дважды на компоненте, в отобразившемся окне Editing DBGrid.Columns правой кнопкой выбираем пункт Add All Fields. Выделяя каждое поле, изменяем свойство Title на подходящее название на русском языке.

Создадим главное меню с помощью компонента MainMenu.

Для кнопки Добавить пропишем следующий исходный код: procedure TForm1.N2Click(Sender: TObject);.Show// открывается форма Добавление товара

end;

Для кнопки ИзменитьTForm1.N4Click(Sender: TObject);

form6.Show; // открывается форма Изменение товара

form6.edit2.Text:=form1.Table1.FieldByName('Name').AsString;.edit3.Text:=form1.Table1.FieldByName('Trademark').AsString;.edit4.Text:=form1.Table1.FieldByName('Kind').AsString;.combobox1.Text:=form1.Table1.FieldByName('Ed_izm').AsStrin;.edit6.Text:=floattostr(form1.Table1.FieldByName('Cena').AsFloat;;

Для кнопки УдалитьTForm1.N3Click(Sender: TObject);.Table1.Delete;

Для кнопки Поступление товараTForm1.N19Click(Sender: TObject);

form11.Show// открывается форма Поступление товара

end;

Полный код формы приведен в приложении 1.

5.3 Разработка формы «Вход в программу»

Создадим форму как на рис. 17.

Рис. 17. Вход в программу

Для кнопки ОК пропишем следующий исходный код:

procedure TForm2.BitBtn1Click(Sender: TObject);combobox1.Text='администратор' thenedit1.text=paroladmin then1.Show; //показать главное окно

form2.tag:=1;

form2.close;showmessage('Пароль не верен');combobox1.Text='кассир' thenedit1.text=parolkassir then

Form3.Show; //показать главное окно

showmessage('Пароль не верен');;

Для кнопки Cancel:TForm2.BitBtn2Click(Sender: TObject);form2.tag=0 then Application.Terminate;;

Полный код формы приведен в приложении 2.

5.4 Разработка формы Добавление товара

Создадим форму согласно рис. 18.

Рис. 18 Добавление товара

Для кнопки Добавить пропишем следующий исходный код:

procedure TForm5.Button1Click(Sender: TObject);.Table1.insert;.Table1.FieldByName('Name').Asstring :=edit2.Text;.Table1.FieldByName('Trademark').Asstring := edit3.Text;.Table1.FieldByName('Kind').Asstring := edit4.Text;.Table1.FieldByName('Ed_izm').Asstring := combobox1.Text;.Table1.FieldByName('Cena').AsFloat:=strtofloat(edit6.Text);.Table1.FieldByName('Kol_vo').Asinteger:=0;.table1.Next;.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Close;

Для кнопки Отмена:TForm5.Button2Click(Sender: TObject);

begin.Close;

Для удобного перехода по полям с помощью нажатия клавиши Enter для полей ввода пропишем следующую процедуру:

procedure TForm5.Edit2KeyPress(Sender: TObject; var Key: Char);key=#13 then edit3.SetFocus;

end;

Аналогично для других полей.

Полный код формы приведен в приложении 5.

5.5 Разработка формы Изменение товара

Создадим форму согласно рис. 19.

Рис. 19. Изменение формы

Для кнопки Изменить пропишем следующий исходный код:

procedure TForm6.Button1Click(Sender: TObject);.Table1.edit;.Table1.FieldByName('Name').Asstring :=edit2.Text;.Table1.FieldByName('Trademark').Asstring := edit3.Text;.Table1.FieldByName('Kind').Asstring := edit4.Text;.Table1.FieldByName('Ed_izm').Asstring := combobox1.Text;.Table1.FieldByName('Cena').AsFloat:=strtofloat(edit6.Text);.table1.post;.Close;

Для кнопки Отмена:TForm6.Button2Click(Sender: TObject);

begin.Close;

Для перехода по записям таблицы предназначены кнопки Назад и Вперед. Для них соответственно пропишем следующие процедуры:TForm6.Button4Click(Sender: TObject);

begin.Table1.Prior;.edit2.Text:=form1.Table1.FieldByName('Name').AsString;.edit3.Text:=form1.Table1.FieldByName('Trademark').AsString;.edit4.Text:=form1.Table1.FieldByName('Kind').AsString;.combobox1.Text:=form1.Table1.FieldByName('Ed_izm').AsString;.edit6.Text:= floattostr(form1.Table1.FieldByName('Cena').AsFloat);;TForm6.Button3Click(Sender: TObject);.Table1.Next;.edit2.Text:=form1.Table1.FieldByName('Name').AsString;.edit3.Text:=form1.Table1.FieldByName('Trademark').AsString;.edit4.Text:=form1.Table1.FieldByName('Kind').AsString;.combobox1.Text:=form1.Table1.FieldByName('Ed_izm').AsString;.edit6.Text:= floattostr(form1.Table1.FieldByName('Cena').AsFloat);

end;

Так как список единиц измерения, фирм-производителей, вида товаров находится в файлах, перед созданием формы необходимо загрузить их в поля выбора с помощью следующего исходного кода:

procedure TForm6.FormActivate(Sender: TObject);.Items.LoadFromFile(path+'edin.txt');.Items.LoadFromFile(path+'firm.txt');.Items.LoadFromFile(path+'vid.txt');

end;

Полный код формы приведен в приложении 6.

5.6 Разработка формы Смена пароля

Пароль как на режим Администратор, так и на режим Кассир можно сменить с помощью формы. (Рис. 20).

Рис. 20. Смена пароля

Для кнопки Сменить пароль Администратора пропишем следующий исходный код:

procedure TForm4.Button1Click(Sender: TObject);edit1.Text=form2.paroladmin thenform2.paroladmin:=edit2.text;('пароль принят');showmessage('пароль не верен');;

Для кнопки Сменить пароль Кассира пропишем следующий исходный код:

procedure TForm4.Button2Click(Sender: TObject);edit3.Text=form2.parolkassir then begin.parolkassir:=edit4.text;('пароль принят');showmessage('пароль не верен');

end;

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

procedure TForm4.WriteParams;IniFile:TIniFile;Path:String;:=Application.ExeName;:=ExtractFileDir(Path);:=TIniFile.Create(Path+'project.ini');.WriteString('FORM1','parol1',form2.parolkassir);.WriteString('FORM1','parol2',form2.paroladmin);

IniFile.Free;;

При закрытии создадим вызов процедуры WriteParams.

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

begin;;

Полный код формы приведен в приложении 4.

5.7 Разработка формы Единицы измерения

Для работы со списком единиц измерения создадим следующую форму (рис. 21).

Рис. 21. Единицы измерения

Для кнопки Добавить пропишем следующий код:

procedure TForm10.Button1Click(Sender: TObject);.Items.Add(edit1.Text);.Text:='';.SetFocus;

Для кнопки Удалить:TForm10.Button3Click(Sender: TObject);.Items.Delete(listbox1.ItemIndex);;

Для кнопки СохранитьTForm10.Button2Click(Sender: TObject);.Items.SaveToFile(path+'edin.txt');

form10.close;

Полный код формы приведен в приложении 8.

Аналогично создаются формы для работы со списком фирм-производителей и видом товара. Листинг формы для изменения списка фирм-производителей приведен в приложении 10. Листинг формы для изменения списка вида товаров приведен в приложении 11.

Вызов формы единицы измерения осуществляется через пункт главного меню Сервис-Добавить-Единицы измерения, где прописывается следующий код:TForm1.N21Click(Sender: TObject);.show;

Полный код формы приведен в приложении 1.

5.8 Разработка отчетов

Для создания отчета создадим следующую форму (рис. 22).

Рис. 22. Отчет

Для отображения текущей даты на отчете пропишем следующую процедуру:

procedure TForm7.FormCreate(Sender: TObject);.Caption:=datetostr(now);

end;

Полный листинг формы приведен в приложении 7.

Для пункта меню Отчет - по присутствующим товарам пропишем следующую процедуру:

procedure TForm1.N13Click(Sender: TObject);.show;.Close;.SQL.Clear;.SQL.Add('select * from supermarket');.SQL.Add('where kol_vo>0');.Open;.quickrep1.Preview;.Close;

Для пункта меню Отчет - по отсутствующим товарам пропишем следующую процедуру:

procedure TForm1.N14Click(Sender: TObject);.show;.Close;.SQL.Clear;.SQL.Add('select * from supermarket');.SQL.Add('where kol_vo=0');.Open;.QRLabel2.Caption:='по отсутствующим товарам ';.quickrep1.Preview;.Close;

Для пункта меню Отчет - Полный отчет пропишем следующую процедуру:

procedure TForm1.N15Click(Sender: TObject);.show;.Close;.SQL.Clear;.SQL.Add('select * from supermarket');

query1.Open;.QRLabel2.Caption:='по всем товарам, имеющимся в базе данных ';

form7.quickrep1.Preview;.Close;

5.9 Разработка формы режима Кассир

Создадим следующую форму (Рис.23).

Рис. 23. Режим Кассира

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

Пропишем процедуру при создании формы:

procedure TForm3.FormCreate(Sender: TObject);.table2.Active:=true;.table1.Active:=true;.Table1.DatabaseName:=Path;.table1.tablename:='chek.db';.Active:=true;.Edit;not(Table1.IsEmpty) do table1.Delete;

end;

Для поля Edit1 (Код товара) пропишем следующую процедуру:

procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);key=#13 then beginnot(form1.Table1.Locate('kod',edit1.Text,[]))begin showmessage('Код не существует'); edit1.Text:=''; end.SetFocus;;;

Если введенный код товара не существует, то программа выдаст соответствующее сообщение, если существует то, фокус перейдет к следующему полю ввода.

Для поля ввода Edit2 пропишем следующую процедуру:

procedure TForm3.Edit2KeyPress(Sender: TObject; var Key: Char);key=#13 then beginstrtofloat(edit2.Text)<= form1.Table1.FieldByName('Kol_vo').AsFloatbegin.insert;.FieldByName('kod').AsInteger :=form1.Table1.FieldValues['kod'];.FieldByName('Name').Asstring :=form1.Table1.FieldValues['name'];.FieldByName('Cena').Asstring :=form1.Table1.FieldValues['cena'];.FieldByName('trademark').Asstring :=form1.Table1.FieldValues['trademark'];.FieldByName('Kol_vo').AsFloat:=strtofloat(edit2.Text);.FieldByName('Summa').AsFloat:=Table1.FieldByName('Kol_vo').AsFloat*Table1.FieldByName('Cena').AsFloat;.Table1.Edit;.Table1.FieldByName('Kol_vo').AsFloat:= form1.Table1.FieldByName('Kol_vo').AsFloat-strtofloat(edit2.Text);.Table1.Post ;.Prior;:=0;not(Table1.eof) do begin:=s+Table1.FieldByName('Summa').AsFloat;.Next;showmessage('не хватает количества');.Caption:=floattostr(s);.Text:='';.Text:='';.SetFocus;

end;

В данной процедуре при нажатии в поле ввода клавиши Enter происходит следующие действия:

.        Определяется не меньше ли, количество товара приобретенного пользователем, имеющегося в базе.

.        Если товара достаточно, то производится запись в таблицу Чек.

.        Производится расчет общей суммы.

.        Если товара недостаточно, выводится соответствующее сообщение

При нажатии кнопки Печать :TForm3.Button2Click(Sender: TObject);.show;.QuickRep1.Preview;

form14.close;;

Для Чека создадим следующую форму (рис. 24):

Рис. 24. Отчет «Чек»

Для формы отчета Чек пропишем следующую процедуру:
procedure TForm14.FormShow(Sender: TObject);

begin.Caption:=datetimetostr(now);.DataField:='kod';.DataField:='name';.DataField:='trademark';.DataField:='cena';.DataField:='kol_vo';.DataField:='summa';.Caption:=floattostr(s);.Caption:=form3.Edit3.Text;.Caption:=floattostr(strtofloat(form3.Edit3.Text)-s);

end;

Полный листинг формы приведен в приложении 12.

Для создания нового чека пропишем следующую процедуру:

procedure TForm3.Button1Click(Sender: TObject);.Edit;not(Table1.IsEmpty) do table1.Delete;.SetFocus ;.Caption:='';:=0;.Text:='';;

Полный листинг формы приведен в приложении 3.

ЗАКЛЮЧЕНИЕ

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

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

Выбранная в данной дипломной работе структурная схема автоматизированной системы управления супермаркетом достаточно удобна как для рядового сотрудника, так и для инженера АСУ.

Центром любой подобной АСУ всегда является мощный энергонезависимый сервер, хранящий информацию о деятельности всех подсистем супермаркета в виде совокупности распределенных баз данных. Каждая база данных содержит одну или несколько информационных таблиц, содержание которых определяется названием БД и может различаться по внутренним характеристикам; одна и та же база данных может использоваться для работы различных подсистем путем выделения из нее соответствующей информационной таблицы.

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

В качестве среды разработки была выбрана среда Delphi.- это среда разработки, используемой прежде всего для создания и поддержки приложений, предназначенных как для отдельных персональных компьютеров, так и для серверов. Delphi, как и разработанные с ее помощью приложения, могут функционировать под практически любой 32 разрядной операционной системой типа Windows. Создать саму БД (не СУБД) средствами Delphi очень сложно, даже невозможно. Если выбрать двух- или трехзвенную архитектуру, не обойтись без сервера БД, который создать собственными силами очень трудно (да и ни к чему, если на рынке предлагаются десятки таких программ, а в Интернете при желании можно найти и бесплатный, но вполне приличный сервер MySQL).

Если речь идет о файл-серверной БД, то и здесь понадобятся специальные средства. В Delphi для этих целей обычно используется утилита Database Desktop.

База данных АСУ «Супермаркет» состоит из 3 таблиц. Связь между таблицами осуществляется посредством процедур.

Программа АСУ «Супермаркет» имеет два режима работы: режим кассира и режим администратора.

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

Режим Кассир предназначен для фиксирования операции реализации товара в виде чека.

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.       Smtrade.ru

2.       Auit.ru

3.       Equipnet.ru <http://www.equipnet.ru/>

4.       smartcode.ru

.        Электронный журнал «Товар лицом»

.        Чертовской В.Д. Базы и банки данных.

.        Проектирование баз данных СУБД MS Access/ Гринченко н.Н. и др./ М.: Горячая линия-Телеком, 2004.

8.       Информационные системы/ В.Н. Петров/учебник/ПИТЕРСпб 2002г.

.        Информационные технологии в экономике и управлении. Учебник/ Козырев А.А./ Спб.: Питер, 2001.

.        Информационные системы в экономике/ Патрушина С.М./ М.: ИКЦ «МарТ», 2004.

.        Окулов С.М. Основы программирования. Москва. 2002г.-424с.

.        Культин Н.Б. Программирование в Turbo Pascal 7.9 и Delphi. Санкт-Петербург, 2001г.

13.     Александровский А.Д. Delphi 5. Разработка корпоративных приложений. Изд.”Для программистов” М.-2000г.

14.     Брябкин В.М. “Программное обеспечение персональных ЭВМ”. М.-1990г.

15.     Культин Н.Б. Delphi 6. Программирование на Object Pascal.

.        Периодическая литература «Мир ПК», «КомпьюПресс».

.        Гофман В.Е., А.Д. Хомоненко. «Delphi 7».

.        Кузнецов С.Д. «Основы современных баз данных», http://www.citforum.ru/database/osbd/contents.shtml

.        Карпова Т. «Базы данных. Модели, разработка, реализация», С-Петербург, 2001.

.        Кириллов В.В. Структуризованный язык запросов (SQL). - СПб.: ИТМО, 1994. - 80 с.

.        Кириллов В.В. «Структурированный язык запросов (SQL)». - СПб.: ИТМО, 1994

.        Культин. Н.Б.»Delphi 7 - программирование на Object Pascal.»

.        Тиори Т., Фрай Дж.» Проектирование структур баз данных». В 2 кн., - М.: Мир, 1985

.        Тиори Т., Фрай Дж. Проектирование структур баз данных. В 2 кн., - М.: Мир, 1985. Кн. 1. - 287 с.: Кн. 2. - 320 с.

.        Фараонов В.В., «Delphi 6.0», учебный курс, ISBN 5-8952-020-4, 400 с.

.        Фаронов В. «Система программирования Delphi», Санкт-Петербург, «БХВ-Петербург», 2005

.        Фаронов В. «Программирование баз данных в Delphi 7».

.        Хаббард Дж. «Автоматизированное проектирование баз данных». - М.: Мир, 1999

.        Эрик Хармон «Руководство разработчика баз данных в Delphi/Kylix», Москва,2002.

ПРИЛОЖЕНИЯ


ПРИЛОЖЕНИЕ 1. ЛИСТИНГ UNIT1

unit Unit1;

interface, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DBTables, DB, Grids, DBGrids, Menus,inifiles, StdCtrls,comobj,, ExtCtrls, OleCtrls;= class(TForm): TDataSource;: TDBGrid;: TTable;: TQuery;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TTable;: TQuery;: TDataSource;: TDBGrid;: TLabel;: TLabel;: TMenuItem;: TMenuItem;: TButton;: TButton;: TButton;: TButton;Name: TStringField;Trademark: TStringField;Kind: TStringField;Ed_izm: TStringField;Opisanie: TMemoField;Cena: TFloatField;Kol_vo: TIntegerField;kod: TAutoIncField;: TMenuItem;Name: TIntegerField;Kod: TAutoIncField;Kol_vo: TFloatField;Data_post: TDateField;Srok_god: TDateField;Naimen: TStringField;: TMenuItem;: TMenuItem;: TImage;FormCreate(Sender: TObject);N6Click(Sender: TObject);N7Click(Sender: TObject);N9Click(Sender: TObject);N11Click(Sender: TObject);N2Click(Sender: TObject);N3Click(Sender: TObject);N4Click(Sender: TObject);N13Click(Sender: TObject);N14Click(Sender: TObject);N15Click(Sender: TObject);N16Click(Sender: TObject);N21Click(Sender: TObject);N19Click(Sender: TObject);N17Click(Sender: TObject);N18Click(Sender: TObject);FormActivate(Sender: TObject);N22Click(Sender: TObject);N23Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;:string;Unit2, Unit4, Unit5, Unit6, Unit3, Unit7, Unit10, Unit11, Unit12,;

{$R *.dfm}TForm1.FormCreate(Sender: TObject);.ShowMainForm:=false;:=Application.ExeName; // полный путь и название запущенной программы:=ExtractFileDir(Path); // отбрасываем название программы. Остается путь.

if Path[Length(Path)]<>'\' then Path:=Path+'\'; // если последний символ не \ то добавить его

{Последняя строка нужна для присвоения последнего символа '\',

потому что при обрезке файла 'C:\PROG.EXE' получим 'C:\',

а при обрезке 'C:\WINDOWS\PROG.EXE' получим 'C:\WINDOWS' }

form1.table1.databasename:= Path;.table1.tablename:='supermarket.db';.Query1.DatabaseName:=Path;.table2.databasename:= Path;.table2.tablename:='postuplenie.DB';.Query2.DatabaseName:=Path;.Active:=true;;TForm1.N6Click(Sender: TObject);.Active:=true;.Active:=true;;TForm1.N7Click(Sender: TObject);.Active:=false;.Active:=false;;TForm1.N9Click(Sender: TObject);.Close;TForm1.N11Click(Sender: TObject);.Show;;TForm1.N2Click(Sender: TObject);.Show;TForm1.N3Click(Sender: TObject);.Table1.Delete;TForm1.N4Click(Sender: TObject);.Show;.edit2.Text:=form1.Table1.FieldByName('Name').AsString;.edit3.Text:=form1.Table1.FieldByName('Trademark').AsString;.edit4.Text:=form1.Table1.FieldByName('Kind').AsString;.combobox1.Text:=form1.Table1.FieldByName('Ed_izm').AsString;.edit6.Text:= floattostr(form1.Table1.FieldByName('Cena').AsFloat);;TForm1.N13Click(Sender: TObject);.show;.Close;.SQL.Clear;.SQL.Add('select * from supermarket');.SQL.Add('where kol_vo>0');.Open;.quickrep1.Preview;.Close;TForm1.N14Click(Sender: TObject);.show;.Close;.SQL.Clear;.SQL.Add('select * from supermarket');.SQL.Add('where kol_vo=0');.Open;.QRLabel2.Caption:='по отсутствующим товарам ';.quickrep1.Preview;.Close;TForm1.N15Click(Sender: TObject);.show;.Close;.SQL.Clear;.SQL.Add('select * from supermarket');1.Open;

form7.QRLabel2.Caption:='по всем товарам, имеющимся в базе данных ';

form7.quickrep1.Preview;.Close;TForm1.N16Click(Sender: TObject);.show;.Close;.SQL.Clear;.SQL.Add('select * from supermarket');.SQL.Add('where Srok_god<"'+datetostr(date)+'"');.Open;.QRLabel2.Caption:='по отсутствующим товарам ';.quickrep1.Preview;.Close;TForm1.N21Click(Sender: TObject);.show;TForm1.N19Click(Sender: TObject);.Show;TForm1.N17Click(Sender: TObject);,Sheet,Colum:Variant;,i:Integer;:=CreateOleObject('Excel.Application');.Visible:=true;.Workbooks.Add(-4167) ;.Workbooks[1].Worksheets[1].Name:='Отчет';:=XLApp.Workbooks[1].Worksheets[1].Columns;.columns[1].ColumnWidth:=20;.columns[2].ColumnWidth:=20;.columns[3].ColumnWidth:=20;.columns[4].ColumnWidth:=20;.columns[5].ColumnWidth:=20;.columns[6].ColumnWidth:=20;.columns[7].ColumnWidth:=20;:=XLApp.Workbooks[1].Worksheets[1].Rows;.Rows[2].Font.Bold:=true;.Rows[1].Font.Bold:=true;.Rows[1].Font.Color:=clBlue;.Rows[1].Font.Size:=14;:=XLApp.Workbooks[1].Worksheets[1];.Cells[1,2]:='Данные о товаре';

Sheet.Cells[2,1]:='Код товара';

Sheet.Cells[2,2]:= 'Наименование' ;

Sheet.Cells[2,3]:='Фирма-производитель';

Sheet.Cells[2,4]:='Вид';

Sheet.Cells[2,5]:='Единица измерения';

Sheet.Cells[2,6]:='Цена за ед';

Sheet.Cells[2,7]:='Количество';:=3;.First;i:=0 to table1.RecordCount-1 do.Cells[index,1]:=table1.Fieldbyname('kod').Asinteger;.Cells[index,2]:=table1.Fieldbyname('name').AsString;.Cells[index,3]:=table1.Fieldbyname('trademark').AsString;.Cells[index,4]:=table1.Fieldbyname('kind').AsString;. Cells [index, 5] :=table1.Fieldbyname('ed_izm').AsString;. Cells [index, 6] :=table1.Fieldbyname('cena').Asinteger;. Cells [index, 7] :=table1.Fieldbyname('kol_vo').Asinteger;( index) ;.Next;;;TForm1.N18Click(Sender: TObject);,Sheet,Colum:Variant;,i:Integer;:=CreateOleObject('Excel.Application');.Visible:=true;.Workbooks.Add(-4167) ;.Workbooks[1].Worksheets[1].Name:='Отчет';:=XLApp.Workbooks[1].Worksheets[1].Columns;.columns[1].ColumnWidth:=20;.columns[2].ColumnWidth:=20;.columns[3].ColumnWidth:=20;.columns[4].ColumnWidth:=20;.columns[5].ColumnWidth:=20;:=XLApp.Workbooks[1].Worksheets[1].Rows;.Rows[2].Font.Bold:=true;.Rows[1].Font.Bold:=true;.Rows[1].Font.Color:=clBlue;.Rows[1].Font.Size:=14;:=XLApp.Workbooks[1].Worksheets[1];.Cells[1,2]:='Данные о поступлении';

Sheet.Cells[2,1]:='№п\п';.Cells[2,2]:= 'Код товара' ;.Cells[2,3]:='Наименование';.Cells[2,4]:='Дата поступления';;

Sheet.Cells[2,5]:='Количество';

index:=3;.First;i:=0 to table2.RecordCount-1 do.Cells[index,1]:=table2.Fieldbyname('kod').Asinteger;.Cells[index,2]:=table2.Fieldbyname('name').Asinteger;.Cells[index,3]:=table2.Fieldbyname('naimen').AsString;.Cells[index,4]:=table2.Fieldbyname('data_post').AsDateTime;. Cells [index, 5] :=table2.Fieldbyname('kol_vo').Asinteger;( index) ;.Next;;;TForm1.FormActivate(Sender: TObject);.ListBox1.Items.LoadFromFile(path+'edin.txt');.Columns[4].PickList:=form10.ListBox1.Items;;TForm1.N22Click(Sender: TObject);.show;TForm1.N23Click(Sender: TObject);.show;.

ПРИЛОЖЕНИЕ 2. ЛИСТИНГ UNIT2

база данное программный delphi

unit Unit2;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Buttons, inifiles, jpeg, ExtCtrls;= class(TForm): TComboBox;: TEdit;: TBitBtn;: TBitBtn;: TLabel;: TLabel;: TImage;ReadParams; // процедура чтения параметровBitBtn1Click(Sender: TObject);BitBtn2Click(Sender: TObject);FormClose(Sender: TObject; var Action: TCloseAction);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations },parolkassir:string[5];;: TForm2;:integer;Unit1, Unit3;

{$R *.dfm}TForm2.BitBtn1Click(Sender: TObject);combobox1.Text='администратор' thenedit1.text=paroladmin then1.Show; //показать главное окно

form2.tag:=1;

form2.close;showmessage('Пароль не верен');combobox1.Text='кассир' thenedit1.text=parolkassir then

Form3.Show; //показать главное окно

form2.Tag:=1;.close;showmessage('Пароль не верен');;TForm2.BitBtn2Click(Sender: TObject);form2.tag=0 then Application.Terminate;;TForm2.FormClose(Sender: TObject; var Action: TCloseAction);form2.tag=0 then Application.Terminate;;TForm2.ReadParams;IniFile:TIniFile;Path:String; // объявление переменной, через которую будут обрабатываться данные

Path:=Application.ExeName; // полный путь и название запущенной программы

Path:=ExtractFileDir(Path); // отбрасываем название программы. Остается путь.

if Path[Length(Path)]<>'\' then Path:=Path+'\'; // если последний символ не \ то добавить его

{Последняя строка нужна для присвоения последнего символа '\',

потому что при обрезке файла 'C:\PROG.EXE' получим 'C:\',

а при обрезке 'C:\WINDOWS\PROG.EXE' получим 'C:\WINDOWS' }

IniFile:=TIniFile.Create(Path+'project.ini');

//IniFile:=TIniFile.Create('project.ini'); // создаем переменную:=IniFile.ReadString('FORM1','parol1','');:=IniFile.ReadString('FORM1','parol2','');.Free;;TForm2.FormCreate(Sender: TObject);Path:String;;;.

ПРИЛОЖЕНИЕ 3. ЛИСТИНГ UNIT3

Unit3;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, StdCtrls, DB, DBTables, ExtCtrls, DBCtrls,, RpCon, RpConDS, RpConBDE, RpRenderCanvas, RpRenderPrinter,, RpRender, RpRenderText, jpeg;= class(TForm): TDBGrid;: TEdit;: TTable;: TDBGrid;: TDataSource;: TLabel;: TButton;: TLabel;: TEdit;: TLabel;: TLabel;: TDBNavigator;: TButton;: TImage;: TLabel;: TEdit;FormClose(Sender: TObject; var Action: TCloseAction);FormCreate(Sender: TObject);Button1Click(Sender: TObject);Edit1Change(Sender: TObject);Edit1KeyPress(Sender: TObject; var Key: Char);FormShow(Sender: TObject);Edit2KeyPress(Sender: TObject; var Key: Char);Button2Click(Sender: TObject);Edit3KeyPress(Sender: TObject; var Key: Char);

{ Private declarations }

{ Public declarations };: TForm3;:real;

Unit1, Unit2, Unit4, Unit14;

{$R *.dfm}TForm3.FormClose(Sender: TObject; var Action: TCloseAction);.Terminate;;TForm3.FormCreate(Sender: TObject);.table2.Active:=true;.table1.Active:=true;.Table1.DatabaseName:=Path;.table1.tablename:='chek.db';.Active:=true;.Edit;not(Table1.IsEmpty) do table1.Delete;;TForm3.Button1Click(Sender: TObject);.Edit;not(Table1.IsEmpty) do table1.Delete;.SetFocus ;.Caption:='';:=0;.Text:='';;TForm3.Edit1Change(Sender: TObject);

//form1.Table1.SetKey;

//form1.Table1.FieldByName('kod').Asinteger := strtoint(Edit1.Text);

//form1.Table1.GotoKey;;TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);key=#13 then beginnot(form1.Table1.Locate('kod',edit1.Text,[]))begin showmessage('Код не существует'); edit1.Text:=''; end.SetFocus;;;TForm3.FormShow(Sender: TObject);.SetFocus;TForm3.Edit2KeyPress(Sender: TObject; var Key: Char);key=#13 then beginstrtofloat(edit2.Text)<= form1.Table1.FieldByName('Kol_vo').AsFloatbegin.insert;.FieldByName('kod').AsInteger :=form1.Table1.FieldValues['kod'];.FieldByName('Name').Asstring :=form1.Table1.FieldValues['name'];.FieldByName('Cena').Asstring :=form1.Table1.FieldValues['cena'];.FieldByName('trademark').Asstring :=form1.Table1.FieldValues['trademark'];.FieldByName('Kol_vo').AsFloat:=strtofloat(edit2.Text);.FieldByName('Summa').AsFloat:=Table1.FieldByName('Kol_vo').AsFloat*Table1.FieldByName('Cena').AsFloat;.Table1.Edit;.Table1.FieldByName('Kol_vo').AsFloat:= form1.Table1.FieldByName('Kol_vo').AsFloat-strtofloat(edit2.Text);.Table1.Post ;.Prior;:=0;not(Table1.eof) do begin:=s+Table1.FieldByName('Summa').AsFloat;.Next;showmessage('не хватает количества');.Caption:=floattostr(s);.Text:='';.Text:='';.SetFocus;;TForm3.Button2Click(Sender: TObject);.show;.QuickRep1.Preview;.close;;

TForm3.Edit3KeyPress(Sender: TObject; var Key: Char);key=#13 then button2.Click;

.

ПРИЛОЖЕНИЕ 4. ЛИСТИНГ UNIT4

Unit4;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, inifiles, ExtCtrls, jpeg;= class(TForm): TEdit;: TEdit;: TButton;: TBevel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TEdit;: TEdit;: TButton;: TImage;Button1Click(Sender: TObject);WriteParams;FormClose(Sender: TObject; var Action: TCloseAction);Button2Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm4;Unit2;

{$R *.dfm}TForm4.Button1Click(Sender: TObject);edit1.Text=form2.paroladmin thenform2.paroladmin:=edit2.text;('пароль принят');showmessage('пароль не верен');;TForm4.WriteParams;IniFile:TIniFile;Path:String;

Path:=Application.ExeName; // полный путь и название запущенной программы

Path:=ExtractFileDir(Path); // отбрасываем название программы. Остается путь.

if Path[Length(Path)]<>'\' then Path:=Path+'\'; // если последний символ не \ то добавить его

{Последняя строка нужна для присвоения последнего символа '\',

потому что при обрезке файла 'C:\PROG.EXE' получим 'C:\',

а при обрезке 'C:\WINDOWS\PROG.EXE' получим 'C:\WINDOWS' }

//IniFile:=TIniFile.Create('project.ini');:=TIniFile.Create(Path+'project.ini');.WriteString('FORM1','parol1',form2.parolkassir);.WriteString('FORM1','parol2',form2.paroladmin);.Free;;TForm4.FormClose(Sender: TObject; var Action: TCloseAction);;;TForm4.Button2Click(Sender: TObject);edit3.Text=form2.parolkassir then begin.parolkassir:=edit4.text;('пароль принят');showmessage('пароль не верен');;.

ПРИЛОЖЕНИЕ 5. ЛИСТИНГ UNIT5

Unit5;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ComCtrls, jpeg, ExtCtrls;TForm5 = class(TForm): TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TEdit;: TEdit;: TButton;: TButton;: TComboBox;: TImage;: TComboBox;: TComboBox;Button1Click(Sender: TObject);Button2Click(Sender: TObject);Edit2KeyPress(Sender: TObject; var Key: Char);Edit3KeyPress(Sender: TObject; var Key: Char);Edit4KeyPress(Sender: TObject; var Key: Char);Edit5KeyPress(Sender: TObject; var Key: Char);DateTimePicker1Change(Sender: TObject);FormActivate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm5;Unit1, Unit2, Unit3, Unit4;

{$R *.dfm}TForm5.Button1Click(Sender: TObject);.Table1.insert;.Table1.FieldByName('Name').Asstring :=edit2.Text;.Table1.FieldByName('Trademark').Asstring := edit3.Text;.Table1.FieldByName('Kind').Asstring := edit4.Text;.Table1.FieldByName('Ed_izm').Asstring := combobox1.Text;.Table1.FieldByName('Cena').AsFloat:=strtofloat(edit6.Text);.Table1.FieldByName('Kol_vo').Asinteger:=0;.table1.Next;.Text:='';.Text:='';.Text:='';.Text:='';.Text:='';.Close;TForm5.Button2Click(Sender: TObject);.Close;TForm5.Edit2KeyPress(Sender: TObject; var Key: Char);key=#13 then edit3.SetFocus;;TForm5.Edit3KeyPress(Sender: TObject; var Key: Char);key=#13 then edit4.SetFocus;;TForm5.Edit4KeyPress(Sender: TObject; var Key: Char);key=#13 then combobox1.SetFocus;;TForm5.Edit5KeyPress(Sender: TObject; var Key: Char);key=#13 then edit6.SetFocus;;TForm5.DateTimePicker1Change(Sender: TObject);.SetFocus;;TForm5.FormActivate(Sender: TObject);.Items.LoadFromFile(path+'edin.txt');.Items.LoadFromFile(path+'firm.txt');.Items.LoadFromFile(path+'vid.txt');;.

ПРИЛОЖЕНИЕ 6. ЛИСТИНГ UNIT6

Unit6;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ComCtrls, jpeg, ExtCtrls;= class(TForm): TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TEdit;: TEdit;: TButton;: TButton;: TComboBox;: TButton;: TButton;: TImage;: TComboBox;: TComboBox;Button1Click(Sender: TObject);Button2Click(Sender: TObject);Edit2KeyPress(Sender: TObject; var Key: Char);Edit3KeyPress(Sender: TObject; var Key: Char);Edit4KeyPress(Sender: TObject; var Key: Char);Edit5KeyPress(Sender: TObject; var Key: Char);DateTimePicker1Change(Sender: TObject);Button3Click(Sender: TObject);Button4Click(Sender: TObject);FormActivate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm6;Unit1, Unit5;

{$R *.dfm}TForm6.Button1Click(Sender: TObject);.Table1.edit;.Table1.FieldByName('Name').Asstring :=edit2.Text;.Table1.FieldByName('Trademark').Asstring := edit3.Text;.Table1.FieldByName('Kind').Asstring := edit4.Text;.Table1.FieldByName('Ed_izm').Asstring := combobox1.Text;.Table1.FieldByName('Cena').AsFloat:=strtofloat(edit6.Text);.table1.post;.Close;TForm6.Button2Click(Sender: TObject);.Close;TForm6.Edit2KeyPress(Sender: TObject; var Key: Char);key=#13 then edit3.SetFocus;;TForm6.Edit3KeyPress(Sender: TObject; var Key: Char);key=#13 then edit4.SetFocus;;TForm6.Edit4KeyPress(Sender: TObject; var Key: Char);key=#13 then combobox1.SetFocus;;TForm6.Edit5KeyPress(Sender: TObject; var Key: Char);key=#13 then edit6.SetFocus;;TForm6.DateTimePicker1Change(Sender: TObject);.SetFocus;;TForm6.Button3Click(Sender: TObject);.Table1.Next;.edit2.Text:=form1.Table1.FieldByName('Name').AsString;.edit3.Text:=form1.Table1.FieldByName('Trademark').AsString;.edit4.Text:=form1.Table1.FieldByName('Kind').AsString;.combobox1.Text:=form1.Table1.FieldByName('Ed_izm').AsString;.edit6.Text:= floattostr(form1.Table1.FieldByName('Cena').AsFloat);;TForm6.Button4Click(Sender: TObject);.Table1.Prior;.edit2.Text:=form1.Table1.FieldByName('Name').AsString;.edit3.Text:=form1.Table1.FieldByName('Trademark').AsString;.edit4.Text:=form1.Table1.FieldByName('Kind').AsString;.combobox1.Text:=form1.Table1.FieldByName('Ed_izm').AsString;.edit6.Text:= floattostr(form1.Table1.FieldByName('Cena').AsFloat);;TForm6.FormActivate(Sender: TObject);.Items.LoadFromFile(path+'edin.txt');.Items.LoadFromFile(path+'firm.txt');.Items.LoadFromFile(path+'vid.txt');;

.

ПРИЛОЖЕНИЕ 7. ЛИСТИНГ UNIT7

Unit7;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, QRCtrls, jpeg, QuickRpt, ExtCtrls;TForm7 = class(TForm): TQuickRep;: TQRBand;: TQRBand;: TQRBand;: TQRBand;: TQRLabel;: TQRImage;: TQRLabel;: TQRLabel;: TQRDBText;: TQRDBText;: TQRLabel;: TQRLabel;: TQRDBText;: TQRLabel;: TQRDBText;: TQRLabel;: TQRLabel;: TQRDBText;: TQRLabel;: TQRDBText;: TQRLabel;FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm7;Unit1;

{$R *.dfm}TForm7.FormCreate(Sender: TObject);.Caption:=datetostr(now);;.

ПРИЛОЖЕНИЕ 8. ЛИСТИНГ UNIT10

Unit10;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, jpeg, ExtCtrls;= class(TForm): TListBox;: TEdit;: TLabel;: TButton;: TButton;: TButton;: TImage;FormCreate(Sender: TObject);Button1Click(Sender: TObject);Button2Click(Sender: TObject);Edit1KeyPress(Sender: TObject; var Key: Char);Button3Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm10;Unit1;

{$R *.dfm}TForm10.FormCreate(Sender: TObject);.Items.LoadFromFile('edin.txt');;TForm10.Button1Click(Sender: TObject);.Items.Add(edit1.Text);.Text:='';.SetFocus;TForm10.Button2Click(Sender: TObject);.Items.SaveToFile(path+'edin.txt');.close;TForm10.Edit1KeyPress(Sender: TObject; var Key: Char);key=#13 then button1.SetFocus;TForm10.Button3Click(Sender: TObject);.Items.Delete(listbox1.ItemIndex);;.

ПРИЛОЖЕНИЕ 9. ЛИСТИНГ UNIT11

Unit11;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, DB, DBTables, Grids, DBGrids, ComCtrls, StdCtrls, ExtCtrls,, jpeg;= class(TForm): TLabel;: TLabel;: TEdit;: TButton;: TButton;: TComboBox;: TLabel;: TEdit;: TImage;Button1Click(Sender: TObject);Button2Click(Sender: TObject);ComboBox1Change(Sender: TObject);FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm11;Unit1;

{$R *.dfm}TForm11.Button1Click(Sender: TObject);.Table2.insert;.Table2.FieldByName('Name').Asinteger :=strtoint(edit1.Text);.Table2.FieldByName('Naimen').Asstring := combobox1.Text;.Table2.FieldByName('Kol_vo').Asinteger := strtoint(edit7.Text);.Table1.Edit;.Table1.FieldByName('Kol_vo').AsInteger:= form1.Table1.FieldByName('Kol_vo').AsInteger+ strtoint(edit7.Text);.Table1.post;.Table2.FieldByName('data_post').AsDateTime:=now();.table2.Next;.Text:='';.Text:='';.Text:='';;TForm11.Button2Click(Sender: TObject);;;TForm11.ComboBox1Change(Sender: TObject);.Table1.Locate('name',combobox1.Text,[]);.Text:=inttostr(form1.Table1.FieldValues['kod'] );;TForm11.FormShow(Sender: TObject);.Table1.First;.Items.Clear;not(form1.Table1.eof) do begin.Items.Add(form1.Table1.FieldByName('name').Asstring);.table1.Next;;;.

ПРИЛОЖЕНИЕ 10. ЛИСТИНГ UNIT12

Unit12;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, jpeg, ExtCtrls;= class(TForm): TImage;: TLabel;: TListBox;: TEdit;: TButton;: TButton;: TButton;FormCreate(Sender: TObject);Button1Click(Sender: TObject);Button2Click(Sender: TObject);Edit1KeyPress(Sender: TObject; var Key: Char);Button3Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm12;Unit10, Unit1;

{$R *.dfm}TForm12.FormCreate(Sender: TObject);.Items.LoadFromFile('firm.txt');;TForm12.Button1Click(Sender: TObject);.Items.Add(edit1.Text);.Text:='';.SetFocus;TForm12.Button2Click(Sender: TObject);.Items.SaveToFile(path+'firm.txt');.close;TForm12.Edit1KeyPress(Sender: TObject; var Key: Char);key=#13 then button1.SetFocus;TForm12.Button3Click(Sender: TObject);.Items.Delete(listbox1.ItemIndex);;.

ПРИЛОЖЕНИЕ 11. ЛИСТИНГ UNIT13

Unit13;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, jpeg, ExtCtrls;= class(TForm): TImage;: TLabel;: TListBox;: TEdit;: TButton;: TButton;: TButton;FormCreate(Sender: TObject);Button1Click(Sender: TObject);Button2Click(Sender: TObject);Edit1KeyPress(Sender: TObject; var Key: Char);Button3Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm13;Unit1;

{$R *.dfm}TForm13.FormCreate(Sender: TObject);.Items.LoadFromFile('vid.txt');;TForm13.Button1Click(Sender: TObject);.Items.Add(edit1.Text);.Text:='';.SetFocus;TForm13.Button2Click(Sender: TObject);.Items.SaveToFile(path+'vid.txt');.close;TForm13.Edit1KeyPress(Sender: TObject; var Key: Char);key=#13 then button1.SetFocus;TForm13.Button3Click(Sender: TObject);.Items.Delete(listbox1.ItemIndex);;.

ПРИЛОЖЕНИЕ 12. ЛИСТИНГ UNIT14

Unit14;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, QuickRpt, QRCtrls, ExtCtrls;= class(TForm): TQuickRep;: TQRBand;: TQRBand;: TQRBand;: TQRBand;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRDBText;: TQRDBText;: TQRDBText;: TQRDBText;: TQRDBText;: TQRDBText;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;: TQRLabel;FormShow(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm14;Unit3;

{$R *.dfm}TForm14.FormShow(Sender: TObject);.Caption:=datetimetostr(now);.DataField:='kod';.DataField:='name';.DataField:='trademark';.DataField:='cena';.DataField:='kol_vo';.DataField:='summa';.Caption:=floattostr(s);.Caption:=form3.Edit3.Text;.Caption:=floattostr(strtofloat(form3.Edit3.Text)-s);;.

Похожие работы на - Создание программного обеспечения для небольшого супермаркета

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!