39485

Разработка автоматизированной системы мониторинга деятельности спортивной организации «Весна»

Дипломная

Информатика, кибернетика и программирование

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

Русский

2013-10-04

1.61 MB

10 чел.

ВВЕДЕНИЕ

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

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

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

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


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

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

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

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

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

С развитием прогресса и компьютерного рынка программного


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

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


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

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

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

  1.  Повышение эффективности деятельности путем автоматизации процессов.
  2.  Быстрота обработки и предоставления необходимых данных.
  3.  Простота освоения и использования информационной системы.
  4.  Рассмотрение мониторинга деятельности спортивной организации.
  5.  Сокращение бумажного документооборота внутри организации.
  6.  Уменьшение допускаемых ошибок персоналом.
  7.  Повышение надежности хранения информации.

Информационная система была разработана в связи с отсутствием средств на приобретение дорогостоящего программного обеспечения.

Требования к программному продукту

При постановке задачи, заказчиком были выдвинуты требования к разработке программного продукта, такие как:

  1.  Простота и доступность пользовательского интерфейса.
  2.  Все пункты меню и указания пользователю должны быть четкими и ясными по существу и должны демонстрироваться на заметном месте экрана для быстрого восприятия.
  3.  Программный продукт должен выполнять следующие действия над информацией в таблицах:
  •  добавление записи;
  •  удаление записи;
  •  редактирование записи.
  1.  
    Должен быть организован отказ пользователя от продолжения исполняемых действий в любой момент.
  2.  При обработке таблиц базы данных программа должна контролировать действия пользователя, предупреждая его о совершении неправильного действия при работе.
  3.   Необходимо наличие операций поиска в справочниках и операции фильтрации по оценкам и видам спорта на главной форме для упрощения поиска нужной информации.
  4.  В программном продукте должна быть возможность мониторинга деятельности организации, а именно общее количество оценок по категориям, данная информации отображается в виде гистограммы. И возможность предоставление отчетной информации, которая выводится на печать.
  5.  При зачислении нового ученика в программе должна быть возможность оформить новый договор.
  6.  Защита данных, т.е. система должна включать механизм защиты, предотвращающий несанкционированный доступ.
  7.  Расширяемость, программа должна быть спроектирована таким образом, чтобы была возможность ее модифицировать и дополнить при изменении предъявляемых к ней требований.


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

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

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

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

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

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

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

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

Централизованный характер управления данными в базе данных предполагает необходимость существования некоторого лица (группы лиц), на


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

Структурные элементы базы данных

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

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

  •  имя (Фамилия, Имя, Отчество, Дата рождения);
  •  тип (символьный, числовой, календарный);
  •  длина (например, 15 байт, причем будет определяться максимально возможным количеством символов);
  •  точность для числовых данных, например два десятичных знака для отображения дробной части числа.

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

Файл (таблица) — совокупность экземпляров записей одной структуры.

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

Понятие информационного объекта.

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

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

Информационный объект имеет множество реализации — экземпляров,


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

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

Нормализация отношений

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

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

Нормализация отношений — формальный аппарат ограничений на формирование отношений (таблиц), который позволяет устранить дублирование, обеспечивает непротиворечивость хранимых в базе данных, уменьшает трудозатраты на ведение (ввод, корректировку) базы данных.


3. Разработка БД

3.1. Инфологическая модель

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

- таблиц, которые будут входить в базу данных,

- столбцов, принадлежащих каждой таблице,

- взаимосвязей между таблицами и столбцами.

ER-диаграмма проиллюстрирована в соответствии с рисунком 1.

Рис. 1. ER-диаграмма

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


Рис. 2. Схема базы данных

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

Таблица «Roditeli» соединена с таблицей «Ucheniki» связью «один ко многим», так как за одним родителем может быть закреплено несколько детей занимающихся в спортивной организации.

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

Таблица «Ucheniki» соединена с таблицей «SdachaNormativov» связью «один ко многим», так как ученик может сдавать несколько нормативов.


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

Таблица «Dogovor» соединена с таблицей «Gruppa» связью «один ко многим», так как в одной группе числиться определенное количество учеников.

Таблица «Normativ» соединена с таблицей «SdachaNormativov» связью «один ко многим», так как один норматив могут сдавать несколько учеников.

Таблица «VidSporta» соединена с таблицей «Normativ» связью «один ко многим», так как за одним видом спорта может закрепляться несколько нормативов.

Таблица «VidSporta» соединена с таблицей «Trener» связью «один ко многим», так как к одному виду спорта могут закрепляться несколько тренеров.

Таблица «Gruppa» соединена с таблицей «VidSporta» связью «один ко многим», так как могут существовать несколько групп, относящихся к одному виду спорта.

Таблица «Trener» соединена с таблицей «Gruppa» связью «один ко многим», так как один тренер может работать с несколькими группами.


3.2
. Даталогическая модель

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

Структуры таблиц представлены в соответствии  с таблицами 1-10.

Таблица 1

Структура таблицы “Roditeli”

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

Описание

KodRoditelya

Int

Familiya

Char(30)

Imya

Char(20)

Otchestvo

Char(25)

Adres

Char(256)

Telefon

Char(13)

KemYavlyaetsya

Char(10)

Таблица 2

Структура таблицы “Ucheniki”

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

Описание

KodUchenika

Int

Familiya

Char(30)

Imya

Char(20)

Otchestvo

Char(25)

DataRojdeniya

Data

Adres

Char(256)

Telefon

Char(13)

KodRoditelya

Int


Таблица
3

Структура таблицы “Trener”

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

Описание

KodTrenera

Int

Familiya

Char(30)

Imya

Char(20)

Otchestvo

Char(25)

DataRojdeniya

Data

Adres

Char(256)

Telefon

Char(13)

Spetsilizatsiya

Int

Таблица 4

Структура таблицы “VidSporta”

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

Описание

KodVidSporta

Int

Naimenovanie

Char(50)

Таблица 5

Структура таблицы “Dogovor”

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

Описание

KodDogovora

Int

KodUchenika

Int

KodGruppy

Int

DataZaklucheniya

Data


Таблица
6

Структура таблицы “Gruppa”

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

Описание

KodGruppy

Int

Naimenovanie

Char(10)

KodTrenera

Int

KodVidSporta

Int

Oplata

Money

Таблица 7

Структура таблицы “Normativ”

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

Описание

KodNormativa

Int

Naimenovanie

Char(60)

KodVidSporta

Int

Vremya5

Time

Kolichestvo5

Int

Vremya4

Time

Kolichestvo4

Int

Vremya3

Time

Kolichestvo3

Int

Pol

Char(1)


Таблица
8

Структура таблицы “SdachaNormativov”

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

Описание

KodSdachiNormativov

Int

Uchenik

Int

KodNormativa

Int

Vremya

Time(Null)

Kolichestvo

Int(Null)

Data

Data

Таблица 9

Структура таблицы “DogovorIstoriya”

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

Описание

KodDogovor

Int

KodUchenika

Int

KodGruppy

Int

DataZaklucheniya

Data

DataOtchisleniya

Data

Таблица 10

Структура таблицы “Autotisation”

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

Описание

KodAutotisation

Int

login

Char(30)

password

Char(50)

KodPolzovatelya

Int


3
.3. Программная реализация БД

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

CREATE DATABASE SportShkola

ON

( NAME = SportShkola_dat,

FILENAME = 'C:\temp\SportShkola_dat.mdf',

SIZE = 10MB,

MAXSIZE = 200MB,

FILEGROWTH = 1MB )

LOG ON

( NAME = SportShkola_log,

FILENAME = 'C:\temp\SportShkola_log.ldf',

SIZE = 5MB,

MAXSIZE = 20MB,

FILEGROWTH = 100KB )

Go

Основным объектом хранения базы данных является таблица, поэтому все SQL-запросы — это операции над таблицами. Создание таблиц в базе данных производится командой “CREATE TABLE”. Пример создания таблицы “ Roditeli ” с помощью запроса:

use SportShkola

CREATE TABLE Roditeli

(

KodRoditelya int IDENTITY(1,1)

CONSTRAINT prkKodRoditelya PRIMARY KEY CLUSTERED,

Familiya char(30) NOT NULL,

Imya char(20) NOT NULL,

Otchestvo char(25) NOT NULL,

Adres char(256) NOT NULL,

Telefon char(13) NOT NULL,

KemYavlyaetsya char (10) NOT NULL

)

Go

В соответствии с рисунком 3 представлено создание базы данных и


таблиц.

Рис. 3. Создание базы данных и таблиц

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

Рис. 4. Заполнение базы данных


Представления

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

create view vRoditeli as

select KodRoditelya as [Код],

RTRIM(Familiya) as [Фамилия],

RTRIM(Imya) as [Имя],

RTRIM(Otchestvo) as [Отчество],

RTRIM(Telefon) as [Телефон],

RTRIM(Adres) as [Адрес],

KemYavlyaetsya as [Кем является]

from Roditeli

Процедуры

Хранимая процедура – это именованный набор команд Transact-SQL, хранящийся непосредственно на сервере и представляющий собой самостоятельный объект базы данных. Хранимая процедура может быть вызвана клиентской программой, другой хранимой процедурой или триггером. Пример создания хранимой процедуры “ AddToUcheniki ”:

create procedure AddToUcheniki

@F char(30), @I char(20),@O char(25),@DR date, @A char(256),@T char(13),@KR int

as

insert into Ucheniki(Familiya,Imya,Otchestvo,DataRojdeniya,Adres,Telefon,KodRoditelya)

Values(@F,@I,@O,@DR,@A,@T,(select KodRoditelya from Roditeli where RTRIM(Familiya)+' '+LEFT(Imya,1)+'.'+LEFT(Otchestvo,1)+'.'= RTRIM(@KR)))

Пример создания хранимой процедуры “ EditUcheniki ”:

create procedure EditUcheniki

@id int,@F char(30),@I char(20),@O char (25),@DR date, @A char(256),@T char(13),@KR int


as

update Ucheniki

set Familiya=@F,

Imya=@I,

Otchestvo=@O,

DataRojdeniya=@DR,

Adres=@A,

Telefon=@T,

KodRoditelya=(select KodRoditelya from Roditeli where RTRIM(Familiya)+' '+LEFT(Imya,1)+'.'+LEFT(Otchestvo,1)+'.'= RTRIM(@KR))

where KodUchenika=@id

Триггеры

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

Пример триггера “ DogovorIstoriyaADD ”, используемого в базе данных:

create trigger DogovorIstoriyaADD

ON Dogovor

FOR DELETE AS

insert into DogovorIstoriya

select del.KodDogovor,

RTRIM(u.Familiya)+' '+LEFT(u.Imya,1)+'.'+LEFT(u.Otchestvo,1)+'.',

RTRIM(g.Naimenovanie)+', '+RTRIM(t.Familiya)+' '+LEFT(t.Imya,1)+'.'+LEFT(t.Otchestvo,1)+'.',

del.DataZaklucheniya,GETDATE()

from deleted del

inner join Ucheniki u

on del.KodUchenika=u.KodUchenika

inner join Gruppa g

on del.KodGruppy=g.KodGruppy

inner join Trener t

on t.KodTrenera=g.KodTrenera


GO

Описание всех остальных таблиц, представлений, процедур и триггеров, созданных в базе данных, представлено в приложении А.


4. Разработка клиентского приложения

4.1. Обоснование выбора и описание сред разработки

Выбор среды разработки Microsoft SQL Server

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

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

Преимущества Microsoft SQL Server 2008:

  •  Полная Web ориентированность. Осуществление запросов, анализ и управление данными через Web. Использование языка XML для обмена данными между удаленными системами. Простой и безопасный доступ к данным с помощью Web - браузеров, быстрый поиск необходимых документов. Анализ потоков данных и получение информации о пользователях, в том числе и через Web.
  •  Масштабируемость и надежность. SQL Server 2008 обеспечивает практически неограниченный рост объемов хранения данных за счет увеличения надежности и масштабируемости системы, используя все преимущества мультипроцессорной обработки данных. Это безопасная, надежная, масштабируемая платформа, защищающая информацию в приложениях и повышающая её доступность. Включенная в неё инновационная инфраструктура управления, основанная на политиках, позволяет определять политики для явного и автоматического администрирования серверных сущностей на одном или нескольких серверах. Кроме того, оптимизированная платформа SQL Server 2008 открывает путь к предсказуемой производительности обработки запросов. Инфраструктура SQL Server 2008 стала более масштабируемой.


Она способна формировать отчеты и выполнять анализ любого объема и сложности, одновременно облегчая пользователям доступ к данным за счет более тесной интеграции с Microsoft Office. В результате ИТ-специалисты могут распространить использование бизнес-аналитики по всей организации. SQL Server 2008 позволяет пользователям консолидировать разнородные данные в корпоративном хранилище, выводя организацию хранилищ данных на новый уровень.

  •  Скорость создания решений. SQL Server 2008 в сочетании с .NET Framework уменьшает время разработки, внедрения и выхода на рынок современных приложений, ускоряет процесс поиска данных, упрощает управление, позволяет использовать создаваемые пользователем функции в других приложениях, предоставляет широкие возможности для создания Web-приложений. Среда ADO.NET Entity Framework повышает эффективность труда разработчиков, поскольку теперь они имеют дело не непосредственно с таблицами и полями, а с логическими информационными сущностями, согласованными с бизнес-требованиями. Более того, они могут создавать приложения, позволяющие пользователям копировать данные на собственные устройства, а позже синхронизовать их с центральными серверами.

Ядро реляционной базы данных SQL Server 2008 включает следующие возможности для создания и поддержки различных приложений с хранилищами данных:

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


Выбор среды разработки Microsoft Visual Studio

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

Microsoft Visual Studio объединяет в себе огромное количество функций, позволяющих осуществлять разработки для Windows всех версий, в том числе и 8, Интернета, SharePoint, различных мобильных устройств и облачных технологий. В Visual Studio реализуется новая среда разработчика, благодаря которой создавать приложения стало проще. Microsoft Visual Studio - это обновленная и упрощенная программная среда, для которой характерна высокая производительность, причем она не зависит от особенностей оборудования.

Объектно-ориентированный язык программирования С#  является последним из широко распространенных языков программирования, вписывает в себя весь имеющийся опыт и выбраны лучшие стороны существующих языков программирования. Свой синтаксис C# во многом унаследовал от C++ и Java. Разработчики, имеющие опыт написания приложений на этих языках, найдут в C# много знакомых черт. Но вместе с тем он является во многом новаторским - аттрибуты, делегаты и события, прекрасно вписанные в общую идеологию языка.


4.2. Описание основной функциональности системы

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

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

Пример функциональности модуля для входа:

namespace СпортШкола

{

public partial class vhod : Form

{

public vhod()

{

InitializeComponent();

}


private void bu_vhod_Click(object sender, EventArgs e)

{

if (tb_log_vhod.Text == "" || tb_log_pasw.Text == "")

{

MessageBox.Show("Введите логин и пароль!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

else

{

if (int.Parse(autotisationTableAdapter.CheckLogPass(tb_log_vhod.Text, tb_log_pasw.Text).ToString()) == 1)

{

(new glav(autotisationTableAdapter.PravaDostupa(tb_log_vhod.Text, tb_log_pasw.Text).ToString().TrimEnd())).Show();

this.Hide();

}

else

{

MessageBox.Show("Неверно указан логин и/или пароль!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}

}

private void vhod_Load(object sender, EventArgs e)

{

this.autotisationTableAdapter.Fill(this.sportShkolaDataSet.Autotisation);

}

}

}

Пример операции фильтрации по оценкам и нормативам главной формы:

private void bu_filtr_Click(object sender, EventArgs e)

{

if (rb_ocenka.Checked)

{

vSdachaBindingSource.Filter = "Оценка LIKE '%" + tb_filter.Text.ToLower() + "%'";


}

else

{

vSdachaBindingSource.Filter = "Норматив LIKE '%" + tb_filter.Text.ToLower() + "%'";

}

}

}

}

Пример поиска нужной информации  в справочниках. Например поиск по фамилии в справочнике Тренера:

private void tsbPoiskTrenera_Click(object sender, EventArgs e)

{

Search(dgv_trenera, bn_trenera, 1);

}

private void dgv_trenera_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

{

bn_trenera.Items[10].Enabled = true;

bn_trenera.Items[11].Enabled = true;

editing = true;

}

private void dgv_trenera_UserAddedRow(object sender, DataGridViewRowEventArgs e)

{

AddedRow(dgv_trenera, 1);

}

Пример функциональности модуля Мониторинг:

namespace СпортШкола

{

public partial class Monitoring : Form

{

public Monitoring()

{

InitializeComponent();

}


private void Monitoring_Load(object sender, EventArgs e)

{

this.chartReportTableAdapter.Fill(this.sportShkolaDataSet.ChartReport);

string[] arrx = new string[4];

int[] arry = new int[4];

for (int i = 0; i < 4; i++)

{

arrx[i] = chartReportTableAdapter.GetData()[i].Оценка.ToString();

arry[i] = int.Parse(chartReportTableAdapter.GetData()[i].Количество.ToString().TrimEnd());

}

chart1.Series[0].Points.DataBindXY(arrx, arry);

}

private void bu_otchet_Click(object sender, EventArgs e)

{

string[] arrx = new string[4];

int[] arry = new int[4];

for (int i = 0; i < 4; i++)

{

arrx[i] = chartReportTableAdapter.GetDataByDate(dateTimePicker1.Value, dateTimePicker2.Value)[i].Оценка.ToString();

arry[i] = int.Parse(chartReportTableAdapter.GetDataByDate(dateTimePicker1.Value, dateTimePicker2.Value)[i].Количество.ToString().TrimEnd());

}

chart1.Series[0].Points.DataBindXY(arrx, arry);

}

}

}

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

Взаимодействие модулей

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


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

В соответствии с рисунком 5 проиллюстрирована схема взаимодействия модулей системы.

Рис. 5. Схема взаимодействия модулей


5. Тестирование и развертывание

5.1. Требования к составу и параметрам технических средств

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

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

Windows 7 -  пользовательская операционная система семейства Windows NT, следующая по времени выхода за Windows Vista и предшествующая Windows 8.

Microsoft SQL Server 2008 — система управления реляционными базами данных, разработанная корпорацией Microsoft. Основной используемый язык запросов — Transact-SQL, создан совместно Microsoft и Sybase, используется для создания базы данных;

Microsoft Visual Studio — это интегрированную среду разработки программного обеспечения, а также ряд других инструментальных средств.  Позволяет разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы. Из компонентов выбран объектно-ориентированный язык программирования С#;

MS Word используется для создания документации;

MS PowerPoint используется для создания презентации.


5.2
. Описание работы программы

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

Рис. 6. Вход

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

В соответствии с рисунком 7 представлена главная форма, на которой происходит учет нормативов.

Рис. 7. Главная форма


Данные по нормативам можно рассмотреть в виде отчета и вывести на печать как показано в соответствии с рисунком 8 .

Рис. 8. Отчет

В соответствии с рисунком 9 на главной форме предусмотрена фильтрация по оценкам и нормативам. Это позволяет упростить поиск нужной информации.

Рис. 9. Фильтрация

Результат фильтрации представлен в соответствии с рисунком 10.

Рис. 10. Результат фильтрации

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


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

Рис. 11. Справочники

В соответствии с рисунками 12, 13 проиллюстрированы некоторые из них.

Рис.12. Ученики

Рис. 13. Нормативы

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

Рис. 14. Поиск

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


команду: Документация – Мониторинг работы как показано в соответствии с рисунком 15 .

Рис. 15. Мониторинг

Мониторинг работы представлен в соответствии с рисунком 16.

Рис. 16. Результат мониторинга

Администратор данной системы может зарегистрировать нового пользователя. Для этого необходимо сделать команду Файл – Регистрировать пользователя как показано на рисунке 17.

Рис. 17. Вызов команды на регистрацию.

Модуль регистрации представлен в соответствии с рисунком 18 .


Рис. 18. Регистрация пользователя

В программном продукте предусмотрено оформление нового договора, как показано в соответствии с рисунком 19.

Рис. 19. Оформление договора

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


Рис. 20. Действующие договора

В программном продукте есть возможность смены пользователя. Для этого необходимо вызвать команду Файл – Сменить пользователя. В результате откроется окно для входа в систему.

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

Рис. 21. Вход пользователя


В соответствии с рисунком 22 проиллюстрирована возможность смены пароля для пользователей. Необходимо вызвать команду Файл – Изменить пароль.

Рис. 22. Вызов команды

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

Рис.23. Изменение пароля

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

Рис. 24. Ошибка


Рис. 25. Сохранить

Рис. 26. Подтвердить


ЗАКЛЮЧЕНИЕ

В ходе работы был разработан программный продукт «Автоматизированная система мониторинга деятельности спортивной организации “Весна”», который производит мониторинг успеваемости, что позволяет спортивной школе ставить цели для того, чтобы подняться на уровень выше. Программа выполняет предъявленные к ней требования во время постановки задачи.

Проектное решение реализовано в среде разработки Microsoft Visual Studio в виде программного продукта, содержащего программные файлы, файлы баз данных.

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


СПИСОК ЛИТЕРАТУРЫ

  1.  Абрамян М., Visual C# на примерах. - БХВ-Петербург, 2008. – 496 с.
  2.  Глушаков С. В., Ломотько Д. В., Базы данных. – АСТ, 2002. – 326 с.
  3.  Карпова Г.Е., Базы данных модели, разработка, реализация. – СПб.: «Питер», 2001. – 304 с.
  4.  Климов А., C#. Советы программистам. - БХВ-Петербург, 2008. – 544 с.
  5.  Петкович Душан, Microsoft SQL Server 2008.– BHV, 2009. – 752 с.
  6.  Фролов А. В., Фролов Г. В., Визуальное проектирование приложений C#. - КУДИЦ-Образ, 2003. – 512 с.
  7.  Фленов М., Transact-SQL. – СПб.: БВХ-Петербург, 2006. – 244 с.
  8.  Лобел Леонард, Браст Эндрю Дж., Форте Стивен, Разработка приложений на основе Microsoft SQL Server 2008. – BHV, 2010. – 1024с.
  9.  Пауэрс Л., Снелл М., Microsoft Visual Studio 2008. - БХВ-Петербург, 2009. – 1191 с.
  10.  Хотек Майк, Microsoft SQL Server 2008. Реализация и обслуживание. - BHV, 2011. – 576с.
  11.  Чарльз Петцольд, Программирование в тональности C#. - Русская Редакция, 2004. – 512 с.
  12.   Филипенко М., Генератор отчётов с визуальным дизайнером в Visual Studio. – Режим доступа: http://www.fast-report.com/ru/blog/VisualStudio.htm
  13.   Островский И., Модель памяти C# в теории и на практике. – Режим доступа: http://msdn.microsoft.com/ru-ru/magazine/jj863136.aspx
  14.   Электронная документация по Microsoft SQL Server 2008. – Режим

доступа: http://technet.microsoft.com/ru-ru/library/ms130214(v=sql.100).aspx


ПРИЛОЖЕНИЕ
 А

CREATE DATABASE SportShkola

ON

( NAME = SportShkola_dat,

   FILENAME = 'C:\temp\SportShkola_dat.mdf',

   SIZE = 10MB,

   MAXSIZE = 200MB,

   FILEGROWTH = 1MB )

LOG ON

( NAME = SportShkola_log,

   FILENAME = 'C:\temp\SportShkola_log.ldf',

   SIZE = 5MB,

   MAXSIZE = 20MB,

   FILEGROWTH = 100KB )

go

use SportShkola

CREATE TABLE Roditeli

(

KodRoditelya int IDENTITY(1,1)

CONSTRAINT prkKodRoditelya PRIMARY KEY CLUSTERED,

Familiya char(30) NOT NULL,

Imya char(20) NOT NULL,

Otchestvo char(25) NOT NULL,

Adres char(256) NOT NULL,

Telefon char(13) NOT NULL,

KemYavlyaetsya char (10) NOT NULL

)

go

use SportShkola

CREATE TABLE Ucheniki

(

KodUchenika int IDENTITY(1,1)

CONSTRAINT prkKodUchenika PRIMARY KEY CLUSTERED,

Familiya char(30) NOT NULL,

Imya char(20) NOT NULL,


Otchestvo char(25) NOT NULL,

DataRojdeniya date NOT NULL

CONSTRAINT DRUchenikichek CHECK (DataRojdeniya <= getdate()),

Adres char(256) NOT NULL,

Telefon char(13) NULL,

KodRoditelya int

CONSTRAINT frKodRoditelya FOREIGN KEY

REFERENCES Roditeli(KodRoditelya)

)

go

use SportShkola

CREATE TABLE VidSporta

(

KodVidSporta int IDENTITY(1,1)

CONSTRAINT prkVidSporta PRIMARY KEY CLUSTERED,

Naimenovanie char(50) NOT NULL

)

go

use SportShkola

CREATE TABLE Trener

(

KodTrenera int IDENTITY(1,1)

CONSTRAINT prkKodTrenera PRIMARY KEY CLUSTERED,

Familiya char(30) NOT NULL,

Imya char(20) NOT NULL,

Otchestvo char(25) NOT NULL,

DataRojdeniya date NOT NULL

CONSTRAINT DRchek CHECK (DataRojdeniya <= getdate()),

Adres char(256) NOT NULL,

Telefon char(13) NOT NULL,

Spetsilizatsiya int

CONSTRAINT frSpetsilizatsiya FOREIGN KEY

REFERENCES VidSporta(KodVidSporta)

)

go

use SportShkola


CREATE TABLE Gruppa

(

KodGruppy int IDENTITY(1,1)

CONSTRAINT prkKodGruppy PRIMARY KEY CLUSTERED,

Naimenovanie char(10) NOT NULL,

KodTrenera int

CONSTRAINT frKodTrenera FOREIGN KEY

REFERENCES Trener(KodTrenera),

KodVidSporta int

CONSTRAINT frKodVidSportaGruppa FOREIGN KEY

REFERENCES VidSporta(KodVidSporta),

Oplata money NOT NULL

)

go

use SportShkola

CREATE TABLE Normativ

(

KodNormativa int IDENTITY(1,1)

CONSTRAINT prkKodNormativa PRIMARY KEY CLUSTERED,

Naimenovanie char(60) NOT NULL,

KodVidSporta int

CONSTRAINT frKodVidSportaNormativ FOREIGN KEY

REFERENCES VidSporta(KodVidSporta),

Vremya5 time NULL,

Kolichestvo5 int NULL,

Vremya4 time NULL,

Kolichestvo4 int NULL,

Vremya3 time NULL,

Kolichestvo3 int NULL,

Pol char(1) NOT NULL

)

go

use SportShkola

CREATE TABLE SdachaNormativov

(

KodSdachaNormativov int IDENTITY(1,1)


CONSTRAINT prkKodSdachaNormativov PRIMARY KEY CLUSTERED,

KodUchenika int

CONSTRAINT frkUchenikaSdachaNormativov FOREIGN KEY

REFERENCES Ucheniki(KodUchenika),

KodNormativa int

CONSTRAINT frKodNormativa FOREIGN KEY

REFERENCES Normativ(KodNormativa),

Vremya time NULL,

Kolichestvo int NULL,

Data date NOT NULL

)

go

use SportShkola

CREATE TABLE Dogovor

(

KodDogovor int IDENTITY(1,1)

CONSTRAINT prkKodDogovor PRIMARY KEY CLUSTERED,

KodUchenika int

CONSTRAINT frkUchenikaDogovor FOREIGN KEY

REFERENCES Ucheniki(KodUchenika),

KodGruppy int

CONSTRAINT frKodGruppy FOREIGN KEY

REFERENCES Gruppa(KodGruppy),

DataZaklucheniya date NOT NULL

DEFAULT (getdate())

CONSTRAINT DZchek CHECK (DataZaklucheniya <= getdate()),

)

go

use SportShkola

CREATE TABLE DogovorIstoriya

(

KodDogovor int

CONSTRAINT prkKodDogovorIstoriya PRIMARY KEY CLUSTERED,

Uchenik char (35),

Gruppa char (47),

DataZaklucheniya date NOT NULL,


DataOtchisleniya date NOT NULL

DEFAULT (getdate())

)

go

use SportShkola

CREATE TABLE Autotisation

(

KodAutotisation int IDENTITY(1,1)

CONSTRAINT prkKodAutotisation PRIMARY KEY CLUSTERED,

login char(30) NOT NULL,

password char(50) NOT NULL,

KodPolzovatelya int NULL

CONSTRAINT frKodPolzovatelya FOREIGN KEY

REFERENCES Roditeli(KodRoditelya)

)

go


ПРИЛОЖЕНИЕ В

Главная форма:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Timers;

using System.IO;

namespace СпортШкола

{

   public partial class glav : Form

   {

       private int mode;

       private string login;

       private int countRows = 0;

       public glav(string user)

       {

           InitializeComponent();

           System.Timers.Timer myTimer = new System.Timers.Timer();

           myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);

           myTimer.Start();

           tsslTime.Text = Convert.ToString(System.DateTime.Now.ToLongTimeString());

           login = user;

           if (user == "admin")

           {

               mode = 0;

               tsslLogin.Text = user;

               tsslFIO.Text = "";

           }

           else

           {

               mode = 1;

               tsslLogin.Text = "user";

               tsslFIO.Text = user;

           }

       }

       public void DisplayTimeEvent(object source, ElapsedEventArgs e)

       {

           tsslTime.Text = Convert.ToString(System.DateTime.Now.ToLongTimeString());

       }

       private void сменитьПользователяToolStripMenuItem_Click(object sender, EventArgs e)

       {

           this.Hide();

           (new vhod()).Show();

       }

       private void toolStripMenuItem3_Click(object sender, EventArgs e)


       {

           (new IzminitParol(login)).ShowDialog();

       }

       private void регистрацияПользователяToolStripMenuItem_Click(object sender, EventArgs e)

       {

           (new Registr()).ShowDialog();

       }

       private void справочникиToolStripMenuItem_Click(object sender, EventArgs e)

       {

           (new spravochniki()).ShowDialog();

       }

       private void выходToolStripMenuItem_Click(object sender, EventArgs e)

       {

           Close();

       }

       private void отчетЗаГодToolStripMenuItem_Click(object sender, EventArgs e)

       {

           (new Monitoring()).ShowDialog();

       }

       private void оформитьДоговорToolStripMenuItem_Click(object sender, EventArgs e)

       {

           (new dogovor()).ShowDialog();

       }

       private void действующиеДоговораToolStripMenuItem_Click(object sender, EventArgs e)

       {

           (new SpisokDogovorov()).ShowDialog();

       }

       private void инструкцияПользователяToolStripMenuItem_Click(object sender, EventArgs e)

       {

           //

       }

       private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

       {

           (new o_proge()).ShowDialog();

       }

       private void glav_Load(object sender, EventArgs e)

       {

           this.normativTableAdapter.Fill(this.sportShkolaDataSet.Normativ);

           this.uchenikiFIOTableAdapter.Fill(this.sportShkolaDataSet.UchenikiFIO);

           if (login == "admin")

           {

               this.vSdachaTableAdapter.Fill(this.sportShkolaDataSet.vSdacha);

           }

           else

           {

               this.vSdachaTableAdapter.FillByOtchet(this.sportShkolaDataSet.vSdacha, login);

           }

           bn_glav.Items[10].Enabled = false;

           bn_glav.Items[11].Enabled = false;

           dataGridView1.AllowUserToAddRows = false;


           countRows = dataGridView1.RowCount;

           if (mode == 1)

           {

               bn_glav.Items[9].Enabled = false;

               bn_glav.Items[12].Enabled = false;

               dataGridView1.ReadOnly = true;

               регистрацияПользователяToolStripMenuItem.Enabled = false;

               справочникиToolStripMenuItem.Enabled = false;

               отчетЗаГодToolStripMenuItem.Enabled = false;

               оформитьДоговорToolStripMenuItem.Enabled = false;

               действующиеДоговораToolStripMenuItem.Enabled = false;

           }

       }

       private void bu_close_Click(object sender, EventArgs e)

       {

           Close();

       }

       private void glav_FormClosed(object sender, FormClosedEventArgs e)

       {

           Application.Exit();

       }

       private void glav_FormClosing(object sender, FormClosingEventArgs e)

       {

           if (tsbSaveGlav.Enabled)

               tsbSaveGlav_Click(sender, e);

       }

       private void tsbAddGlav_Click(object sender, EventArgs e)

       {

           dataGridView1.AllowUserToAddRows = true;

           dataGridView1.CurrentCell = dataGridView1[1, dataGridView1.RowCount - 1];

           bn_glav.Items[9].Enabled = false;

           bn_glav.Items[10].Enabled = true;

           bn_glav.Items[11].Enabled = true;

           countRows = dataGridView1.RowCount - 1;

       }

       private void Cancel(DataGridView dgv, BindingNavigator bn)

       {

           dgv.CancelEdit();

           bn.Items[9].Enabled = true;

           bn.Items[10].Enabled = false;

           bn.Items[11].Enabled = false;

           dgv.AllowUserToAddRows = false;

           int curcell = dgv.CurrentCell.RowIndex;

           vSdachaTableAdapter.Fill(sportShkolaDataSet.vSdacha);

           if (curcell >= dgv.RowCount)

               dgv.CurrentCell = dgv[1, 0];

           else

               dgv.CurrentCell = dgv[1, curcell];

           countRows = dgv.RowCount;

           for (int i = 0; i < dgv.RowCount - 1; i++)

           {

               dgv.Rows[i].ErrorText = null;

           }


       }

       private void tsbCancelGlav_Click(object sender, EventArgs e)

       {

           if (MessageBox.Show("Отменить?\nВсе несохраненные изменения будут утеряны!", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)

           {

               Cancel(dataGridView1, bn_glav);

               MessageBox.Show("Все изменения отменены!", "Отмена", MessageBoxButtons.OK, MessageBoxIcon.Information);

           }

       }

       private void tsbSaveGlav_Click(object sender, EventArgs e)

       {

           if (MessageBox.Show("Сохранить изменения?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)

           {

               try

               {

                   bool prov = false;

                   int count = 0;

                   if (dataGridView1.AllowUserToAddRows == true)

                       count = dataGridView1.RowCount - 1;

                   else

                       count = dataGridView1.RowCount;

                   for (int i = 0; i < count; i++)

                   {

                       StringBuilder sb = new StringBuilder("");

                       for (int j = 1; j < dataGridView1.ColumnCount - 1; j++)

                       {

                           if (dataGridView1.Rows[i].Cells[j].Value.ToString() == "")

                           {

                               sb.Append("В поле " + dataGridView1.Columns[j].HeaderText.ToString() + " не допускаются пустые значения!\n");

                               prov = true;

                           }

                       }

                       dataGridView1.Rows[i].ErrorText = sb.ToString();

                   }

                   if (prov) throw new Exception();

               }

               catch

               {

                   MessageBox.Show("Ошибка сохранения данных!\nДанные не сохранены!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

                   return;

               }

               int curcell = dataGridView1.CurrentRow.Index;

               try

               {

                   for (int i = 0; i < countRows; i++)

                   {


                       vSdachaTableAdapter.EditSdachaNormativov(int.Parse(dataGridView1[0, i].Value.ToString()), dataGridView1[1, i].Value.ToString(), dataGridView1[2, i].Value.ToString(), TimeSpan.Parse(dataGridView1[3, i].Value.ToString()), int.Parse(dataGridView1[4, i].Value.ToString()), DateTime.Parse(dataGridView1[5, i].Value.ToString()));

                   }

                   for (int i = countRows; i < dataGridView1.RowCount - 1; i++)

                   {

                       vSdachaTableAdapter.AddToSdachaNormativov(dataGridView1[1, i].Value.ToString(), dataGridView1[2, i].Value.ToString(), TimeSpan.Parse(dataGridView1[3, i].Value.ToString()), int.Parse(dataGridView1[4, i].Value.ToString()), DateTime.Parse(dataGridView1[5, i].Value.ToString()));

                   }

                   MessageBox.Show("Изменения успешно сохранены!", "Сохранено", MessageBoxButtons.OK, MessageBoxIcon.Information);

               }

               catch

               {

                   MessageBox.Show("Ошибка обращения к базе данных!\nНе все данные сохранены!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

               }

               finally

               {

                   for (int i = 0; i < dataGridView1.RowCount; i++)

                   {

                       dataGridView1.Rows[i].ErrorText = null;

                   }

                   bn_glav.Items[9].Enabled = true;

                   bn_glav.Items[10].Enabled = false;

                   bn_glav.Items[11].Enabled = false;

                   if (dataGridView1.AllowUserToAddRows == true)

                       dataGridView1.CurrentCell = dataGridView1[1, dataGridView1.CurrentRow.Index - 1];

                   dataGridView1.AllowUserToAddRows = false;

                   countRows = dataGridView1.RowCount;

                   vSdachaTableAdapter.Fill(sportShkolaDataSet.vSdacha);

                   if (curcell >= dataGridView1.RowCount)

                       dataGridView1.CurrentCell = dataGridView1[1, 0];

                   else

                       dataGridView1.CurrentCell = dataGridView1[1, curcell];

               }

           }

           else

           {

               Cancel(dataGridView1, bn_glav);

           }

       }

       private void tsbDelGlav_Click(object sender, EventArgs e)

       {

           for (int i = 0; i < dataGridView1.SelectedCells.Count; i++)

           {

               dataGridView1.Rows[dataGridView1.SelectedCells[i].RowIndex].Selected = true;

           }

           for (int i = dataGridView1.SelectedRows.Count - 1; i >= 0; i--)


           {

               if (dataGridView1.SelectedRows[i].Index >= countRows)

               {

                   dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i].Index);

               }

           }

           if (dataGridView1.SelectedRows.Count == 0)

               return;

           if (MessageBox.Show("Удалить выделенные записи (" + dataGridView1.SelectedRows.Count.ToString() + " строк)?", "Подтверждение!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

           {

               try

               {

                   for (int i = dataGridView1.SelectedRows.Count - 1; i >= 0; i--)

                   {

                       vSdachaTableAdapter.DelSdachaNormativov(int.Parse(dataGridView1.Rows[dataGridView1.SelectedRows[0].Index].Cells[0].Value.ToString()));

                       dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i].Index);

                   }

                   MessageBox.Show("Записи успешно удалены!", "Удалено!", MessageBoxButtons.OK, MessageBoxIcon.Information);

                   if (!tsbCancelGlav.Enabled)

                   {

                       vSdachaTableAdapter.Fill(sportShkolaDataSet.vSdacha);

                   }

               }

               catch

               {

                   MessageBox.Show("Ошибка обращения к базе данных!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               }

           }

       }

       private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

       {

           bn_glav.Items[9].Enabled = true;

           bn_glav.Items[10].Enabled = true;

           bn_glav.Items[11].Enabled = true;

       }

       private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)

       {

           if (e.Context == DataGridViewDataErrorContexts.Commit)

           {

               MessageBox.Show(e.Exception.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               e.Cancel = true;

           }

           else


           {

               FileStream fs = new FileStream("DataError.log", FileMode.Append);

               StreamWriter sr = new StreamWriter(fs);

               sr.WriteLine(e.Exception + " in " + e.RowIndex + " row and " + e.ColumnIndex + " column.");

               sr.WriteLine("Context: " + e.Context + "\n");

               sr.Close();

               fs.Close();

           }

       }

       private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e)

       {

           if (dataGridView1.CurrentRow.Index == 0)

               dataGridView1.CurrentRow.Cells[0].Value = 1.ToString();

           else

           {

               dataGridView1.CurrentRow.Cells[0].Value = (int.Parse(vSdachaTableAdapter.MaxIndex().ToString()) + dataGridView1.Rows.Count - countRows - 1).ToString();

           }

       }

       private void bReport_Click(object sender, EventArgs e)

       {

           (new fOtchet(login)).Show();

       }

       private void bu_filtr_Click(object sender, EventArgs e)

       {

           if (rb_ocenka.Checked)

           {

               vSdachaBindingSource.Filter = "Оценка LIKE '%" + tb_filter.Text.ToLower() + "%'";

           }

           else

           {

               vSdachaBindingSource.Filter = "Норматив LIKE '%" + tb_filter.Text.ToLower() + "%'";

           }

       }

   }

}

 Модуль входа:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace СпортШкола


{

   public partial class vhod : Form

   {

       public vhod()

       {

           InitializeComponent();

       }

       private void bu_vhod_Click(object sender, EventArgs e)

       {

           if (tb_log_vhod.Text == "" || tb_log_pasw.Text == "")

           {

               MessageBox.Show("Введите логин и пароль!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

           }

           else

           {

               if (int.Parse(autotisationTableAdapter.CheckLogPass(tb_log_vhod.Text, tb_log_pasw.Text).ToString()) == 1)

               {

                   (new

glav(autotisationTableAdapter.PravaDostupa(tb_log_vhod.Text, tb_log_pasw.Text).ToString().TrimEnd())).Show();

                   this.Hide();

               }

               else

               {

                   MessageBox.Show("Неверно указан логин и/или пароль!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               }

           }

       }

       private void vhod_Load(object sender, EventArgs e)

       {

           this.autotisationTableAdapter.Fill(this.sportShkolaDataSet.Autotisation);

       }

   }

}

 Модуль справочники:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.IO;

namespace СпортШкола

{

   public partial class spravochniki : Form

   {


       private int countRows = 0;

       private bool editing = false;

       private string indstr = "tabPage1";

       public spravochniki()

       {

           InitializeComponent();

       }

       private void spravochniki_Load(object sender, EventArgs e)

       {

           this.treneriFIOTableAdapter.Fill(this.sportShkolaDataSet.TreneriFIO);

           this.vGruppaTableAdapter.Fill(this.sportShkolaDataSet.vGruppa);

           this.vNormativTableAdapter.Fill(this.sportShkolaDataSet.vNormativ);

           this.roditeliFIOTableAdapter.Fill(this.sportShkolaDataSet.RoditeliFIO);

           this.vidSportaTableAdapter.Fill(this.sportShkolaDataSet.VidSporta);

           this.vVidSportaTableAdapter.Fill(this.sportShkolaDataSet.vVidSporta);

           this.vRoditeliTableAdapter.Fill(this.sportShkolaDataSet.vRoditeli);

          this.vUchenikiTableAdapter.Fill(this.sportShkolaDataSet.vUcheniki);

           this.vTreneryTableAdapter.Fill(this.sportShkolaDataSet.vTrenery);

           dgv_groopi.Columns[0].Visible = false;

           dgv_normativi.Columns[0].Visible = false;

           dgv_roditeli.Columns[0].Visible = false;

           dgv_sport.Columns[0].Visible = false;

           dgv_trenera.Columns[0].Visible = false;

           dgv_ucheniki.Columns[0].Visible = false;

           bn_groopi.Items[9].Enabled = true;

           bn_normativi.Items[9].Enabled = true;

           bn_roditeli.Items[9].Enabled = true;

           bn_sport.Items[9].Enabled = true;

           bn_trenera.Items[9].Enabled = true;

           bn_ucheniki.Items[9].Enabled = true;

           for (int i = 10; i <= 11; i++)

           {

               bn_groopi.Items[i].Enabled = false;

               bn_normativi.Items[i].Enabled = false;

               bn_roditeli.Items[i].Enabled = false;

               bn_sport.Items[i].Enabled = false;

               bn_trenera.Items[i].Enabled = false;

               bn_ucheniki.Items[i].Enabled = false;

           }

           dgv_groopi.AllowUserToAddRows = false;

           dgv_normativi.AllowUserToAddRows = false;

           dgv_roditeli.AllowUserToAddRows = false;

           dgv_sport.AllowUserToAddRows = false;

           dgv_trenera.AllowUserToAddRows = false;

           dgv_ucheniki.AllowUserToAddRows = false;

           countRows = dgv_trenera.RowCount;

           editing = false;

           indstr = tabControl1.TabPages[tabControl1.SelectedIndex].Name;

       }

       private void dgv_DataError(object sender, DataGridViewDataErrorEventArgs e)

       {

           if (e.Context == DataGridViewDataErrorContexts.Commit)

           {

               string s = e.Exception.Message;


               MessageBox.Show("Ошибка!\n" + s, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

               e.Cancel = true;

           }

           else

           {

               FileStream fs = new FileStream("DataError.log", FileMode.Append);

               StreamWriter sr = new StreamWriter(fs);

               sr.WriteLine(e.Exception + " in " + e.RowIndex + " row and " + e.ColumnIndex + " column.");

               sr.WriteLine("Context: " + e.Context + "\n\n");

               sr.Close();

               fs.Close();

           }

       }

       private void Add(DataGridView dgv, BindingNavigator bn)

       {

           dgv.AllowUserToAddRows = true;

           dgv.CurrentCell = dgv[1, dgv.RowCount - 1];

           bn.Items[9].Enabled = false;

           bn.Items[10].Enabled = true;

           bn.Items[11].Enabled = true;

           countRows = dgv.RowCount - 1;

           editing = true;

       }

       private void CancelCall(DataGridView dgv, BindingNavigator bn, int num)

       {

           if (MessageBox.Show("Отменить?\nВсе несохраненные изменения будут утеряны!", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)

           {

               Cancel(dgv, bn, num);

               MessageBox.Show("Все изменения отменены!", "Отмена", MessageBoxButtons.OK, MessageBoxIcon.Information);

           }

       }

       private void Cancel(DataGridView dgv, BindingNavigator bn, int num)

       {

           dgv.CancelEdit();

           bn.Items[9].Enabled = true;

           bn.Items[10].Enabled = false;

           bn.Items[11].Enabled = false;

           dgv.AllowUserToAddRows = false;

           int curcell = dgv.CurrentCell.RowIndex;

           switch (num)

           {

               case 1: vTreneryTableAdapter.Fill(sportShkolaDataSet.vTrenery); break;

               case 2: vUchenikiTableAdapter.Fill(sportShkolaDataSet.vUcheniki); break;

               case 3: vRoditeliTableAdapter.Fill(sportShkolaDataSet.vRoditeli); break;

               case 4: vVidSportaTableAdapter.Fill(sportShkolaDataSet.vVidSporta); break;

               case 5: vNormativTableAdapter.Fill(sportShkolaDataSet.vNormativ); break;

               case 6: vGruppaTableAdapter.Fill(sportShkolaDataSet.vGruppa); break;

           }

           if (curcell >= dgv.RowCount)


               dgv.CurrentCell = dgv[1, 0];

           else

               dgv.CurrentCell = dgv[1, curcell];

           countRows = dgv.RowCount;

           for (int i = 0; i < dgv.RowCount - 1; i++)

           {

               dgv.Rows[i].ErrorText = null;

           }

           editing = false;

       }

       private void Save(DataGridView dgv, BindingNavigator bn, int num)

       {

           if (MessageBox.Show("Сохранить изменения?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) ==

DialogResult.Yes)

           {

               try

               {

                   bool prov = false;

                   int count = 0;

                   if (dgv.AllowUserToAddRows == true)

                       count = dgv.RowCount - 1;

                   else

                       count = dgv.RowCount;

                   for (int i = 0; i < count; i++)

                   {

                       int coun = dgv.ColumnCount;

                       if (num == 5) coun--;

                       StringBuilder sb = new StringBuilder("");

                       for (int j = 1; j < coun; j++)

                       {

                           if (dgv.Rows[i].Cells[j].Value.ToString() == "")

                           {

                               sb.Append("В поле " + dgv.Columns[j].HeaderText.ToString() + " не допускаются пустые значения!\n");

                               prov = true;

                           }

                       }

                       dgv.Rows[i].ErrorText = sb.ToString();

                   }

                   if (prov) throw new Exception();

               }

               catch

               {

                   MessageBox.Show("Ошибка сохранения данных!\nДанные не сохранены!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

                   return;

               }

               int curcell = dgv.CurrentRow.Index;

               try

               {

                   for (int i = 0; i < countRows; i++)

                   {

                       switch (num)


                       {

                           case 1: vTreneryTableAdapter.EditTrener(int.Parse(dgv[0, i].Value.ToString()), dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), DateTime.Parse(dgv[4, i].Value.ToString()), dgv[5, i].Value.ToString(), dgv[6, i].Value.ToString(), dgv[7, i].Value.ToString()); break;

                           case 2: vUchenikiTableAdapter.EditUcheniki(int.Parse(dgv[0, i].Value.ToString()), dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), DateTime.Parse(dgv[4, i].Value.ToString()), dgv[5, i].Value.ToString(), dgv[6, i].Value.ToString(), dgv[7, i].Value.ToString()); break;

                           case 3: vRoditeliTableAdapter.EditRoditeli(int.Parse(dgv[0, i].Value.ToString()), dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), dgv[4, i].Value.ToString(), dgv[5, i].Value.ToString(), dgv[6, i].Value.ToString()); break;

                           case 4: vVidSportaTableAdapter.EditVidSporta(int.Parse(dgv[0,

i].Value.ToString()), dgv[1, i].Value.ToString()); break;

                           case 5: vNormativTableAdapter.EditNormativ(int.Parse(dgv[0, i].Value.ToString()), dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), TimeSpan.Parse(dgv[6, i].Value.ToString()), int.Parse(dgv[9, i].Value.ToString()), TimeSpan.Parse(dgv[5, i].Value.ToString()), int.Parse(dgv[8, i].Value.ToString()), TimeSpan.Parse(dgv[4, i].Value.ToString()), int.Parse(dgv[7, i].Value.ToString()), dgv[3, i].Value.ToString()); break;

                           case 6: vGruppaTableAdapter.EditGruppa(int.Parse(dgv[0, i].Value.ToString()), dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), Decimal.Parse(dgv[4, i].Value.ToString())); break;

                       }

                   }

                   for (int i = countRows; i < dgv.RowCount - 1; i++)

                   {

                       switch (num)

                       {

                           case 1: vTreneryTableAdapter.AddToTrener(dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), DateTime.Parse(dgv[4, i].Value.ToString()), dgv[5, i].Value.ToString(), dgv[6, i].Value.ToString(), dgv[7, i].Value.ToString()); break;

                           case 2: vUchenikiTableAdapter.AddToUcheniki(dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), DateTime.Parse(dgv[4, i].Value.ToString()), dgv[5, i].Value.ToString(), dgv[6, i].Value.ToString(), dgv[7, i].Value.ToString()); break;

                           case 3: vRoditeliTableAdapter.AddToRoditeli(dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), dgv[4, i].Value.ToString(), dgv[5, i].Value.ToString(), dgv[6, i].Value.ToString()); break;

                           case 4: vVidSportaTableAdapter.AddToVidSporta(dgv[1, i].Value.ToString()); break;

                           case 5: vNormativTableAdapter.AddToNormativ(dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), TimeSpan.Parse(dgv[6, i].Value.ToString()), int.Parse(dgv[9, i].Value.ToString()), TimeSpan.Parse(dgv[5, i].Value.ToString()), int.Parse(dgv[8, i].Value.ToString()), TimeSpan.Parse(dgv[4, i].Value.ToString()), int.Parse(dgv[7, i].Value.ToString()), dgv[3, i].Value.ToString()); break;

                           case 6: vGruppaTableAdapter.AddToGruppa(dgv[1, i].Value.ToString(), dgv[2, i].Value.ToString(), dgv[3, i].Value.ToString(), Decimal.Parse(dgv[4, i].Value.ToString())); break;

                       }

                   }

                   MessageBox.Show("Изменения успешно сохранены!", "Сохранено", MessageBoxButtons.OK, MessageBoxIcon.Information);


               }

               catch

               {

                   MessageBox.Show("Ошибка обращения к базе данных!\nНе все данные сохранены!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

               }

               finally

               {

                   for (int i = 0; i < dgv.RowCount; i++)

                   {

                       dgv.Rows[i].ErrorText = null;

                   }

                   bn.Items[9].Enabled = true;

                   bn.Items[10].Enabled = false;

                   bn.Items[11].Enabled = false;

                   editing = false;

                   if (dgv.AllowUserToAddRows == true)

                       dgv.CurrentCell = dgv[1, dgv.CurrentRow.Index - 1];

                   dgv.AllowUserToAddRows = false;

                   countRows = dgv.RowCount;

                   switch (num)

                   {

                       case 1:

                           {

                               vTreneryTableAdapter.Fill(sportShkolaDataSet.vTrenery);

                               treneriFIOTableAdapter.Fill(sportShkolaDataSet.TreneriFIO);

                               vGruppaTableAdapter.Fill(sportShkolaDataSet.vGruppa);

                               dgv_groopi.Columns[0].Visible = false;

                               break;

                           }

                       case 2:vUchenikiTableAdapter.Fill(sportShkolaDataSet.vUcheniki); break;

                       case 3:

                           {

                               vRoditeliTableAdapter.Fill(sportShkolaDataSet.vRoditeli);

                               roditeliFIOTableAdapter.Fill(sportShkolaDataSet.RoditeliFIO);

                               vUchenikiTableAdapter.Fill(sportShkolaDataSet.vUcheniki);

                               dgv_ucheniki.Columns[0].Visible = false;

                               break;

                           }

                       case 4:

                           {

                               vVidSportaTableAdapter.Fill(sportShkolaDataSet.vVidSporta);

                               vidSportaTableAdapter.Fill(sportShkolaDataSet.VidSporta);

                               vGruppaTableAdapter.Fill(sportShkolaDataSet.vGruppa);

                               vTreneryTableAdapter.Fill(sportShkolaDataSet.vTrenery);

                               vNormativTableAdapter.Fill(sportShkolaDataSet.vNormativ);

                               dgv_groopi.Columns[0].Visible = false;

                               dgv_normativi.Columns[0].Visible = false;

                               dgv_trenera.Columns[0].Visible = false;

                               break;

                           }

                       case 5: vNormativTableAdapter.Fill(sportShkolaDataSet.vNormativ); break;

                       case 6: vGruppaTableAdapter.Fill(sportShkolaDataSet.vGruppa); break;

                   }


                   if (curcell >= dgv.RowCount)

                       dgv.CurrentCell = dgv[1, 0];

                   else

                       dgv.CurrentCell = dgv[1, curcell];

               }

           }

           else

           {

               Cancel(dgv, bn, num);

           }

       }

       private void Delete(DataGridView dgv, int num)

       {

           for (int i = 0; i < dgv.SelectedCells.Count; i++)

           {

               dgv.Rows[dgv.SelectedCells[i].RowIndex].Selected = true;

           }

           for (int i = dgv.SelectedRows.Count - 1; i >= 0; i--)

           {

               if (dgv.SelectedRows[i].Index >= countRows)

               {

                   dgv.Rows.RemoveAt(dgv.SelectedRows[i].Index);

               }

           }

           if (dgv.SelectedRows.Count == 0)

               return;

           if (MessageBox.Show("Удалить выделенные записи (" + dgv.SelectedRows.Count.ToString() + " строк)?", "Подтверждение!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

           {

               try

               {

                   for (int i = dgv.SelectedRows.Count - 1; i >= 0; i--)

                   {

                       switch (num)

                       {

                           case 1:

                               {

                                   vTreneryTableAdapter.DelTrener(int.Parse(dgv.Rows[dgv.SelectedRows[i].Index].Cells[0].Value.ToString()));

                                   break;

                               }

                           case 2:

                               {

                                   vUchenikiTableAdapter.DelUcheniki(int.Parse(dgv.Rows[dgv.SelectedRows[i].Index].Cells[0].Value.ToString()));

                                   break;

                               }

                           case 3:

                               {

                                   


vRoditeliTableAdapter.DelRoditeli(int.Parse(dgv.Rows[dgv.SelectedRows[i].Index].Cells[0].Value.ToString()));

                                   break;

                               }

                           case 5:

                               {

                                   vNormativTableAdapter.DelNormativ(int.Parse(dgv.Rows[dgv.SelectedRows[i].Index].Cells[0].Value.ToString()));

                                   break;

                               }

                           case 6:

                              {

                                   vGruppaTableAdapter.DelGruppa(int.Parse(dgv.Rows[dgv.SelectedRows[i].Index].Cells[0].Value.ToString()));

                                   break;

                               }

                       }

                   }

                   MessageBox.Show("Записи успешно удалены!", "Удалено!", MessageBoxButtons.OK, MessageBoxIcon.Information);

                   if (!editing)

                   {

                       switch (num)

                       {

                           case 1:

                               {

                                   vTreneryTableAdapter.Fill(sportShkolaDataSet.vTrenery);

                                   treneriFIOTableAdapter.Fill(sportShkolaDataSet.TreneriFIO);

                                   vGruppaTableAdapter.Fill(sportShkolaDataSet.vGruppa);

                                   dgv_groopi.Columns[0].Visible = false;

                                   break;

                               }

                           case 2: vUchenikiTableAdapter.Fill(sportShkolaDataSet.vUcheniki); break;

                           case 3:

                               {

                                   vRoditeliTableAdapter.Fill(sportShkolaDataSet.vRoditeli);

                                   roditeliFIOTableAdapter.Fill(sportShkolaDataSet.RoditeliFIO);

                                   vUchenikiTableAdapter.Fill(sportShkolaDataSet.vUcheniki);

                                   dgv_ucheniki.Columns[0].Visible = false;

                                   break;

                               }

                           case 4:

                               {

                                   vVidSportaTableAdapter.Fill(sportShkolaDataSet.vVidSporta);

                                   vidSportaTableAdapter.Fill(sportShkolaDataSet.VidSporta);

                                   vGruppaTableAdapter.Fill(sportShkolaDataSet.vGruppa);

                                   vTreneryTableAdapter.Fill(sportShkolaDataSet.vTrenery);

                                   vNormativTableAdapter.Fill(sportShkolaDataSet.vNormativ);

                                   dgv_groopi.Columns[0].Visible = false;

                                   dgv_normativi.Columns[0].Visible = false;

                                   dgv_trenera.Columns[0].Visible = false;

                                   break;


                               }

                           case 5: vNormativTableAdapter.Fill(sportShkolaDataSet.vNormativ); break;

                           case 6: vGruppaTableAdapter.Fill(sportShkolaDataSet.vGruppa); break;

                       }

                   }

               }

               catch

               {

                   MessageBox.Show("Ошибка обращения к базе данных!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               }

          }

       }

       private void Search(DataGridView dgv, BindingNavigator bn, int num)

       {

           for (int i = 0; i < dgv.RowCount; i++)

           {

               if (dgv[1, i].Value.ToString().ToLower().Contains(bn.Items[15].Text.ToLower()))

               {

                   dgv.CurrentCell = dgv[1, i];

                   break;

               }

           }

       }

       private void AddedRow(DataGridView dgv, int num)

       {

           if (dgv.CurrentRow.Index == 0)

               dgv.CurrentRow.Cells[0].Value = 1.ToString();

           else

           {

               int n = 0;

               switch (num)

               {

                   case 1: n = int.Parse(vTreneryTableAdapter.MaxIndexTrener().ToString()); break;

                   case 2: n = int.Parse(vUchenikiTableAdapter.MaxIndexUcheniki().ToString()); break;

                   case 3: n = int.Parse(vRoditeliTableAdapter.MaxIndexRoditeli().ToString()); break;

                   case 4: n = int.Parse(vVidSportaTableAdapter.MaxIndexVidSporta().ToString()); break;

                   case 5: n = int.Parse(vNormativTableAdapter.MaxIndexNormativ().ToString()); break;

                   case 6: n = int.Parse(vGruppaTableAdapter.MaxIndexGruppa().ToString()); break;

               }

               dgv.CurrentRow.Cells[0].Value = (n + dgv.Rows.Count - countRows - 1).ToString();

           }

       }

       private void CloseWin(object sender, EventArgs e)

       {

           Close();

       }

       private void spravochniki_FormClosing(object sender, FormClosingEventArgs e)

       {

           if (editing)


           {

               switch (indstr)

               {

                   case "tabPage1": Save(dgv_trenera, bn_trenera, 1); break;

                   case "tabPage2": Save(dgv_ucheniki, bn_ucheniki, 2); break;

                   case "tabPage3": Save(dgv_roditeli, bn_roditeli, 3); break;

                   case "tabPage4": Save(dgv_sport, bn_sport, 4); break;

                   case "tabPage5": Save(dgv_normativi, bn_normativi, 5); break;

                   case "tabPage6": Save(dgv_groopi, bn_groopi, 6); break;

               }

           }

       }

       private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)

       {

           if (editing)

           {

               switch (indstr)

               {

                   case "tabPage1": Save(dgv_trenera, bn_trenera, 1); break;

                   case "tabPage2": Save(dgv_ucheniki, bn_ucheniki, 2); break;

                   case "tabPage3": Save(dgv_roditeli, bn_roditeli, 3); break;

                   case "tabPage4": Save(dgv_sport, bn_sport, 4); break;

                   case "tabPage5": Save(dgv_normativi, bn_normativi, 5); break;

                   case "tabPage6": Save(dgv_groopi, bn_groopi, 6); break;

               }

           }

           indstr = tabControl1.TabPages[e.TabPageIndex].Name;

           editing = false;

           switch (indstr)

           {

               case "tabPage1": countRows = dgv_trenera.RowCount; break;

               case "tabPage2": countRows = dgv_ucheniki.RowCount; break;

               case "tabPage3": countRows = dgv_roditeli.RowCount; break;

               case "tabPage4": countRows = dgv_sport.RowCount; break;

               case "tabPage5": countRows = dgv_normativi.RowCount; break;

               case "tabPage6": countRows = dgv_groopi.RowCount; break;

           }

       }

       private void tsbAddTrenera_Click(object sender, EventArgs e)

       {

           Add(dgv_trenera, bn_trenera);

       }

       private void tsbCancelTrenera_Click(object sender, EventArgs e)

       {

           Cancel(dgv_trenera, bn_trenera,1);

       }

       private void tsbSaveTrenera_Click(object sender, EventArgs e)

       {

           Save(dgv_trenera, bn_trenera, 1);

       }

       private void tsbDelTrenera_Click(object sender, EventArgs e)

       {


          Delete(dgv_trenera, 1);

       }

       private void tsbPoiskTrenera_Click(object sender, EventArgs e)

       {

           Search(dgv_trenera, bn_trenera, 1);

       }

       private void dgv_trenera_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

       {

           bn_trenera.Items[10].Enabled = true;

           bn_trenera.Items[11].Enabled = true;

           editing = true;

       }

       private void dgv_trenera_UserAddedRow(object sender, DataGridViewRowEventArgs e)

       {

           AddedRow(dgv_trenera, 1);

       }

       private void tsbAdducheniki_Click(object sender, EventArgs e)

       {

           Add(dgv_ucheniki, bn_ucheniki);

       }

       private void tsbCancelucheniki_Click(object sender, EventArgs e)

       {

           Cancel(dgv_ucheniki, bn_ucheniki, 2);

       }

       private void tsbSaveucheniki_Click(object sender, EventArgs e)

       {

           Save(dgv_ucheniki, bn_ucheniki, 2);

       }

       private void tsbDelucheniki_Click(object sender, EventArgs e)

       {

           Delete(dgv_ucheniki, 2);

       }

       private void tsbPoiskucheniki_Click(object sender, EventArgs e)

       {

           Search(dgv_ucheniki, bn_ucheniki, 2);

       }

       private void dgv_ucheniki_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

       {

           bn_ucheniki.Items[10].Enabled = true;

           bn_ucheniki.Items[11].Enabled = true;

           editing = true;

       }

       private void dgv_ucheniki_UserAddedRow(object sender, DataGridViewRowEventArgs e)

       {

           AddedRow(dgv_ucheniki, 2);

       }

       private void tsbAddroditeli_Click(object sender, EventArgs e)

       {

           Add(dgv_roditeli, bn_roditeli);

       }


       private void tsbCancelroditeli_Click(object sender, EventArgs e)

       {

           Cancel(dgv_roditeli, bn_roditeli, 3);

       }

       private void tsbSaveroditeli_Click(object sender, EventArgs e)

       {

           Save(dgv_roditeli, bn_roditeli, 3);

       }

       private void tsbDelroditeli_Click(object sender, EventArgs e)

       

           Delete(dgv_roditeli, 3);

       }

       private void tsbPoiskroditeli_Click(object sender, EventArgs e)

       {

           Search(dgv_roditeli, bn_roditeli, 3);

       }

       private void dgv_roditeli_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

       {

           bn_roditeli.Items[10].Enabled = true;

           bn_roditeli.Items[11].Enabled = true;

           editing = true;

       }

       private void dgv_roditeli_UserAddedRow(object sender, DataGridViewRowEventArgs e)

       {

           AddedRow(dgv_roditeli, 3);

       }

       private void tsbAddsport_Click(object sender, EventArgs e)

       {

           Add(dgv_sport, bn_sport);

       }

       private void tsbCancelsport_Click(object sender, EventArgs e)

       {

           Cancel(dgv_sport, bn_sport, 4);

       }

       private void tsbSavesport_Click(object sender, EventArgs e)

       {

           Save(dgv_sport, bn_sport, 4);

       }

       private void tsbPoisksport_Click(object sender, EventArgs e)

       {

           Search(dgv_sport, bn_sport, 4);

       }

       private void dgv_sport_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

       {

           bn_sport.Items[10].Enabled = true;

           bn_sport.Items[11].Enabled = true;

           editing = true;

       }

       private void dgv_sport_UserAddedRow(object sender, DataGridViewRowEventArgs e)

       {

           AddedRow(dgv_sport, 4);


       }

       private void tsbAddnormativi_Click(object sender, EventArgs e)

       {

           Add(dgv_normativi, bn_normativi);

       }

       private void tsbCancelnormativi_Click(object sender, EventArgs e)

       {

           Cancel(dgv_normativi, bn_normativi, 5);

       }

       private void tsbSavenormativi_Click(object sender, EventArgs e)

       {

           Save(dgv_normativi, bn_normativi, 5);

       }

       private void tsbDelnormativi_Click(object sender, EventArgs e)

       {

           Delete(dgv_normativi, 5);

       }

       private void tsbPoisknormativi_Click(object sender, EventArgs e)

       {

           Search(dgv_normativi, bn_normativi, 5);

       }

       private void dgv_normativi_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

       {

           bn_normativi.Items[10].Enabled = true;

           bn_normativi.Items[11].Enabled = true;

           editing = true;

       }

       private void dgv_normativi_UserAddedRow(object sender, DataGridViewRowEventArgs e)

       {

           AddedRow(dgv_normativi, 5);

       }

       private void tsbAddgroopi_Click(object sender, EventArgs e)

       {

           Add(dgv_groopi, bn_groopi);

       }

       private void tsbCancelgroopi_Click(object sender, EventArgs e)

       {

           Cancel(dgv_groopi, bn_groopi, 6);

       }

       private void tsbSavegroopi_Click(object sender, EventArgs e)

       {

           Save(dgv_groopi, bn_groopi, 6);

       }

       private void tsbDelgroopi_Click(object sender, EventArgs e)

       {

           Delete(dgv_groopi, 6);

       }

       private void tsbPoiskgroopi_Click(object sender, EventArgs e)

       {

           Search(dgv_groopi, bn_groopi, 6);


       }

       private void dgv_groopi_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)

       {

           bn_groopi.Items[60].Enabled = true;

           bn_groopi.Items[66].Enabled = true;

           editing = true;

       }

       private void dgv_groopi_UserAddedRow(object sender, DataGridViewRowEventArgs e)

       {

           AddedRow(dgv_groopi, 6);

       }

   }

}

 Модуль список договоров:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace СпортШкола

{

   public partial class SpisokDogovorov : Form

   {

       public SpisokDogovorov()

       {

           InitializeComponent();

       }

       private void SpisokDogovorov_Load(object sender, EventArgs e)

       {

           this.vDogovorTableAdapter.Fill(this.sportShkolaDataSet.vDogovor);

       }

       private void bu_close_Click(object sender, EventArgs e)

       {

           Close();

       }

       private void bu_rastorgnut_Click(object sender, EventArgs e)

       {

           if (MessageBox.Show("Расторгнуть выделенные договор?", "Подтверждение", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

           {

               vDogovorTableAdapter.DelDogovor(int.Parse(dataGridView1[0,dataGridView1.SelectedCells[0].RowIndex].Value.ToString()));

               MessageBox.Show("Договор успешно расторгнут!", "Успешно", MessageBoxButtons.OK, MessageBoxIcon.Information);

           }

       }

       private void bu_redaktirovat_Click(object sender, EventArgs e)


       {

          (new dogovor(int.Parse(dataGridView1[0, dataGridView1.SelectedCells[0].RowIndex].Value.ToString()))).ShowDialog();

       }

   }

}

Модуль регистрации пользователя:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace СпортШкола

{

   public partial class Registr : Form

   {

       public Registr()

       {

           InitializeComponent();

       }

       private void bu_otmena_Click(object sender, EventArgs e)

       {

           Close();

       }

       private void Registr_Load(object sender, EventArgs e)

       {

           // TODO: данная строка кода позволяет загрузить данные в таблицу "sportShkolaDataSet.Autotisation". При необходимости она может быть перемещена или удалена.

           this.autotisationTableAdapter.Fill(this.sportShkolaDataSet.Autotisation);

           // TODO: данная строка кода позволяет загрузить данные в таблицу "sportShkolaDataSet.RoditeliFIO". При необходимости она может быть перемещена или удалена.

           this.roditeliFIOTableAdapter.Fill(this.sportShkolaDataSet.RoditeliFIO);

       }

       private void bu_registr_Click(object sender, EventArgs e)

       {

           if (cb_uchen_reg.Text == "" || tb_log.Text == "" || tb_pasw.Text == "" || tb_podpasw.Text == "")

           {

               MessageBox.Show("Не все поля заполнены!","Ошибка!",MessageBoxButtons.OK,MessageBoxIcon.Error);

               return;

           }

           if (int.Parse(autotisationTableAdapter.CountAutoriz(cb_uchen_reg.Text).ToString()) > 0)

           {

               MessageBox.Show("На этого пользователя уже назначена запись!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               return;

           }


           if (tb_pasw.Text != tb_podpasw.Text)

           {

               MessageBox.Show("Введенные пароли не совпадают!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               return;

           }

           autotisationTableAdapter.AddToAutotisation(tb_log.Text, tb_pasw.Text,

int.Parse(roditeliFIOTableAdapter.IDRoditelya(cb_uchen_reg.Text).ToString()));

           MessageBox.Show("Запись успешно сохранена!", "Сохранено", MessageBoxButtons.OK, MessageBoxIcon.Information);

           Close();

       }

   }

}

Модуль мониторинга:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace СпортШкола

{

   public partial class Monitoring : Form

   {

       public Monitoring()

       {

           InitializeComponent();

       }

       private void Monitoring_Load(object sender, EventArgs e)

       {

           this.chartReportTableAdapter.Fill(this.sportShkolaDataSet.ChartReport);

           string[] arrx = new string[4];

           int[] arry = new int[4];

           for (int i = 0; i < 4; i++)

           {

               arrx[i] = chartReportTableAdapter.GetData()[i].Оценка.ToString();

               arry[i] = int.Parse(chartReportTableAdapter.GetData()[i].Количество.ToString().TrimEnd());

           }

           chart1.Series[0].Points.DataBindXY(arrx, arry);

       }

       private void bu_otchet_Click(object sender, EventArgs e)

       {

           string[] arrx = new string[4];

           int[] arry = new int[4];

           for (int i = 0; i < 4; i++)

           {

               arrx[i] = chartReportTableAdapter.GetDataByDate(dateTimePicker1.Value, dateTimePicker2.Value)[i].Оценка.ToString();


               arry[i] = int.Parse(chartReportTableAdapter.GetDataByDate(dateTimePicker1.Value, dateTimePicker2.Value)[i].Количество.ToString().TrimEnd());

           }

           chart1.Series[0].Points.DataBindXY(arrx, arry);

       }

   }

}

Модуль изменения пароля:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace СпортШкола

{

   public partial class IzminitParol : Form

   {

       private string user;

       public IzminitParol(string user)

       {

           InitializeComponent();

           textBox4.Text = user;

           this.user = user;

       }

       private void IzminitParol_Load(object sender, EventArgs e)

       {

           this.autotisationTableAdapter.Fill(this.sportShkolaDataSet.Autotisation);

       }

       private void bu_close_Click(object sender, EventArgs e)

       {

           Close();

       }

       private void bu_izmenit_Click(object sender, EventArgs e)

       {

           if (textBox5.Text == "" || textBox2.Text == "" || textBox3.Text == "" || textBox4.Text == "")

           {

               MessageBox.Show("Не все поля заполнены!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               return;

           }

           if (textBox3.Text != textBox4.Text)

           {

               MessageBox.Show("Новые пароли не совпадают!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

               return;

           }


           if (int.Parse(autotisationTableAdapter.CheckLogPass(textBox5.Text, textBox2.Text).ToString()) == 1)

           {

               autotisationTableAdapter.EditAutotisation(textBox5.Text, textBox3.Text);

               MessageBox.Show("Пароль успешно изменен!", "Сохранено", MessageBoxButtons.OK, MessageBoxIcon.Information);

               Close();

           }

           else

           {

               MessageBox.Show("Неверно указан логин и/или пароль!", "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);

           }

       }

   }

}

Модуль оформления договора:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace СпортШкола

{

   public partial class dogovor : Form

   {

       private int id = -1;

       public dogovor()

       {

           InitializeComponent();

       }

       public dogovor(int id):this()

       {

           this.id = id;

           this.Text = "Редактировать";

           button1.Text = "Сохранить";

       }

       private void dogovor_Load(object sender, EventArgs e)

       {

           this.vDogovorTableAdapter.Fill(this.sportShkolaDataSet.vDogovor);

           this.dogovorTableAdapter.Fill(this.sportShkolaDataSet.Dogovor);

           this.vGruppaTableAdapter.Fill(this.sportShkolaDataSet.vGruppa);

           this.vVidSportaTableAdapter.Fill(this.sportShkolaDataSet.vVidSporta);

           this.uchenikiFIOTableAdapter.Fill(this.sportShkolaDataSet.UchenikiFIO);

           this.roditeliFIOTableAdapter.Fill(this.sportShkolaDataSet.RoditeliFIO);

           if (id != -1)

           {

               comboBox1.Text = vDogovorTableAdapter.GetDataByID(id)[0].Родитель.ToString();

               comboBox2.Text = vDogovorTableAdapter.GetDataByID(id)[0].Ученик.ToString();


               comboBox3.Text = vDogovorTableAdapter.GetDataByID(id)[0].Вид_спорта.ToString();

               comboBox5.Text = vDogovorTableAdapter.GetDataByID(id)[0].Группа.ToString();

               textBox1.Text = vDogovorTableAdapter.GetDataByID(id)[0].Тренер.ToString();

               textBox2.Text = vDogovorTableAdapter.GetDataByID(id)[0].Оплата.ToString();

           }

       }

       private void button2_Click(object sender, EventArgs e)

       {

           Close();

       }

       private void comboBox5_SelectedIndexChanged(object sender, EventArgs e)

       {

           textBox1.Text = vGruppaTableAdapter.GetDataByNazvanie(comboBox5.Text)[0].Тренер.ToString();

           textBox2.Text = vGruppaTableAdapter.GetDataByNazvanie(comboBox5.Text)[0].Оплата.ToString();

       }

       private void button1_Click(object sender, EventArgs e)

       {

           if (id == -1)

               dogovorTableAdapter.AddToDogovor(comboBox2.Text, comboBox5.Text, DateTime.Now);

           else

               dogovorTableAdapter.EditDogovor(id, comboBox2.Text, comboBox5.Text, DateTime.Parse(vDogovorTableAdapter.GetDataByID(id)[0].Дата_заключения.ToString()));

           MessageBox.Show("Запись успешно сохранена!", "Сохранено", MessageBoxButtons.OK, MessageBoxIcon.Information);

           Close();

       }

   }

}

                                                                                                                                                                     89


 

А также другие работы, которые могут Вас заинтересовать

25137. Некоторые стандартные функции над числовыми данными 63.5 KB
  А и Р – целые и вещественные числа. А – целое и веществ. А – целое и веществ. Р – веществ.
25140. Головні риси філософії доби Відродження 23.5 KB
  Головні риси філософії доби Відродження. Епоха відродження характеризується розвитком промисловості торгівлі військової справи. Саме тому антропоцентризм – головна ідея світогляду епохи Відродження. Відродження – це цілісна культура що увібрала в себе все життя людини а не окремі його характеристики.
25141. Фіхте: філософія як науковчення 23.5 KB
  Фіхте: філософія як науковчення Фіхте – послідовник Канта. Фіхте: Моя система – є ніщо інше як система Канта тобто вона містить той же погляд на предмет але у своєму способі викладення вона жодним чином не залежить від викладення Канта. Фіхте намагався покращити зміни світ. Фіхте – ідеаліст.
25142. Поняття практичного розуму у І.Канта 30 KB
  Свобода – альфа і омега всієї практичної філософії Канта саме в свободі Кант вбачав високе призначння людини.€ Найглибший вимір людини який відрізняє її від усього створного світу – моральність. Основний закон моральности – категоричний імператив дотримання якого – моральний обов’язок людини.Формула персоналізації – вчиняй так щоб ти завжди ставився до людства і в своїй особі і в особі будьякої іншої людини також як до засобу і ніколи тільки як до мети.
25143. Проблема буття у філософії 39.5 KB
  Проблема буття у філософії Онтологія вчення про буття. Вперше проблема сформульована Парменідом з якого і починається аналіз проблеми буття у європейській традиції.Що розуміється під буттям І є має нічого що не належало б до буття Парменід.Категорія буття Онтологічне значення методу Сократ Буття як ейдос ПлатонДіалектика буття і небуття як умова розрі нення істини і заблудження.
25144. Філософія Просвітництва: основні засади 23 KB
  Філософія Просвітництва: основні засади Взагалі у широкому сенсі Просвітництво є епохою в історії людства що збігається утвердженням капіталізму і відповідно руйнуванням феодалізму. Цікавими є погляди різних мислителів на епоху просвітництва. Вихідні ідеї епохи Просвітництва: культ науки відповідно Розуму прогрес людства. Усі праці діячів Просвітництва мають у собі ідею апології Розуму його світлої сили.
25145. Mожливості та межі наукового пізнання 32 KB
  Різні види пізнання порізному виконують цю роль. Тому основна задача наукового пізнання – вияснити закони у відповідності з якими змінюються та розвиваються об’єкти. Орієнтація науки на вивчення об’єктів котрі можуть бути включені в діяльність чи актуально чи потенційно як можливі об’єкти її майбутнього перетворення і їх дослідження як таких що підкоряються загальним законам розвитку та функціонування складає головну особливість наукового пізнання.