Разработка программного продукта 'Отдел кадров завода'
Содержание
Введение
. История
предприятия «Приднестровский Государственный Университет»
.
Организационная структура Инженерно-технического факультета
. Описание
аппаратного и программного обеспечения сети, используемого на предприятии
.
Аналитический и литературный обзор предметной области
.
Проектирование базы данных
.1
Инфологическое проектирование модели базы данных
.2 Логическое
проектирование модели базы данных
.3 Физическое
проектирование модели базы данных
. Описание
структуры программы
. Выбор методов
решения задачи и разработка основных алгоритмов
Заключение
Список
литературы
Приложения
Введение
Производственная практика является составной частью основной
образовательной программы по специальности «Программное обеспечение
вычислительной техники и автоматизированных систем».
Ее цель закрепление и углубление знаний, полученных студентами в процессе
теоретического обучения, приобретение необходимых умений, навыков и опыта
практической работы по изучаемой специальности.
При ее прохождении поставлены следующие цели:
ознакомление с деятельностью предприятия;
изучение специфики работы предприятия;
изучение передового опыта работы специалистов предприятия;
изучение структуры организации в данном предприятии;
углубление и закрепление собственных знаний, полученных в процессе
обучения;
выработка навыков принятия решений и реализация решений в практической
деятельности;
расширение технического кругозора и подготовка к самостоятельной
профессиональной деятельности на основе знаний и умений, полученных на протяжении
всего периода обучения;
выполнение индивидуального задания, связанного с конкретной
производственной задачей.
1. История предприятия «Приднестровский Государственный
Университет»
октября 1930 года на базе Молдавского государственного педагогического
техникума был учрежден Молдавский институт народного образования в г. Тирасполе
- первое высшее учебное заведение в Молдавии.
В институте тогда функционировало пять кафедр и три факультета:
механико-математический, лингвистический и агробиологический, на которых
обучались 123 студента и 80 слушателей подготовительного отделения.
Преподавание велось на молдавском, украинском и русском языках. Первый выпуск
подарил школам Приднестровья 20 учителей.
В 1933 году институт был преобразован в Молдавский педагогический
институт с четырехлетним сроком обучения, а в марте 1939 года в ознаменование
125-летия со дня рождения великого украинского поэта и художника Т.Г. Шевченко
институту присвоено его имя. В этом же году был открыт географический
факультет.
В период немецко-румынской оккупации институт эвакуируется в тыл страны в
г. Бугуруслан Оренбургской области (бывшая Чкаловская). Вместе с ним покинули
город 12 педагогов. Многие преподаватели, студенты и сотрудники ушли на фронт.
год. Институт продолжает работать в эвакуации - в нем учатся 374
студента. Там же, в эвакуации, осуществляется выпуск 19 специалистов: 1
филолог, 4 математика и 14 историков.
С победоносным завершением Ясско-Кишиневской операции и освобождением
Молдавии от фашистских захватчиков институт возвращается в Тирасполь. Трудно
было в первый послевоенный год набирать студентов, так как молодежи с
законченным средним образованием практически не было. В октябре 1945 года для
подготовки молодежи в вуз при пединституте создается рабфак, который просуществовал
до августа 1948 года.
В августе 1952 года институт был преобразован в Тираспольский
государственный педагогический институт им. Т.Г. Шевченко (ТГПИ) с четырьмя
факультетами: историко-филологическим, физико-математическим, естествознания и
географическим. Институт становится региональным методическим центром.
С 1956/57 учебного года он переходит на подготовку учителей широкого
профиля с пятилетним сроком обучения.
Здесь ежегодно проводились практические конференции, в которых принимали
участие учителя городов, сел и районов республики. Открылся планетарий,
работали агробиостанция, несколько лабораторий, начали функционировать
юношеская физико-математическая школа, научное общество студентов и учащихся,
клуб путешествий. Укреплялся и профессорско-преподавательский состав: в штате
насчитывалось уже 5 докторов, 163 кандидата наук, большинству из которых было
присвоено ученое звание доцента. В 1970 году за достигнутые успехи в подготовке
и воспитании педагогическихи научных кадров Тираспольский государственный
педагогический институт им. Т.Г. Шевченко был награжден Почетной грамотой
Президиума Верховного Совета МССР, в 1974 - занесен в Золотую Книгу Почета
республики, а в 1980 году указом Президиума Верховного Совета СССР награжден
орденом «Знак Почета».
Создание Приднестровского Государственного Университета
Постановлением Временного Верховного Совета ПМССР № 25 от 21 сентября
1990 года с целью подготовки специалистов для отраслей народного хозяйства
Приднестровья в Тирасполе создан Государственный университет, в котором были
открыты 4 факультета: историко-юридический, экономический, физико-технический и
аграрно-экологический.
С 11 января 1991 года учредителем госуниверситета стала Ассоциация
местных Советов народных депутатов и предприятий Приднестровского региона, в
связи с чем были изменены его статус и название - Тираспольский
государственно-корпоративный университет Приднестровского региона (ПГКУ).
К четырем ранее созданным факультетам прибавился пятый - медицинский, а
при историческом открыто отделение искусств. Университет возглавил доктор
юридических наук, профессор Василий Никитович Яковлев.
июня 1992 года в результате слияния двух вузов - Тираспольского
государственного педагогического института им. Т.Г. Шевченко и Тираспольского
государственно-корпоративного университета Приднестровского региона - был
создан Приднестровский государственно-корпоративный университет им. Т.Г.
Шевченко. С июня 1997 года в связи с изменением статуса вуз переименован в
Приднестровский государственный университет (ПГУ) им. Т.Г. Шевченко.
Учредителями ПГУ им. Т.Г. Шевченко являются Государственная
администрация, Всероссийский фонд образования при Государственной думе
Российской Федерации. В 1995 году университет стал действительным членом
Ассоциации вузов Российской Федерации, а в 1999 году принят в Евразийскую
Ассоциацию университетов (ЕАУ). Представительство ПГУ в Российской Федерации
зарегистрировано Московской регистрационной палатой с правом ведения
хозяйственной деятельности (свидетельство серия МРII, рег. № 000.628-У от 26
января 1994 г., код ОКПО 29278199).
июня 1996 года на расширенном заседании Ученого совета ректором
Приднестровского государственного университета им. Т.Г. Шевченко был
единогласно избран Степан Иорданович Берил - видный ученый, доктор
физико-математических наук, профессор, член Российской Академии естественных
наук (РАЕН).
Сегодня университет работает по российским учебным стандартам и планам.
Его дипломы действительны на всей территории России.
С 1999 года выпускникам ПГУ выдаются дипломы нового государственного
образца.
В составе университета - 79 кафедр, 12 основных факультетов
(исторический, юридический, экономический, медицинский, сельскохозяйственный,
инженерно-технический, инженерно-педагогический, филологический, педагогический
(с отделением искусств), физико-математический, естественно-географический,
физической культуры и спорта), научно-исследовательский отдел (НИО), 28
научно-исследовательских лабораторий, вычислительный центр, агробиологическая
станция, центр довузовской подготовки, факультет общественных профессий,
молодежно-культурный центр «Спутник», спортклуб «Рекорд». Научная библиотека
университета является самой крупной в регионе - ее книжный фонд насчитывает
свыше 850 тысяч экземпляров. Редакционно-издательский отдел обеспечивает потребность
вуза в научно-методической и учебной литературе. Учебно-просветительская работа
проводится в четырех музеях университета и обсерватории.
2. Организационная структура Института истории, государства и
права
Институт истории, государства и права образован в январе 2005 г. в
результате слияния факультета истории, политологии и социологии с юридическим
факультетом. Преподавательскую, научную и просветительскую деятельность
осуществляют одиннадцать кафедр, две научно-исследовательские лаборатории, Центр
социологических и политических исследований "Перспектива" и два музея
- археологии и истории университета. Профессорско-преподавательский коллектив
составляют высококвалифицированные преподаватели, в числе которых 8
профессоров, докторов наук, 27 доцентов, кандидатов наук, политические
аналитики и консультанты, высококвалифицированные специалисты-практики.
Институт осуществляет плодотворное сотрудничество с университетами и
научными центрами России, Украины, Молдовы, Германии, Японии, Израиля.
Преподаватели и студенты института активно участвуют в исследовательских
проектах, в международных научных семинарах, конференциях, «круглых столах».
Выпускники являются специалистами, не только владеющими необходимыми
профессиональными знаниями и навыками, но и обладающими способностью к
самостоятельной продуктивной научной творческой деятельности. Они работают в
администрации Президента ПМР, в Верховном Совете, в министерствах иностранных
дел, внутренних дел, юстиции, просвещения, на радио и телевидении, в судебных и
правоохранительных органах, образовательных учреждениях республики.
Организационная структура
1. Декан
. Заместители декана:
по учебно-методической работе;
по организации учебного процесса;
по научной работе;
делам молодежи;
. Секретарь деканата
. Методисты:
методист дневной формы обучения;
методист заочной формы обучения.
Кафедры Института истории, государства и права
Кафедра конституционного, административного и муниципального права
Кафедра уголовного права, уголовного процесса и криминалистики
Кафедра теории и истории государства и права
Кафедра Всеобщей истории
Кафедра Отечественной истории
Кафедра философии
Кафедра основ политики и политического управления
Кафедра политологии и политических процессов
Кафедра гражданского и трудового права
Школа юного историка при Институте истории, государства и права ПГУ им.
Т.Г. Шевченко
Сотрудниками кафедр постоянно проводятся научные изыскания по проблемам
истории стран СНГ. Активно исследуются такие вопросы, как: формирование
государственности Приднестровья; историография ПМР; история Приднестровского
вооруженного конфликта; румынизация Молдавии в прошлом и настоящем;
советско-американские отношения после Второй мировой войны; национальная
идентичность в полиэтническом обществе; история Молдавской митрополии во второй
половине XX в.; проблемы сталинских репрессий и развитие Молдавской Автономии;
социально-экономическое и политическое развитие Подолии в XVIII в. Ежегодно
преподаватели кафедр подводят итоги своих поисков в ходе конференции
профессорско-преподавательского состава ПГУ им. Т.Г. Шевченко. В составе кафедр
успешно функционируют научно-исследовательские лаборатории, например:
«Археология» (заведующий - к.и.н., доцент Н.П. Тельнов) и «История
Приднестровья» (заведующий - к.и.н., профессор Н.В. Бабилунга).
Сотрудниками установлены и поддерживаются рабочие контакты с ведущими
научными центрами и специалистами России, Украины, Молдовы, Японии, Германии,
США.
Специальности:
История (со специализациями "Отечественная история",
"Новая и новейшая история", "История культуры",
"История религии", "Историческая политология",
"Археология")
Юриспруденция (со специализациями "Государственное право",
"Гражданское право", "Уголовное право")
Социология (со специализациями "Социология рекламы и PR",
"Социология коммуникаций", "Социальная работа")
Политология (со специализациями "Государственное управление",
"Международные отношения")
. Описание аппаратного и программного обеспечения сети,
используемого на предприятии
На рабочем месте было предоставлено следующее оборудование:
-ти дюймовый монитор с электроннолучевой трубкой Samsung SyncMaster
793DF;
Процессор Intel Celeron 2.53 ГГц;
Мб ОЗУ DDR;
-Принтер Canon Laser Shot L1121Е;
-Операционная система Windows XP Professional;
Программа «Абитуриент»;
Такое же оборудование установлено на аналогичных рабочих местах.
Программа «Абитуриент» создана для учёта поступающих абитуриентов в
Приднестровский государственный университет и хранения их данных. Программа
написана на языке C#. В программе существует несколько видов пользователей:
Секретарь, Оператор, Технический секретарь. Каждый из них имеет свои доступ и
права по введённому паролю.
Программа «Абитуриент» не готова для нормальной стабильной работы.
Интерфейс программы перегружен, но большинству пользователей удалось бы
разобраться с ней. При работе с программой возникает множество ошибок.
Например, при заполнении данных и сохранения каждой вкладки, при
распечатке заявления оказывалось, что отсутствует некоторая информация
абитуриента и при проверке данной информации на соответствующей вкладке все
поля были абсолютно правильно заполнены; в отчёте могла присутствовать отличная
от введённой информация; в программе отсутствуют какие-либо справки.
Рисунок 3.1 - Вид программы (вкладка администратор)
4. Аналитический и литературный обзор предметной области
Во время прохождения практики была поставлена задача разработать
программный продукт «Отдел кадров завода», реализующий ведение личных дел всех
работников завода.
База данных должна содержать информацию о сотрудниках, о должностях,
подразделениях. Программа должна иметь возможность поиска информации о
сотруднике по табельному номеру, по фамилии, по подразделению.
Программа должна предоставить возможность формирования отчетов:
личное дело, в котором автоматически высчитывается стаж работы в
зависимости от введенных значений: даты поступления на работу и даты вызова
отчета;
отчет, группирующий сотрудников по подразделениям и по разрядам
с подсчетом количества сотрудников по каждому разряду.
Анализ сегодняшней практики работы отделов кадров предприятий республики
показывает, что серьезные изменения в их деятельности произошли, прежде всего,
в исполняемых функциях. Естественно, никто не отменял кадровое
делопроизводство, т.е. письменное оформление приема на работу, переводов
работников из одного подразделения в другое, увольнений, отпусков, заполнение
личных дел, трудовых книжек и др.
Однако сегодня все эти рутинные операции на многих предприятиях
выполняются с помощью современных информационных технологий. И главное
изменение в функциях заключается в том, что отделы кадров от преимущественно
регистрационных функций постепенно переходят к аналитическим. Это, прежде
всего:
- подготовка
совместно с некоторыми другими службами предприятия перспективного и текущего
прогноза потребности в персонале с учетом стратегии развития производства;
- выбор
источников комплектования персонала на рынке труда того или иного региона либо
республики в целом;
- определение
методов отбора наиболее достойных кандидатов для трудоустройства;
- подготовка
контрактов и контроль сроков их действия;
- создание
необходимых условий для скорейшей адаптации новичков, в том числе и молодых
специалистов;
- формирование
резерва кадров на выдвижение, выявление и развитие лидерских качеств у
сотрудников, прежде всего молодых, планирование их должностной карьеры;
- определение
критериев и методов оценки персонала;
- совершенствование
принципов расстановки кадров;
- перевод,
перемещение, повышение, понижение, увольнение в зависимости от результатов
труда каждого;
- использование
системы моральных и материальных мер стимулирования высокопроизводительного
труда с целью привлечения, сохранения и закрепления кадров;
- формирование
и поддержание на необходимом уровне таких корпоративных ценностей, как гордость
за имидж предприятия, коллективный дух и солидарность, деловой
морально-психологический климат;
- взаимодействие
в решении различных проблем кадровой работы с профсоюзными, молодежными,
ветеранскими и другими общественными организациями.
Структура и схема управления кадровой службы определяется утвержденными
функциями подразделения. Например, есть конкретные примеры организаций, где
одно структурное подразделение отвечает и за подбор персонала, и за оплату его
труда, т.е. здесь объединены функции ОК и ОТиЗ.
5. Проектирование базы данных
.1 Инфологическое проектирование
модели базы данных
Предметная область, подлежащая автоматизации, содержит информацию о
сотрудниках завода такую как личная информация, занимаемая должность, разряд,
информация о зарплате.
Объекты предметной области: «Сотрудники», «Подразделения», «Бухгалтерия»,
«Должности».
В предметной области можно выделить следующие процессы: прием сотрудника
на работу, изменения в положении, ведение бухгалтерии по зарплате.
В рассматриваемой предметной области можно выделить следующие сущности:
«Данные о сотрудниках», «Сведения о подразделениях завода», «Сведения о
занимаемых должностях», «Бухгалтерия».
Анализируя сущности рассматриваемой предметной области, можно выделить
следующие атрибуты и идентифицирующие ключи:
Сущность «Сотрудники» обладает атрибутами: ID, Фамилия, Имя, Отчество, Улица, Дом, Квартира, Номер
телефона (домашний), Номер телефона (мобильный), номер телефона
(дополнительный), Дата поступления. В качестве ключевого атрибута можно принять
ID, который определяется числовыми
значениями.
Сущность «Бухгалтерия» содержит следующие атрибуты: ID, Заработная плата, Премиальные.
Идентифицирующим ключом данной сущности является ID, так как он определяется числовыми значениями.
Сущность «Подразделения» содержит следующие атрибуты: Код подразделения,
Название, Глава. Идентифицирующим ключом данной сущности является Код
подразделения, так как он определяется числовыми значениями.
Сущность «Должности» содержит следующие атрибуты: ID, Код подразделения, Должность,
Занятость, Разряд. В качестве ключевого атрибута можно принять ID, который определяется числовыми
значениями.
Между сущностями «Сотрудники» и «Бухгалтерия» существует связь один к
одному, так как каждому отдельному сотруднику соответствует единственная
зарплата. Первичным ключом сущности «Сотрудники» будет атрибут ID по отношению к сущности
«Бухгалтерия» с внешним ключом ID.
Рисунок 5.1 - Связь между сущностями «Сотрудники» и «Бухгалтерия»
Между сущностями «Сотрудники» и «Должности» существует связь один к
одному, так как каждому ID
сущности «»Сотрудники» соответствует один ID сущности «Должности». Первичным ключом сущности «Сотрудники»
будет атрибут ID по отношению к
сущности «Должности» с внешним ключом ID.
Рисунок 5.2 - Связь между сущностями «Сотрудники» и «Должности»
Между сущностями «Должности» и «Подразделения» существует связь один ко
многим, так как каждому ID
сущности «Должности» соответствует множество Код подразделения сущности
«Подразделения». Первичным ключом сущности «Подразделения» будет атрибут Код
подразделения по отношению к сущности «Должности» с внешним ключом ID.
Рисунок 5.3 - Связь между сущностями «Должности» и «Подразделения»
Проанализировав предметную область, можно построить следующую ER-диаграмму предметной области «Отдел кадров завода»:
аппаратный
программный обеспечение сеть
Рисунок 5.4 - ER-диаграмма
предметной области «Отдел кадров завода»
5.2 Логическое проектирование модели базы данных
На логическом этапе проектирования модели базы данных описывается перевод
сущностей инфологической модели в отношения.
Отношение «Сотрудники» (ID,
Фамилия, Имя, Отчество, Улица, Дом, Квартира, Номер телефона (домашний), Номер
телефона (мобильный), номер телефона (дополнительный), Дата поступления)
находится в первой нормальной форме (1NF), так как на пересечении каждого столбца и строки находятся только
элементарные значения атрибутов.
Отношение находится во второй нормальной форме (2NF), так как оно находится в первой нормальной форме и не
содержит неполных функциональных зависимостей непервичных атрибутов от
первичного ключа.
Отношения находится в третьей нормальной форме (3NF), если они находится во второй нормальной форме и не
содержит транзитивных зависимостей. В данном случае отношение «Сотрудники»
находится во второй нормальной форме и транзитивные зависимости отсутствуют.
Следовательно, данное отношение находится в третьей нормальной форме.
Следуя из приведенного определения и анализа структуры отношения,
определим схему отношения «Сотрудники», которая будет реализована в виде
таблицы «Сотрудники» в системе управления базами данных.
Таблица 1 - Схема отношения «Сотрудники»
Имя атрибута
|
Домен
|
Имя поля
|
Условие на значение
|
Описание
|
ID
|
Числовой
|
ID
|
|
Табельный номер
|
Фамилия
|
Текстовый
|
Фамилия
|
|
Фамилия
|
Имя
|
Текстовый
|
Имя
|
|
Имя
|
Отчество
|
Текстовый
|
Отчество
|
|
Отчество
|
Улица
|
Текстовый
|
Улица
|
|
Улица
|
Квартира
|
Текстовый
|
Квартира
|
|
Квартира
|
Дом
|
Текстовый
|
Дом
|
|
Дом
|
Номер телефона (домашний)
|
Текстовый
|
Номер телефона (дом)
|
|
Номер телефона
|
Номер телефона (мобильный)
|
Текстовый
|
Номер телефона (моб)
|
|
Номер телефона
|
Номер телефона (дополнительный)
|
Текстовый
|
Номер телефона (доп)
|
|
Номер телефона
|
Дата поступления
|
Дата/Время
|
Дата поступления
|
|
Дата приема на работу
|
Отношение «Бухгалтерия» (ID,
Заработная плата, Премиальные) находится в первой нормальной форме, так как на
пересечении каждого столбца и строки находятся только элементарные значения
атрибутов.
Отношение находится во второй нормальной форме, так как оно находится в
первой нормальной форме и не содержит неполных функциональных зависимостей
непервичных атрибутов от первичного ключа.
Отношение «Бухгалтерия» находится в третьей нормальной форме, так как оно
находится во второй нормальной форме и транзитивные зависимости отсутствуют.
Таким образом, определим схему отношения «Бухгалтерия», которая будет
реализована в виде таблицы «Бухгалтерия» в системе управления базами данных.
Таблица 2 - Схема отношения «Бухгалтерия»
Имя атрибута
|
Домен
|
Имя поля
|
Условие на значение
|
Описание
|
ID
|
Числовой
|
ID
|
|
Табельный номер сотрудника
|
Заработная плата
|
Денежный
|
Заработная плата
|
|
Оклад за месяц
|
Премиальные
|
Денежный
|
Премиальные
|
|
Премиальные за месяц
|
Отношение «Подразделения» (Код подразделения, Название, Глава) находится
в первой нормальной форме, так как на пересечении каждого столбца и строки
находятся только элементарные значения атрибутов.
Отношение находится во второй нормальной форме, так как оно находится в
первой нормальной форме и не содержит неполных функциональных зависимостей
непервичных атрибутов от первичного ключа.
Отношение «Подразделения» находится в третьей нормальной форме, так как
оно находится во второй нормальной форме и транзитивные зависимости
отсутствуют.
Таким образом, определим схему отношения «Подразделения», которая будет
реализована в виде таблицы «Подразделения» в системе управления базами данных.
Таблица 3 - Схема отношения «Подразделения»
Имя атрибута
|
Домен
|
Имя поля
|
Условие на значение
|
Описание
|
Код подразделения
|
Числовой
|
Код подразделения
|
|
Код подразделения
|
Название
|
Текстовый
|
Название
|
|
Название подразделения
|
Глава
|
Текстовый
|
Глава
|
|
Глава подразделения
|
Отношение «Должности» (ID,
Код подразделения, Должность, Занятость, Разряд) находится в первой нормальной
форме, так как на пересечении каждого столбца и строки находятся только элементарные
значения атрибутов.
Отношение находится во второй нормальной форме, так как оно находится в
первой нормальной форме и не содержит неполных функциональных зависимостей
непервичных атрибутов от первичного ключа.
Отношение «Должности» находится в третьей нормальной форме, так как оно
находится во второй нормальной форме и транзитивные зависимости отсутствуют.
Таким образом, определим схему отношения «Должности», которая будет
реализована в виде таблицы «Должности» в системе управления базами данных.
Таблица 4 - Схема отношения «Должности»
Имя атрибута
|
Домен
|
Имя поля
|
Условие на значение
|
Описание
|
ID
|
Числовой
|
ID
|
|
Табельный номер сотрудника
|
Код подразделения
|
Числовой
|
Код подразделения
|
|
Код подразделения
|
Должность
|
Текстовый
|
Должность
|
|
Название должности
|
Занятость
|
Текстовый
|
Занятость
|
|
Занятость
|
Разряд
|
Числовой
|
Разряд
|
|
Номер разряда
|
5.3 Физическое проектирование модели базы данных
Для создания базы данных была выбрана система управления базами данных Microsoft Access. MS
Access входит в состав самого популярного пакета Microsoft Office. Основные
преимущества: знаком многим конечным пользователям и обладает высокой
устойчивостью данных, позволяет готовить отчеты из баз данных различных
форматов. Предназначен для создания отчетов произвольной формы на основании
различных данных. Microsoft Access обеспечивает средства для создания
клиентских частей в приложениях «клиент-сервер», которые сочетают в себе
средства просмотра, графический интерфейс и средства построения запросов.
Для разработки приложения используется интегрированная среда разработки Visual Studio 2005, язык C#.
Для полной функциональности приложения и базы данных создано четыре
таблицы, которые обладают ключевыми полями и связаны между собой.
Ниже представлена схема данных предметной области «Отдел кадров завода» в
СУБД Microsoft Access:
Рисунок 5.5 - Схема данных в СУБД Microsoft Access
6. Описание структуры программы
Структурная схема - схема, отражающая состав и взаимодействие по
управлению частей разрабатываемого продукта. При объектной декомпозиции такими
частями являются объекты (рисунок 6.1).
Рисунок 6.1 - Структурная схема программного продукта (объектная
декомпозиция)
При запуске программы загружается главная рабочая форма Form1.cs. Все необходимые манипуляции для работы с базой данных
осуществляются в главной рабочей форме. Таблицы разделены между собой с помощью
управляющего элемента TabControl. Каждая вкладка этого элемента соответствует единственной таблице базы
данных. Также в окне TabControl можно выполнить все необходимые команды соответствующие активной
таблице, такие как поиск, удаление, добавление, редактирование. При закрытии
главной рабочей формы осуществляется автоматический выход из приложения.
. Выбор методов решения задачи и разработка основных
алгоритмов
Структура обработки информации представляется в следующем виде:
Рисунок 7.1 - Структура обработки информации
Соединение с базой данных производится следующим образом:
string InstConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" + @"Организация.mdb";con;= new
OleDbConnection(InstConnectString);
Для осуществления поиска по полям таблицы Сотрудники в программе
предусмотрен специальный метод Search, который не только позволяет быстро
находить необходимые данные по всем полям таблицы, но и начинает работать уже с
первого введенного в поле для поиска символа, что значительно ускоряет этот
процесс.void Search(string SQL)
{
{dt = new DataTable();da = new OleDbDataAdapter(SQL,
con);.Fill(dt);.DataSource = dt;
}
{.Show("Введены некорректные данные", "Поиск",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
В данный метод передается строка SQL-запроса, которая может принимать различные значения в
зависимости от выбранного в элементе ComboBox названия поля, по которому пользователю необходимо произвести
поиск.
private void textBox1_TextChanged(object sender, EventArgs e)
{(tabControl1.SelectedTab.Text == "Сотрудники")
{(NameOfField == "ID" &&
textBox1.Text.Length != 0)("Select* from Сотрудники where
CInt(Mid(CStr(Сотрудники.ID),1," + textBox1.Text.Length + "))="
+ int.Parse(textBox1.Text));if (NameOfField == "Фамилия" &&
textBox1.Text.Length != 0)("Select* from Сотрудники where
Сотрудники.Фамилия Like '" + textBox1.Text + "%'");if
(textBox1.Text.Length == 0)
{dt = new DataTable("Сотрудники");da = new OleDbDataAdapter("Select*
from Сотрудники", con);.Fill(dt);.DataSource = dt;
}
}
Для удаления какой-либо записи из таблицы Сотрудники необходимо в элемент
TextBox ввести значение номера лицевого
счета соответствующего удаляемой записи и нажать кнопку «Удалить».
OleDbCommand insCom = new OleDbCommand("Delete from Сотрудники where
((Сотрудники.ID)=" + int.Parse(textBox2.Text) + ");",
con);(insCom.ExecuteNonQuery() == 1).Show("Запись удалена",
"Удаление", MessageBoxButtons.OK, MessageBoxIcon.Information);.Show("Запись
не удалена", "Удаление", MessageBoxButtons.OK,
MessageBoxIcon.Error);dt = new DataTable("Сотрудники");da = new
OleDbDataAdapter("Select* from Сотрудники",
con);.Fill(dt);.DataSource = dt;
Для редактирования данных в таблице отдельного метода не предусмотрено,
но используется алгоритм, который позволяет изменять данные непосредственно в
самом элементе dataGridView. Этот
метод очень прост и понятен, для его работы необходимо определить позицию
выделенной ячейки в таблице, запомнить все данные из этой строки, а после
введения изменений и подтверждения пользователем обновить данные в элементе dataGridView.
private void dg1_CellBeginEdit(object sender,
DataGridViewCellCancelEventArgs e)
{= dg1.CurrentCell.Value;= (int)dg1.CurrentRow.Cells[0].Value;= dg1.Columns[dg1.CurrentCellAddress.X].HeaderText;void
dg1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
{(ColumnName == "ID")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;;
}if (ColumnName == "Дата поступления")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;;
}(edit.ToString() != dg1.CurrentCell.Value.ToString() &&
DialogResult.Yes == MessageBox.Show("Принять изменения?",
"Редактирование", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{com = new OleDbCommand("Update Сотрудники Set [" + ColumnName
+ "]='" + dg1.CurrentCell.Value + "' Where ID=" + ID,
con);.ExecuteNonQuery();
}.CurrentCell.Value = edit;
}
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;
}
Для таблицы Должности элемента ComboBox заполняются программно из базы
данных с помощью следующего алгоритма.InstConnectString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
@"Организация.mdb";con;rdr1, rdr2, rdr3;cmd1, cmd2, cmd3;Form2()
{();= new OleDbConnection(InstConnectString);.Open();=
con.CreateCommand();.CommandText = "Select [Код подразделения] From
Подразделения";= cmd1.ExecuteReader();(rdr1.Read())
{tmp = ""; //для каждого нового пункта списка очищаем(tmp !=
"")// если в массиве данных есть значения+= " ";+=
rdr1[0].ToString(); //формируем пункт поля со списком.Items.Add(tmp);
//добавляем пункт списка к объекту
}
}
Другой элемента ComboBox, необходимый для добавления записи имеет список
фиксированных значений.
В данном приложении алгоритм добавления данных выглядит следующим
образом.
int id = SearchID.Start("Сотрудники",
"ID", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
@"Организация.mdb");today = new DateTime();=
Convert.ToDateTime(monthCalendar1.TodayDate.Date.ToShortDateString());
{insSQL2 = "Insert into Бухгалтерия values(" + id +
","
+ int.Parse(textBox12.Text) + "," + int.Parse(textBox13.Text)
+ ")";insCom2 = new OleDbCommand(insSQL2, con);insSQL = "Insert
into Сотрудники values(" + id + ",'"
+ textBox1.Text + "','" + textBox2.Text +
"','" + textBox3.Text + "','"
+ textBox4.Text + "','" + textBox5.Text +
"','" + textBox6.Text + "','"
+ textBox7.Text + "','" + textBox8.Text +
"','" + textBox9.Text + "','"
+ Convert.ToDateTime(today) + "')";insCom = new
OleDbCommand(insSQL, con);insSQL3 = "Insert into Должности values(" +
id + ","
+ int.Parse(comboBox1.SelectedItem.ToString()) +
",'" + textBox10.Text + "','" + textBox11.Text +
"',"
+ int.Parse(comboBox1.SelectedItem.ToString()) +
")";insCom3 = new OleDbCommand(insSQL3,
con);(insCom2.ExecuteNonQuery() == 1 && insCom.ExecuteNonQuery() == 1
&& insCom3.ExecuteNonQuery() == 1).Show("Запись добавлена",
"Добавление", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
{.Show("Введены некорректные данные",
"Добавление", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Заключение
Разработанная программа повышает качество работы отдела кадров
предприятий. Ведение базы данных сотрудников в электронном виде, а не вручную
снижает вероятность ошибок, упрощает ввод информации и систематизирует ее.
Используя данную программу, сотрудники отделов кадров могут легко следить за
стажем работников, их зарплатой, изменением их личной информации.
В программе были реализованы следующие функции:
добавление данных о новом сотруднике
хранение данных о сотрудниках
изменение данных о сотрудниках
удаление данных о сотрудниках
ведение бухгалтерии
создание отчётов, возможность их сохранения и печати.
Программа повышает качество и доступность работы отдела кадров, снижает
риск возникновения ошибок, сокращает затраты времени на обслуживание
сотрудников.
Данная система может применяться в любых отделах кадров на предприятиях
как крупных, так и малых, что закономерно с учетом растущей актуальности задач
информатизации, программа также доступна для модификации.
Список литературы
1. Герберт
Шилдт «Полный справочник по C#», перевод с англ., издательский дом «Вильямс»,
Москва, 2004г.-752с.:ил.
. Данилина
Т.Г. Конспект лекций по «Технологии Программирования», РИО ПГУ, 2008 г.
. Джесс
Либерти «Создание .NET приложений. Программирование на C#», Издание 2-ое.
Издательство «Символ-Плюс». Москва, 2005 г.-684с.
. Карли
Ватсон и др. «C#»,перевод с англ., издательство «Лори», Москва, 2005г.-862с.
5. Кузнецов
Сергей «Базы данных. Модели и языки», издательство "Бином-Пресс",
2008 г.
6. Лабор
В.В. «Си шарп: Создание приложений для Windows», издательство «Харвест», Минск,
2003г.-384с.
. Троелсен
Э. «C# и платформа .NET. Библиотека программиста», издательский дом «Питер»,
Санкт-Петербург, 2004г.-796с.:ил.
. Фролов
А.В., Фролов Г.В. Язык C#. Самоучитель. - М.: ДИАЛОГ-МИФИ, 2003. - 560с.
. Чарльз
Петцольд «Программирование для Microsoft Windows на C#», Том 2, перевод с
англ., Издательско-торговый дом «Русская редакция», Москва , 2002г.-624с.:ил.
Приложения
Руководство пользователя
Для начала работы запускаем исполнительный файл, его название “Form1.exe”. При запуске появится рабочее
окно, в котором можно начинать работать.
Рисунок 1. Рабочее окно программы
Если необходимо добавить в базу данных нового сотрудника, то нужно нажать
на кнопку «Добавить сотрудника». Откроется новое окно Form2.cs, в
котором необходимо заполнить все предложенные поля, это позволит добавить
данные о сотруднике во все таблицы базы данных одновременно, что необходимо для
обеспечения целостности базы данных.
Рисунок 2. Добавление нового сотрудника
После введения всех необходимых данных следует нажать кнопку «Добавить» и
если все данные были введены правильно, то выйдет диалоговое сообщение,
подтверждающее выполнение запроса. Табельный номер сотрудника высчитывается
программой автоматически, дата поступления на работу запишется текущая.
Рисунок 3 - Диалоговое сообщение, подтверждающее добавление нового
сотрудника
Если необходимо изменить данные о сотруднике, то необходимо кликнуть
левой кнопкой мыши по ячейке, в которую необходимо ввести изменения, и после
введения исправлений нажать Enter
или просто кликнуть один раз левой кнопкой мыши по любой другой ячейке таблицы.
Если исправления введены верно, то изменение необходимо подтвердить в вышедшем
диалогом окне.
Рисунок 4 - Изменение данных в таблице
Для удаления записи необходимо ввести в текстовую строку табельный номер
удаляемого сотрудника и нажать кнопку «Удалить».
Рисунок 5 - Удаление сотрудника
Для осуществления поиска необходимо выбрать из выпадающего списка
название поля, по которому будет производиться поиск, затем в текстовую строку
вводить данные для поиска.
Рисунок 6 - Поиск по таблице
Приложение Б
Листинг программы.cs
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Runtime.InteropServices;System.IO;System.Data.OleDb;System.Text.RegularExpressions;Отдел_кадров_завода
{partial class Form1 : Form
{InstConnectString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
@"Организация.mdb";con;NameOfField, ColumnName;edit;ID;Form1()
{();= new OleDbConnection(InstConnectString);.Open();
}void Form1_FormClosed(object sender, FormClosedEventArgs e)
{.Exit();
}void Form1_Load(object sender, EventArgs e)
{dt1 = new DataTable();da1 = new
OleDbDataAdapter("Select* from Сотрудники",
con);.Fill(dt1);.DataSource = dt1;dt2 = new DataTable();da2 = new
OleDbDataAdapter("Select* from Должности", con);.Fill(dt2);.DataSource
= dt2;dt3 = new DataTable();da3 = new OleDbDataAdapter("Select* from
Подразделения", con);.Fill(dt3);.DataSource = dt3;dt4 = new
DataTable();da4 = new OleDbDataAdapter("Select* from Бухгалтерия",
con);.Fill(dt4);.DataSource = dt4;
}void Search(string SQL)
{
{dt = new DataTable();da = new OleDbDataAdapter(SQL,
con);.Fill(dt);.DataSource = dt;
}
{.Show("Введены некорректные данные",
"Поиск", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}void textBox1_TextChanged(object sender, EventArgs e)
{(tabControl1.SelectedTab.Text == "Сотрудники")
{(NameOfField == "ID" &&
textBox1.Text.Length != 0)("Select* from Сотрудники where
CInt(Mid(CStr(Сотрудники.ID),1," + textBox1.Text.Length + "))="
+ int.Parse(textBox1.Text));if (NameOfField == "Фамилия" && textBox1.Text.Length
!= 0)("Select* from Сотрудники where Сотрудники.Фамилия Like '" +
textBox1.Text + "%'");if (textBox1.Text.Length == 0)
{dt = new DataTable("Сотрудники");da = new
OleDbDataAdapter("Select* from Сотрудники",
con);.Fill(dt);.DataSource = dt;
}
}(tabControl1.SelectedTab.Text == "Должности")
{(NameOfField == "ID" &&
textBox1.Text.Length != 0)
{dt = new DataTable();da = new OleDbDataAdapter("Select*
from Должности where CInt(Mid(CStr(Должности.ID),1," +
textBox1.Text.Length + "))=" + int.Parse(textBox1.Text),
con);.Fill(dt);.DataSource = dt;
}if (NameOfField == "Код подразделения" &&
textBox1.Text.Length != 0)
{dt = new DataTable();da = new OleDbDataAdapter("Select*
from Должности where CInt(Mid(CStr(Должности.[Код подразделения]),1," +
textBox1.Text.Length + "))=" + int.Parse(textBox1.Text),
con);.Fill(dt);.DataSource = dt;
}if (textBox1.Text.Length == 0)
{dt = new DataTable("Должности");da = new
OleDbDataAdapter("Select* from Должности", con);.Fill(dt);.DataSource
= dt;
}
}(tabControl1.SelectedTab.Text == "Подразделения")
{(NameOfField == "Код подразделения" &&
textBox1.Text.Length != 0)
{dt = new DataTable();da = new OleDbDataAdapter("Select*
from Подразделения where CInt(Mid(CStr(Подразделения.[Код
подразделения]),1," + textBox1.Text.Length + "))=" +
int.Parse(textBox1.Text), con);.Fill(dt);.DataSource = dt;
}if (textBox1.Text.Length == 0)
{dt = new DataTable("Подразделения");da = new
OleDbDataAdapter("Select* from Подразделения",
con);.Fill(dt);.DataSource = dt;
}
}(tabControl1.SelectedTab.Text == "Бухгалтерия")
{(NameOfField == "ID" &&
textBox1.Text.Length != 0)
{dt = new DataTable();da = new OleDbDataAdapter("Select*
from Бухгалтерия where CInt(Mid(CStr(Бухгалтерия.ID),1," +
textBox1.Text.Length + "))=" + int.Parse(textBox1.Text),
con);.Fill(dt);.DataSource = dt;
}if (textBox1.Text.Length == 0)
{dt = new DataTable("Бухгалтерия");da = new
OleDbDataAdapter("Select* from Бухгалтерия",
con);.Fill(dt);.DataSource = dt;
}
}
}void comboBox1_SelectedIndexChanged(object sender, EventArgs
e)
{= comboBox1.SelectedItem.ToString();.Enabled = true;
}void button1_Click(object sender, EventArgs e)
{
{insCom = new OleDbCommand("Delete from Сотрудники where
((Сотрудники.ID)=" + int.Parse(textBox2.Text) + ");",
con);(insCom.ExecuteNonQuery() == 1).Show("Запись удалена",
"Удаление", MessageBoxButtons.OK,
MessageBoxIcon.Information);.Show("Запись не удалена",
"Удаление", MessageBoxButtons.OK, MessageBoxIcon.Error);dt = new
DataTable("Сотрудники");da = new OleDbDataAdapter("Select* from
Сотрудники", con);.Fill(dt);.DataSource = dt;insCom2 = new
OleDbCommand("Delete from Бухгалтерия where ((Бухгалтерия.ID)=" +
int.Parse(textBox2.Text) + ");", con);.ExecuteNonQuery();dt2 = new
DataTable("Бухгалтерия");da2 = new OleDbDataAdapter("Select*
from Бухгалтерия", con);.Fill(dt2);.DataSource = dt2;dt3 = new
DataTable("Подразделения");da3 = new OleDbDataAdapter("Select*
from Подразделения", con);.Fill(dt3);.DataSource = dt3;dt4 = new
DataTable("Должности");da4 = new OleDbDataAdapter("Select* from
Должности", con);.Fill(dt4);.DataSource = dt4;
}
{.Show("Введены некорректные данные",
"Удаление", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}void dg1_CellBeginEdit(object sender,
DataGridViewCellCancelEventArgs e)
{= dg1.CurrentCell.Value;= (int)dg1.CurrentRow.Cells[0].Value;=
dg1.Columns[dg1.CurrentCellAddress.X].HeaderText;
}void dg1_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
{(ColumnName == "ID")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK, MessageBoxIcon.Error);.CurrentCell.Value
= edit;;
}if (ColumnName == "Дата поступления")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;;
}(edit.ToString() != dg1.CurrentCell.Value.ToString()
&& DialogResult.Yes == MessageBox.Show("Принять изменения?",
"Редактирование", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{com = new OleDbCommand("Update Сотрудники Set [" +
ColumnName + "]='" + dg1.CurrentCell.Value + "' Where ID="
+ ID, con);.ExecuteNonQuery();
}.CurrentCell.Value = edit;
}
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;
}
}void dg2_CellBeginEdit(object sender,
DataGridViewCellCancelEventArgs e)
{= dg2.CurrentCell.Value;=
(int)dg2.CurrentRow.Cells[0].Value;=
dg2.Columns[dg2.CurrentCellAddress.X].HeaderText;
}void dg2_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
{(ColumnName == "ID")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;;
}if (ColumnName == "Код подразделения")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;;
}(edit.ToString() != dg2.CurrentCell.Value.ToString()
&& DialogResult.Yes == MessageBox.Show("Принять изменения?",
"Редактирование", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{com = new OleDbCommand("Update Должности Set [" +
ColumnName + "]='" + dg2.CurrentCell.Value + "' Where ID="
+ ID, con);.ExecuteNonQuery();
}.CurrentCell.Value = edit;
}
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK, MessageBoxIcon.Error);.CurrentCell.Value
= edit;
}
}void dg3_CellBeginEdit(object sender,
DataGridViewCellCancelEventArgs e)
{= dg3.CurrentCell.Value;=
(int)dg3.CurrentRow.Cells[0].Value;=
dg3.Columns[dg3.CurrentCellAddress.X].HeaderText;
}void dg3_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
{(ColumnName == "Код подразделения")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;;
}(edit.ToString() != dg3.CurrentCell.Value.ToString()
&& DialogResult.Yes == MessageBox.Show("Принять изменения?",
"Редактирование", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{com = new OleDbCommand("Update Подразделения Set
[" + ColumnName + "]='" + dg3.CurrentCell.Value + "' Where
[Код подразделения]=" + ID, con);.ExecuteNonQuery();
}.CurrentCell.Value = edit;
}
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;
}
}void dg4_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs
e)
{= dg4.CurrentCell.Value;=
(int)dg4.CurrentRow.Cells[0].Value;=
dg4.Columns[dg4.CurrentCellAddress.X].HeaderText;
}void dg4_CellEndEdit(object sender,
DataGridViewCellEventArgs e)
{
{(ColumnName == "ID")
{.Show("Изменение этого поля невозможно",
"Редактирование", MessageBoxButtons.OK,
MessageBoxIcon.Error);.CurrentCell.Value = edit;;
}(edit.ToString() != dg4.CurrentCell.Value.ToString()
&& DialogResult.Yes == MessageBox.Show("Принять изменения?",
"Редактирование", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
{com = new OleDbCommand("Update Бухгалтерия Set ["
+ ColumnName + "]='" + dg4.CurrentCell.Value + "' Where
ID=" + ID, con);.ExecuteNonQuery();
}.CurrentCell.Value = edit;
}
{.Show("Изменение этого поля невозможно", "Редактирование",
MessageBoxButtons.OK, MessageBoxIcon.Error);.CurrentCell.Value = edit;
}
}void button2_Click(object sender, EventArgs e)
{f2 = new Form2();.Show();
}
}
}
Form2.cs
using
System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Runtime.InteropServices;System.IO;System.Data.OleDb;System.Text.RegularExpressions;Отдел_кадров_завода
{partial class Form2 : Form
{InstConnectString =
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"Организация.mdb";con;rdr1,
rdr2, rdr3;cmd1, cmd2, cmd3;Form2()
{();= new OleDbConnection(InstConnectString);.Open();=
con.CreateCommand();.CommandText = "Select [Код подразделения] From
Подразделения";= cmd1.ExecuteReader();(rdr1.Read())
{tmp = ""; //для каждого нового пункта списка
очищаем(tmp != "")// если в массиве данных есть значения+= "
";+= rdr1[0].ToString(); //формируем пункт поля со списком.Items.Add(tmp);
//добавляем пункт списка к объекту
}
}void button1_Click(object sender, EventArgs e)
{id = SearchID.Start("Сотрудники", "ID",
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
@"Организация.mdb");today = new DateTime();=
Convert.ToDateTime(monthCalendar1.TodayDate.Date.ToShortDateString());
{insSQL2 = "Insert into Бухгалтерия values(" + id +
","
+ int.Parse(textBox12.Text) + "," +
int.Parse(textBox13.Text) + ")";insCom2 = new OleDbCommand(insSQL2,
con);insSQL = "Insert into Сотрудники values(" + id + ",'"
+ textBox1.Text + "','" + textBox2.Text +
"','" + textBox3.Text + "','"
+ textBox4.Text + "','" + textBox5.Text +
"','" + textBox6.Text + "','"
+ textBox7.Text + "','" + textBox8.Text +
"','" + textBox9.Text + "','"
+ Convert.ToDateTime(today) + "')";insCom = new
OleDbCommand(insSQL, con);insSQL3 = "Insert into Должности values(" +
id + ","
+ int.Parse(comboBox1.SelectedItem.ToString()) +
",'" + textBox10.Text + "','" + textBox11.Text +
"',"
+ int.Parse(comboBox1.SelectedItem.ToString()) +
")";insCom3 = new OleDbCommand(insSQL3,
con);(insCom2.ExecuteNonQuery() == 1 && insCom.ExecuteNonQuery() == 1
&& insCom3.ExecuteNonQuery() == 1).Show("Запись добавлена",
"Добавление", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
{.Show("Введены некорректные данные",
"Добавление", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}