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

Обоснование выбора средств разработки приложения. Добавление, удаление, редактирование информации. Отражение информации из базы данных. Поиск информации по выбранной таблице. Проекты Data, Entity, Logic, Firm. Схема взаимодействия проектов программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.01.2015
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

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

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

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

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

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

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

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

на тему

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

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

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

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

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

Минск 2013

ОГЛАВЛЕНИЕ

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

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

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

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

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

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

2.4 Проект Data

2.5 Проект Entity

2.6 Проект Logic

2.7 Проект Firm

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

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

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

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

ЗАКЛЮЧЕНИЕ

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

ПРИЛОЖЕНИЕ А

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

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

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

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

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

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

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

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

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

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

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

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

ВВЕДЕНИЕ

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

CRM - это аббревиатура термина customer relationship management, что переводится как «управление взаимоотношениями с клиентами».

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

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

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

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. Предназначена для заполнения информацией структуры, которая в последующем будет добавлена в БД.

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

В качестве хранилища пользовательской информации решено использовать базу данных СУБД 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 клиента. В дальнейшем может быть использовано для поиска нужных клиентов.

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

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

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

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

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

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

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

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

Функция программного средства

Входные данные

Ожидаемый результат

Фактический результат

1

Создание нового сорта продукции

№: 4

Title : Phones

Success

Success

№: 4

Title : Phones

Error

Error

№4: Mouses

Error

Error

2

Редактирование полей поставщиков

Old:

Adress: Vitebsk

New:

Adress: Minsk

Success

Success

Old:

Tel: 98873413

New:

Tel: 98873415

Success

Success

Old:

№: 4

New:

№: 7

Error

Error

3

Удаление информации

Table: Sort

№ 4

Success.

Success.

Table: Expenses

№ 4

Delete From This Table Impossible

Delete From This Table Impossible

Table: Revenue

№ 4

Delete From This Table Impossible

Delete From This Table Impossible

4

Поиск по таблицам

Table:Sort

Key: 3

3 Printers

3 Printers

Table:Coming

Key: 5

Count

Intel_Computers

HP

Intel_Computers

HP

Table:Coming

Key: 6

Count

NULL.

NULL

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

При открытии программы пользователь видит форму изображенную на рисунке 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 [Электронный ресурс] - Электронные данные - Режим доступа: http://wikipedia.org/.

2. Farrell, C., Harrison, N. Under the Hood of .NET Memory Management - Red Gate Books, 2011 - 238 p.

3. 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 [Электронный ресурс] - Электронные данные - Режим доступа: http://msdn.microsoft.com

5. Nguen [Электронный ресурс] - Электронные данные - Режим доступа: http://blog.nguen.net

6. Yvision [Электронный ресурс] - Электронные данные - Режим доступа: http://yvision.kz

7. Албахари, Дж. С# 5.0. Справочник. Полное описание языка / Дж. Албахари, Бен Албахари - М.: «Вильямс», 2013. - 1008 с.

8. Richter, Jeffrey. CLR via C# / J.Richter - Microsoft Press, 2012 - 863 p.

9. Lerman, J., Miller, R. Programming Entity Framework: DbContext / J. Lerman, R. Miller - O'Reilly Media, 2012 - 256 p.

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

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

ПРИЛОЖЕНИЕ А

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

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Entity;

using System.Data;

using System.Data.SqlClient;

namespace Data

{

public static class DBConnect

{

public static SqlConnection conn;

public static string DBConnection()

{

string Result;

string connStr = @"Data Source=BGG\SQLEXPRESS;

Initial Catalog=Firm;

Integrated Security=True";

conn = new SqlConnection(connStr);

try

{

//пробуем подключиться

conn.Open();

}

catch (SqlException se)

{

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

}

return Result = "DB Connection is successfully";

}

public static TableStruct ReadRecords(string query)

{

DBConnection();

TableStruct NewTable = new TableStruct();

Note NewNote = new Note();

SqlCommand cmd = new SqlCommand(query, conn);

using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))

{

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

{

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

}

NewTable.Notes.Add(NewNote);

while (dr.Read())

{

Note NewNote1 = new Note();

for (int j = 0; j < dr.FieldCount; j++)

{

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

}

NewTable.Notes.Add(NewNote1);

}

dr.Close();

dr.Dispose();

}

cmd.Dispose();

CloseConnection();

return NewTable;

}

public static void CloseConnection()

{

conn.Close();

conn.Dispose();

}

public static Note TableNames()

{

DBConnection();

Note TableNames = new Note();

SqlCommand cmd = new SqlCommand("select * from information_schema.tables", conn);

using(SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))

{

while (dr.Read())

{

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

}

}

CloseConnection();

return TableNames;

}

public static void Insert(string query)

{

DBConnection();

SqlCommand cmd = new SqlCommand(query, conn);

cmd.ExecuteNonQuery();

CloseConnection();

}

public static void Delete(string query)

{

DBConnection();

SqlCommand cmd = new SqlCommand(query, conn);

cmd.ExecuteNonQuery();

CloseConnection();

}

public static void Update(string query)

{

DBConnection();

SqlCommand cmd = new SqlCommand(query, conn);

cmd.ExecuteNonQuery();

CloseConnection();

}

}

}

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Data;

using Entity;

namespace Logic

{

public static class WorkWithDB

{

public static string DBConnect()

{

return Data.DBConnect.DBConnection();

}

public static void CloseConnection()

{

Data.DBConnect.CloseConnection();

}

public static TableStruct ReadRecords(string Table)

{

string query;

switch (Table)

{

case "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]";

break;

case "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.[№]";

break;

case "Posts": query = "SELECT p.[№],p.Name, p.Salary, d.Name as Department FROM Posts as p JOIN Departments as d ON p.Department= d.[№]";

break;

case "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]";

break;

case "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] ";

break;

case "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.[№];";

break;

case "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.[№]";

break;

case "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.[№]";

break;

case "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]";

break;

default: query = "SELECT * FROM " + Table;

break;

}

return Data.DBConnect.ReadRecords(query);

}

public static Note TableNames()

{

return Data.DBConnect.TableNames();

}

public static void Insert(string query)

{

Data.DBConnect.Insert(query);

}

public static void Delete(string query)

{

Data.DBConnect.Delete(query);

}

public static TableStruct Find(string query)

{

return Data.DBConnect.ReadRecords(query);

}

public static void Update(string query)

{

Data.DBConnect.Update(query);

}

}

}

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

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using Logic;

using Entity;

namespace Firm

{

public partial class Form1 : Form

{

public Form f;

public int countOfColumns;

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

DBLabel.Text = Logic.WorkWithDB.DBConnect();

TableStruct NewTable = new TableStruct();

NewTable = Logic.WorkWithDB.ReadRecords("Clients");

NewTableGrid(NewTable);

Note TablesNames = new Note();

TablesNames = Logic.WorkWithDB.TableNames();

for (int i = 1; i < TablesNames.Records.Count; i++)

{

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

}

string query = "SELECT * FROM " + comboBox.Text;

NewTable = Logic.WorkWithDB.Find(query);

for (int i = 0; i < NewTable.Notes[0].Records.Count; i++)

{

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

}

}

private void NewTableGrid(TableStruct table)

{

dataGridView.Columns.Clear();

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

{

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

dataGridView.Columns[i].Name = table.Notes[0].Records[i].ToString();

}

countOfColumns = table.Notes[0].Records.Count;

for (int i = 1; i < table.Notes.Count; i++)

{

dataGridView.Rows.Add();

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

{

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

}

}

}

private void NewTableGrid2(TableStruct table)

{

dataGridView2.Columns.Clear();

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

{

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

}

countOfColumns = table.Notes[0].Records.Count;

for (int i = 1; i < table.Notes.Count; i++)

{

dataGridView2.Rows.Add();

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

{

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

}

}

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

Logic.WorkWithDB.CloseConnection();

}

private void comboBox_SelectedValueChanged(object sender, EventArgs e)

{

TableStruct NewTable = new TableStruct();

NewTable = Logic.WorkWithDB.ReadRecords(comboBox.SelectedItem.ToString());

NewTableGrid(NewTable);

string query = "SELECT * FROM " + comboBox.Text;

NewTable = Logic.WorkWithDB.Find(query);

FindComboBox.Items.Clear();

for (int i = 0; i < NewTable.Notes[0].Records.Count; i++)

{

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

}

}

public void Add_button_Click(object sender, EventArgs e)

{

AddForm f = new AddForm(comboBox.Text);

f.Text = comboBox.Text;

f.Show();

}

private void but_Click(object sender, EventArgs e)

{

f.Hide();

}

private void DelButton_Click(object sender, EventArgs e)

{

switch(comboBox.Text)

{

case "Merchandise":

Logic.WorkWithDB.Delete("DELETE FROM "+comboBox.Text+" WHERE [Product_Code] = "+dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

case "Personal_Data":

Logic.WorkWithDB.Delete("DELETE FROM Services_Rendered WHERE [Employee] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Salary WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Empl_Data WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

case "Empl_Data":

Logic.WorkWithDB.Delete("DELETE FROM Services_Rendered WHERE [Employee] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Salary WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Empl_Data WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№Contract] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

case "Coming":

Logic.WorkWithDB.Delete("DELETE FROM Sale WHERE [Product_Code] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Merchandise WHERE [Product_Code] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [Product Code] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Expenses WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

case "Salary":

Logic.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Expenses WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

case "Sale":

Logic.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Revenue WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

case "Expenses":

MessageBox.Show("Delete From This Table Impossible");

break;

case "Revenue":

MessageBox.Show("Delete From This Table Impossible");

break;

case "Departments":

Logic.WorkWithDB.Delete("DELETE FROM Posts WHERE [Department] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

case "Services_Rendered":

Logic.WorkWithDB.Delete("DELETE FROM " + comboBox.Text + " WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

Logic.WorkWithDB.Delete("DELETE FROM Revenue WHERE [№] = " + dataGridView.CurrentRow.Cells[0].Value.ToString());

break;

default:

Logic.WorkWithDB.Delete("DELETE FROM "+comboBox.Text+" WHERE [№] = "+(dataGridView.CurrentRow.Index+1).ToString());

break;

}

TableStruct NewTable = new TableStruct();

NewTable = Logic.WorkWithDB.ReadRecords(comboBox.Text);

NewTableGrid(NewTable);

}

private void button1_Click(object sender, EventArgs e)

{

string query = "SELECT * FROM "+comboBox.Text+" WHERE ["+FindComboBox.Text+"] = '"+FindTextBox.Text+"'";

TableStruct NewTable = new TableStruct();

try

{

NewTable = Logic.WorkWithDB.Find(query);

NewTableGrid2(NewTable);

}

catch (Exception ex)

{

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

}

}

private void UpdateButton_Click(object sender, EventArgs e)

{

string column = (dataGridView.Columns[dataGridView.CurrentCell.ColumnIndex]).Name.ToString();

string firstcolumn = (dataGridView.Columns[0]).Name.ToString();

// MessageBox.Show(dataGridView.CurrentRow.Cells[0].Value.ToString());

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

try

{

Logic.WorkWithDB.Update(query);

}

catch (Exception ex)

{

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

}

}

}

}

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

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using Logic;

using Entity;

namespace Firm

{

public partial class AddForm : Form

{

public string tablename1;

public AddForm(string TableName)

{

tablename1 = TableName;

this.Text = TableName;

InitializeComponent();

switch (TableName)

{

case "Suppliers": textBox1.Visible = true; textBox2.Visible = true; textBox3.Visible = true; textBox4.Visible = true; textBox5.Visible = true;

label1.Text = "№"; label2.Text = "F.I.O"; label3.Text = "Adress"; label4.Text = "Tel"; label5.Text = "E-mail";

this.Height = 220;

button1.Location = new Point(112, 150);

break;

case "Clients": textBox1.Visible = true; textBox2.Visible = true; textBox3.Visible = true; textBox4.Visible = true; textBox5.Visible = true;

label1.Text = "№";label2.Text = "F.I.O";label3.Text = "Adress";label4.Text = "Tel";label5.Text = "E-mail";

this.Height = 220;

button1.Location = new Point(112, 150);

break;

case "Sort": textBox1.Visible = true; textBox2.Visible = true;

label1.Text = "№"; label2.Text = "Title";

this.Height = 220;

button1.Location = new Point(112, 150);

break;

case "Currency":

this.Height = 220;

button1.Location = new Point(112, 150);

textBox1.Visible = true; textBox2.Visible = true;

label1.Text = "№"; label2.Text = "Name";

TableStruct table5 = new TableStruct();

table5 = Logic.WorkWithDB.ReadRecords("Currency");

textBox1.Text = table5.Notes.Count.ToString();

textBox1.ReadOnly = true;

break;

case "Sort_Rev_Exp":

this.Height = 220;

button1.Location = new Point(112, 150);

textBox1.Visible = true; textBox2.Visible = true;

label1.Text = "№"; label2.Text = "Name";

TableStruct table4 = new TableStruct();

table4 = Logic.WorkWithDB.ReadRecords("Sort_Rev_Exp");

textBox1.Text = table4.Notes.Count.ToString();

textBox1.ReadOnly = true;

break;

case "Revenue":

this.Height = 220;

button1.Location = new Point(112, 150);

label1.Text = "This table is a reflection of tables "+Environment.NewLine+"'Sale' and 'Services_Rendered'";

button1.Text = "Back";

break;

case "Expenses":

this.Height = 220;

button1.Location = new Point(112, 150);

label1.Text = "This table is a reflection of tables " + Environment.NewLine + "'Coming' and 'Salary'";

button1.Text = "Back";

break;

case "Merchandise":

this.Height = 220;

button1.Location = new Point(112, 150);

textBox2.Visible = true; textBox3.Visible = true; textBox4.Visible = true;

comboBox1.Visible = true;

comboBox1.Location = new Point(112, 12);

comboBox2.Visible = true;

comboBox2.Location = new Point(112, 115);

TableStruct table = new TableStruct();


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.