Программное средство учёта транспортных средств
При составлении таблиц также необходимо задать отдельное поле, которое будет содержать уникальный идентификационный номер. Этот номер уникален для каждой отдельной таблицы. Его предназначение заключается в однозначном определении каждой записи. Например, можно встретить водителей с полностью совпадающими именами, но номера телефон вряд ли будут совпадать, но сравнивать все поля записи не разумно… Читать ещё >
Программное средство учёта транспортных средств (реферат, курсовая, диплом, контрольная)
Белорусский государственный университет Институт непрерывного образования Кафедра прикладной математики и информатики ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КУРСОВОМУ ПРОЕКТУ по дисциплине «Средства визуального программирования приложений»
на тему Программное средство учёта транспортных средств Выполнил слушатель группы 15ПО13−02з Радиевский Сергей Иванович Руководитель Кобайло А.С.
Минск 2014
АННОТАЦИЯ К курсовому проекту Радиевского Сергея Ивановича слушателя группы 15ПО13−02з специальности 1−40 01 73 «Программное обеспечение информационных систем» на тему «Программное средство учёта транспортных средств»
Ключевые слова: УЧЕТ ТРАНСПОРТНЫХ СРЕДСТВ, MICROSOFT ACCESS, VISUAL STUDIO, C#.
Предметной областью курсового проектирования является автоматизация учета транспортных средств.
Целью курсового проекта является создание программного обеспечение, которое позволит упростить учет транспортных средств, позволит хранить данные систематизировано и легко ими управлять.
При выполнении курсового проектирования были использованы среда визуального программирования Visual Studio 2012, MS Access.
Пояснительная записка к курсовому проекту включает три главы и заключение. Курсовая работа содержит 44 страницы, в том числе 1 приложение из 14 страниц, 6 таблиц, 6 рисунков, 4 литературных источника.
В данном курсовом проекте разрабатывается программное обеспечение, которое предназначено для автоматизации операций по учету использования и обслуживания транспортных средств. До внедрения ЭВМ в различные сферы бизнеса людям приходилось вручную обрабатывать данные, что было весьма трудозатратным. Вручную данные не только сложно обрабатывать, но и невозможно добиться такой систематизации и такого удобства обращения к ним.
На сегодняшний день невозможно представить какой-либо бизнес без использования ЭВМ. Существует огромное количество программного обеспечения, для всевозможных задач. Однако ввиду того, что каждая задача по своему уникальна, использовать готовое программное обеспечение не всегда возможно сразу. Иногда требуется его настройка или доработка.
Главная задача работы организовать хороший способ хранения данных и удобную их обработку. Для этого используются базы данных. Программное обеспечение, которое организует работу с базами данных как правило распространяется с набором инструментов, позволяющих эти данные обрабатывать. Однако их использование требует специализированных знаний, и для бизнеса проще разработать программное обеспечение, работа с которым не требует особых знаний, чем обучать специалистов. Поэтому к разработке базы данных добавляется задача создания программного обеспечения для упрощения работы с базой данных.
Глава 1. Выбор программных средств
Основные требования к программному обеспечению разработки базы данных являются поддержка SQL, задание четкой структуры данных и их связей между собой. Поскольку в задании не требуется создать многопользовательское приложение, для базы данных будет использоваться Microsoft Access.
Один из основных плюсов разработки на MS Access — плотная связь с Microsoft Office. Для нормальной работы созданного приложения достаточно установить Офис. При этом так же устанавливаются все нужные для работы Access библиотеки, ODBC и т. д. Acess достаточно хорошо совместим с MS SQL Server и другими форматами баз данных.
Каждая задача при решении включает в себя выбор способа решения. Acces при всей его внешней простоте позволяет решать весьма сложные задачи. Access достаточно серьезный инструмент, на котором быстро и хорошо можно сделать довольно сложные вещи. Для многих проектов, где важна скорость разработки, Access подходит как нельзя лучше.
Каждый язык программирования предназначен под определенные цели и задачи. И Acess решает достаточно большое количество офисных, бухгалтерских и других подобных задач. Программирование в Access, создание структуры базы данных аналогичны как и в других средах. Acces изначально представлялся как настольная база данных, и в этой сфере ему трудно найти равного соперника.
Access позволяет разработать профессиональную базу данных в более короткие сроки и за меньшие деньги, и вполне удовлетворить запросы заказчика. Кроме того, такое решение обладает большей гибкостью, настраиваемостью, в него легко можно внести дополнения и изменения, быстрее и дешевле чем в промышленные базы данных, наподобие Oracle.
Для программного обеспечения, реализующего интерфейс взаимодействия с пользователем будет выбрана платформа .NET Framework, поскольку отлично подходит для этой задачи. Она предоставляет готовые решения для организации взаимодействия MS Access с разрабатываемой программой, средства для удобного построения пользовательских интерфейсов, а также гарантирует работу на всех платформах, которые поддерживают .NET Framework.
Из поддерживаемых языков технологии был выбран наиболее удобный и мощный язык С#. C# - элегантный, типобезопасный объектно-ориентированный язык, предназначенный для разработки разнообразных безопасных и мощных приложений, выполняемых в среде .NET Framework. С помощью языка C# можно создавать обычные приложения Windows, XML-веб-службы, распределенные компоненты, приложения «клиент-сервер», приложения баз данных и т. д. Visual C# предоставляет развитый редактор кода, конструкторы с удобным пользовательским интерфейсом, встроенный отладчик и множество других средств, упрощающих разработку приложений на базе языка C# и .NET Framework.
В качестве среды программирования была выбрана Visual Studio 2012. Эта среда предоставляет удобные инструменты для работы с кодом, подсветку синтаксиса, автодополнение кода, а также удобное визуальное средство для построения пользовательских интерфейсов.
база данные запрос алгоритм
Глава 2. Разработка технического задания
Согласно заданию необходимо разработать программное обеспечение для автоматизации учета использования и обслуживания транспортных средств.
Программное обеспечение должно хранить данные в специализированной базе данных и предоставлять пользователю простой интуитивно понятный интерфейс.
В качестве средств для разработки была выбрана Visual Studio 2012, платформа .NET Framework и язык С#. Для хранения данных была выбрана Microsoft Access.
Программное обеспечение должно хранить такие данные, как:
1) Информацию о транспортных средствах;
2) Информацию о водителях;
3) Информацию о техническом обслуживании транспортных средств;
4) Список компаний, которые осуществляют техническое обслуживание;
5) Занятость транспортных средств.
Для того чтобы хранить данных, их необходимо сначала добавить, поэтому одно из требований к программному обеспечению — реализовать интерфейс для добавления этих данных.
Такие данные как информация о водителях, список обслуживающих компаний и транспортные средства могут устаревать, поэтому необходимо реализовать функцию удаления этих данных. В тоже время, совсем удалять данные не имеет смысла, поскольку иногда требуется анализ данных, статистика и прочее, поэтому логичнее помечать данные как устаревшие, не использовать их в дальнейшей работе, но при этом оставлять в базе данных.
Глава 3. Разработка базы данных
3.1 Выделение сущностей Согласно техническому заданию в базе данных необходимо хранить следующую информацию:
Список водителей, со следующими данными:
1) Фамилия;
2) Имя;
3) Отчество;
4) Телефон для связи;
5) Возраст;
6) Стаж работы;
7) Какими транспортными средствами (категориями транспортных средств) может управлять данный водитель, согласно его правам;
8) Работает или нет в данное время.
Список транспортных средств:
1) Марка модели;
2) Наименование модели;
3) Год выпуска;
4) Категория транспортного средства;
5) Расход топлива;
6) Объем двигателя;
7) Мощность двигателя;
8) Стоит данное транспортное средство на учете, либо списано.
Список управляющих компаний:
1) Наименование компании;
2) Телефон компании;
3) Электронный адрес компании;
4) Срок действия договора;
5) Действует договор сейчас, либо был расторгнут.
Данные по техническому обслуживанию транспортных средств:
1) Транспортное средство;
2) Обслуживающая компания;
3) Дата технического обслуживания;
4) Причина подачи заявки.
Данные по использованию технических средств:
1) Каким водителем использовалось;
2) Какое транспортное средство использовалось;
3) Временной диапазон использования.
Информацию о водителях логично разделить на две таблицы, выделив отдельно такие данные как категории прав. Причина заключается в том, что современные базы данных не умеют хранить иерархические модели данных. В то время как информация по категориям водительских прав может представлять из себя список, поскольку один водитель может иметь права на управления транспортными средствами разных категорий.
При составлении таблиц также необходимо задать отдельное поле, которое будет содержать уникальный идентификационный номер. Этот номер уникален для каждой отдельной таблицы. Его предназначение заключается в однозначном определении каждой записи. Например, можно встретить водителей с полностью совпадающими именами, но номера телефон вряд ли будут совпадать, но сравнивать все поля записи не разумно с точки зрения ресурсов, кроме такая запись будет очень длинной. Номер представляет из себя натуральное число, и идеально выполняет функции идентификации.
Таким образом база данных будет состоять из шести таблиц. Описание полей таблиц базы данных будет приведено в таблицах 3.1.-3.6.
Таблица 3.1. Транспортные средства
Название поля | Тип | Описание | |
id | Уникальное целое, счетчик | Уникальный номер записи, ключевое поле | |
marka | Текстовое, 255 символов | Марка модели транспортного средства | |
naimenovanie | Текстовое, 255 символов | Наименование модели транспортного средства | |
kategor | Текстовое, 1 символ | Категория транспортного средства, может принимать одно из следующих значений: a, b, c, d, e | |
god | Целое число | Год выпуска транспортного средства | |
moshnost | Целое число | Мощность двигателя в лошадиных силах | |
objem | Число с плавающей запятой | Объем двигателя транспортного средства в литрах | |
rashod | Число с плавающей запятой | Расход топлива на 100 км | |
use | Логический | Стоит на учете или нет | |
Таблица 3.2 Водители
Название поля | Тип | Описание | |
id | Уникальное целое, счетчик | Уникальный номер записи, ключевое поле | |
fio | Текстовое, 255 символов | Фамилия, имя, отчество водителя | |
vozrast | Дата, в формате дд.мм.гггг | Возраст водителя | |
telephon | Текстовое, 255 символов | Номер телефона для связи | |
stag | Целое число | Водительский стаж | |
use | Логический | Работает или уволен/уволился | |
Таблица 3.3. Категории прав водителей
Название поля | Тип | Описание | |
id | Уникальное целое, счетчик | Уникальный номер записи, ключевое поле | |
voditel | Целое число | Уникальный номер водителя из таблицы со списком водителей | |
kategorija | Текстовое, 1 символ | Наименование категории, может принимать одно из следующих значений: a, b, c, d, e | |
Таблица 3.4 Компании, проводящие техническое обслуживание транспортных средств
Название поля | Тип | Описание | |
id | Уникальное целое, счетчик | Уникальный номер записи, ключевое поле | |
naimenov | Текстовое, 255 символов | Наименование компании | |
Текстовое, 255 символов | Адрес электронной почты компании для связи | ||
telephon | Текстовое, 255 символов | Телефон компании для связи | |
nachalo | Дата, в формате дд.мм.гггг | Начало действие договора | |
srok | Дата, в формате дд.мм.гггг | Дата, до которой договор действует | |
use | Логический | Есть ли сотрудничество в данный момент или договор расторгнут | |
Таблица 3.5. Заявки на техническое обслуживание
Название поля | Тип | Описание | |
id | Уникальное целое, счетчик | Уникальный номер записи, ключевое поле | |
data | Дата, в формате дд.мм.гггг | Дата подачи заявки на техническое обслуживание | |
transport | Целое число | Номер транспортного средства, для которого необходимо провести техническое обслуживание | |
kompanija | Целое число | Номер компании, которая будет проводить техническое обслуживание | |
prichina | Текстовое, 255 символов | Причина подачи заявки, такие как какая-нибудь поломка, плановое техническое обслуживание и т. д. | |
Таблица 3.6 Заявки на использование транспортного средства
Название поля | Тип | Описание | |
id | Уникальное целое, счетчик | Уникальный номер записи, ключевое поле | |
dataN | Дата, в формате дд.мм.гггг | Дата начала использования транспортного средства | |
dataF | Дата, в формате дд.мм.гггг | Дата освобождения транспортного средства | |
voditel | Целое число | Уникальный номер водителя, который будет использовать транспортное средство | |
transport | Целое число | Уникальный номер транспортного средства, которое будет использоваться | |
3.2 Инфологическая модель базы данных Инфологическая модель базы данных представлена на Рисунке 3.1.
company | |
id naimenov telephon nachalo srok use | |
cars | |
id marka naimenovanie kategor god moshnost objem reshod use | |
obslugivanie | |
id data transport kompanija prichina | |
ispolzovanie | |
id dataN dataF transport voditel | |
voditel | |
id fio vozrast telephon stag use | |
kategorii | |
id voditel kategorija | |
Рисунок 3.1
Согласно инфологической модели базы данных таблицы имеют следующие связи:
1) Cars — obslugivanie: «один ко многим». Один автомобиль может проходить обслуживание несколько раз.
2) Company — obslugivanie: «один ко многим». Одна компания может оформлять несколько заявок.
3) Cars — ispolzovanie: «один ко многим». Одно транспортное средство может быть во многих заявках на использование.
4) Voditel — ispolzovanie: «один ко многим». Один водитель может быть в нескольких заявках на использование транспортных средств.
5) Voditel — kategorii: «многие ко многим». Один водитель может иметь несколько категорий, и каждая категория может относиться к разным водителям.
3.3 Разработка SQL запросов
Для работы с данными хранящихся в базе данных от Microsoft Access используется язык SQL. SQL — язык структурированных запросов формальный непроцедурный язык программирования, применяемый для создания, модификации и управления данными в произвольной реляционной базе данных управляемой соответствующей системой управления базами данных. Хотя SQL имеет стандартный синтаксис, позволяющий работать с различными системами управления базами данных, которые поддерживают данный язык запросов, имеются некоторые небольшие различия в разных системах управления базами данных.
Так для выборки определенного количества данных в СУБД MySQL используется синтаксис LIMIT N, где N — количество необходимых записей. В СУБД Access используется иной синтаксис, в нем после директивы SELECT указывается TOP N.
Для сравнения дат в СУБД Access, дату необходимо взять с двух сторон в символы «#», например, «date>#13.12.2013#».
Запрос для выборки всех водителей, кроме уволенных:
" SELECT id, fio as `ФИО`, vozrast as `Возраст`, telephon as `Телефон`, stag as `Стаж` FROM voditel WHERE use = true
Для более понятного вывода для наименований столбцов используются псевдонимы. Запрос на выбор всех транспортных средств, стоящих на учете:
SELECT id, marka as `Марка`, naimenovanie as `Модель`, kategor as `Категория`, god as `Год выпуска`, moshnost as `Мощность`, objem as `Объем двигателя`, rashod as `Расход топлива` FROM cars WHERE use = true
Запрос на выбор всех компаний осуществляющих техническое обслуживание транспортных средств:
SELECT id, naimenov as `Наименование`, email as `Email`, telephon as `Телефон`, nachalo as `Начало сотрудничества`, srok as `Окончание сотрудничества` FROM company WHERE use = true
Запрос на загрузку заявок на техническое обслуживание, которые были добавлены после определенной даты. В отличии от предыдущих запросов здесь требуется выборка из нескольких таблиц (obslugivanie, cars, company):
SELECT cars. id as `id транспортного средства`, obslugivanie. data as `дата последнего обслуживания`, cars. marka+cars.naimenovanie as `Транспортное_средство`, company. naimenov as `Компания` FROM obslugivanie, cars, company WHERE obslugivanie. transport=cars.id AND obslugivanie. kompanija=company.id AND cars. use=true AND company. use=true AND obslugivanie. data>#@data# ORDER BY obslugivanie. data
где @data — подставляемый параметр из интерфейса программы, который задается пользователем, который задает дату, после которой будут браться заявки. Здесь требуется выборка из нескольких таблиц (ispolzovanie, cars, voditel):
Запрос на загрузку заявок на использование транспортных средств
SELECT ispolzovanie. id as `id заявки`, ispolzovanie. dataN as `Время использования`, ispolzovanie. dataF as `До`, cars. marka+cars.naimenovanie as `Транспортное средство`, voditel. fio as `Водитель` FROM ispolzovanie, cars, voditel WHERE ispolzovanie. transport=cars.id AND ispolzovanie. voditel=voditel.id AND cars. use=true AND voditel. use=true AND ispolzovanie. dataN=#@data#
где @data — подставляемый параметр из интерфейса программы, который задается пользователем, который задает дату, на какой день надо вывести заявки.
Для добавления транспортных средств используется следующий запрос:
INSERT INTO cars (marka, naimenovanie, kategor, god, moshnost, objem, rashod, use) values (@marka, @naimenovanie, @kategor, @god, @moshnost, @objem, @rashod, true)
Для добавления новых водителей:
INSERT INTO voditel (fio, vozrast, telephon, stag, use) values (@fio, @vozrast, @telephon, @stag, true)
А также для каждой категории прав добавляемого водителя:
INSERT INTO kategorii (voditel, kategorija) values (@voditel,@kategorija, true)"
Для добавления заявки на техническое обслуживание:
INSERT INTO obslugivanie (data, transport, kompanija, prichina) values (@data, @transport, @kompanija, @prichina)" ;
Для добавления заявки на использование:
INSERT INTO ispolzovanie (dataN, dataF, voditel, transport) values (@dataN, @dataF, @voditel, @transport)" ;
Для добавления новой компании по техническому обслуживанию:
INSERT INTO company (naimenov, email, telephon, nachalo, srok, use) values (@naimenov, @email, @telephon, @nachalo, @srok, true)" ;
Для увольнения водителей:
UPDATE voditel SET use=false WHERE id=@id
Для расторжения договора с компанией технического обслуживания:
UPDATE company SET use=false WHERE id=@id
Для списания транспортного средства с учета:
UPDATE cars SET use=false WHERE id=@id
Глава 4. Разработка программного обеспечения
4.1 Разработка интерфейса
Согласно техническому заданию программное средство должно иметь простой интуитивно понятный интерфейс. Поэтому приложение будет иметь оконный интерфейс, используя привычные элементы управления всем пользователям операционной системы Windows.
В базе данных имеется 5 самостоятельных сущностей, поэтому программное средство должно быть разбито на 5 самостоятельных частей. Для удобства будет использоваться компонент TabControl, разделяющий форму на 5 вкладок.
На каждой вкладке будут располагаться элементы интерфейса для взаимодействия со своей сущностью. В каждой вкладке требуется выводить данные по выборке из базы данных. Для вывода этих данных лучше всего подходит компонент DataGridView.
Элементы формы должны обладать подсказками, с помощью которых даже не имеющий опыта работы с данным приложением человек, смог понять, как с ним работать. Вывод подсказок осуществляется с помощью компонентов Label.
Для ввода простых текстовых данных используется компонент Edit. Для ввода чисел NumericUpDown, который позволяет не только вводить числа с клавиатуры, но и с помощью кнопок увеличивать или уменьшать их на заданный шаг, кроме того этот элемент осуществляет проверку на то, чтобы пользователь вводил только числа из указанного диапазона. Для получения выбора пользователя одного из нескольких возможных вариантов используется DropBox, для получения нескольких вариантов CheckBoxList.
Помимо удобства работы интерфейс должен не допускать ввод пользователем некорректных данных, которые будут противоречить структуре базы данных, либо могут привести приложение к сбою.
Некорректный ввод ограничивается самими элементами интерфейса, которые запрещают ввод недопустимых символов.
Если пользователь оставит поле пустым, то приложение должно выдавать подсказку о необходимости заполнения пустого поля. Подсказки выводятся с помощью окон с сообщениями MessageBox.
Приложение должно иметь возможность масштабирования, но при этом предполагается, что мониторы компьютеров, на которых запущена программа будут иметь разрешение не меньше 800×600 пикселей.
Составление интерфейса в среде Visual Studio происходит переносом нужных компонентов на форму, заданием им необходимых свойств и обработчиков событий.
4.2 Разработка алгоритмов
Основные требования к программному обеспечению:
1) Вывод информации из базы данных;
2) Ввод информации в базу данных;
3) Изменение данных;
4) Контроль ввода пользовательских данных на корректность значений.
Для взаимодействия приложения с базой данных будет использоваться коннектор OleDbConnection. Он является стандартным компонентом, предоставляемым используемым в курсовой работе программным обеспечением. Помимо доступа к Microsoft Access он позволяет изменив строку настроек сменить сервер на Microsoft SQL Server или другой.
Строка настроек выглядит как:
" Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb"
В которой указывается провайдер данных, и путь к базе данных.
Использование этого конектора позволяет создавать шаблоны запросов. Достоинством этих шаблонов является то, что изначально указывается общий вид запроса, и позже указываются параметры, которые могут меняться. Это позволяет не переписывать весь запрос.
Для использования этой возможности необходимо использовать следующие строки:
OleDbCommand myoledbcommand = new
OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@data» ,
OleDbType.Date);
myoledbcommand.Parameters[" @data" ]. Value =
dateTimePicker4.Value;
где command — шаблон SQL запроса, в котором перед параметрами указываются символ «@».
myOleDbConnection — коннектор.
Далее указывается тип каждого параметра, и задается значение параметру.
Для реагирования на пользовательские действия используется события, во время которых вызываются функции, которые указываются разработчиком для каждого конкретного события. Событие происходит когда пользователь выполняет то или иное действие: переключение вкладок окна, нажатие на кнопки.
Помимо обработчиков событий в программе имеются функции, которые используются для загрузки данных из базы данных, и при этом вызываются из тела других функций:
void loadCars () — загрузка списка транспортных средств.
loadCompanies () — загрузка списка компаний технического обслуживания.
loadDrivers () — загрузка списка водителей, работающих в компании.
loadTech () — загрузка списка заявок на техническое обслуживание.
loadUsage () — загрузка списка заявок на использование транспортных средств.
Глава 5. Тестирование программного обеспечения
Для отладки приложения в процессе разработки применялся встроенный отладчик среды Visual Studio 2012. Для отладки запросов использовался пакет Microsoft Access.
Для окончательного тестирования программное обеспечение было запущено вне среды разработки и были проверены все функции.
При окончательном тестировании ошибок выявлено не было.
Поскольку программное обеспечение разрабатывалось для однопользовательской работы с базой данных, оно не поддерживает подключение нескольких программ к одной базе. Это стоит учитывать, когда база данных открывается в программе Microsoft Access, в это время приложение не сможет получить доступ к базе данных. Но открывать базу данных не через программу может потребоваться только для отладки либо создания непредусмотренных в программе отчетов.
ЗАКЛЮЧЕНИЕ
В курсовом проекте было необходимо разработать программное обеспечение для учета транспортных средств. Данное программное обеспечение может использоваться для автоматизации процессов обработки и хранения данных.
В ходе работы было составлено техническое задание, разработана структура базы данных, которая больше всего подходит под данную задачу.
База данных была построена в СУБД Access, было разработано программное обеспечение для взаимодействия с базой данных, которое позволяет получать выборки данных, редактировать данные, а также добавлять новые.
В процессе работы были закреплены знания по работе с базами данных, получен опыт составления программных средств, которые могут использоваться в реальных задачах.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Проектирование баз данных СУБД Microsoft Access, Учебное пособие для вузов Н. Н. Гринченко, Е. В. Гусев, Н. П. Макаров. А. Н. Пылькин, Н. И. Цуканова. — М.: Горячая линия-Телеком, 2004. — 240с.: ил.,
2. Microsoft Office Access 2007. Библия пользователя, Майкл Грох, Джозеф Стокман, Гэвин Пауэлл; 1200 стр., с ил.; 2008, 4 кв.; Диалектика
3. Хейлсберг А., Торгерсен М., Вилтамут С., Голд П. Язык программирования C#. СПб.: Питер, 2012. — 784 c. — 4-е изд. — ISBN: 9 785 459 002 836
4. Visual C# 2012 на примерах. Зиборов В. В. / БХВ-Петербург:СПб. / 2013
ПРИЛОЖЕНИЕ А
Рассмотрим часть кода программы, в котором показана примеры подключения к базе данных, загрузки и удаления данных из таблиц и создание запросов с параметрами.
…
{
public partial class Form1: Form
{
public Form1()
{
InitializeComponent ();
}
//функция загрузки транспортных средств в таблицу
private void loadCars ()
Рисунок 1. Вид программного обеспечения с загруженным списком транспортных средств
{
//очищаем комбобоксы от предыдущих данных
comboBox1.Items.Clear ();
comboBox8.Items.Clear ();
comboBox5.Items.Clear ();
//подключаемся к бд
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
myOleDbConnection.Open ();
//запрос
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter («SELECT id, marka as `Марка`, naimenovanie as `Модель`,»
+ «kategor as `Категория`, god as `Год выпуска`, moshnost as `Мощность`, objem as `Объем двигателя`, rashod as `Расход топлива` «
+ «FROM cars WHERE use = true», myOleDbConnection);
DataTable dataTable = new DataTable ();
dbAdapter1.Fill (dataTable);
//загружаем данные в таблицу
dataGridView1.DataSource = dataTable;
//загружаем данные в комбобоксы, номера транспортных средств
foreach (DataRow row in dataTable. Rows){
string TableName = row[" id" ]. ToString ();
comboBox1.Items.Add (TableName);
comboBox8.Items.Add (TableName);
comboBox5.Items.Add (TableName);
}
myOleDbConnection.Close ();
}
//загрузка компаний занимающихся техническим обслуживанием
private void loadCompanies () {
//очищаем комбобоксы от предыдущих данных
comboBox6.Items.Clear ();
comboBox7.Items.Clear ();
//подключаемся к бд
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
myOleDbConnection.Open ();
Рисунок 2. Вид программного обеспечения с загруженным списком обслуживающих компаний
//загружаем все компании, с которыми есть сотрудничество
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter («SELECT id, naimenov as `Наименование`, email as `Email`,»
+ «telephon as `Телефон`, nachalo as `Начало сотрудничества`, srok as `Окончание сотрудничества` «
+ «FROM company WHERE use = true», myOleDbConnection);
DataTable dataTable = new DataTable ();
dbAdapter1.Fill (dataTable);
dataGridView2.DataSource = dataTable;
//заполняем комбобоксы номерами компаний
foreach (DataRow row in dataTable. Rows)
{
string TableName = row[" id" ]. ToString ();
comboBox6.Items.Add (TableName);
comboBox7.Items.Add (TableName);
}
myOleDbConnection.Close ();
}
Рисунок 3. Вид программного обеспечения с загруженным списком водители.
//загрузка водителей
private void loadDrivers ()
{
comboBox4.Items.Clear ();
comboBox9.Items.Clear ();
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
myOleDbConnection.Open ();
//загружаем водителей, которые на данный момент работают
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter («SELECT id, fio as `ФИО`, vozrast as `Возраст`,»
+ «telephon as `Телефон`, stag as `Стаж` «
+ «FROM voditel WHERE use = true», myOleDbConnection);
DataTable dataTable = new DataTable ();
dbAdapter1.Fill (dataTable);
dataGridView3.DataSource = dataTable;
foreach (DataRow row in dataTable. Rows)
{
string TableName = row[" id" ]. ToString ();
comboBox4.Items.Add (TableName);
comboBox9.Items.Add (TableName);
}
myOleDbConnection.Close ();
Рисунок 4. Вид программного обеспечения с загруженным списком техническое обслуживание транспортных средств
}
//загружаем список заявок на техническое обслуживание транспортных средств
private void loadTech ()
{
dataGridView4.DataSource = null;
loadCars ();
loadCompanies ();
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
myOleDbConnection.Open ();
//загружаем все заявки, которые удовлетворяют временному ограничению
string command = «SELECT cars. id as `id транспортного средства`, «
+ «obslugivanie.data as `дата последнего обслуживания`,»
+ «cars.marka+cars.naimenovanie as `Транспортное_средство`,»
+ «company.naimenov as `Компания` «
+ «FROM obslugivanie, cars, company WHERE obslugivanie. transport=cars.id AND obslugivanie. kompanija=company.id «
+ «AND cars. use=true AND company. use=true AND obslugivanie. data>#» +dateTimePicker3.Value.Day.ToString ()+ «/» +
dateTimePicker3.Value.Month.ToString () + «/» + dateTimePicker3.Value.Year.ToString () + «# ORDER BY obslugivanie. data» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter (myoledbcommand);
DataTable dataTable = new DataTable ();
dbAdapter1.Fill (dataTable);
dataGridView4.DataSource = dataTable;
myOleDbConnection.Close ();
}
Рисунок 5. Вид программного обеспечения с загруженным списком график использования транспортных средств
//загрузка заявок на использование транспортных средств
private void loadUsage ()
{
loadCars ();
loadDrivers ();
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
myOleDbConnection.Open ();
//загрузка заявок на указанный день
string command = «SELECT ispolzovanie. id as `id заявки`, «
+ «ispolzovanie.dataN as `Время использования`,»
+ «ispolzovanie.dataF as `До`,»
+ «cars.marka+cars.naimenovanie as `Транспортное средство`,»
+ «voditel.fio as `Водитель` «
+ «FROM ispolzovanie, cars, voditel WHERE ispolzovanie. transport=cars.id AND ispolzovanie. voditel=voditel.id «
+ «AND cars. use=true AND voditel. use=true AND ispolzovanie. dataN=#» + dateTimePicker5.Value.Day.ToString () + «/» +
dateTimePicker5.Value.Month.ToString () + «/» + dateTimePicker5.Value.Year.ToString () + «# «;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter (myoledbcommand);
DataTable dataTable = new DataTable ();
dbAdapter1.Fill (dataTable);
dataGridView5.DataSource = dataTable;
myOleDbConnection.Close ();
}
//добавление нового автомобиля
private void buttonAddTransport_Click (object sender, EventArgs e)
{
if (textBoxMarka.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите название марки»);
return;
}
if (textBoxName.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите наименование модели»);
return;
}
if (comboBoxCategory.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите категорию»);
return;
}
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
//создание запроса с параметрами
string command = «INSERT INTO cars (marka, naimenovanie, kategor, god, moshnost, objem, rashod, use) values (@marka,@naimenovanie,@kategor,@god,@moshnost,@objem,@rashod, true)» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@marka», OleDbType. VarChar, 100);
myoledbcommand.Parameters[" @marka" ]. Value = textBoxMarka. Text;
myoledbcommand.Parameters.Add («@naimenovanie», OleDbType. VarChar, 100);
myoledbcommand.Parameters[" @naimenovanie" ]. Value = textBoxName. Text;
myoledbcommand.Parameters.Add («@kategor», OleDbType. VarChar, 1);
myoledbcommand.Parameters[" @kategor" ]. Value = comboBoxCategory. Text;
myoledbcommand.Parameters.Add («@god», OleDbType. Integer);
myoledbcommand.Parameters[" @god" ]. Value = Convert. ToInt32(comboBoxYear.Text);
myoledbcommand.Parameters.Add («@moshnost», OleDbType. Integer);
myoledbcommand.Parameters[" @moshnost" ]. Value = numericUpDownPower. Value;
myoledbcommand.Parameters.Add («@objem», OleDbType. Single);
myoledbcommand.Parameters[" @objem" ]. Value = numericUpDownV. Value;
myoledbcommand.Parameters.Add («@rashod», OleDbType. Single);
myoledbcommand.Parameters[" @rashod" ]. Value = numericUpDownRashod. Value;
myOleDbConnection.Open ();
myoledbcommand.ExecuteNonQuery ();
myOleDbConnection.Close ();
loadCars ();
}
//загрузка формы — вызов функции загрузки списка автомобилей
private void Form1_Load (object sender, EventArgs e)
{
loadCars ();
}
//функция снятия с учета тр. средства
private void button2_Click (object sender, EventArgs e)
{
if (comboBox1.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала выберете номер транспортного средства, которое собираетесь снять с учета»);
return;
}
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
//создание запроса с параметрами
string command = «UPDATE cars SET use=false WHERE id=@id» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@id», OleDbType. Integer);
myoledbcommand.Parameters[" @id" ]. Value = Convert. ToInt32(comboBox1.Text);
myOleDbConnection.Open ();
myoledbcommand.ExecuteNonQuery ();
myOleDbConnection.Close ();
loadCars ();
}
//добавление новой обслуживающей компании
private void button3_Click (object sender, EventArgs e)
{
if (comboBox6.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала выберете номер обслуживающей компании, с которой собираетесь расторгнуть договор»);
return;
}
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
//создание запроса с параметрами
string command = «UPDATE company SET use=false WHERE id=@id» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@id», OleDbType. Integer);
myoledbcommand.Parameters[" @id" ]. Value = Convert. ToInt32(comboBox6.Text);
myOleDbConnection.Open ();
myoledbcommand.ExecuteNonQuery ();
myOleDbConnection.Close ();
loadCompanies ();
}
//добавление новой обслуживающей компании
private void button4_Click (object sender, EventArgs e)
{
if (textBox10.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите наименование компании»);
return;
}
if (textBox9.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите наименование модели»);
return;
}
if (textBox8.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите категорию»);
return;
}
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
//создание запроса с параметрами
string command = «INSERT INTO company (naimenov, email, telephon, nachalo, srok, use) values (@naimenov,@email,@telephon,@nachalo,@srok, true)» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@naimenov», OleDbType. VarChar, 100);
myoledbcommand.Parameters[" @naimenov" ]. Value = textBox10. Text;
myoledbcommand.Parameters.Add («@email», OleDbType. VarChar, 100);
myoledbcommand.Parameters[" @email" ]. Value = textBox9. Text;
myoledbcommand.Parameters.Add («@telephon», OleDbType. VarChar, 100);
myoledbcommand.Parameters[" @telephon" ]. Value = textBox8. Text;
myoledbcommand.Parameters.Add («@nachalo», OleDbType. Date);
myoledbcommand.Parameters[" @nachalo" ]. Value = dateTimePicker1. Value;
myoledbcommand.Parameters.Add («@srok», OleDbType. Date);
myoledbcommand.Parameters[" @srok" ]. Value = dateTimePicker2. Value;
myOleDbConnection.Open ();
myoledbcommand.ExecuteNonQuery ();
myOleDbConnection.Close ();
loadCompanies ();
}
//удаление водителя
private void button5_Click (object sender, EventArgs e)
{
if (comboBox4.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала выберете номер водителя, с которым собираетесь расторгнуть договор»);
return;
}
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
//создание запроса с параметрами
string command = «UPDATE voditel SET use=false WHERE id=@id» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@id», OleDbType. Integer);
myoledbcommand.Parameters[" @id" ]. Value = Convert. ToInt32(comboBox4.Text);
myOleDbConnection.Open ();
myoledbcommand.ExecuteNonQuery ();
myOleDbConnection.Close ();
loadDrivers ();
}
//добавление водителя
private void button6_Click (object sender, EventArgs e)
{
if (textBox5.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите ФИО»);
return;
}
if (textBox3.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала введите номер телефона»);
return;
}
bool fnd = false;
for (int i=0; i
if (checkedListBox1.GetItemChecked (i))
{
fnd = true;
break;
}
if (!fnd)
{
System.Windows.Forms.MessageBox.Show («Сначала выберете хотя бы одну категорию»);
return;
}
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
//создание запроса с параметрами
string command = «INSERT INTO voditel (fio, vozrast, telephon, stag, use) values (@fio,@vozrast,@telephon,@stag, true)» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@fio», OleDbType. VarChar, 100);
myoledbcommand.Parameters[" @fio" ]. Value = textBox5. Text;
myoledbcommand.Parameters.Add («@vozrast», OleDbType. Date);
myoledbcommand.Parameters[" @vozrast" ]. Value = dateTimePicker8. Value;
myoledbcommand.Parameters.Add («@telephon», OleDbType. VarChar, 100);
myoledbcommand.Parameters[" @telephon" ]. Value = textBox3. Text;
myoledbcommand.Parameters.Add («@stag», OleDbType. Integer);
myoledbcommand.Parameters[" @stag" ]. Value = numericUpDown4. Value;
//получаем id вставленной записи
OleDbDataAdapter dbAdapter1 = new OleDbDataAdapter («SELECT TOP 1 id FROM voditel ORDER BY id DESC», myOleDbConnection);
DataTable dataTable = new DataTable ();
dbAdapter1.Fill (dataTable);
int id = 0;
foreach (DataRow row in dataTable. Rows)
{
id = Convert. ToInt32(row[" id" ]. ToString ());
}
myOleDbConnection.Open ();
myoledbcommand.ExecuteNonQuery ();
char s = 'a';
for (int i = 0; i < checkedListBox1.Items.Count; i++)
if (checkedListBox1.GetItemChecked (i))
{
//создание запроса с параметрами
command = «INSERT INTO kategorii (voditel, kategorija) values (@voditel,@kategorija, true)» ;
myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@voditel», OleDbType. Integer);
myoledbcommand.Parameters[" @voditel" ]. Value = id;
myoledbcommand.Parameters.Add («@kategorija», OleDbType. VarChar, 1);
myoledbcommand.Parameters[" @kategorija" ]. Value = s;
s++;
}
myOleDbConnection.Close ();
loadDrivers ();
}
//обработчик переключения вкладок — загрузка новых данных
private void tabControl1_SelectedIndexChanged (object sender, EventArgs e)
{
if (tabControl1.SelectedIndex == 0)
loadCars ();
else if (tabControl1.SelectedIndex == 1)
loadCompanies ();
else if (tabControl1.SelectedIndex == 2)
loadDrivers ();
else if (tabControl1.SelectedIndex == 3)
loadTech ();
else if (tabControl1.SelectedIndex == 4)
loadUsage ();
}
//подача заявки на тех обслуживание
private void button8_Click (object sender, EventArgs e)
{
if (comboBox8.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала выберете номер транспортного средства»);
return;
}
if (comboBox7.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала выберете номер обслуживающей компании»);
return;
}
if (textBox6.Text == «»)
{
System.Windows.Forms.MessageBox.Show («Сначала укажите причину заявки»);
return;
}
string connectionString = «Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database.accdb» ;
OleDbConnection myOleDbConnection = new OleDbConnection (connectionString);
//создание запроса с параметрами
string command = «INSERT INTO obslugivanie (data, transport, kompanija, prichina) values (@data,@transport,@kompanija,@prichina)» ;
OleDbCommand myoledbcommand = new OleDbCommand (command, myOleDbConnection);
myoledbcommand.Parameters.Add («@data», OleDbType. Date);
myoledbcommand.Parameters[" @data" ]. Value = dateTimePicker4. Value;
myoledbcommand.Parameters.Add («@transport», OleDbType. Integer);
myoledbcommand.Parameters[" @transport" ]. Value = Convert. ToInt32(comboBox8.Text);
myoledbcommand.Parameters.Add («@kompanija», OleDbType. Integer);
myoledbcommand.Parameters[" @kompanija" ]. Value = Convert. ToInt32(comboBox7.Text);
myoledbcommand.Parameters.Add («@prichina», OleDbType. VarChar, 250);
myoledbcommand.Parameters[" @prichina" ]. Value = textBox6. Text;
myOleDbConnection.Open ();
myoledbcommand.ExecuteNonQuery ();
myOleDbConnection.Close ();
loadTech ();
}
//загрузка новый заявок на тех обслуживание
private void button9_Click (object sender, EventArgs e)
{
loadTech ();
}
.ur