Объектная реализация полиморфного контейнера на основе линейного списка

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    283,4 Кб
  • Опубликовано:
    2014-11-23
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Объектная реализация полиморфного контейнера на основе линейного списка













Курсовая работа

По объектно-ориентированному программированию

На тему:

"Объектная реализация полиморфного контейнера на основе линейного списка"

Оглавление

Введение

1. Теоретическое описание линейного списка с алгоритмами реализации основных операций

2. Описание основных понятий и механизмов ООП

История

Главные понятия и разновидности

Основные понятия

Абстракция данных

Инкапсуляция

Сокрытие данных

Наследование

Полиморфизм

Определение ООП

Концепции

Особенности реализации

Поля данных

Методы

3. Описание всех разработанных классов

4. Описание демонстрационного модуля с характеристикой использованных стандартных компонентов

Перечень использованных компонентов

Описание использованных компонентов

5. Описание структуры программы

Заключение

Список использованной литературы

Введение


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

База данных способна хранить пользователей трёх типов:

·        Гость

·        Пользователь

·        Администратор

Требуется создать программу для вывода информации о пользователях

Для реализации задачи требуется создать объект контейнер пользователей, реализующий следующие возможности:

·        Добавление пользователя

·        Удаление пользователя

·        Вывод информации о пользователе

·        Сохранение информации во внешнем файле

·        Загрузка сохраненных данных из файла

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

1. Теоретическое описание линейного списка с алгоритмами реализации основных операций


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

Опять же для удобства реализации будем считать, что список ВСЕГДА содержит хотя бы один элемент-заголовок с адресом первого реального элемента списка. Это позволяет унифицировать процедуры добавления и удаления крайних элементов и устранить некоторые проверки. Адрес элемента-заголовка задается переменной-указателем pHead. Эта переменная устанавливается при первоначальном создании списка и в дальнейшем НЕ изменяется. Для реализации основных действий используются вспомогательные ссылочные переменные.

Необходимые объявления:

 

type pDinItem = ^ TDinItem; {ссылочный тип для адресации элементов списка}

TDinItem = record

{базовый тип, определяющий структуру элемента списка}

inf: <тип информационной части>;

next: pDinItem; {адрес следующего элемента}

end;

var pHead: pDinItem;

Создание пустого списка включает:

·        выделение памяти под заголовок: new (pHead);

·        установку пустой ссылочной части заголовка: pHead^. next: = nil;

Проход по списку от первого элемента к последнему практически не отличается от прохода по очереди.

Поиск заданного элемента включает:

·        установку вспомогательного указателя в адрес первого элемента списка

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

·        после завершения цикла проверить значение вспомогательного указателя и сделать вывод об успешности поиска

pCurrent: = pHead^. next;

while (pCurrent <> nil) and (pCurrent^. inf <> ‘заданное значение’)

do pCurrent: = pCurrent^. next;

if pCurrent = nil then ‘Элемента нет’ else ‘элемент найден’;

Удаление заданного элемента включает:

·        поиск удаляемого элемента с определением адреса элемента-предшественника (для этого вводится еще одна вспомогательная ссылочная переменная pPrev, инициированная адресом заголовка и изменяющая свое значение внутри цикла)

·        если удаляемый элемент найден, то изменяется ссылочная часть его предшественника:

pPrev^. next: = pCurrent^. Next

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

Добавление нового элемента ПОСЛЕ заданного включает:

·        поиск заданного элемента с помощью вспомогательного указателя pCurrent

·        выделение памяти для нового элемента с помощью еще одного указателя pTemp

·        формирование полей нового элемента, в частности - настройка ссылочной части

pTemp^. next: = pCurrent^. next;

·        изменение ссылочной части текущего элемента на адрес нового элемента

pCurrent^. next: = pTemp;

Добавление нового элемента ПЕРЕД заданным включает:

·        поиск заданного элемента с одновременным определением элемента-предшественника (используются указатели pCurrent и pPrev)

·        выделение памяти для нового элемента с помощью еще одного указателя pTemp

·        формирование полей нового элемента, в частности - настройка ссылочной части: pTemp^. next: = pCurrent;

·        изменение ссылочной части элемента-предшественника на адрес нового элемента: pPrev^. next: = pTemp;

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

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

контейнер пользователь линейный список

2. Описание основных понятий и механизмов ООП


История


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

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др., однако это всё не было воспринято современниками как нечто грандиозное. Тем не менее, большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования. В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

Главные понятия и разновидности


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

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности - для этого требуется наличие наследования.

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

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

Основные понятия


Абстракция данных

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

Инкапсуляция

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

Сокрытие данных

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

Наследование

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

Полиморфизм

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

Определение ООП

По мнению Алана Кея, создателя языка Smalltalk, которого считают одним из "отцов-основателей" ООП, объектно-ориентированный подход заключается в следующем наборе основных принципов (цитируется по вышеупомянутой книге Т. Бадда).

Всё является объектом.

Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение - это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.

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

Каждый объект является представителем (экземпляром) класса, который выражает общие свойства объектов.

В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.

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

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

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

Концепции

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

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

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

Однако общность механизма обмена сообщениями имеет и другую сторону - "полноценная" передача сообщений требует дополнительных накладных расходов, что не всегда приемлемо. Поэтому в большинстве ныне существующих объектно-ориентированных языков программирования используется концепция "отправка сообщения как вызов метода" - объекты имеют доступные извне методы, вызовами которых и обеспечивается взаимодействие объектов. Данный подход реализован в огромном количестве языков программирования, в том числе C++, Object Pascal, Java, Oberon-2. В настоящий момент именно он является наиболее распространённым в объектно-ориентированных языках.

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

Особенности реализации

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

Поля данных

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

Методы

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

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование - порождение класса от двух или более классов-родителей. Множественное наследование создаёт целый ряд проблем, как логических, так и чисто реализационных, поэтому в полном объёме его поддержка не распространена. Вместо этого в 1990-е годы появилось и стало активно вводиться в объектно-ориентированные языки понятие интерфейса. Интерфейс - это класс без полей и без реализации, включающий только заголовки методов. Если некий класс наследует (или, как говорят, реализует) интерфейс, он должен реализовать все входящие в него методы. Использование интерфейсов предоставляет относительно дешёвую альтернативу множественному наследованию.

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

Инкапсуляция обеспечивается следующими средствами:

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

Методы доступа. Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют ещё аксессорами (от англ. access - доступ), а по отдельности - геттерами (англ. get - чтение) и сеттерами (англ. set - запись).

Свойства объекта. Псевдополя, доступные для чтения и/или записи. Свойства внешне выглядят как поля и используются аналогично доступным полям (с некоторыми исключениями), однако фактически при обращении к ним происходит вызов методов доступа. Таким образом, свойства можно рассматривать как "умные" поля данных, сопровождающие доступ к внутренним данным объекта какими-либо дополнительными действиями (например, когда изменение координаты объекта сопровождается его перерисовкой на новом месте). Свойства, по сути - не более чем синтаксический сахар, поскольку никаких новых возможностей они не добавляют, а лишь скрывают вызов методов доступа. Конкретная языковая реализация свойств может быть разной. Например, в C# объявление свойства непосредственно содержит код методов доступа, который вызывается только при работе со свойствами, то есть не требует отдельных методов доступа, доступных для непосредственного вызова. В Delphi объявление свойства содержит лишь имена методов доступа, которые должны вызываться при обращении к полю. Сами методы доступа представляют собой обычные методы с некоторыми дополнительными требованиями к сигнатуре.

Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа "класс" может быть присвоен объект любого класса-потомка её класса.

3. Описание всех разработанных классов


В данной курсовой работе были разработаны следующие классы:

·        user - родительский абстрактный класс пользователей с общими для всех свойствами и методами, а также виртуальным методом вывода информации о пользователе

·        guest - производный класс от user, имеющий переопределенный метод вывода информации.

·        defUser - производный класс от user, имеющий дополнительные полe пароль и переопределённый метод вывода информации.

·        admin - Производный класс от defUser, имеющий дополнительный метод удаления пользователя и переопределенный метод вывода информации.

·        listElement - класс элемента контейнера. Имеет следующие поля: указатель на объект класса user, указатель на следующий элемент (на объекты класса listElement).

·        Container - класс-контейнер на основе линейного списка, незамкнутого с заголовком. Содержит указатель на начало списка (объект класса listElement) и методы: Конструктор, метод добавление пользователя после заданного, метод добавление пользователя перед заданным пользователя, метод удаления пользователя из контейнера, методы сохранения в файл и загрузки из файла.

В контейнере хранятся либо объект класса guest, defUser или admin, что и есть проявление полиморфизма.

4. Описание демонстрационного модуля с характеристикой использованных стандартных компонентов


Перечень использованных компонентов


Данный курсовой проект разрабатывался в среде программирования Visual Studio. В процессе разработки были использованы следующие компоненты библиотеки System. Windows. Forms:

·        dataGridView - для демонстрации информации на экране, содержит столбцы: тип пользователя, имя, пароль, права доступа.

·        menuStrip - для создания меню, через которое осуществляется взаимодействие с пользователем.

·        openFileDialog - для открытия файла и загрузки из него данных в контейнер.

·        saveFileDialog - для сохранения информации в файле.

Описание использованных компонентов

dataGridView.

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

menuStrip.

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

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

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

После установки компонента на форму необходимо добавить раскрывающиеся пункты меню (ToolStripMenuItem) и конечные пункты меню (ToolStripMenuItem).

openFileDialog.

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

saveFileDialog.

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

Вот картина внешнего вида стандартного диалога открытия файла:


5. Описание структуры программы


Приложение состоит из 2 форм и 2 диалога, а так же из классов user, guest, defUser, admin, listElement и Container.

Основная форма Form1 служит для показа текущего состояния контейнера и выполнения с ним всех действий, предусмотренных в задании. Она содержит компоненты dataGridView, menuStrip, openFileDialog, saveFileDIalog.


Вспомогательный диалог userForm используется для задания полей создаваемого пользователя. Для ввода значений каждого из полей используется компонент textBox. Из-за того, что в зависимости от типа создаваемого файла следует задавать три (для гостя) или четыре (для пользователя и администратора) поля, окно создается динамически в зависимости от выбранного типа файла.

) Полный листинг проекта с краткими комментариями:

user. cs

using System;System. Collections. Generic;System. Linq;System. Text;курсовая_2курс

{class user

{string name, rights;user next = null;user (string Name, string Rights)

{. Name = Name;. Rights = Rights;

}string Name

{

{this. name;

}

{. name = value;

}

}string Rights

{

{this. rights;

}

{. rights = value;

}

}user Next

{

{this. next;

}

{. next = value;

}

}public string show ();

}

}

admin. cs

using System;System. Collections. Generic;System. Linq;System. Text;курсовая_2курс

{admin: defUser

{admin (string Name, string Rights, string Password): base (Name, Rights, Password)

{

}void deleteUser (defUser user) { /*. */ }override string show ()

{str = "Администратор " + this. Name + " " + this. Rights + " " + this. Password;str;

}

}

}

defUser. cs

using System;System. Collections. Generic;System. Linq;System. Text;курсовая_2курс

{defUser: user

{string password;defUser (string Name, string Rights, string Password): base (Name, Rights)

{. Password = Password;

}string Password

{

{this. password;

}

{. password = value;

}

}override string show ()

{str = "Пользователь " + this. Name + " " + this. Rights + " " + this. Password;str;

}

}

}

guest. csSystem;System. Collections. Generic;System. Linq;System. Text;курсовая_2курс

{guest: user

{guest (string Name, string Rights): base (Name, Rights)

{

}override string show ()

{str = "Гость " + this. Name + " " + this. Rights;str;

}

}

}

elementList. cs

using System;System. Collections. Generic;System. Linq;System. Text;курсовая_2курс

{listElement

{listElement next;user info;listElement ()

{. Next = null;

}listElement (user User)

{. Info = User;. Next = null;

}listElement Next

{{ return this. next; }{ this. next = value; }

}user Info

{{ return this. info; }{ this. info = value; }

}

}

}

Container. cs

using System;System. IO;System. Collections. Generic;System. Security. Cryptography;System. Linq;System. Text;System. Windows. Forms;курсовая_2курс

{Container

{listElement head;

#region КонструкторContainer ()

{. head = new listElement ();

}

#endregion

#region Добавление пользователя после заданного

public void addUserAfter (user User, user afterUser)

{iterator, newElement;find;= new listElement (User);= false;(iterator = head. Next; iterator! = null; iterator = iterator. Next)

{(iterator! = null && iterator. Info == afterUser && afterUser! = null)

{= true;;

}

}(find)

{. Next = iterator. Next;. Next = newElement;

}. Next = newElement;

}

#endregion

#region Добавление пользователя перед заданнымbool addUserBefore (user User, user beforeUser)

{iterator, tmp, newElement;find;= new listElement (User);= false;= null;(head. Next == null || head. Info == beforeUser)

{. Next = head. Next;. Next = newElement;

}

{(iterator = head. Next; iterator! = null; iterator = iterator. Next)

{(iterator. Info == beforeUser)

{= true;;

}= iterator;

}(find)

{. Next = newElement;. Next = iterator;

}false;

}true;

}

#endregion

#region Удаление пользователяbool deleteUser (user User)

{iterator, tmp;find;= false;= null;(head. Next! = null)

{(head. Next. Info == User)

{. Next = head. Next. Next;

}

{(iterator = head. Next; iterator! = null; iterator = iterator. Next)

{(iterator. Info == User)

{= true;;

}= iterator;

}(find)

{(iterator. Next! = null). Next = iterator. Next;. Next = null;

}false;

}true;

}false;

}

#endregion

#region Сохранение в файл 1.

public void saveToFile ()

{tmp;

{

// FileStream outPutFile = new FileStream ("D: \\users. txt", FileMode. OpenOrCreate, FileAccess. Write);

// StreamWriter sw = new StreamWriter (outPutFile);. Delete ("D: \\users. txt");(StreamWriter sw = File. AppendText ("D: \\users. txt"))

{= this. head. Next;(tmp! = null)

{

{. WriteLine (tmp. Info. show (), Encoding. GetEncoding (1251));= tmp. Next;

}(IOException err)

{. Show (err. Message);

}

}

}

// sw. Close ();

}(IOException err)

{. Show (err. Message);

}

}

#endregion

#region Сохранение в файл 2.

public void saveToFile (string fName)

{tmp;

{(File. Exists (fName)). Delete (fName);(StreamWriter sw = File. AppendText (fName))

{= this. head. Next;(tmp! = null)

{

{. WriteLine (Encrypt (tmp. Info. show (), "Passpord11", "Password22", "SHA1", 2,"16CHARSLONG12345", 256), Encoding. GetEncoding (1251));= tmp. Next;

}(IOException err)

{. Show (err. Message);

}

}

}

}(IOException err)

{. Show (err. Message);

}

}

#endregion

#region Чтение из файла 1.void readFromFile ()

{

{inputFile = File. OpenText ("D: \\users. txt");read = null, userParams, Name, Password, Rights;userN = null, userBefore = null;( (read = inputFile. ReadLine ())! = null)

{[] split = read. Split (new Char [] { ' ', ',', '. ', ': ', '; ' });= split [0]. Trim ();= split [1]. Trim ();= split [2]. Trim ();(userParams)

{"Гость":= new guest (Name, Rights);;"Пользователь":= split [3]. Trim ();= new defUser (Name, Rights, Password);;"Администратор":= split [3]. Trim ();= new admin (Name, Rights, Password);;

}. addUserAfter (userN, userBefore);= userN;

}. Close ();

}(IOException err)

{. Show (err. Message);

}

}

#endregion

#region Чтение из файла 2.void readFromFile (string fName)

{

{inputFile = File. OpenText (fName);read = null, userParams, Name, Password, Rights;userN = null, userBefore = null;( (read = inputFile. ReadLine ())! = null)

{= Decrypt (read, "Passpord11", "Password22", "SHA1", 2,"16CHARSLONG12345", 256);[] split = read. Split (new Char [] { ' ', ',', '. ', ': ', '; ' });= split [0]. Trim ();= split [1]. Trim ();= split [2]. Trim ();(userParams)

{"Гость":= new guest (Name, Rights);;"Пользователь":= split [3]. Trim ();= new defUser (Name, Rights, Password);;"Администратор":= split [3]. Trim ();= new admin (Name, Rights, Password);;

}. addUserAfter (userN, userBefore);= userN;

}. Close ();

}(IOException err)

{. Show (err. Message);

}

}

#endregion

#region Метод showvoid show (DataGridView table)

{(this. head. Next! = null)

{tmp = this. head. Next;(tmp! = null)

{(tmp. Info is admin). Rows. Add ("Администратор", tmp. Info. Name, (tmp. Info as admin). Password, tmp. Info. Rights);if (tmp. Info is guest). Rows. Add ("Гость",tmp. Info. Name, "", tmp. Info. Rights);if (tmp. Info is defUser). Rows. Add ("Пользователь", tmp. Info. Name, (tmp. Info as defUser). Password, tmp. Info. Rights);= tmp. Next;

}

}

}

#endregion

#region Поиск пользователяuser search (string sName)

{(this. head. Next! = null)

{tmp = this. head. Next;(tmp! = null)

{(tmp. Info. Name == sName)tmp. Info;= tmp. Next;

}

}null;

}

#region Static Functions

// / <summary>

// / Encrypts a string

// / </summary>

// / <param name="plainText">Text to be encrypted</param>

// / <param name="password">Password to encrypt with</param>

// / <param name="salt">Salt to encrypt with</param>

// / <param name="hashAlgorithm">Can be either SHA1 or MD5</param>

// / <param name="passwordIterations">Number of iterations to do</param>

// / <param name="initialVector">Needs to be 16 ASCII characters long</param>

// / <param name="keySize">Can be 128, 192, or 256</param>

// / <returns>An encrypted string</returns>string Encrypt (string plainText, string password,salt = "Kosher", string hashAlgorithm = "SHA1",passwordIterations = 2, string initialVector = "OFRna73m*aze01xY",keySize = 256)

{(string. IsNullOrEmpty (plainText))"";[] initialVectorBytes = Encoding. ASCII. GetBytes (initialVector);[] saltValueBytes = Encoding. ASCII. GetBytes (salt);[] plainTextBytes = Encoding. UTF8. GetBytes (plainText);derivedPassword = new PasswordDeriveBytes (password, saltValueBytes, hashAlgorithm, passwordIterations);[] keyBytes = derivedPassword. GetBytes (keySize / 8);symmetricKey = new RijndaelManaged ();. Mode = CipherMode. CBC;[] cipherTextBytes = null;(ICryptoTransform encryptor = symmetricKey. CreateEncryptor (keyBytes, initialVectorBytes))

{(MemoryStream memStream = new MemoryStream ())

{(CryptoStream cryptoStream = new CryptoStream (memStream, encryptor, CryptoStreamMode. Write))

{. Write (plainTextBytes, 0, plainTextBytes. Length);. FlushFinalBlock ();= memStream. ToArray ();. Close ();. Close ();

}

}

}. Clear ();Convert. ToBase64String (cipherTextBytes);

}

// / <summary>

// / Decrypts a string

// / </summary>

// / <param name="cipherText">Text to be decrypted</param>

// / <param name="password">Password to decrypt with</param>

// / <param name="salt">Salt to decrypt with</param>

// / <param name="hashAlgorithm">Can be either SHA1 or MD5</param>

// / <param name="passwordIterations">Number of iterations to do</param>

// / <param name="initialVector">Needs to be 16 ASCII characters long</param>

// / <param name="keySize">Can be 128, 192, or 256</param>

// / <returns>A decrypted string</returns>string Decrypt (string cipherText, string password,salt = "Kosher", string hashAlgorithm = "SHA1",passwordIterations = 2, string initialVector = "OFRna73m*aze01xY",keySize = 256)

{(string. IsNullOrEmpty (cipherText))"";[] initialVectorBytes = Encoding. ASCII. GetBytes (initialVector);[] saltValueBytes = Encoding. ASCII. GetBytes (salt);[] cipherTextBytes = Convert. FromBase64String (cipherText);derivedPassword = new PasswordDeriveBytes (password, saltValueBytes, hashAlgorithm, passwordIterations);[] keyBytes = derivedPassword. GetBytes (keySize / 8);symmetricKey = new RijndaelManaged ();. Mode = CipherMode. CBC;[] plainTextBytes = new byte [cipherTextBytes. Length];byteCount = 0;(ICryptoTransform decryptor = symmetricKey. CreateDecryptor (keyBytes, initialVectorBytes))

{(MemoryStream memStream = new MemoryStream (cipherTextBytes))

{(CryptoStream cryptoStream = new CryptoStream (memStream, decryptor, CryptoStreamMode. Read))

{= cryptoStream. Read (plainTextBytes, 0, plainTextBytes. Length);. Close ();. Close ();

}

}

}. Clear ();Encoding. UTF8. GetString (plainTextBytes, 0, byteCount);

}

#endregion

}

}

Form1. csSystem;System. Collections. Generic;System.componentModel;System. Data;System. Drawing;System. Linq;System. Text;System. Windows. Forms;HotKeysLibrary;курсовая_2курс

{partial class Form1: Form

{Container container;int RowIndex = 0, ColumnIndex;bool after, click, file = false, changed = false;manager = new HotKeysManager ();

#region Конструктор Form1Form1 ()

{();();();. container = new Container ();. container. show (this. dataGridView1);

}

#endregion

#region Инициализация диалога открытия файла

public void OpenFileDialogInit ()

{. openFileDialog = new OpenFileDialog ();. openFileDialog. Filter = "All files (*. d3g) | *. d3g";. openFileDialog. Multiselect = false;. openFileDialog. Title = "Выберите файл";

}

#endregion

#region Инициализация диалога сохранения файла

public void SaveFileDialogInit ()

{. saveFileDialog = new SaveFileDialog ();. saveFileDialog. Filter = "All files (*. d3g) | *. d3g";. saveFileDialog. Title = "Сохранение";

}

#endregion

#region Меню - Создатьvoid onMenuClick_Create (object sender, EventArgs e)

{UserForm = new userForm ();. ShowInTaskbar = false;. StartPosition = FormStartPosition. CenterScreen;. ShowDialog (this);= true;

}

#endregion

#region Меню - Открытьvoid onMenuClick_Open (object sender, EventArgs e)

{(this. openFileDialog. ShowDialog () == DialogResult. OK)

{. container. readFromFile (this. openFileDialog. FileName);. container. show (this. dataGridView1);. file = true;. changed = false;. closeToolStripMenuItem. Enabled = true;. saveAsToolStripMenuItem. Enabled = true;

}

}

#endregion

#region Меню - Сохранитьvoid onMenuSaveButton_Click (object sender, EventArgs e)

{. Save ();

}void Save ()

{. container. saveToFile (this. openFileDialog. FileName);. saveToolStripMenuItem. Enabled = false;. closeToolStripMenuItem. Enabled = true;. changed = false;

}

#endregion

#region Меню - Сохранить какvoid onMenuSaveAsButton_Click (object sender, EventArgs e)

{. SaveAs ();

}void SaveAs ()

{(this. saveFileDialog. ShowDialog () == DialogResult. OK)

{. container. saveToFile (this. saveFileDialog. FileName);. saveToolStripMenuItem. Enabled = false;. closeToolStripMenuItem. Enabled = true;. file = true;. changed = false;

}

}

#endregion

#region Меню - Закрытьvoid onMenuClick_Close (object sender, EventArgs e)

{(this. changed)

{dialogResult = MessageBox. Show ("Данные файла были изменены. \nСохранить изменения в файле?", "Изменения", MessageBoxButtons. YesNoCancel, MessageBoxIcon. Information);(dialogResult! = DialogResult. Cancel)

{(dialogResult == DialogResult. Yes). container. saveToFile (this. openFileDialog. FileName);. clearTable ();

}

}. clearTable ();

}

#endregion

#region Меню - Выходvoid onMenuExitButton_Click (object sender, EventArgs e)

{. Close ();

}

#endregion

#region Очистка полей таблицыvoid clearTable ()

{(dataGridView1. Rows. Count! = 0). Rows. Remove (dataGridView1. Rows [dataGridView1. Rows. Count - 1]);. file = false;. changed = false;. openFileDialog. FileName = null;. closeToolStripMenuItem. Enabled = false;. saveToolStripMenuItem. Enabled = false;. saveAsToolStripMenuItem. Enabled = false;

}

#endregion

#region Создание пользователя. Обработка параметров из userForm

public void onUserCreate (string userType, string userName, string userRights, string userPassword)

{newUser = null;(userType)

{"Гость":= new guest (userName, userRights);;"Пользователь":= new defUser (userName, userRights, userPassword);;"Администратор":= new admin (userName, userRights, userPassword);;

}(! this. click)

{(this. after)

{. dataGridView1. Rows. Insert (this. RowIndex + 1, userType, userName, userPassword, userRights);tmpUser = this. container. search (dataGridView1 [this. ColumnIndex, this. RowIndex]. Value. ToString ());. container. addUserAfter (newUser, tmpUser);

}

{. dataGridView1. Rows. Insert (this. RowIndex, userType, userName, userPassword, userRights);tmpUser = this. container. search (dataGridView1 [this. ColumnIndex, this. RowIndex]. Value. ToString ());. container. addUserBefore (newUser, tmpUser);

}

}

{. dataGridView1. Rows. Add (userType, userName, userPassword, userRights);. container. addUserAfter (newUser, null);

}(this. file)

{. changed = true;. saveToolStripMenuItem. Enabled = true;

}. saveAsToolStripMenuItem. Enabled = true;

}

#endregion

#region Клик "добавить до"

private void addBefore_Click (object sender, EventArgs e)

{. after = false;. click = false;UserForm = new userForm ();. ShowInTaskbar = false;. StartPosition = FormStartPosition. CenterScreen;. ShowDialog (this);

}

#endregion

#region Клик "добавить после"

private void addAfter_Click (object sender, EventArgs e)

{. after = true;. click = false;UserForm = new userForm ();. ShowInTaskbar = false;. StartPosition = FormStartPosition. CenterScreen;. ShowDialog (this);

}

#endregion

#region Клик "удалить пользователя"

private void delete_Click (object sender, EventArgs e)

{dialogResult = MessageBox. Show ("Вы уверены, что хотите удалить пользователя?", "Удаление", MessageBoxButtons. OKCancel, MessageBoxIcon. Question);(dialogResult == DialogResult. OK)

{tmpUser = this. container. search (dataGridView1 [this. ColumnIndex, this. RowIndex]. Value. ToString ());(this. container. deleteUser (tmpUser))

{. dataGridView1. Rows. RemoveAt (this. RowIndex);(this. file)

{. changed = true;. saveToolStripMenuItem. Enabled = true;

}

}

}

}

#endregion

#region Обработка клика правой мышкой по ячейке таблицыvoid context_Opening (object sender, CancelEventArgs e)

{tContextMenu = (ContextMenuStrip) sender;tLocation = new Point (tContextMenu. Left, tContextMenu. Top);= dataGridView1. PointToClient (Cursor. Position);. HitTestInfo tHitTestInfo = dataGridView1. HitTest (tLocation. X, tLocation. Y);(tHitTestInfo. Type == DataGridViewHitTestType. Cell)

{. ColumnIndex = 1;. RowIndex = tHitTestInfo. RowIndex;[tHitTestInfo. ColumnIndex, this. RowIndex]. Selected = true;

}

{. Cancel = true;

}

}

#endregion

#region Закрытие формыvoid FormClosing_Form1 (object sender, FormClosingEventArgs e)

{

#region Если был открыт файл и изменены данные

if (this. file && this. changed)

{dialogResult = MessageBox. Show ("Сохранить данные?", "Изменения", MessageBoxButtons. YesNoCancel, MessageBoxIcon. Information);(dialogResult == DialogResult. Yes)

{. container. saveToFile (this. openFileDialog. FileName);

}if (dialogResult == DialogResult. Cancel)

e. Cancel = true;

}

#endregion

#region Если файл не был открыт и внесены какие-то данные

else if (dataGridView1. Rows. Count! = 0 &&! this. file)

{dialogResult = MessageBox. Show ("Сохранить данные?", "Изменения", MessageBoxButtons. YesNoCancel, MessageBoxIcon. Information);(dialogResult == DialogResult. Yes)

{dialogResultSave = this. saveFileDialog. ShowDialog ();(dialogResultSave == DialogResult. OK)

{. container. saveToFile (this. saveFileDialog. FileName);. clearTable ();

}if (dialogResultSave == DialogResult. Cancel). Cancel = true;

}if (dialogResult == DialogResult. Cancel). Cancel = true;

}

#endregion

}

#endregion

#region Справкаvoid Help_Click (object sender, EventArgs e)

{. Show ("Данное программное обеспечение является частью курсовой работы. \nОно может быть использовано только в ознакомительных и учебных целях! \n\nВыполнил работу студент группы 4212 - Гарифуллин Ильшат. \nПринял доцент к. т. н.: Козин А.Н. \nKazan © 2013 год", "Справка", MessageBoxButtons. OK, MessageBoxIcon. Information);

}

#endregion

}

}

userForm. cs

using System;System. Collections. Generic;System.componentModel;System. Data;System. Drawing;System. Linq;System. Text;System. Windows. Forms;курсовая_2курс

{partial class userForm: Form

{userForm ()

{();

}void onCreateButton_Click (object sender, EventArgs e)

{

( (Form1) this. Owner). onUserCreate (this. userTypeComboBox. Text, this. userNameTextBox. Text, this. userRightsComboBox. Text, this. userPasswordTextBox. Text);. Close ();

}void userType_SelectedIndexChanged (object sender, EventArgs e)

{(this. userTypeComboBox. Text == "Пользователь" || this. userTypeComboBox. Text == "Администратор")

{. userPasswordLabel. Visible = true;. userPasswordTextBox. Visible = true;

}

{. userPasswordLabel. Visible = false;. userPasswordTextBox. Visible = false;

}. checkButton ();

}void userRights_SelectedIndexChanged (object sender, EventArgs e)

{. checkButton ();

}void userName_TextChanged (object sender, EventArgs e)

{. checkButton ();

}void onKeyPress_passwordField (object sender, KeyPressEventArgs e)

{. checkButton ();

}void checkButton ()

{(this. userRightsComboBox. Text. Length! = 0 && this. userNameTextBox. Text. Length! = 0)

{. userButton. Visible = false;( (this. userTypeComboBox. Text == "Пользователь" || this. userTypeComboBox. Text == "Администратор") && this. userPasswordTextBox. Text. Length! = 0). userButton. Visible = true;(this. userTypeComboBox. Text == "Гость"). userButton. Visible = true;

}. userButton. Visible = false;

}void onKeyPress_ComboBox (object sender, KeyPressEventArgs e)

{(e. KeyChar == '\b');. Handled = true;

}void userType_TextUpdate (object sender, EventArgs e)

{(this. userTypeComboBox. Text)

{"Гость":

case "Пользователь":"Администратор":;

default:. userTypeComboBox. Text = "";;

}. checkButton ();

}void userRights_TextUpdate (object sender, EventArgs e)

{(this. userRightsComboBox. Text)

{"Чтение":

case "Чтение/Запись":"Чтение/Запись/Редактирование":

break;:. userRightsComboBox. Text = "";;

}. checkButton ();

}

}

}

Form1. Designer. csкурсовая_2курс

{class Form1

{

// / <summary>

// / Требуется переменная конструктора.

// / </summary>

private System.componentModel. IContainer components = null;

// / <summary>

// / Освободить все используемые ресурсы.

// / </summary>

// / <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно. </param>

protected override void Dispose (bool disposing)

{(disposing && (components! = null))

{. Dispose ();

}. Dispose (disposing);

}

#region Код, автоматически созданный конструктором форм Windows

// / <summary>

// / Обязательный метод для поддержки конструктора - не изменяйте

// / содержимое данного метода при помощи редактора кода.

// / </summary>void InitializeComponent ()

{.components = new System.componentModel. Container ();. menuStrip1 = new System. Windows. Forms. MenuStrip ();. файлToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. createToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. openToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. saveToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. saveAsToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. closeToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. exitToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. справкаToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. dataGridView1 = new System. Windows. Forms. DataGridView ();. contextMenuStrip = new System. Windows. Forms. ContextMenuStrip (this.components);. добавитьДоToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. добавитьПослеToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. удалитьToolStripMenuItem = new System. Windows. Forms. ToolStripMenuItem ();. openFileDialog = new System. Windows. Forms. OpenFileDialog ();. saveFileDialog = new System. Windows. Forms. SaveFileDialog ();. userType = new System. Windows. Forms. DataGridViewTextBoxColumn ();. ColumnName = new System. Windows. Forms. DataGridViewTextBoxColumn ();. ColumnPassword = new System. Windows. Forms. DataGridViewTextBoxColumn ();. ColumnRights = new System. Windows. Forms. DataGridViewTextBoxColumn ();. menuStrip1. SuspendLayout ();

( (System.componentModel. ISupportInitialize) (this. dataGridView1)). BeginInit ();. contextMenuStrip. SuspendLayout ();. SuspendLayout ();

//

// menuStrip1

// . menuStrip1. Items. AddRange (new System. Windows. Forms. ToolStripItem [] {. файлToolStripMenuItem,. справкаToolStripMenuItem});. menuStrip1. Location = new System. Drawing. Point (0, 0);. menuStrip1. Name = "menuStrip1";. menuStrip1. Size = new System. Drawing. Size (651, 24);. menuStrip1. TabIndex = 0;. menuStrip1. Text = "menuStrip1";

//

// файлToolStripMenuItem

// . файлToolStripMenuItem. DropDownItems. AddRange (new System. Windows. Forms. ToolStripItem [] {. createToolStripMenuItem,. openToolStripMenuItem,. saveToolStripMenuItem,. saveAsToolStripMenuItem,. closeToolStripMenuItem,. exitToolStripMenuItem});. файлToolStripMenuItem. Name = "файлToolStripMenuItem";. файлToolStripMenuItem. Size = new System. Drawing. Size (48, 20);. файлToolStripMenuItem. Text = "Файл";

//

// createToolStripMenuItem

// . createToolStripMenuItem. Name = "createToolStripMenuItem";. createToolStripMenuItem. Size = new System. Drawing. Size (162, 22);. createToolStripMenuItem. Text = "Создать";. createToolStripMenuItem. Click += new System. EventHandler (this. onMenuClick_Create);

//

// openToolStripMenuItem

// . openToolStripMenuItem. Name = "openToolStripMenuItem";. openToolStripMenuItem. Size = new System. Drawing. Size (162, 22);. openToolStripMenuItem. Text = "Открыть. ";. openToolStripMenuItem. Click += new System. EventHandler (this. onMenuClick_Open);

//

// saveToolStripMenuItem

// . saveToolStripMenuItem. Enabled = false;. saveToolStripMenuItem. Name = "saveToolStripMenuItem";. saveToolStripMenuItem. Size = new System. Drawing. Size (162, 22);. saveToolStripMenuItem. Text = "Сохранить. ";. saveToolStripMenuItem. Click += new System. EventHandler (this. onMenuSaveButton_Click);

//

// saveAsToolStripMenuItem

// . saveAsToolStripMenuItem. Enabled = false;. saveAsToolStripMenuItem. Name = "saveAsToolStripMenuItem";. saveAsToolStripMenuItem. Size = new System. Drawing. Size (162, 22);. saveAsToolStripMenuItem. Text = "Сохранить как. ";. saveAsToolStripMenuItem. Click += new System. EventHandler (this. onMenuSaveAsButton_Click);

//

// closeToolStripMenuItem

// . closeToolStripMenuItem. Enabled = false;. closeToolStripMenuItem. Name = "closeToolStripMenuItem";. closeToolStripMenuItem. Size = new System. Drawing. Size (162, 22);. closeToolStripMenuItem. Text = "Закрыть";. closeToolStripMenuItem. Click += new System. EventHandler (this. onMenuClick_Close);

//

// exitToolStripMenuItem

// . exitToolStripMenuItem. Name = "exitToolStripMenuItem";. exitToolStripMenuItem. Size = new System. Drawing. Size (162, 22);. exitToolStripMenuItem. Text = "Выход";. exitToolStripMenuItem. Click += new System. EventHandler (this. onMenuExitButton_Click);

//

// справкаToolStripMenuItem

// . справкаToolStripMenuItem. Name = "справкаToolStripMenuItem";. справкаToolStripMenuItem. Size = new System. Drawing. Size (65, 20);. справкаToolStripMenuItem. Text = "Справка";. справкаToolStripMenuItem. Click += new System. EventHandler (this. Help_Click);

//

// dataGridView1

// . dataGridView1. AllowUserToAddRows = false;. dataGridView1. AllowUserToDeleteRows = false;. dataGridView1. AllowUserToResizeRows = false;. dataGridView1. Anchor = ( (System. Windows. Forms. AnchorStyles) ( ( ( (System. Windows. Forms. AnchorStyles. Top | System. Windows. Forms. AnchorStyles. Bottom)

| System. Windows. Forms. AnchorStyles. Left)

| System. Windows. Forms. AnchorStyles. Right)));. dataGridView1. AutoSizeColumnsMode = System. Windows. Forms. DataGridViewAutoSizeColumnsMode. Fill;. dataGridView1. BackgroundColor = System. Drawing. SystemColors. Control;. dataGridView1. CellBorderStyle = System. Windows. Forms. DataGridViewCellBorderStyle. Raised;. dataGridView1. ColumnHeadersHeightSizeMode = System. Windows. Forms. DataGridViewColumnHeadersHeightSizeMode. AutoSize;. dataGridView1. Columns. AddRange (new System. Windows. Forms. DataGridViewColumn [] {. userType,. ColumnName,. ColumnPassword,. ColumnRights});. dataGridView1. EditMode = System. Windows. Forms. DataGridViewEditMode. EditProgrammatically;. dataGridView1. EnableHeadersVisualStyles = false;. dataGridView1. GridColor = System. Drawing. SystemColors. ActiveCaptionText;. dataGridView1. Location = new System. Drawing. Point (0, 27);. dataGridView1. MinimumSize = new System. Drawing. Size (534, 298);. dataGridView1. MultiSelect = false;. dataGridView1. Name = "dataGridView1";. dataGridView1. ReadOnly = true;. dataGridView1. RowHeadersWidth = 30;. dataGridView1. RowTemplate. ContextMenuStrip = this. contextMenuStrip;. dataGridView1. RowTemplate. ReadOnly = true;. dataGridView1. ShowEditingIcon = false;. dataGridView1. Size = new System. Drawing. Size (651, 305);. dataGridView1. TabIndex = 1;

//

// contextMenuStrip

// . contextMenuStrip. Items. AddRange (new System. Windows. Forms. ToolStripItem [] {. добавитьДоToolStripMenuItem,. добавитьПослеToolStripMenuItem,. удалитьToolStripMenuItem});. contextMenuStrip. Name = "contextMenuStrip";. contextMenuStrip. Size = new System. Drawing. Size (172, 70);. contextMenuStrip. Opening += new System.componentModel. CancelEventHandler (this. context_Opening);

//

// добавитьДоToolStripMenuItem

// . добавитьДоToolStripMenuItem. Name = "добавитьДоToolStripMenuItem";. добавитьДоToolStripMenuItem. Size = new System. Drawing. Size (171, 22);. добавитьДоToolStripMenuItem. Text = "Добавить до. ";. добавитьДоToolStripMenuItem. TextAlign = System. Drawing. ContentAlignment. BottomLeft;. добавитьДоToolStripMenuItem. Click += new System. EventHandler (this. addBefore_Click);

//

// добавитьПослеToolStripMenuItem

// . добавитьПослеToolStripMenuItem. Name = "добавитьПослеToolStripMenuItem";. добавитьПослеToolStripMenuItem. Size = new System. Drawing. Size (171, 22);. добавитьПослеToolStripMenuItem. Text = "Добавить после. ";. добавитьПослеToolStripMenuItem. TextAlign = System. Drawing. ContentAlignment. BottomLeft;. добавитьПослеToolStripMenuItem. Click += new System. EventHandler (this. addAfter_Click);

//

// удалитьToolStripMenuItem

// . удалитьToolStripMenuItem. Name = "удалитьToolStripMenuItem";. удалитьToolStripMenuItem. Size = new System. Drawing. Size (171, 22);. удалитьToolStripMenuItem. Text = "Удалить";. удалитьToolStripMenuItem. Click += new System. EventHandler (this. delete_Click);

//

// openFileDialog

// . openFileDialog. FileName = "openFileDialog";

//

// userType

// . userType. AutoSizeMode = System. Windows. Forms. DataGridViewAutoSizeColumnMode. None;. userType. FillWeight = 125.8883F;. userType. Frozen = true;. userType. HeaderText = "Тип пользователя";. userType. Name = "userType";. userType. ReadOnly = true;. userType. Resizable = System. Windows. Forms. DataGridViewTriState. False;. userType. Width = 158;

//

// ColumnName

// . ColumnName. AutoSizeMode = System. Windows. Forms. DataGridViewAutoSizeColumnMode. None;. ColumnName. FillWeight = 91.37055F;. ColumnName. Frozen = true;. ColumnName. HeaderText = "Имя";. ColumnName. Name = "ColumnName";. ColumnName. ReadOnly = true;. ColumnName. Resizable = System. Windows. Forms. DataGridViewTriState. False;. ColumnName. Width = 115;

//

// ColumnPassword

// . ColumnPassword. AutoSizeMode = System. Windows. Forms. DataGridViewAutoSizeColumnMode. None;. ColumnPassword. FillWeight = 91.37055F;. ColumnPassword. Frozen = true;. ColumnPassword. HeaderText = "Пароль";. ColumnPassword. Name = "ColumnPassword";. ColumnPassword. ReadOnly = true;. ColumnPassword. Resizable = System. Windows. Forms. DataGridViewTriState. False;. ColumnPassword. Width = 114;

//

// ColumnRights

// . ColumnRights. AutoSizeMode = System. Windows. Forms. DataGridViewAutoSizeColumnMode. None;. ColumnRights. FillWeight = 91.37055F;. ColumnRights. Frozen = true;. ColumnRights. HeaderText = "Права доступа";. ColumnRights. Name = "ColumnRights";. ColumnRights. ReadOnly = true;. ColumnRights. Resizable = System. Windows. Forms. DataGridViewTriState. False;. ColumnRights. Width = 115;

//

// Form1

// . AutoScaleDimensions = new System. Drawing. SizeF (6F, 13F);. AutoScaleMode = System. Windows. Forms. AutoScaleMode. Font;. ClientSize = new System. Drawing. Size (651, 331);. Controls. Add (this. dataGridView1);. Controls. Add (this. menuStrip1);. KeyPreview = true;. MainMenuStrip = this. menuStrip1;. Name = "Form1";. Text = "Пользователи";. FormClosing += new System. Windows. Forms. FormClosingEventHandler (this. FormClosing_Form1);. menuStrip1. ResumeLayout (false);. menuStrip1. PerformLayout ();

( (System.componentModel. ISupportInitialize) (this. dataGridView1)). EndInit ();. contextMenuStrip. ResumeLayout (false);. ResumeLayout (false);. PerformLayout ();

}

#endregionSystem. Windows. Forms. MenuStrip menuStrip1;System. Windows. Forms. ToolStripMenuItem файлToolStripMenuItem;System. Windows. Forms. ToolStripMenuItem createToolStripMenuItem;System. Windows. Forms. ToolStripMenuItem exitToolStripMenuItem;System. Windows. Forms. DataGridView dataGridView1;System. Windows. Forms. ToolStripMenuItem openToolStripMenuItem;System. Windows. Forms. ToolStripMenuItem saveToolStripMenuItem;System. Windows. Forms. ContextMenuStrip contextMenuStrip;System. Windows. Forms. ToolStripMenuItem добавитьДоToolStripMenuItem;System. Windows. Forms. ToolStripMenuItem добавитьПослеToolStripMenuItem;System. Windows. Forms. ToolStripMenuItem удалитьToolStripMenuItem;System. Windows. Forms. OpenFileDialog openFileDialog;System. Windows. Forms. ToolStripMenuItem saveAsToolStripMenuItem;System. Windows. Forms. ToolStripMenuItem closeToolStripMenuItem;System. Windows. Forms. SaveFileDialog saveFileDialog;System. Windows. Forms. ToolStripMenuItem справкаToolStripMenuItem;System. Windows. Forms. DataGridViewTextBoxColumn userType;System. Windows. Forms. DataGridViewTextBoxColumn ColumnName;System. Windows. Forms. DataGridViewTextBoxColumn ColumnPassword;System. Windows. Forms. DataGridViewTextBoxColumn ColumnRights;

}

}

userForm. Designer. cs

namespace курсовая_2курс

{class userForm

{

// / <summary>

// / Required designer variable.

// / </summary>System.componentModel. IContainer components = null;

// / <summary>

// / Clean up any resources being used.

// / </summary>

// / <param name="disposing">true if managed resources should be disposed; otherwise, false. </param>override void Dispose (bool disposing)

{(disposing && (components! = null))

{. Dispose ();

}. Dispose (disposing);

}

#region Windows Form Designer generated code

// / <summary>

// / Required method for Designer support - do not modify

// / the contents of this method with the code editor.

// / </summary>void InitializeComponent ()

{. userLabel = new System. Windows. Forms. Label ();. userTypeLabel = new System. Windows. Forms. Label ();. userTypeComboBox = new System. Windows. Forms.comboBox ();. userRightsLabel = new System. Windows. Forms. Label ();. userRightsComboBox = new System. Windows. Forms.comboBox ();. userPasswordLabel = new System. Windows. Forms. Label ();. userPasswordTextBox = new System. Windows. Forms. TextBox ();. userButton = new System. Windows. Forms. Button ();. userNameLabel = new System. Windows. Forms. Label ();. userNameTextBox = new System. Windows. Forms. TextBox ();. SuspendLayout ();

//

// userLabel

// . userLabel. Font = new System. Drawing. Font ("Microsoft Sans Serif", 14F, System. Drawing. FontStyle. Underline, System. Drawing. GraphicsUnit. Point, ( (byte) (204)));. userLabel. Location = new System. Drawing. Point (60,9);. userLabel. Name = "userLabel";. userLabel. Size = new System. Drawing. Size (154, 24);. userLabel. TabIndex = 0;. userLabel. Text = "Пользователь";

//

// userTypeLabel

// . userTypeLabel. Font = new System. Drawing. Font ("Microsoft Sans Serif", 10F, System. Drawing. FontStyle. Regular, System. Drawing. GraphicsUnit. Point, ( (byte) (204)));. userTypeLabel. Location = new System. Drawing. Point (12, 69);. userTypeLabel. Name = "userTypeLabel";. userTypeLabel. Size = new System. Drawing. Size (137, 23);. userTypeLabel. TabIndex = 3;. userTypeLabel. Text = "Тип пользователя: ";. userTypeLabel. TextAlign = System. Drawing. ContentAlignment. MiddleLeft;

//

// userTypeComboBox

// . userTypeComboBox. FormattingEnabled = true;. userTypeComboBox. Items. AddRange (new object [] {

"Гость",

"Пользователь",

"Администратор"});. userTypeComboBox. Location = new System. Drawing. Point (155, 71);. userTypeComboBox. Name = "userTypeComboBox";. userTypeComboBox. Size = new System. Drawing. Size (121, 21);. userTypeComboBox. TabIndex = 2;. userTypeComboBox. SelectedIndexChanged += new System. EventHandler (this. userType_SelectedIndexChanged);. userTypeComboBox. TextUpdate += new System. EventHandler (this. userType_TextUpdate);. userTypeComboBox. KeyPress += new System. Windows. Forms. KeyPressEventHandler (this. onKeyPress_ComboBox);

//

// userRightsLabel

// . userRightsLabel. Font = new System. Drawing. Font ("Microsoft Sans Serif", 10F, System. Drawing. FontStyle. Regular, System. Drawing. GraphicsUnit. Point, ( (byte) (204)));. userRightsLabel. Location = new System. Drawing. Point (12, 95);. userRightsLabel. Name = "userRightsLabel";. userRightsLabel. Size = new System. Drawing. Size (137, 23);. userRightsLabel. TabIndex = 5;. userRightsLabel. Text = "Права доступа: ";. userRightsLabel. TextAlign = System. Drawing. ContentAlignment. MiddleLeft;

//

// userRightsComboBox

// . userRightsComboBox. FormattingEnabled = true;. userRightsComboBox. Items. AddRange (new object [] {

"Чтение",

"Чтение/Запись",

"Чтение/Запись/Редактирование"});

this. userRightsComboBox. Location = new System. Drawing. Point (155, 97);. userRightsComboBox. Name = "userRightsComboBox";. userRightsComboBox. Size = new System. Drawing. Size (121, 21);. userRightsComboBox. TabIndex = 3;. userRightsComboBox. SelectedIndexChanged += new System. EventHandler (this. userRights_TextUpdate);. userRightsComboBox. TextUpdate += new System. EventHandler (this. userRights_TextUpdate);. userRightsComboBox. KeyPress += new System. Windows. Forms. KeyPressEventHandler (this. onKeyPress_ComboBox);

//

// userPasswordLabel

// . userPasswordLabel. Font = new System. Drawing. Font ("Microsoft Sans Serif", 10F, System. Drawing. FontStyle. Regular, System. Drawing. GraphicsUnit. Point, ( (byte) (204)));. userPasswordLabel. Location = new System. Drawing. Point (12, 121);. userPasswordLabel. Name = "userPasswordLabel";. userPasswordLabel. Size = new System. Drawing. Size (137, 23);. userPasswordLabel. TabIndex = 8;. userPasswordLabel. Text = "Пароль: ";. userPasswordLabel. TextAlign = System. Drawing. ContentAlignment. MiddleLeft;. userPasswordLabel. Visible = false;

//

// . userPasswordTextBox. Location = new System. Drawing. Point (155, 124);. userPasswordTextBox. Name = "userPasswordTextBox";. userPasswordTextBox. Size = new System. Drawing. Size (121, 20);. userPasswordTextBox. TabIndex = 4;. userPasswordTextBox. Visible = false;. userPasswordTextBox. KeyPress += new System. Windows. Forms. KeyPressEventHandler (this. onKeyPress_passwordField);

//

// userButton

// . userButton. Location = new System. Drawing. Point (155, 159);. userButton. Name = "userButton";. userButton. Size = new System. Drawing. Size (121, 23);. userButton. TabIndex = 5;. userButton. Text = "Создать";. userButton. UseVisualStyleBackColor = true;. userButton. Visible = false;. userButton. Click += new System. EventHandler (this. onCreateButton_Click);

//

// userNameLabel

// . userNameLabel. Font = new System. Drawing. Font ("Microsoft Sans Serif", 10F, System. Drawing. FontStyle. Regular, System. Drawing. GraphicsUnit. Point, ( (byte) (204)));. userNameLabel. Location = new System. Drawing. Point (12, 43);. userNameLabel. Name = "userNameLabel";. userNameLabel. Size = new System. Drawing. Size (137, 23);. userNameLabel. TabIndex = 1;. userNameLabel. Text = "Имя пользователя: ";. userNameLabel. TextAlign = System. Drawing. ContentAlignment. MiddleLeft;

//

// userNameTextBox

// . userNameTextBox. Location = new System. Drawing. Point (155, 46);. userNameTextBox. Name = "userNameTextBox";. userNameTextBox. Size = new System. Drawing. Size (121, 20);. userNameTextBox. TabIndex = 1;. userNameTextBox. TextChanged += new System. EventHandler (this. userName_TextChanged);

//

// userForm

// . AutoScaleDimensions = new System. Drawing. SizeF (6F, 13F);. AutoScaleMode = System. Windows. Forms. AutoScaleMode. Font;. ClientSize = new System. Drawing. Size (295, 194);. Controls. Add (this. userNameTextBox);. Controls. Add (this. userNameLabel);. Controls. Add (this. userButton);. Controls. Add (this. userPasswordTextBox);. Controls. Add (this. userPasswordLabel);. Controls. Add (this. userRightsComboBox);. Controls. Add (this. userRightsLabel);. Controls. Add (this. userTypeComboBox);. Controls. Add (this. userTypeLabel);. Controls. Add (this. userLabel);. FormBorderStyle = System. Windows. Forms. FormBorderStyle. FixedDialog;. MaximizeBox = false;. MinimizeBox = false;

this. Name = "userForm";. Text = "Добавление пользователя";

this. ResumeLayout (false);. PerformLayout ();

}

#endregionSystem. Windows. Forms. Label userLabel;System. Windows. Forms. Label userTypeLabel;System. Windows. Forms.comboBox userTypeComboBox;System. Windows. Forms. Label userRightsLabel;System. Windows. Forms.comboBox userRightsComboBox;System. Windows. Forms. Label userPasswordLabel;System. Windows. Forms. TextBox userPasswordTextBox;System. Windows. Forms. Button userButton;System. Windows. Forms. Label userNameLabel;System. Windows. Forms. TextBox userNameTextBox;

}

}

Заключение


Объектно-ориентированное программи́рование (ООП) - парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием, - прототипов). Класс - это тип, описывающий устройство объектов. Понятие "класс" подразумевает некоторое поведение и способ представления. Понятие "объект" подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект - это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

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

Список использованной литературы


1.      А.Н. Козин "Структуры и алгоритмы обработки данных" учебно-методическое пособие, 2010.

2.      Эндрю Троелсон "С# и платформа.net", 2009.

Похожие работы на - Объектная реализация полиморфного контейнера на основе линейного списка

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!