Управление частной организацией

 

Министерство образования Республики Беларусь

Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники»

Факультет компьютерных систем и сетей

Кафедра программного обеспечения информационных технологий










Дисциплина: Базы данных

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

на тему

УПРАВЛЕНИЕ ЧАСТНОЙ ОРГАНИЗАЦИЕЙ

БГУИР КР 1-40 01 01 419 ПЗ


Студент: гр. 051004 Сятковский И.Н.

Руководитель:

Асс. Фадеева Е.Е.





Минск 2013


ОГЛАВЛЕНИЕ


ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ

ВВЕДЕНИЕ

. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ

.1 Анализ литературных источников

.2 Анализ аналогов

.3 Спецификация требований

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

. АНАЛИЗ ТРЕБОВАНИЙ К ПРОГРАММНОМУ СРЕДСТВУ И РАЗРАБОТКА ФУНКЦИОНАЛЬНЫХ ТРЕБОВАНИЙ

.1 Обоснование выбора средств разработки приложения

.2 Спецификация функциональных требований

Полное отражение информации из БД

Добавление, удаление, редактирование информации

Поиск информации по выбранной таблице

.3 Схема взаимодействия проектов программы

.4 Проект Data

.5 Проект Entity

.6 Проект Logic

.7 Проект Firm

. ИНФОЛОГИЧЕСКАЯ МОДЕЛЬ ПРЕДМЕТНОЙ ОБЛАСТИ

. ОПИСАНИЕ БИЗНЕС-ЛОГИКИ ПРИЛОЖЕНИЯ

. ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ

. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

ЗАКЛЮЧЕНИЕ

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

ПРИЛОЖЕНИЕ А

Исходный код программного модуля, осуществляющего работу с БД

Исходный код программного модуля, осуществляющего связь View-проекта с Data-проектом

Исходный код программного модуля, осуществляющего работу Form

Исходный код программного модуля, осуществляющего работу AddForm



ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ


ЛКМ - левая кнопка мыши

ПКМ - правая кнопка мыши

ПС - программное средство

ЯП - язык программирования

ОС - операционная система

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

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


ВВЕДЕНИЕ


Проблема оптимизации работы персонала является одной из фундаментальных для руководителя. Искусство управления - явление, свойственное определенной стадии развития организации. От грамотного управления зависит качество работы, её эффективность, своевременность и удовлетворенность клиентов. Переход к рынку неизбежно вызывает новые тенденции в организации работы, так как меняется культура, экономика, система ценностей и убеждений в обществе. Поэтому для руководителя остро встает вопрос, как наладить эффективную работу персонала в условиях постоянно меняющийся среды. Одним из решений данной проблемы будет использование СRM-системы для оптимизации работы организации.- это аббревиатура термина customer relationship management, что переводится как «управление взаимоотношениями с клиентами».

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

Если приступить к описанию CRM-систем, то упор необходимо сделать на слове «автоматизация». Потому что эта автоматизированная система, позволяющая работать с информацией о заказчиках (клиентах), ориентирована на поддержку контактов с ними и на пользование этими данными в корпоративных целях. Работать со сведениями позволяют такие инструменты, как клиентская база, и методики, которые помогают не только упорядочить информацию и возвести ее в систему, но и урегулировать порядок работы. Но CRM системы, как правило, ориентированы только на клиентов, и хранения информации связанной только с ними. И для управления целой организацией это не совсем удобно. Поэтому целью данной работы является создание работоспособной функциональной модели движения информационных и материальных ресурсов внутри организации.


. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ


1.1Анализ литературных источников


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

а)Прием заказа на определённый товар от потребителя и его поиск среди имеющихся товаров.

б)Оказание услуг по сопровождению товара.

в)Продажа товара.

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

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

а)Поиск товара с определёнными техническими характеристиками и ценой среди имеющихся товаров.

б)Возможность выбора поставщика.

в)Оформление заказа, т.е. продажа товара клиенту.

г)Возможность оказания услуг по сопровождению товара.

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

а)Наличие поставщиков товара.

б)Наличие определённых требований технических характеристик товара, выдвинутых клиентом.

в)Наличие данного товара, на этапе оформления заказа.

Полученная модель построена с единой точки зрения разработчика модели.


1.2Анализ аналогов


В качестве первого аналога было решено выбрать CRM-систему «TurboCRM» и более детально рассмотреть ее преимущества и недостатки, т.к. основной задачей данного интернет ресурса является автоматизация работы с клиентами. К преимуществам сервиса можно отнести:

а)Возможность создания аккаунтов на сайте.

б)Приятный и легкий интерфейс

в)Простота использования

г)Бесплатный сервис.

Однако данному интернет ресурсу присущи следующие недостатки:

а)Небольшое количество возможностей.

б)Проблемы с добавлением данных в базу.

в)Ограниченное количество настроек.

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

а)Возможность авторизации на сайте.

б)Ведение клиентской базы.

в)Отчеты

г)Встроенный каталог товаров.

д)Легкий в освоении, дружелюбный интерфейс.

Однако помимо наличия явных преимуществ, ресурсу присущи следующие недостатки:

а)Большое количество js, который приводит к медленной загрузке страниц и рывковой анимации на страницах.

б)Платный сервис

Однако помимо вышеперечисленных был обнаружен еще один аналог, обладающий рядом особенностей, не присущих вышеперечисленным - интернет ресурс amoCRM. Данному ПС присущи следующие достоинства:

а)Приятный интерфейс

б)Возможность работы через мобильное приложение.

в)Бесплатный первый месяц использования

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

а)Сравнительно небольшой функционал.

б)Платный сервис.

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


1.3 Спецификация требований


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

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

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

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

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

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

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

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

Требования к информационной и программной совместимости.

Работа клиента ПС должна осуществляться под управлением ОС Windows XP/Vista/7/8.


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


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

а)Программное средство для управления БД частной организации.

б)Возможность просмотра любой информации из БД.

в)Осуществление поиска информации в выбранной таблице.

г)Работа ПС при повреждении части БД.

д)Возможность добавления, удаления, и изменения уже имеющейся в БД информации.

е)Надежность работы ПС.

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



2. АНАЛИЗ ТРЕБОВАНИЙ К ПРОГРАММНОМУ СРЕДСТВУ И РАЗРАБОТКА ФУНКЦИОНАЛЬНЫХ ТРЕБОВАНИЙ


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


2.1 Обоснование выбора средств разработки приложения


Разработку программного продукта было решено осуществлять на платформе .NET с использование языка C#. В качестве альтернатив рассматривался язык C++/CLI и VB.NET. В настоящее время VB.NET не является популярным и используется в основном при поддержке старых проектов. Что же касается C++/CLI, то он не является дружелюбным для разработчиков и без учета С++ версии 11 обладает целым рядом недостатков, к которым можно отнести отсутствие делегатов и интерфейсов. К особенностям, усложняющим разработку, также можно отнести явное освобождение памяти и работу с указателями.

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

а)Критикуются почти все технологические решения разработчиков Java, в том числе заимствование синтаксиса Си/C++, идеология иерархии пакетов и её связь с иерархией файлового дерева исходных текстов проекта, наличие, набор и особенности функционирования базовых скалярных типов данных, арифметика.

б)Хотя операции над числами с плавающей точкой в Java в основном базируются на стандарте двоичной арифметики с плавающей точкой IEEE 754, некоторые функции не поддерживаются даже при использовании модификатора strictfp, такие как Флаги исключений и выпрямленные округления - возможности предусмотренные в качестве обязательных по стандарту IEEE 754.

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

Причины данного выбора следующие:

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

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

в)В состав платформы входит так называемый сборщик мусора (garbage collector). Благодаря ему система будет защищена от утечки ресурсов, которые часто происходят в программах, написанных на языках, не поддерживающих данную технологию. Данные преимущество значительно повышает надежность программного обеспечения и повышает его надежность.

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

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

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

ж)Абсолютно все ошибки обрабатываются механизмом исключительных ситуаций.

з)Большое количество мощных возможностей по созданию многопоточных приложений.

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

В качестве сервера для БД был выбран MS SQL Server, так как он обладает рядом преимуществ по сравнению со своими аналогами.

а)Безопасность. Расширенным компонентам обеспечения безопасности, включенным в редакции Standard, Enterprise и Workgroup. Методикам безопасного проектирования, являющимся частью инициативы Trustworthy Computing. Они позволили построить SQL Server на особо безопасной платформе. Компоненты безопасности нет смысла применять, если продукт не был изначально правильно спроектирован. Мощной инфраструктуре Microsoft Update, снижающей степень угрозы безопасности и сокращающей время простоя, вызванного установкой исправлений .

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

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

г)Совокупная стоимость владения (ТСО). В комплект поставки SQL Server входят расширенные интегрированные компоненты (расширенное сжатие, обеспечение высокого уровня доступности, управляемость, секционирование, OLAP, интеллектуальный анализ данных, корпоративная отчетность, пространственные данные и расширенные средства безопасности). Интегрированная среда разработки и легкие в использовании инструменты разработчика сокращают время на построение решения и улучшают отношение затраченного времени к достигнутым результатам.

база данных программа таблица

2.2 Спецификация функциональных требований


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

Полное отражение информации из БД

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

б)Надежная работа вывода информации даже при изменении структуры таблицы.

в)Возможность просмотреть реальные данные из таблицы.

г)Просмотр любой таблицы , существующей в БД.

д)Надежная работа вывода информации даже при добавлении новых таблиц в БД.

Добавление, удаление, редактирование информации

а)Предусмотреть возможность добавления информации пользователем.

б)Предусмотреть возможность полного удаления информации пользователем.

в)Предусмотреть возможность редактирования части информации пользователем.

г)Предусмотреть возможность выбора нужных параметров в виде выпадающих списков при добавлении информации.

д)Надежная работа программы и отлов ошибок при введении некорректной информации.

Поиск информации по выбранной таблице

а)Возможность поиска информации по выбранной таблице

б)Возможность поиска информации по выбранному критерию в таблице.

в)Надежная работа программы и отлов ошибок при введении некорректной информации.


2.3 Схема взаимодействия проектов программы


Рисунок 2.1 Схема проектов


В данном ПС используются 4 проекта взаимосвязанных между собой, каждый из которых играет свою немаловажную роль в программном средстве.Firm отвечает за View-модель всего программного средства. Logic- за логику работы программы, и за связь View -модели с базой данных. Data -является «нижним» уровнем программы и напрямую взаимодействует с БД.

Entity содержит структуры, в объекты которых осуществляется вывод информации из БД.


2.4 Проект Data


Рисунок 2.2 Схема проекта Data


Статический метод Insert, служит для непосредственной записи данных в БД

Статический метод Delete, служит для удаления записи из БД.

Статический метод Update, служит для обновления записи в БД.

Статический метод ReadRecords, служит для выборки информации из нужной таблицы БД.

Статический метод TableNames, служит для получения имен всех таблиц существующих в БД.

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

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


2.5 Проект Entity


Проект содержит в себе структуры, с помощью которых осуществляется взаимодействие ПС и БД.


Рисунок 2.3 Схема проекта Entity


Класс TableStruct. Служит структурой таблицы в ПС.Содержит в себе поле List<Notes>.

Класс Note. Служит структурой записи в ПС. Содержит в себе поле List<String>.



2.6 Проект Logic


Рисунок 2.4 Схема проекта Logic


Отвечает за логику всю логику работы программы.

Статический метод Insert, служит для непосредственной записи данных в БД

Статический метод Delete, служит для генерации и передачи запроса на удаление в проект Data.

Статический метод Update, служит для генерации и передачи запроса на обновление в проект Data.

Статический метод ReadRecords, служит для генерации и передачи запроса на прочтение данных в проект Data.

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

Статический метод DBConnection, служит для передачи запроса на безопасное подключение к БД в проект Data.

Статический метод СloseConnection, служит для передачи запроса на безопасное завершение работы с БД в проект Data.

Статический метод Find, служит для генерации sql запроса на поиск нужной информации, и передачи этого запроса в проект Data.


2.7 Проект Firm


Рисунок 2.5 Схема проекта Firm


Является View-моделью данного программного средства и содержит в себе 2 основные формы.

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

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


. ИНФОЛОГИЧЕСКАЯ МОДЕЛЬ ПРЕДМЕТНОЙ ОБЛАСТИ



В качестве хранилища пользовательской информации решено использовать базу данных СУБД MSSQL. На рисунке 3.1 представлена ее схема.

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

Таблица Suppliers (рисунок 3.2). В данной таблице будет храниться информация о поставщиках, и впоследствии при оформлении заявки о приходе продукта именно из этой таблицы будет осуществляться выбор поставщика.


Рисунок 3.2 Схема таблицы Suppliers


Поле №.Тип int. Представляет собой первичный ключ таблицы. Данное поле используется в целевого поля внешнего ключа других таблиц.

Поле F.I.O. Тип nchar(255). Представляет собой поле, содержащее фамилию, имя и отчество поставщика. В дальнейшем будет использоваться для удобства выбора поставщика.

Поле Adress Тип nchar(255). Представляет собой поле, содержащее адрес поставщика. В дальнейшем может быть использовано для поиска нужных поставщиков.

Поле Tel Тип nchar(10). Представляет собой поле, содержащее телефон поставщика. В дальнейшем может быть использовано для поиска нужных поставщиков.

Поле E-mail Тип nchar(50). Представляет собой поле, содержащее E-mail поставщика. В дальнейшем может быть использовано для поиска нужных поставщиков.

Таблица Coming (рисунок 3.3). Хранит в себе информацию о приходе продукции.

Поле Product Code.Тип int. Представляет собой первичный ключ таблицы. Данное поле используется в целевого поля внешнего ключа других таблиц.

Поле Name. Тип nchar(255). Содержит в себе имя поступившего товара.

Поле Count. Тип int. Содержит в себе количество поступишвего товара.

Поле Purchase_price. Тип money. Содержит в себе стоимость поступившего товара.

Поле Retail_price. Тип nchar(255). Содержит в себе цену реализации поступившего товара.


Рисунок 3.3 Схема таблицы Coming


Поле Supplier. Тип int. Содержит в себе key поставщика.

Поле Date. Тип date. Содержит в себе дату поступившего товара.

Поле Sum. Тип money. Содержит в себе потраченную сумму на поступивший товар.

Поле Time. Тип time(7). Содержит в себе время поступления товара.

Таблица Currency (рисунок 3.4). Таблица содержащая виды валют.


Рисунок 3.4 Схема таблицы Currency


Поле №. Тип int. Представляет собой внешний ключ.

Поле Name. Тип nchar(50). Представляет собой название валюты.

Таблица Departments (рисунок 3.5). Права доступа, которыми обладает каждая из ролей системы. Связана отношением многие-ко-многим с таблицей Roles (п. 4.2). В приложении заранее предустановлен определенный набор полей. Но в дальнейшем он может быть модифицирован и расширен.


Рисунок 3.5 Схема таблицы Departments


Поле №.Тип int. Представляет собой первичный ключ таблицы. Данное поле используется в качестве целевого поля внешнего ключа других таблиц.

Поле Name. Тип nchar(50). Содержит в себе название отдела организации. В последующем каждой профессии будет присваиваться отдел из этой таблицы.

Таблица Empl_Data (рисунок 3.6). Таблица содержащая должность и отдел, в котором работает сотрудник.


Рисунок 3.6 Схема таблицы Empl_Data


Поле №Contract. Тип int. Представляет собой внешний ключ.

Поле Post. Тип int. Представляет собой внешний ключ на первичный ключ таблицы должностей.

Поле Department. Тип int. Представляет собой внешний ключ на первичный ключ таблицы Отделов.

Таблица Expenses (рисунок 3.7) Посредствам первичного ключа содержит в себе всю информацию о любых расходах совершаемых организацией


Рисунок 3.7 Схема таблицы Expenes


Поле №.Тип int. Представляет собой первичный ключ таблицы. Данное поле используется в качестве целевого поля внешнего ключа других таблиц.

Поле Sort_Expenses. Тип int. Является внешним ключом таблицы Sort_Rev_Exp

Поле Currency. Тип int. Является внешним ключом таблицы Currency.

Таблица Merchandise (рисунок 3.8).


Рисунок 3.8 Схема таблицы Merchandise


Таблица содержит в себе уже поступивший товар.

Поле Product_Code.Тип int. Представляет собой первичный ключ таблицы. Равен PK Сoming.

Поле Name. Тип nchar(255). Содержит в себе имя товара.

Поле Sort. Тип int. Внешний ключ на таблицу Sort.

Поле Count. Тип int. Содержит в себе количество товара.

Поле Sale_price. Тип money. Содержит в себе стоимость товара.

Таблица Personal_Data(рисунок 3.9). Содержит личную информацию о сотруднике.


Рисунок 3.9 Схема таблицы Personal_Data


Данная таблица связана отношением один-к-одному с таблице Empl_Data.

Поле №Contract.Тип int. Представляет собой первичный ключ таблицы.

Поле №Passport. Тип nvarchar(10). Содержит в себе номер паспорта сотрудника.

Поле F.I.O. Тип nvarchar(255). Содержит в себе фамилию, имя и отчество сотрудника.

Таблица Posts (рисунок 3.10). Содержит информацию о должностях в организации

Поле №. Тип int. Представляет собой первичный ключ таблицы.

Поле Name. Тип nchar(50). Представляет собой название должности

Поле Salary. Тип money. з/п на на данной должности.

Поле Department. Тип int. FK таблицы Departments.



Рисунок 3.10 Схема таблицы Posts


Таблица Revenue (рисунок 3.11). Данная таблица содержит в себе все доходы организации благодаря PK и связям с таблицами Services_Rendered и Sale.


Рисунок 3.11 Схема таблицы Revenue


Поле №. Тип int. Представляет собой первичный ключ таблицы. Данное поле используется в качестве целевого поля внешнего ключа других таблиц.

Поле Sort_Expenses. Тип int. Является внешним ключом таблицы Sort_Rev_Exp

Поле Currency. Тип int. Является внешним ключом таблицы Currency.

Таблица Salary (рисунок 3.12). Хранит в себе данные по выплаченным сотрудникам зарплатам.

Поле №. Тип int. Представляет собой первичный ключ таблицы.

Поле Date. Тип date. Содержит дату выплаты з/п.


Рисунок 3.12 Схема таблицы Salary


Поле №Contract. Тип int. Осуществляет связь многие к одному с таблицей Empl_Data.

Поле Sum. Тип money. Содержит в себе кол-во денег.

Таблица Sale (рисунок 3.13). Данные о продажах в организации


Рисунок 3.13 Схема таблицы Sale


Поле Product_Code. Тип int. Представляет собой первичный ключ таблицы.

Поле Name. Тип nchar(255). Содержит имя проданного продукта.

Поле Sort. Тип int. Вид проданного продукта.

Поле Count. Тип int. Количество проданного продукта

Поле Price. Тип money. Цена.

Поле PriceNDS. Цена + НДС.

Поле Client. Тип int. Внешний ключ на таблицу клиентов.

Поле Date. Тип date.Дата продажи.

Поле Time. Время продажи.

Поле Sum. Тип money.Количество потраченных денег.

Поле №. Тип int .Счетчик количества продаж.

Таблица Services (рисунок 3.14). . Содержит в себе услуги по сопровождению продукта ,которые могут быть оказаны организацией .

Рисунок 3.14 Схема таблицы Services


Поле №. Тип int. Представляет собой первичный ключ таблицы.

Поле Service_Sort. Тип nchar(50). Содержит название услуги.

Поле Cost. Тип money. Стоимость услуги.

Таблица Services_Rendered. (рисунок 3.15). Хранит в себе данные об оказанных услугах.

Поле №. Тип int. Представляет собой первичный ключ таблицы.

Поле Service_Sort. Тип int. Внешний ключ на таблицу Services.

Поле Date. Тип date. Дата оказания услуги

Поле Start_time. Тип time(7). Время начала оказания услуги.

Поле Finish_Time. Тип time(7). Время конца оказания услуги.

Поле Employee. Тип int. Внешний ключ на сотрудника.

Поле Revenue. Тип money.Cтоимость.



Рисунок 3.15 Схема таблицы Services_Rendered


Таблица Sort (рисунок 3.15). Представляет собой список видов продукта.


Рисунок 3.15 Схема таблицы Sort


Поле №. Тип int. Представляет собой первичный ключ таблицы.

Поле Title. Тип nchar(10). Представляет собой название вида продукта.


Рисунок 3.16 Схема таблицы Sort_Rev_Exp


Таблица Sort_Rev_Exp. (рисунок 3.16). Хранит в себе данные о виде поступления доходов либо расходов.

Поле №. Тип int. Представляет собой первичный ключ таблицы.

Поле Name. Тип nchar(50). Название вида расхода/дохода.

Таблица Clients. (рисунок 3.17). Хранит в себе данные об оказанных услугах.


Рисунок 3.17 Схема таблицы Clients


Поле №.Тип int. Представляет собой первичный ключ таблицы. Данное поле используется в виде целевого поля внешнего ключа других таблиц.

Поле F.I.O. Тип nchar(255). Представляет собой поле, содержащее фамилию, имя и отчество клиента. В дальнейшем будет использоваться для удобства выбора клиента.

Поле Adress Тип nchar(255). Представляет собой поле, содержащее адрес клиента. В дальнейшем может быть использовано для поиска нужных клиентов.

Поле Tel Тип nchar(10). Представляет собой поле, содержащее телефон клиента. В дальнейшем может быть использовано для поиска нужных клиентов.

Поле E-mail Тип nchar(50). Представляет собой поле, содержащее E-mail клиента. В дальнейшем может быть использовано для поиска нужных клиентов.



. ОПИСАНИЕ БИЗНЕС-ЛОГИКИ ПРИЛОЖЕНИЯ


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

а)Разделение программы на 4 проекта.

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

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

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




. ТЕСТИРОВАНИЕ ПРИЛОЖЕНИЯ


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


№Функция программного средстваВходные данныеОжидаемый результатФактический результат1Создание нового сорта продукции№: 4 Title : PhonesSuccessSuccess№: 4 Title : PhonesErrorError№4: MousesErrorError2Редактирование полей поставщиковOld: Adress: Vitebsk New: Adress: MinskSuccessSuccessOld: Tel: 98873413 New: Tel: 98873415SuccessSuccessOld: №: 4 New: №: 7ErrorError3Удаление информацииTable: Sort № 4Success.Success.Table: Expenses № 4Delete From This Table ImpossibleDelete From This Table ImpossibleTable: Revenue № 4Delete From This Table ImpossibleDelete From This Table Impossible4Поиск по таблицамTable:Sort Key: 3 №3 Printers3 PrintersTable:Coming Key: 5 CountIntel_Computers HPIntel_Computers HPTable:Coming Key: 6 CountNULL.NULL

/ РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ


При открытии программы пользователь видит форму изображенную на рисунке 6.1.


Рисунок 6.1 Главная форма приложения


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

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

При включении программы стандартной таблицей является «Clients»

И соответственно уже при включении программа отображает нам выбранную таблицу.

Под формой выбора таблицы находятся 3 кнопки : Add , Delete, Update, которые позволяют пользователю добавлять, удалять и изменять записи соответственно.

Рассмотрим пример добавления записи к таблице «Coming».

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


Рисунок 6.2 Таблицы доступные к просмотру



Рисунок 6.3 Форма добавления записи


В конкретном примере добавления записи в таблицу «Coming» пользователь должен вручную ввести значения в поля Name, Count , Purchase_price, Retail_price, Date, Sum. Поля Supplier, Sort , Currency предоставляют возможность выбора конкретного значения. Эти поля отражают данные из других таблиц, в конкретном примере, на рисунке 6.3 поле для ввода Supplier отражает всех поставщиков товара, и дает пользователю выбрать одного из них. По такому же принципу работают поля Sort и Currency. Если пользователю недостаточно предложенных ему значений, он должен добавить недостающие ему данные в первичные таблицы, и с этими новыми данными сразу можно будет работать.

При нажатии на кнопку Add пользователь снова увидит форму, изображенную на рисунке 6.1, но уже с добавленной информацией.

Рисунок 6.4 Обновление информации


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

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

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


Рисунок 6.5 Поиск по таблице


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


ЗАКЛЮЧЕНИЕ


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

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

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


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


1.Wikipedia [Электронный ресурс] - Электронные данные - Режим доступа: #"justify">2.Farrell, C., Harrison, N. Under the Hood of .NET Memory Management - Red Gate Books, 2011 - 238 p.

.Matsumoto, M. Mersenne twister: A 623-dimensionally equidistributed uniform pseudorandom number generator / M. Matsumoto, T. Nishimura - ACM Trans. on Modeling and Computer Simulations 8 (1): 3-30.

4.MSDN [Электронный ресурс] - Электронные данные - Режим доступа: #"justify">8.Richter, Jeffrey. CLR via C# / J.Richter - Microsoft Press, 2012 - 863 p.

.Lerman, J., Miller, R. Programming Entity Framework: DbContext / J. Lerman, R. Miller - OReilly Media, 2012 - 256 p.

.Mistry, R., Misner, S. Introduction to Microsoft SQL Server 2012 - Microsoft Press, 2012 - 290 p.

.Ben-Gan, Itzik Microsoft SQL Server 2012 T-SQL Fundamentals - Microsoft Press, 2012 - 442 p.


ПРИЛОЖЕНИЕ А

(обязательное)


Исходный код программного модуля, осуществляющего работу с БД

using System;System.Collections.Generic;System.Linq;System.Text;System.Threading.Tasks;Entity;System.Data;System.Data.SqlClient;Data

{static class DBConnect

{static SqlConnection conn;static string DBConnection()

{Result;connStr = @"Data Source=BGG\SQLEXPRESS;Catalog=Firm;Security=True";= new SqlConnection(connStr);

{

//пробуем подключиться.Open();

}(SqlException se)

{Result = "Connection error" +se.Message;

}Result = "DB Connection is successfully";

}static TableStruct ReadRecords(string query)

{();NewTable = new TableStruct();NewNote = new Note();cmd = new SqlCommand(query, conn);(SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))

{(int i = 0; i < dr.FieldCount; i++)

{.Records.Add(dr.GetName(i).ToString().Trim());

}.Notes.Add(NewNote);(dr.Read())

{NewNote1 = new Note();(int j = 0; j < dr.FieldCount; j++)

{.Records.Add(dr.GetValue(j).ToString().Trim());

}.Notes.Add(NewNote1);

}.Close();.Dispose();

}.Dispose();();NewTable;

}static void CloseConnection()

{.Close();.Dispose();

}static Note TableNames()

{();TableNames = new Note();cmd = new SqlCommand("select * from information_schema.tables", conn);(SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))

{(dr.Read())

{.Records.Add(dr.GetValue(2).ToString().Trim());

}

}();TableNames;

}static void Insert(string query)

{();cmd = new SqlCommand(query, conn);.ExecuteNonQuery();();

}static void Delete(string query)

{();cmd = new SqlCommand(query, conn);.ExecuteNonQuery();();

}static void Update(string query)

{();cmd = new SqlCommand(query, conn);.ExecuteNonQuery();();

}

}

}

Исходный код программного модуля, осуществляющего связь View-проекта с Data-проектом

using System;System.Collections.Generic;System.Linq;System.Text;System.Threading.Tasks;Data;Entity;Logic

{static class WorkWithDB

{static string DBConnect()

{Data.DBConnect.DBConnection();

}static void CloseConnection()

{.DBConnect.CloseConnection();

}static TableStruct ReadRecords(string Table)

{query;(Table)

{"Expenses": query = "SELECT ex.[№],com.Name,com.Sum,pd.[F.I.O],sal.Sum, sre.Name as Sort,c.Name as Currency FROM Expenses as Ex JOIN Sort_Rev_Exp as sre ON ex.Sort_Expenses = sre.[№] JOIN Currency as c ON Ex.Currency=c.[№]LEFT JOIN Coming as com on Ex.[№] = com.[Product Code] LEFT JOIN Salary as sal ON ex.[№] = sal.[№] LEFT JOIN Personal_Data as pd ON sal.[№Contract]=pd.[№Contract]";;"Coming": query = "SELECT com.[Product Code],com.Name,com.Count,com.Purchase_price,com.Retail_price,sup.[F.I.O.] as Supplier ,com.Date,com.Time from Coming as com JOIN Suppliers as sup ON com.Supplier = sup.[№]";;"Posts": query = "SELECT p.[№],p.Name, p.Salary, d.Name as Department FROM Posts as p JOIN Departments as d ON p.Department= d.[№]";;"Salary": query = "SELECT sal.[№],sal.Date,pd.[F.I.O], sal.Sum From Salary as sal JOIN Personal_Data as pd ON sal.[№Contract] = pd.[№Contract]";;"Empl_Data": query = "SELECT ed.[№Contract],pd.[F.I.O] ,p.Name as Post,d.Name as Department FROM Empl_Data as ed JOIN Posts as p ON ed.Post=p.[№] JOIN Departments as d ON ed.Department=d.[№] JOIN Personal_Data as pd ON ed.[№Contract]=pd.[№Contract] ";;"Merchandise": query = "SELECT m.Product_Code,m.Name,s.Title as Sort,m.Count,m.Sale_Price FROM Merchandise as m JOIN Sort as s ON m.Sort=s.[№];";;"Revenue": query = "SELECT r.[№],Sale.Name,Sale.Sum,pd.[F.I.O], sr.Revenue, sre.Name as Sort,c.Name as Currency FROM Revenue as r LEFT JOIN Sale as sale ON r.[№]=sale.[№] LEFT JOIN Services_Rendered as sr ON r.[№]=sr.[№] LEFT JOIN Personal_Data as pd ON sr.Employee=pd.[№Contract] JOIN Sort_Rev_Exp as sre ON r.Sort_Revenue=sre.[№] JOIN Currency as c ON r.Currency=c.[№]";;"Sale": query = "SELECT sale.[№],sale.Product_Code,sale.Name,sort.Title as Sort,sale.Count,sale.Price,sale.PriceNDS,cli.[F.I.O] as Client, sale.Date,sale.Time,sale.Sum FROM Sale as sale JOIN Sort as sort ON sale.Sort = sort.[№] JOIN Clients as cli ON sale.Client = cli.[№]";;"Services_Rendered": query = "SELECT sr.[№],ser.Service_Sort,sr.Date,sr.Start_time,sr.Finish_time,pd.[F.I.O] as Employee,sr.Revenue FROM Services_Rendered as sr JOIN Services as ser ON sr.Service_Sort=ser.[№] JOIN Personal_Data as pd ON sr.Employee=pd.[№Contract]";;: query = "SELECT * FROM " + Table;;

}Data.DBConnect.ReadRecords(query);

}static Note TableNames()

{Data.DBConnect.TableNames();

}static void Insert(string query)

{.DBConnect.Insert(query);

}static void Delete(string query)

{.DBConnect.Delete(query);

}static TableStruct Find(string query)

{Data.DBConnect.ReadRecords(query);

}static void Update(string query)

{.DBConnect.Update(query);

}

}

}

Исходный код программного модуля, осуществляющего работу Form

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;Logic;Entity;Firm

{partial class Form1 : Form

{Form f;int countOfColumns;Form1()

{();

}void Form1_Load(object sender, EventArgs e)

{.Text = Logic.WorkWithDB.DBConnect();NewTable = new TableStruct();= Logic.WorkWithDB.ReadRecords("Clients");(NewTable);TablesNames = new Note();= Logic.WorkWithDB.TableNames();(int i = 1; i < TablesNames.Records.Count; i++)

{.Items.Add(TablesNames.Records[i]);

}query = "SELECT * FROM " + comboBox.Text;= Logic.WorkWithDB.Find(query);(int i = 0; i < NewTable.Notes[0].Records.Count; i++)

{.Items.Add(NewTable.Notes[0].Records[i].ToString());

}

}void NewTableGrid(TableStruct table)

{.Columns.Clear();(int i = 0; i < table.Notes[0].Records.Count; i++)

{.Columns.Add(i.ToString(), table.Notes[0].Records[i].ToString());.Columns[i].Name = table.Notes[0].Records[i].ToString();

}= table.Notes[0].Records.Count;(int i = 1; i < table.Notes.Count; i++)

{.Rows.Add();(int j = 0; j < table.Notes[i].Records.Count; j++)

{.Rows[i - 1].Cells[j].Value = table.Notes[i].Records[j].ToString();

}

}

}void NewTableGrid2(TableStruct table)

{.Columns.Clear();(int i = 0; i < table.Notes[0].Records.Count; i++)

{.Columns.Add(i.ToString(), table.Notes[0].Records[i].ToString());

}= table.Notes[0].Records.Count;(int i = 1; i < table.Notes.Count; i++)

{.Rows.Add();(int j = 0; j < table.Notes[i].Records.Count; j++)

{.Rows[i - 1].Cells[j].Value = table.Notes[i].Records[j].ToString();

}

}

}void Form1_FormClosed(object sender, FormClosedEventArgs e)

{.WorkWithDB.CloseConnection();

}void comboBox_SelectedValueChanged(object sender, EventArgs e)

{NewTable = new TableStruct();= Logic.WorkWithDB.ReadRecords(comboBox.SelectedItem.ToString());(NewTable);query = "SELECT * FROM " + comboBox.Text;= Logic.WorkWithDB.Find(query);.Items.Clear();(int i = 0; i < NewTable.Notes[0].Records.Count; i++)

{.Items.Add(NewTable.Notes[0].Records[i].ToString());

}

}void Add_button_Click(object sender, EventArgs e)

{f = new AddForm(comboBox.Text);.Text = comboBox.Text;.Show();

}void but_Click(object sender, EventArgs e)

{.Hide();

}void DelButton_Click(object sender, EventArgs e)

{(comboBox.Text)

{"Merchandise":.WorkWithDB.Delete("DELETE FROM "+comboBox.Text+" WHERE [Product_Code] = "+dataGridView.CurrentRow.Cells[0].Value.ToString());;"Personal_Data":.WorkWithDB.Delete("DELETE FROM Services_Rendered WHERE [Employee] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Salary WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Empl_Data WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());;"Empl_Data":.WorkWithDB.Delete("DELETE FROM Services_Rendered WHERE [Employee] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Salary WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Empl_Data WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());;"Coming":.WorkWithDB.Delete("DELETE FROM Sale WHERE [Product_Code] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Merchandise WHERE [Product_Code] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [Product Code] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Expenses WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());;"Salary":.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Expenses WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());;"Sale":.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Revenue WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());;"Expenses":.Show("Delete From This Table Impossible");;"Revenue":.Show("Delete From This Table Impossible");;"Departments":.WorkWithDB.Delete("DELETE FROM Posts WHERE [Department] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());;"Services_Rendered":.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());.WorkWithDB.Delete("DELETE FROM Revenue WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());;:.WorkWithDB.Delete("DELETE FROM "+comboBox.Text+" WHERE [№] = "+(dataGridView.CurrentRow.Index+1).ToString());;

}NewTable = new TableStruct();= Logic.WorkWithDB.ReadRecords(comboBox.Text);(NewTable);

}void button1_Click(object sender, EventArgs e)

{query = "SELECT * FROM "+comboBox.Text+" WHERE ["+FindComboBox.Text+"] = '"+FindTextBox.Text+"'";NewTable = new TableStruct();

{= Logic.WorkWithDB.Find(query);(NewTable);

}(Exception ex)

{.Show("Error","Error");

}

}void UpdateButton_Click(object sender, EventArgs e)

{column = (dataGridView.Columns[dataGridView.CurrentCell.ColumnIndex]).Name.ToString();firstcolumn = (dataGridView.Columns[0]).Name.ToString();

// MessageBox.Show(dataGridView.CurrentRow.Cells[0].Value.ToString());query = "Update " + comboBox.Text + " SET [" + column + "] = '" + dataGridView.CurrentCell.Value.ToString() + "' WHERE [" + firstcolumn + "] = '" + dataGridView.CurrentRow.Cells[0].Value.ToString()+"'";

{.WorkWithDB.Update(query);

}(Exception ex)

{.Show("Error", "Error");

}

}

}

}

Исходный код программного модуля, осуществляющего работу AddForm

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Threading.Tasks;System.Windows.Forms;Logic;Entity;Firm

{partial class AddForm : Form

{string tablename1;AddForm(string TableName)

{= TableName;.Text = TableName;();(TableName)

{"Suppliers": textBox1.Visible = true; textBox2.Visible = true; textBox3.Visible = true; textBox4.Visible = true; textBox5.Visible = true;.Text = "№"; label2.Text = "F.I.O"; label3.Text = "Adress"; label4.Text = "Tel"; label5.Text = "E-mail";.Height = 220;.Location = new Point(112, 150);;"Clients": textBox1.Visible = true; textBox2.Visible = true; textBox3.Visible = true; textBox4.Visible = true; textBox5.Visible = true;.Text = "№";label2.Text = "F.I.O";label3.Text = "Adress";label4.Text = "Tel";label5.Text = "E-mail";.Height = 220;.Location = new Point(112, 150);;"Sort": textBox1.Visible = true; textBox2.Visible = true;.Text = "№"; label2.Text = "Title";.Height = 220;.Location = new Point(112, 150);;"Currency":.Height = 220;.Location = new Point(112, 150);.Visible = true; textBox2.Visible = true;.Text = "№"; label2.Text = "Name";table5 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Currency");.Text = table5.Notes.Count.ToString();.ReadOnly = true;;"Sort_Rev_Exp":.Height = 220;.Location = new Point(112, 150);.Visible = true; textBox2.Visible = true;.Text = "№"; label2.Text = "Name";table4 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Sort_Rev_Exp");.Text = table4.Notes.Count.ToString();.ReadOnly = true;;"Revenue":.Height = 220;.Location = new Point(112, 150);.Text = "This table is a reflection of tables "+Environment.NewLine+"'Sale' and 'Services_Rendered'";.Text = "Back";;"Expenses":.Height = 220;.Location = new Point(112, 150);.Text = "This table is a reflection of tables " + Environment.NewLine + "'Coming' and 'Salary'";.Text = "Back";;"Merchandise":.Height = 220;.Location = new Point(112, 150);.Visible = true; textBox3.Visible = true; textBox4.Visible = true;.Visible = true;.Location = new Point(112, 12);.Visible = true;.Location = new Point(112, 115);table = new TableStruct();= Logic.WorkWithDB.ReadRecords("Coming");(int i = 1; i < table.Notes.Count; i++)

{.Items.Add(table.Notes[i].Records[0]);

}= Logic.WorkWithDB.ReadRecords("Sort");(int i = 1; i < table.Notes.Count; i++)

{.Items.Add(table.Notes[i].Records[1]);

}.Text = "Product_Code"; label2.Text = "Name"; label3.Text = "Count"; label4.Text = "Sale_Price"; label5.Text = "Sort";;"Sale":.Height = 400;.Location = new Point(112, 330);.Visible = true; textBox3.Visible = true; textBox5.Visible = true; textBox6.Visible = true; textBox7.Visible = true; textBox9.Visible = true; textBox10.Visible = true;table3 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Revenue");.Text = table3.Notes[table3.Notes.Count - 1].Records[0].ToString();.Text = (Convert.ToInt32(textBox1.Text) + 1).ToString();.ReadOnly = true;.Visible = true;.Location = new Point(112, 40);.Visible = true;.Location = new Point(112, 90);.Visible = true;.Location = new Point(112, 192);.Visible = true;.Visible = true;= Logic.WorkWithDB.ReadRecords("Coming");(int i = 1; i < table3.Notes.Count; i++)

{.Items.Add(table3.Notes[i].Records[0]);

}= Logic.WorkWithDB.ReadRecords("Sort");(int i = 1; i < table3.Notes.Count; i++)

{.Items.Add(table3.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Clients");(int i = 1; i < table3.Notes.Count; i++)

{.Items.Add(table3.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Sort_Rev_Exp");(int i = 1; i < table3.Notes.Count; i++)

{.Items.Add(table3.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Currency");(int i = 1; i < table3.Notes.Count; i++)

{.Items.Add(table3.Notes[i].Records[1]);

}.Text = "№"; label2.Text = "Product_Code"; label3.Text = "Name"; label4.Text = "Sort"; label5.Text = "Count"; label6.Text = "Price"; label7.Text = "PriceNDS"; label8.Text = "Client";label9.Text = "Date"; label10.Text = "Sum";label11.Text="Sort";label12.Text="Currency";;"Coming":.Height = 350;.Location = new Point(112, 280);.Visible = true; textBox2.Visible = true; textBox3.Visible = true; textBox4.Visible = true; textBox5.Visible = true; textBox6.Visible = true; textBox7.Visible = true;table1 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Expenses");.Text = table1.Notes[table1.Notes.Count - 1].Records[0].ToString();.Text= (Convert.ToInt32(textBox1.Text) + 1).ToString();.ReadOnly = true;.Visible = true;.Location = new Point(112, 190);.Visible = true;.Location = new Point(112, 220);.Visible = true;.Location = new Point(112, 250);= Logic.WorkWithDB.ReadRecords("Suppliers");(int i = 1; i < table1.Notes.Count; i++)

{.Items.Add(table1.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Sort_Rev_Exp");(int i = 1; i < table1.Notes.Count; i++)

{.Items.Add(table1.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Currency");(int i = 1; i < table1.Notes.Count; i++)

{.Items.Add(table1.Notes[i].Records[1]);

}.Text = "Product_Code"; label2.Text = "Name"; label3.Text = "Count"; label4.Text = "Purchase_price"; label5.Text = "Retail_price";label6.Text = "Date";label7.Text = "Sum";label8.Text = "Supplier";label9.Text = "Sort"; label10.Text = "Currency";;"Salary":.Height = 250;.Location = new Point(112, 180);.Visible = true; textBox2.Visible = true; textBox4.Visible = true;table6 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Expenses");.Text = table6.Notes[table6.Notes.Count - 1].Records[0].ToString();.Text = (Convert.ToInt32(textBox1.Text) + 1).ToString();.ReadOnly = true;.Visible = true;.Location = new Point(112, 65);.Location = new Point(112, 120);.Location = new Point(112, 150);.Visible = true;.Visible = true;= Logic.WorkWithDB.ReadRecords("Personal_Data");(int i = 1; i < table6.Notes.Count; i++)

{.Items.Add(table6.Notes[i].Records[2]);

}= Logic.WorkWithDB.ReadRecords("Sort_Rev_Exp");(int i = 1; i < table1.Notes.Count; i++)

{.Items.Add(table1.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Currency");(int i = 1; i < table1.Notes.Count; i++)

{.Items.Add(table1.Notes[i].Records[1]);

}.Text = "№"; label2.Text = "Date"; label3.Text = "Employee"; label4.Text = "Sum";label5.Text = "Sort"; label6.Text = "Currency";;"Personal_Data":.Height = 220;.Location = new Point(112, 150);.Visible = true; textBox2.Visible = true; textBox3.Visible = true; textBox4.Visible = true; textBox5.Visible = true;.Text = "№Contract"; label2.Text = "№Passport"; label3.Text = "F.I.O"; label4.Text = "Birth_Date"; label5.Text = "Contract_Date";table7 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Personal_Data");.Text = table7.Notes.Count.ToString();.ReadOnly = true;;"Empl_Data":.Height = 220;.Location = new Point(112, 150);.Text = "F.I.O"; label2.Text = "Post"; label3.Text = "Department";.Visible = true;.Location = new Point(112, 15);.Location = new Point(112, 45);.Location = new Point(112, 75);.Visible = true;.Visible = true;table8 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Personal_Data");(int i = 1; i < table8.Notes.Count; i++)

{.Items.Add(table8.Notes[i].Records[2]);

}= Logic.WorkWithDB.ReadRecords("Posts");(int i = 1; i < table8.Notes.Count; i++)

{.Items.Add(table8.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Departments");(int i = 1; i < table8.Notes.Count; i++)

{.Items.Add(table8.Notes[i].Records[1]);

};"Posts":.Height = 220;.Location = new Point(112, 150);.Visible = true; textBox2.Visible = true; textBox3.Visible = true;.Text = "№"; label2.Text = "Name";label3.Text = "Salary"; label4.Text = "Department";table9 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Posts");.Text = table9.Notes.Count.ToString();.ReadOnly = true;.Visible = true;.Location = new Point(112, 90);= Logic.WorkWithDB.ReadRecords("Departments");(int i = 1; i < table9.Notes.Count; i++)

{.Items.Add(table9.Notes[i].Records[1]);

};"Departments":.Height = 220;.Location = new Point(112, 150);.Visible = true; textBox2.Visible = true;.Text = "№"; label2.Text = "Name";table10 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Departments");.Text = table10.Notes.Count.ToString();.ReadOnly = true;;"Services":.Height = 220;.Location = new Point(112, 150);.Visible = true; textBox2.Visible = true; textBox3.Visible = true;.Text = "№"; label2.Text = "Service_Sort";label3.Text = "Cost";table11 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Services");.Text = table11.Notes.Count.ToString();.ReadOnly = true;;"Services_Rendered":.Height = 320;.Location = new Point(112, 250);.Visible = true; textBox3.Visible = true; textBox4.Visible = true; textBox5.Visible = true; textBox7.Visible = true;.Text = "№"; label2.Text = "Service_Sort"; label3.Text = "Date";label4.Text = "Start_Time"; label5.Text = "Finish_Time"; label6.Text = "Employee";label7.Text = "Revenue"; label8.Text = "Sort"; label9.Text = "Currency";table12 = new TableStruct();= Logic.WorkWithDB.ReadRecords("Revenue");.Text = table12.Notes[table12.Notes.Count - 1].Records[0].ToString();.Text = (Convert.ToInt32(textBox1.Text) + 1).ToString();.ReadOnly = true;.Visible = true;.Location = new Point(112, 40);.Visible = true;.Location = new Point(112, 140);.Visible = true;.Location = new Point(112, 192);.Visible = true;.Location = new Point(112, 220);= Logic.WorkWithDB.ReadRecords("Services");(int i = 1; i < table12.Notes.Count; i++)

{.Items.Add(table12.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Personal_Data");(int i = 1; i < table12.Notes.Count; i++)

{.Items.Add(table12.Notes[i].Records[2]);

}= Logic.WorkWithDB.ReadRecords("Sort_Rev_Exp");(int i = 1; i < table12.Notes.Count; i++)

{.Items.Add(table12.Notes[i].Records[1]);

}= Logic.WorkWithDB.ReadRecords("Currency");(int i = 1; i < table12.Notes.Count; i++)

{.Items.Add(table12.Notes[i].Records[1]);

};: ;;

}

}void button1_Click(object sender, EventArgs e)

{(tablename1)

{"Clients": Logic.WorkWithDB.Insert("Insert into Clients([№],[F.I.O],[Adress],[Tel],[E-mail]) Values ("+textBox1.Text+",'"+textBox2.Text+"','"+textBox3.Text+"','"+textBox4.Text+"','"+textBox5.Text+"')");;"Suppliers": Logic.WorkWithDB.Insert("Insert into Suppliers([№],[F.I.O.],[Adress],[Tel],[E-mail]) Values (" + textBox1.Text + ",'" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "')");;"Sort": Logic.WorkWithDB.Insert("Insert into Sort([№],[Title]) Values (" + textBox1.Text + ",'" + textBox2.Text + "')");;"Sort_Rev_Exp": Logic.WorkWithDB.Insert("Insert into Sort_Rev_Exp([№],[Name]) Values (" + textBox1.Text + ",'" + textBox2.Text + "')");;"Departments": Logic.WorkWithDB.Insert("Insert into Departments([№],[Name]) Values (" + textBox1.Text + ",'" + textBox2.Text + "')");;"Services": Logic.WorkWithDB.Insert("Insert into Services([№],[Service_Sort],[Cost]) Values (" + textBox1.Text + ",'" + textBox2.Text + "',"+textBox3.Text+")");;"Currency": Logic.WorkWithDB.Insert("Insert into Currency([№],[Name]) Values (" + textBox1.Text + ",'" + textBox2.Text + "')");;"Merchandise":.WorkWithDB.Insert("Insert into Merchandise([Product_Code],[Name],[Count],[Sale_Price],[Sort]) Values (" + comboBox1.Text + ",'" + textBox2.Text + "'," + textBox3.Text + "," + textBox4.Text + ","+ (comboBox2.SelectedIndex+1).ToString()+")");;"Coming":.WorkWithDB.Insert("Insert into Expenses([№],[Sort_Expenses],[Currency]) VALUES ("+textBox1.Text + ","+(comboBox2.SelectedIndex+1).ToString()+","+(comboBox3.SelectedIndex+1).ToString()+")");.WorkWithDB.Insert("Insert into Coming([Product Code],[Name],Count,Purchase_price,Retail_price,Date,Sum,Supplier) Values (" + textBox1.Text + ",'" + textBox2.Text + "'," + textBox3.Text + "," + textBox4.Text + "," + textBox5.Text+",'"+textBox6.Text+ "',"+ textBox7.Text +","+(comboBox1.SelectedIndex+1).ToString()+")");;"Salary":.WorkWithDB.Insert("Insert into Expenses([№],[Sort_Expenses],[Currency]) VALUES (" + textBox1.Text + "," + (comboBox2.SelectedIndex + 1).ToString() + "," + (comboBox3.SelectedIndex + 1).ToString() + ")");.WorkWithDB.Insert("Insert into Salary([№],[Date],[№Contract],Sum) Values (" + textBox1.Text + ",'" + textBox2.Text + "',"+ (comboBox1.SelectedIndex + 1).ToString() +","+textBox4.Text+ ")");;"Sale":.WorkWithDB.Insert("Insert into Revenue([№],[Sort_Revenue],[Currency]) VALUES (" + textBox1.Text + "," + (comboBox4.SelectedIndex + 1).ToString() + "," + (comboBox5.SelectedIndex + 1).ToString() + ")");.WorkWithDB.Insert("Insert into Sale([№],[Product_Code],[Name],[Sort],[Count],[Price],PriceNDS,Client,Date,Sum) Values (" + textBox1.Text + "," + comboBox1.Text + ",'" + textBox3.Text + "'," + (comboBox2.SelectedIndex+1).ToString() + "," + textBox5.Text + "," + textBox6.Text + "," + textBox7.Text + "," + (comboBox3.SelectedIndex + 1).ToString() +",'"+ textBox9.Text+"',"+textBox10.Text+")");;"Services_Rendered":.WorkWithDB.Insert("Insert into Revenue([№],[Sort_Revenue],[Currency]) VALUES (" + textBox1.Text + "," + (comboBox3.SelectedIndex + 1).ToString() + "," + (comboBox4.SelectedIndex + 1).ToString() + ")");.WorkWithDB.Insert("Insert into Services_Rendered([№],[Service_Sort],[Date],[Start_time],Finish_time,Employee,Revenue) Values (" + textBox1.Text + "," + (comboBox1.SelectedIndex + 1).ToString() + ",'" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "'," + (comboBox2.SelectedIndex + 1).ToString() + "," + textBox7.Text + ")");;"Personal_Data": Logic.WorkWithDB.Insert("Insert into Personal_Data([№Contract],[№Passport],[F.I.O],[Birth_Date],Contract_Date) Values (" + textBox1.Text + ",'" + textBox2.Text +"','"+textBox3.Text+"','"+textBox4.Text+"','"+textBox5.Text+"')");;"Empl_Data": Logic.WorkWithDB.Insert("Insert into Empl_Data([№Contract],[Post],[Department]) Values (" +(comboBox1.SelectedIndex+1).ToString()+ ","+(comboBox2.SelectedIndex+1).ToString()+","+(comboBox3.SelectedIndex+1).ToString()+")");;"Posts": Logic.WorkWithDB.Insert("Insert into Posts([№],[Name],[Salary],[Department]) Values (" + textBox1.Text + ",'" + textBox2.Text + "',"+textBox3.Text+","+(comboBox1.SelectedIndex + 1).ToString() + ")");;: ;;

}.Close();

}

}

}


Министерство образования Республики Беларусь Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники» Фак

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ