This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Лабораторная работа 2 Данный документ является описанием лабораторной работы 2 к курсу «Технологии программирования. Компонентный подход». Задача этой лабораторной работы — разработка Web-приложения на основе технологий ASP.NET и ADO.NET. В рамках работы предлагается создать Web-приложение для просмотра и редактирования небольшой базы данных (БД) авиарейсов.
Содержание Необходимое программное обеспечение, оборудование и материалы................................2 План работы ...............................................................................................................................2 Ознакомление с требованиями к приложению.......................................................................3 Определение архитектуры приложения ..................................................................................4 Проектирование и создание БД приложения..........................................................................4 Разработка компонентов модели данных приложения..........................................................4 Определение архитектуры пользовательского интерфейса приложения ............................5 Разработка системных тестов...................................................................................................5 Проектирование отдельных форм приложения......................................................................5 Разработка модульных тестов ..................................................................................................6 Разработка отдельных форм приложения и их интеграция ..................................................6 Приложение 1. Пример требований к разрабатываемому приложению и примеры вопросов по требованиям. ........................................................................................................6 Требования к создаваемому приложению ..........................................................................7 Приложение 2. Примеры определения архитектуры приложения. ......................................8 Приложение 3. Пример схемы БД приложения и SQL-скриптов для ее создания. ............9 Приложение 4. Пример кода компонентов модели данных приложения и описания их отображения на БД. .................................................................................................................12 Приложение 5. Пример архитектуры пользовательского интерфейса приложения.........15 Приложение 6. Пример описания системных тестов для приложения. .............................15 Приложение 7. Пример проекта форм приложения.............................................................17 Форма просмотра информации о рейсах...........................................................................17 Форма аутентификации привилегированных пользователей .........................................18 Форма редактирования информации о рейсах .................................................................18 Форма редактирования информации о пунктах назначения...........................................20 Форма редактирования информации о компаниях ..........................................................20 Приложение 8. Пример описания модульных тестов для форм приложения. ..................21 Основная форма приложения и навигация с нее..............................................................21 Форма аутентификации и навигация с нее .......................................................................22 Форма редактирования данных о рейсах и навигация с нее ...........................................22 Форма редактирования данных о пунктах назначения и навигация с нее.....................24 Форма редактирования данных о компаниях и навигация с нее ....................................25 Приложение 9. Пример конфигурационных файлов и кода форм приложения. ..............25 Расположение файлов приложения и конфигурационные файлы..................................25 Основная форма приложения.............................................................................................27 Форма аутентификации ......................................................................................................31
1
Необходимое программное обеспечение, оборудование и материалы Для выполнения данной лабораторной работы необходимо следующее программное обеспечение. 1. Microsoft Visual Studio.NET версии 1.1 (2003) или выше. 2. Microsoft Internet Information Services версии 5.0 или выше. Входит в состав серверных и профессиональных версий Microsoft Windows 2000, Microsoft Windows XP и Microsoft Windows 2003. Должна быть установлена поддержка технологии ASP.NET 1.1 или выше. Эту поддержку можно определить при установке Microsoft Visual Studio. 3. Одна из широко используемых СУБД. Возможны следующие варианты. a. Microsoft SQL Server 2000 и выше. Входит в состав профессиональных версий Microsoft Visual Studio или распространяется отдельно. b. Oracle версии 9.0 или выше. Версия Personal Edition распространяется свободно, например, доступна на сайте http://www.oracle.com/database/Personal_Edition.html. c. MySQL версии 4.0 или выше. Распространяется свободно. Доступно, например, на сайте http://dev.mysql.com/downloads/mysql/5.0.html. 4. Специализированное ПО для обеспечения связи СУБД со средой .NET —.NET Data Provider для выбранной СУБД. Возможны следующие варианты. a. Для SQL Server такое ПО входит в состав библиотек Visual Studio. b. Для Oracle такое ПО входит в состав библиотек Visual Studio. c. Для MySQL необходим Connector/.Net, который свободно доступен на сайте http://dev.mysql.com/downloads/connector/net/1.0.html. Каждый компьютер, используемый в работе, должен совмещать роли компьютера для разработки и сервера приложений, поскольку в этом случае гораздо удобнее отлаживать отдельные элементы приложения. Такой компьютер должен иметь следующее. 1. Процессор Pentium 4 1 ГГц или более мощный; 2. Оперативную памятью 512 МБ или больше; 3. Установленную ОС Microsoft Windows 2000 Server, или Microsoft Windows XP Server, или Microsoft Windows 2003 Server; 4. Установленное перечисленное выше ПО. При выполнении заданий студенты должны иметь доступ к следующей документации. •
К общим руководствам по ASP.NET (например, Р. Андерсон, Б. Френсис, А. Хомер, Р. Хоуорд, Д. Сассмэн, К. Уотсон «ASP.NET для профессионалов», М.: Лори, 2004).
•
К документации MSDN на рабочем компьютере и/или в Интернет.
•
К документации по ПО связи СУБД и .NET (для СУБД Oracle и SQL Server эта документация входит в состав MSDN, а для MySQL распространяется вместе с ПО Connector/.Net).
План работы Список шагов выполнения работы приведен ниже. Содержание шагов определено в соответствующих разделах данного документа. 2
1. Ознакомление с требованиями к приложению. 2. Определение архитектуры приложения. 3. Проектирование и создание базы данных приложения. 4. Разработка компонентов модели данных приложения. 5. Определение архитектуры пользовательского интерфейса приложения. 6. Разработка системных тестов для приложения. 7. Проектирование отдельных форм приложения. 8. Разработка модульных тестов для отдельных форм приложения. 9. Разработка отдельных форм и интеграция приложения. Перечисленные шаги могут выполняться и в другой последовательности. Схема зависимостей между отдельными шагами изображена на Рис. 1. Шаги, не зависящие друг от друга можно выполнять в произвольном порядке и поручать их различным студентам, не организовывая специальным образом взаимодействие между ними. 1. Ознакомление с требованиями к приложению
2. Определение архитектуры приложения
3. Проектирование и создание БД приложения
4. Разработка компонентов модели данных приложения
5. Определение архитектуры пользовательского интерфейса
7. Проектирование отдельных форм приложения
6. Разработка системных тестов
8. Разработка модульных тестов
9. Разработка отдельных форм и интеграция приложения Рисунок 1. Схема зависимости шагов выполнения лабораторной работы.
Ознакомление с требованиями к приложению В рамках данного шага студенты должны ознакомится с требованиями к разрабатываемому приложению и прояснить для себя все вопросы, связанные с его функциями. При ознакомлении с требованиями студенты изучают приводимые в Приложении 1 требования и разрешают все возникающие недоумения и вопросы при помощи обсуждения, а также ответов преподавателя, если вопрос четко сформулирован.
3
Описание требований выдается каждому участвующему в работе студенту в таком виде, чтобы он мог делать на нем индивидуальные пометки. Например, так, как оно оформлено в Приложении 1. По окончании данного шага студенты должны уметь давать четкие ответы на все вопросы, касающиеся требований к приложению. Примеры вопросов по требованиям также даны в Приложении 1.
Определение архитектуры приложения В рамках этого шага должна быть определена общая архитектура приложения. Архитектура определяется на основании требований в виде набора компонентов, которые, взаимодействуя друг с другом, обеспечивают реализацию всех функций приложения и выполнение нефункциональных требований к нему. Основные элементы этой архитектуры прямо указаны в требованиях. Студенты при определении архитектуры должны явно определить ее основные компоненты и связи между ними. Если лабораторная работа выполняется группой студентов, на этом этапе определяется распределение работ между ними. Рекомендуется поручать одну работу двум студентам с разделением ролей («программист» и «разработчик тестов и документации») для выработки навыков эффективного общения во время разработки. По окончании данного шага должна быть определена архитектура разрабатываемого приложения — набор основных компонентов, возможные связи и способы взаимодействия между компонентами, интерфейсы компонентов, возможные методы реализации компонентов или использование уже существующих. Дополнительно должна быть определена схема обеспечения защиты данных приложения. Варианты архитектуры приложения, интерфейсов его основных компонентов и схемы обеспечения защиты представлены в Приложении 2.
Проектирование и создание БД приложения В рамках этого шага на основе сформулированных требований проектируется и создается БД приложения. Созданная БД наполняется тестовыми данными, необходимыми для проверки работоспособности как самой базы, так и приложения в целом. В результате этого шага должна быть полностью определена схема БД приложения — набор таблиц, их полей, типы полей, связи между таблицами, первичные ключи и альтернативные ключи таблиц. БД приложения, соответствующая этой схеме, должна быть создана в рамках используемой СУБД. Кроме того, она должна быть наполнена тестовыми данными. Варианты схемы БД приложения приведены в Приложении 3.
Разработка компонентов модели данных приложения На этом шаге разрабатываются компоненты модели данных приложения, используемые как внутреннее представление его данных, хранимых в БД. Кроме того, определяется связь модели данных приложения с базой данных. Такая связь должна обеспечивать синхронизацию данных объектов приложения и таблиц БД, поддержку транзакций при работе с объектами и пр. В рамках технологии ADO.NET все эти функции реализуются автоматически. Модель данных приложения, построенная на основе ADO.NET, представляет собой набор классов, реализующих запросы к БД приложения. 4
В результате выполнения этого шага должен быть написан код классов модели данных приложения на языке C#. Разрабатываемый на этом шаге код компонентов модели данных зависит от их интерфейса, принятого на шаге определения архитектуры приложения. Вариант кода компонентов модели данных приложения приведен в Приложении 4.
Определение архитектуры пользовательского интерфейса приложения На этом шаге определяется набор основных форм приложения и схема навигации между ними. При наличии требований по защите доступа к различным элементам приложения, определяется политика защиты и методы защиты отдельных форм и потоков данных, в тои числе, методы аутентификации и авторизации пользователей, используемые протоколы аутентификации и пр. От данного приложения требуется предоставлять всем пользователям возможность просматривать данные о книгах, а выделенным пользователям — возможность редактирования этих данных. В результате выполнения этого шага должен быть определен набор форм приложения, функции каждой из форм, схема навигации между формами, а также защищенные области приложения (группы форм с функциями, к которым должны иметь доступ только пользователи в рамках определенных ролей) и способы реализации защиты доступа к каждой из таких областей. Решения, касающиеся защищенных областей и способов их защиты, зависят от общей схемы защиты, принятой на шаге определения архитектуры приложения. Вариант архитектуры пользовательского интерфейса разрабатываемого приложения приведен в Приложении 5.
Разработка системных тестов На данном шаге должен быть определен набор сценариев работы с приложением и выполняемые по их ходу проверки, которые совместно обеспечивают проверку всех основных функций приложения. В результате этого шага должен быть составлен список системных тестов — сценариев работы с приложением, в ходе которых проверяются все его основные функции и совместная работа всех форм. Вариант описания набора системных тестов представлен в Приложении 6.
Проектирование отдельных форм приложения На этом шаге определяются информация и набор функций, предоставляемых каждой формой приложения, и набор элементов управления, используемых для выполнения этих функций и навигации между формами. При проектировании отдельной формы учитываются аспекты удобства использования, относящиеся к реализуемым ею функциям. В результате этого шага должны быть получены точные описания или проекты всех форм приложения в визуальном редакторе. Для каждой формы должен быть определен ее набор элементов пользовательского интерфейса и информация, представленная в каждом информационном (не только управляющем) элементе. 5
Вариант проекта форм представлен в Приложении 7.
Разработка модульных тестов На этом этапе определяется набор тестов для каждой из форм. В результате этого шага для каждой из форм приложения должен быть составлен список модульных тестов — сценариев работы с данной формой и ее ближайшими соседями, в ходе которых проверяются все функции и возможности, предоставленные этой формой. Вариант описания набора модульных тестов представлен в Приложении 8.
Разработка отдельных форм приложения и их интеграция На этом шаге выполняется разработка форм, кода элементов управления, конфигурационных файлов приложения и пр. Здесь также осуществляется интеграция и отладка всех элементов приложения. По окончании этого шага должны быть получены следующие результаты. •
Должен быть разработан код всех форм приложения, как страниц ASP.NET, так и поддерживающий их код на C#.
•
Должен быть доработан конфигурационный файл приложения — в нем должны быть отражены принятые решения по защите доступа к отдельным формам. При помещении форм из разных областей защиты в различные директории приложения должны быть разработаны отдельные конфигурационные файлы для всех таких директорий.
•
Разработанный код должен пройти отладку и модульное тестирование. Необходимые для этого модульные тесты были разработаны на предыдущем шаге.
•
Приложение в целом должно пройти системное тестирование, используемые в котором тесты также были разработаны ранее.
Варианты кода форм приложения и конфигурационных файлов представлены в Приложении 9.
Приложение 1. Пример требований к разрабатываемому приложению и примеры вопросов по требованиям.
6
Для замечаний
Требования к создаваемому приложению Разрабатываемое приложение должно предоставлять возможности навигации по небольшой БД авиарейсов и редактирования имеющейся в ней информации. Основной код приложения должен быть написан на языке C#. 1. Пользовательский интерфейс. Пользовательский интерфейс приложения должен быть выполнен на основе Web-технологий, а именно ASP.NET. a. Информация об авиарейсах и навигация по БД. В качестве информации о рейсе должны присутствовать: названия города вылета и города прибытия, название компании-авиаперевозчика, стандартный код рейса, время отправления и время нахождения в пути. Должна также предоставляться информация о времени прибытия. Интерфейс должен предоставлять пользователю возможность найти авиарейс по пунктам вылета и назначения, а также по названию компанииавиаперевозчика. b. Редактирование информации об авиарейсах. Возможность редактировать информацию о рейсах, в том числе, добавлять новые рейсы, должна предоставляться только некоторым пользователям, список которых определяется администратором приложения. При редактировании информации о рейсах должна использоваться уже имеющаяся в БД информация об авиаперевозчиках и городах. 2. БД приложения и связь с ней. БД приложения должна содержать все атрибуты рейсов, доступные через пользовательский интерфейс, и размещаться в одной из широко используемых реляционных СУБД: MS SQL Server, Oracle, MySQL, и т.п.
7
Возможные вопросы по требованиям к разрабатываемому приложению таковы. 1. Каковы функциональные требования к приложению? Какие задачи оно должно решать? 2. С какими данными приложение должно работать? Как они должны быть организованы? 3. Каковы требования к защите данных? Какие роли определяются в требованиях к приложению и какие права им предоставляются?
Приложение 2. Примеры определения архитектуры приложения. Возможный вариант многоуровневой архитектуры приложения изображен на Рис. 2. Клиентская часть интерфейса пользователя (Web-браузер)
Серверные компоненты интерфейса пользователя (Web-формы ASP.NET и HTML-страницы)
Компоненты модели данных приложения (на основе классов ADO.NET)
БД приложения (в рамках одной из реляционных СУБД) Рисунок 2. Архитектура разрабатываемого приложения. Цветом выделены уже существующие компоненты, которые не нужно разрабатывать или модифицировать.
При использовании этого варианта в качестве выделенных цветом компонентов берутся уже существующие компоненты, интерфейс взаимодействия Web-браузера с компонентами ASP.NET поддерживается средой .NET, взаимодействие компонентов данных приложения с СУБД поддерживается имеющимися реализациями классов ADO.NET для выбранной СУБД. Варианты определения интерфейса компонентов модели данных. 1. Первый вариант: интерфейс, соответствующий запросам от Web-форм. Определяется один класс, реализующий все взаимодействия с БД приложения. Для каждого вида запросов, используемого в Web-формах, определяется специальный метод этого класса. Замечание: для проектирования этого интерфейса нужно сначала выяснить все запросы, которые необходимы Web-формам, или же нужно начать разрабатывать Web-формы, по ходу дела реализуя методы, удовлетворяющие возникающие в них потребности. 2. Второй вариант: определить по одному классу на одну хранимую сущность. Определяются классы Flight для рейсов, Carrier для авиаперевозчиков и Destination для городов, связанных авиарейсами. Для всех полей их данных определяется 8
методы get и set. Кроме того, определяется ряд вспомогательных методов для получения всех объектов данного класса по определенным признакам. Запросы Web-форм реализуются в самих Web-формах с помощью этого интерфейса. Варианты определения схемы защиты данных приложения. Во всех вариантах определяются роли «обычный пользователь», «привилегированный пользователь» и «администратор». Обычный пользователь может только просматривать информацию об авиарейсах. Привилегированный пользователь может добавлять, удалять и редактировать информацию о рейсах, компаниях и городах. Администратор может добавлять и удалять привилегированных пользователей, определяя их учетные записи (login) и пароли. Во всех предлагаемых вариантах для реализации защиты приложения используются встроенные механизмы ASP.NET. Возможные способы определения привилегированных пользователей могут различаться. 1. У администратора нет специального пользовательского интерфейса. Список привилегированных пользователей с их именами и паролями хранится в БД приложения в особой таблице. При необходимости администратор изменяет его напрямую при помощи инструментов администрирования СУБД или выполнения SQL-скриптов. 2. У администратора нет специального пользовательского интерфейса. Список привилегированных пользователей с их именами и паролями содержится в конфигурационном файле приложения. При необходимости администратор изменяет его напрямую, редактируя конфигурационный файл на Web-сервере. 3. У администратора есть специальный интерфейс, доступ к которому возможен только после аутентификации — указания учетной записи (login) и пароля администратора. Список привилегированных пользователей с их именами и паролями хранится в БД приложения в особой таблице. Администратор изменяет его при помощи этого специализированного интерфейса.
Приложение 3. Пример схемы БД приложения и SQL-скриптов для ее создания. Вариант определения схемы БД приложения без использования специальной таблицы для хранения имен и паролей привилегированных пользователей приведен на Рис. 3. Соответствующий код на SQL, создающий такую БД в рамках СУБД MySQL 5.0, приведен ниже.
Рисунок 3. Примерная схема БД приложения.
9
Пояснения. •
Номер рейса обычно представляется как буквенный код компании-авиаперевозчика и цифровой номер рейса. Для буквенного кода компании выделено поле Abbreviation в таблице Carrier.
•
Для вычисления местного времени прибытия необходимо, кроме времени вылета и продолжительности полета, знать временные зоны точки вылета и точки прибытия. Для указания временной зоны выделено поле TimeZone в таблице Destination. Временная зона указывается в виде целого числа, обозначающего опережение местного времени по отношению к Гринвичу в часах (для Москвы это 3, для Лондона 0, для Нью-Йорка -5, для Владивостока 10).
Другие варианты схемы БД: 1. Все то же самое, но добавлена специальная таблица PrivilegedUser с полями Login и Password, имеющими тип varchar(20). В этом случае привилегированные пользователи и их пароли должны описываться в этой таблице. 2. Поле TimeZone представляет разность между местным временем и Гринвичем в минутах. Это может более точно отражать реальные условия, поскольку для ряда зон местное время отличается от Гринвичского не на целое число часов. Следующий скрипт создает БД в соответствии со схемой, изображенной на Рис. 3 и заполняет ее некоторыми данными. /* Create schema flights */ CREATE DATABASE IF NOT EXISTS flights; USE flights; /* Definition of table `flights`.`carrier` */ DROP TABLE IF EXISTS `flights`.`carrier`; CREATE TABLE `flights`.`carrier` ( `CarrierID` int unsigned NOT NULL auto_increment, `Title` varchar(255) NOT NULL, `Abbreviation` varchar(10) NOT NULL, PRIMARY KEY (`CarrierID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /* Definition of table `flights`.`destination` */ DROP TABLE IF EXISTS `flights`.`destination`; CREATE TABLE `flights`.`destination` ( `DestinationID` int unsigned NOT NULL auto_increment, `Name` varchar(50) NOT NULL, `TimeZone` int NOT NULL default 0, PRIMARY KEY (`DestinationID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /* Definition of table `flights`.`flight` */ DROP TABLE IF EXISTS `flights`.`flight`; CREATE TABLE `flights`.`flight` ( `FlightID` int unsigned NOT NULL auto_increment, `Number` varchar(10) NOT NULL, `CarrierID` int unsigned NOT NULL,
10
`StartingPoint` int unsigned NOT NULL, `EndPoint` int unsigned NOT NULL, `Start` time NOT NULL default '00:00:00', `Duration` time NOT NULL default '00:00:00', PRIMARY KEY (`FlightID`), KEY `Carrier` (`CarrierID`), KEY `StartingPoint` (`StartingPoint`), KEY `EndPoint` (`EndPoint`), CONSTRAINT `Carrier` FOREIGN KEY (`CarrierID`) REFERENCES `carrier` (`CarrierID`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `EndPoint` FOREIGN KEY (`EndPoint`) REFERENCES `destination` (`DestinationID`), CONSTRAINT `StartingPoint` FOREIGN KEY (`StartingPoint`) REFERENCES `destination` (`DestinationID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /* Data for table `flights`.`carrier` */ INSERT INTO `flights`.`carrier` (`CarrierID`, `Title`, `Abbreviation`) VALUES (1, 'Lufthanza', 'LH'), (2, 'Aeroflot', 'SU'), (3, 'S7', 'S7'); /* Data for table `flights`.`destination` */ INSERT INTO `flights`.`destination` (`DestinationID`, `Name`, `TimeZone`) VALUES (1, 'Moscow', 3), (2, 'St. Petersburg', 3), (3, 'London', 0), (4, 'Berlin', 1), (5, 'Novosibirsk', 6), (6, 'Frankfurt', 1); /* Data for table `flights`.`flight` */ INSERT INTO `flights`.`flight` (`FlightID`, `Number`, `CarrierID`, `StartingPoint`, `EndPoint`, `Start`, `Duration`) VALUES (1, '857', 2, 1, 2, '14:15:00', '1:25:00'), (2, '839', 2, 1, 2, '08:15:00', '1:35:00'), (3, '840', 2, 2, 1, '11:00:00', '1:30:00'), (4, '858', 2, 2, 1, '16:55:00', '1:20:00'), (5, (6, (7, (8,
Замечание. Использованы таблицы формата InnoDB, а не MyISAM, поскольку InnoDB позволяет автоматически контролировать ограничения ссылочной целостности.
Приложение 4. Пример кода компонентов модели данных приложения и описания их отображения на БД. В предлагаемом варианте построения модели данных приложения определяется один класс, методы которого реализуют все необходимые для работы Web-форм запросы к БД. Ниже приведен примерный код такого класса на C#. В приведенном примере написаны не все методы, необходимые для работы Web-форм — из методов, изменяющих информацию в БД приложения приведены только метод, добавляющий новую запись о компании-авиаперевозчике и изменяющий данные об имеющемся авиаперевозчике. using System; using System.Data; using System.Data.Common; using MySql.Data.MySqlClient; namespace Flights { public class FlightsDB
12
{
public static string connectStr = "Data Source=localhost;Database=flights;User Id=root;Password=troot"; public FlightsDB() {} public DataSet GetCarriers() { IDbConnection connect = new MySqlConnection(connectStr); IDbCommand selectCmd = new MySqlCommand ("SELECT carrier.CarrierID, carrier.Title, carrier.Abbreviation" + " FROM carrier"); selectCmd.Connection = connect; DataAdapter adapter = new MySqlDataAdapter(selectCmd as MySqlCommand); connect.Open(); DataSet ds = new DataSet(); adapter.Fill(ds); ds.Tables[0].Columns[0].ColumnName = "ID"; ds.Tables[0].Columns[1].ColumnName = "name"; ds.Tables[0].Columns[2].ColumnName = "abbr"; connect.Close(); return ds; } public DataSet GetDestinations() { IDbConnection connect = new MySqlConnection(connectStr); IDbCommand selectCmd = new MySqlCommand ("SELECT destination.DestinationID, destination.Name, " + " destination.TimeZone FROM destination"); selectCmd.Connection = connect; DataAdapter adapter = new MySqlDataAdapter(selectCmd as MySqlCommand); connect.Open(); DataSet ds = new DataSet(); adapter.Fill(ds); ds.Tables[0].Columns[0].ColumnName = "ID"; ds.Tables[0].Columns[1].ColumnName = "name"; ds.Tables[0].Columns[2].ColumnName = "zone"; connect.Close(); return ds; }
connect.Close(); return ds; } public void AddCarrier(string title, string abbr) { IDbConnection connect = new MySqlConnection(connectStr); IDbCommand insertCmd = new MySqlCommand ("INSERT INTO carrier (carrier.Title, carrier.Abbreviation) VALUES (" + title + ", " + abbr + ")"); insertCmd.Connection = connect; connect.Open(); insertCmd.ExecuteNonQuery(); connect.Close(); } public void UpdateCarrier(string id, string title, string abbr) { IDbConnection connect = new MySqlConnection(connectStr); IDbCommand updateCmd = new MySqlCommand ("UPDATE carrier SET Title = " + title + ", Abbreviation = " + abbr +" WHERE CarrierID = " + id + ")"); updateCmd.Connection = connect; connect.Open(); updateCmd.ExecuteNonQuery();
14
connect.Close(); }
}
}
Приложение 5. Пример архитектуры пользовательского интерфейса приложения. Описываемый ниже вариант архитектуры пользовательского интерфейса подходит для тех случаев, в которых отсутствует специализированный интерфейс администратора. Одна форма используется для навигации по БД авиарейсов и три формы для ее редактирования — для редактирования самих авиарейсов, данных о пунктах назначения и данных о перевозчиках. Доступ к любой из форм редактирования предоставляется только привилегированным пользователям, чьи имена и пароли указаны в конфигурационном файле приложения. Для аутентификации пользователей используется дополнительная форма. Эта архитектура интерфейса приложения изображена на Рис. 4. Браузер Интернет
Форма просмотра данных о рейсах (возможности поиска)
Форма аутентификации пользователей
Форма редактирования данных о рейсах (с использованием имеющейся информации о перевозчиках и пунктах назначения)
Форма редактирования данных о пунктах назначения
Форма редактирования данных о перевозчиках
Защищенная область — доступна только для привилегированных пользователей Рисунок 4. Возможная архитектура пользовательского интерфейса приложения.
Приложение 6. Пример описания системных тестов для приложения. 1. Выполнив удаление файлов cookie в настройках браузера, открыть приложение. Выбрать пункт отправления. Проверить, что форма заполняется информацией обо всех рейсах с этим пунктом отправления. Попробовать перейти на форму редактирования информации о рейсах. Проверить, 15
что при этом открывается форма аутентификации. Ввести одно из имен привилегированных пользователей и неправильный пароль. Нажать на кнопку Login. Проверить, что появляется сообщение о неверном имени пользователя или неправильном пароле и форма редактирования данных о рейсах не появляется. Повторить ввод неверных данных несколько раз. Каждый раз проверять, что сообщение о неправильно введенных имени и пароле не исчезает и форма редактирования данных о рейсах не появляется. Проверить, что после заданного количества попыток снова открывается основная форма приложения. Выбрать пункт отправления и пункт назначения. Проверить, что форма заполняется информацией обо всех рейсах с этими пунктом отправления и пунктом назначения. Закрыть приложение. 2. Выполнив удаление файлов cookie в настройках браузера, открыть приложение. Выбрать авиаперевозчика. Проверить, что форма заполняется информацией обо всех его рейсах. Попробовать перейти на форму редактирования информации о рейсах. Проверить, что при этом открывается форма аутентификации. Ввести одно из имен привилегированных пользователей и неправильный пароль. Нажать на кнопку Login. Проверить, что появляется сообщение о неверном имени пользователя или неправильном пароле и форма редактирования данных о рейсах не появляется. Ввести одно из имен привилегированных пользователей и его пароль. Нажать на кнопку Login. Проверить, что открывается форма редактирования данных о рейсах с информацией о рейсах выбранного на основной форме авиаперевозчика. Выбрать пункт назначения. Проверить, что остается только информация о рейсах выбранного перевозчика с заданным пунктом назначения. Выбрать один из рейсов и изменить его время отправления. Проверить, что по окончании редактирования в данных об этом рейсе показывается новое время отправления. Вернуться на основную форму приложения. Проверить, что в данных об этом рейсе тоже показывается новое время отправления. Попробовать перейти на форму редактирования информации о рейсах. Проверить, что при этом сразу открывается она, а не форма аутентификации. Ввести информацию о новом рейсе, используя уже имеющиеся в БД пункты отправления и назначения и авиаперевозчика. При этом ввести сначала вместо времени отправления несколько букв и проверить, что выдается сообщение о неправильно введенном времени отправления. Исправить ошибку и сохранить введенную информацию. Выбрать только что использованного авиаперевозчика и проверить, что среди его рейсов упоминается только что описанный рейс. Закрыть приложение. 3. Открыть приложение, предварительно пройдя аутентификацию, не позже, чем за 15 минут до этого. Выбрать авиаперевозчика. Проверить, что форма заполняется информацией обо всех его рейсах. Выбрать пункт отправления. Проверить, что остается информация о рейсах выбранной компании с данным пунктом отправления. Попробовать перейти на форму редактирования информации о рейсах. Проверить, что при этом сразу открывается она, а не форма аутентификации. Проверить, что форма редактирования данных о рейсах заполнена информацией о рейсах выбранной компании с выбранным пунктом отправления. 16
Перейти на форму редактирования данных о компаниях. Ввести информацию о новой компании. Вернуться на форму редактирования данных о рейсах и проверить, что название новой компании можно выбрать из списка компаний. Перейти на форму редактирования данных о пунктах назначения. Ввести информацию о новом пункте назначения. Попробовать ввести в поле определения временной зоны несколько букв и проверить, что появляется сообщение об ошибке. Исправить ошибку и сохранить введенную информацию. Вернуться на форму редактирования данных о рейсах и проверить, что его название выбрать из списка пунктов назначения. Изменить информацию об одном из рейсов, изменив его пункт назначения на только что описанный и компанию на только что введенную. Изменить номер рейса и время его отправления. Сохранить введенную информацию. Вернуться на форму просмотра данных о рейсах. Выбрать название только что введенной компании. Проверить, что на форме остается только информация о том рейсе, который только что редактировался. Закрыть приложение.
Приложение 7. Пример проекта форм приложения. Ниже приведен проект форм приложения для архитектуры пользовательского интерфейса, представленной на Рис. 4. В рамках этой архитектуры имеется 5 форм.
Форма просмотра информации о рейсах
Рисунок 5. Форма просмотра информации о рейсах.
Эта форма — основная форма приложения. Она содержит заголовок, ссылку, ведущую на форму редактирования информации о рейсах, таблицу данных о рейсах и три выпадающих списка для отбора рейсов по пунктам вылета и назначения и компании. Для того чтобы вывести данные о рейсах определенной компании из некоторого города в другой, надо выбрать пункты вылета и назначения и название компании в выпадающих списках. Если выбрать элемент «*» в одном из выпадающих списков, показываются все рейсы, удовлетворяющие остальным ограничениям, но независимо от значения этого поля
17
для них. Если элемент «*» выбран во всех трех списках, показывается информация обо всех рейсах, имеющихся в БД. Информация о времени вылета и продолжительности полета показывается в соответствии со значениями этих полей для данного рейса. Информация о пунктах вылета и назначения, или компании показывается в виде их названий в соответствии со ссылками на записи в таблицах Destination и Carrier. Полный номер рейса вычисляется как конкатенация сокращения названия компании (из таблицы Carrier) и самого номера рейса в таблице Flight. Местное время прибытия вычисляется по времени отправления, продолжительности полета и разности между временными зонами пунктов вылета и назначения. Замечание. Если БД содержит много (>100) записей о рейсах, необходимо разработать другой интерфейс для представления информации о них. Один из вариантов — ее постраничное представление, со ссылками для перехода на другие страницы и с настраиваемым числом записей, показываемых на одной странице. Имеется ссылка, ведущая на форму редактирования информации о рейсах. Она ведет на форму, заполненную информацией о рейсах, отобранных в соответствии с выбранными значениями в выпадающих списках. С ее помощью можно изменить о любом из имеющихся рейсов, добавить новые рейсы или удалить имеющиеся.
Форма аутентификации привилегированных пользователей
Рисунок 6. Форма аутентификации.
Форма аутентификации содержит два поля для ввода имени пользователя и пароля и кнопку, запускающую процедуру аутентификации. При неудачной аутентификации снизу от кнопки появляется сообщение о том, что либо пользователь системе неизвестен, либо пароль введен неправильно. После 5-й неуспешной попытки аутентификации, нажатие на эту кнопку переводит на основную форму приложения. При успешной аутентификации открывается форма редактирования информации о рейсах, заполненная данными в соответствии с критериями выбора рейсов, указанными на форме просмотра информации о них.
Форма редактирования информации о рейсах Эта форма позволяет как ввести информацию о новом рейсе, так и изменить данные об уже имеющемся в БД. Верхние три выпадающих списка действуют аналогично тем, что имеются на основной форма приложения — указывают критерии отбора рейсов для показа информации о них в основной таблице. 18
Следующая строка элементов управления — ссылка Add, три выпадающих списка и три поля — предназначена для ввода информации о новом рейсе и добавления соответствующей записи в БД. В поле «Рейс» вводится только часть номера рейса без аббревиатуры названия компании. При выборе компании в выпадающем списке эта аббревиатура появляется перед полем для номера рейса. При нажатии на ссылку Add проверяется корректность всех данных, введенных в полях.
Рисунок 7. Форма редактирования информации о рейсах.
Производятся следующие проверки корректности введенных данных. •
Пункты назначения и прибытия должны быть указаны.
•
Компания должна быть указана.
•
Время в обоих полях для ввода времени вводится в формате «часы:минуты».
•
Размер строки с номером рейса не должен превосходить размер соответствующего поля в БД.
Если введенные данные правильны, запись о новом рейсе добавляется в БД. Иначе выдается сообщение об ошибке с указанием поля, которое заполнено неверно. При нажатии в любой момент на ссылку Cancel происходит сброс всех введенных данных и переключение на основную форму приложения. При нажатии на ссылку Delete в одной из строк таблицы из БД удаляется запись о соответствующем рейсе. При нажатии на ссылку Edit соответствующая строка таблицы переходит в режим редактирования. Это означает, в первых трех полях появляются выпадающие списки, с помощью которых можно выбрать пункт вылета, пункт назначения и компанию данного рейса, в поле «Рейс» появляется поле ввода, содержимое которого составляет короткий номер рейса, без аббревиатуры названия компании, а в полях «Время вылета» и «Время в пути» появляются поля ввода для этих значений времени. Корректность введенных данных проверяется по правилам, аналогичным перечисленным выше. Во всех выпадающих списках для выбора пункта направления или пункта назначения (кроме самого верхнего) есть элемент «Add new…», выбор которого переводит на форму редактирования данных о пунктах вылета или назначения. Во всех выпадающих списках для выбора компании (кроме самого верхнего) есть элемент «Add new…», выбор которого переводит на форму редактирования данных о компаниях. 19
Форма редактирования информации о пунктах назначения
Рисунок 8. Форма редактирования информации о пунктах назначения.
На этой форме можно увидеть полный список пунктов назначения, данные о которых имеются в БД приложения. С ее помощью эти данные можно изменить, удалить запись о пункте назначения или добавить новую. Ссылка Cancel переводит на форму редактирования информации о рейсах. Ссылка Add служит для записи в БД названия и временной зоны нового пункта назначения, введенных в соответствующих полях. При этом проверяется, что название помещается в соответствующее поле таблицы Destination, а временная зона задана при помощи положительного или отрицательного целого числа в интервале [-12,12]. При нажатии на ссылку Delete в одной из строк таблицы из БД удаляется запись о соответствующем пункте назначения. При нажатии на ссылку Edit соответствующая строка таблицы переходит в режим редактирования. При этом в третьем столбце появляется поле ввода для названия пункта назначения, а в четвертом — поле ввода для его временной зоны. Корректность введенных данных проверяется по правилам, аналогичным перечисленным выше.
Форма редактирования информации о компаниях На этой форме можно увидеть полный список компаний-авиаперевозчиков, данные о которых имеются в БД приложения. С ее помощью эти данные можно изменить, удалить запись о компании или добавить новую. Ссылка Cancel переводит на форму редактирования информации о рейсах. Ссылка Add служит для записи в БД названия и аббревиатуры новой компании, введенных в соответствующих полях. При этом проверяется, что название и аббревиатура помещаются в соответствующие поля таблицы Carrier. Кроме того, аббревиатура должна состоять из латинских букв в верхнем регистре и цифр. При нажатии на ссылку Delete в одной из строк таблицы из БД удаляется запись о соответствующей компании. При нажатии на ссылку Edit соответствующая строка таблицы переходит в режим редактирования. При этом в третьем столбце появляется поле ввода для названия 20
компании, а в четвертом — поле ввода для ее аббревиатуры. Корректность введенных данных проверяется по правилам, аналогичным перечисленным выше.
Рисунок 9. Форма редактирования информации о компаниях.
Приложение 8. Пример описания модульных тестов для форм приложения. Основная форма приложения и навигация с нее 1. Проверить, что в начальном состоянии в выпадающих списках текущим элементами являются элементы «*» и таблица содержит информацию обо всех рейсах в БД. Проверить правильность вычисления времени прибытия для нескольких рейсов, один из которых прибывает в те же сутки, что и вылетел, а другой — на следующие сутки после вылета. 2. Выбрать произвольный пункт вылета в выпадающем списке. Проверить, что форма заполняется информацией о рейсах из этого пункта. 3. Выбрать произвольный пункт назначения в выпадающем списке. Проверить, что форма заполняется информацией о рейсах в этот пункт. 4. Выбрать произвольную компанию в выпадающем списке. Проверить, что форма заполняется информацией о рейсах этой компании. 5. Выбрать пункты вылета и назначения. Проверить, что остается информация обо всех рейсах между этими пунктами. 6. Выбрать пункты вылета, назначения и компанию. Проверить, что остается информация обо всех рейсах этой компании между этими пунктами. 7. Удалив записи cookie в меню Tools браузера, попробовать перейти на форму редактирования данных о рейсах. Проверить, что открывается форма аутентификации. 8. Пройдя аутентификацию не позже чем за 15 минут, и выбрав элементы «*» во всех выпадающих списках, попробовать перейти на форму редактирования данных о рейсах. Проверить, что она открывается и заполняется данными обо всех рейсах, имеющихся в БД приложения.
21
9. Пройдя аутентификацию не позже чем за 15 минут, и выбрав пункт вылета и элементы «*» в остальных выпадающих списках, попробовать перейти на форму редактирования данных о рейсах. Проверить, что она открывается и заполняется данными о рейсах, вылетающих из выбранного пункта. 10. Пройдя аутентификацию не позже чем за 15 минут, и выбрав пункты вылета, назначения и компанию, попробовать перейти на форму редактирования данных о рейсах. Проверить, что она открывается и заполняется данными о рейсах этой компании между выбранными пунктами.
Форма аутентификации и навигация с нее 1. Ввести неверное имя привилегированного пользователя и любой пароль. Нажать на кнопку Login. Проверить, что появляется сообщение о неверном имени пользователя или неправильном пароле и форма редактирования данных о рейсах не появляется. 2. Ввести одно из имен привилегированных пользователей и неправильный пароль. Нажать на кнопку Login. Проверить, что появляется сообщение о неверном имени пользователя или неправильном пароле и форма редактирования данных о рейсах не появляется. 3. Повторить 1 или 2 несколько раз. Выполнять все проверки каждый раз. Кроме того, проверить, что после заданного количества попыток форма аутентификации пропадает и появляется форма просмотра информации о рейсах. 4. Ввести одно из имен привилегированных пользователей и его пароль. Нажать на кнопку Login. Проверить, что открывается форма редактирования данных о рейсах.
Форма редактирования данных о рейсах и навигация с нее 1. Выбрать произвольный пункт вылета в верхнем выпадающем списке. Проверить, что форма заполняется информацией о рейсах из этого пункта. 2. Выбрать произвольный пункт назначения в верхнем выпадающем списке. Проверить, что форма заполняется информацией о рейсах в этот пункт. 3. Выбрать произвольную компанию в верхнем выпадающем списке. Проверить, что форма заполняется информацией о рейсах этой компании. 4. Выбрать пункты вылета и назначения. Проверить, что остается информация обо всех рейсах между этими пунктами. 5. Выбрать пункты вылета, назначения и компанию. Проверить, что остается информация обо всех рейсах этой компании между этими пунктами. 6. Удалить один из рейсов. Проверить, что информация о нем больше не показывается на форме. Перейти на основную форму приложения и проверить это же и там. 7. Выбрать название компании в выпадающем списке для добавления рейсов. Проверить, что аббревиатура этой компании появилась перед полем ввода номера рейса. 8. Выбрать в строке добавления рейса уже имеющиеся в БД пункты вылета и назначения, компанию, ввести номер рейса и корректное время вылета. Нажать на ссылку Add. Проверить, что выдается сообщение об отсутствующем значении продолжительности полета. 9. Выбрать в строке добавления рейса уже имеющиеся в БД пункты вылета и назначения, компанию, ввести номер рейса, корректную продолжительность 22
полета и строку из букв вместо времени вылета. Нажать на ссылку Add. Проверить, что выдается сообщение об ошибке в поле «Время вылета». 10. Выбрать в верхних выпадающих списках элементы «*». Выбрать в строке добавления рейса уже имеющиеся в БД пункты вылета и назначения, компанию, ввести номер рейса, корректные время вылета и продолжительность полета. Нажать на ссылку Add. Проверить, что информация о новом рейсе показывается в таблице. Проверить, что время прибытия рейса вычислено правильно. 11. Выполнить 2 для одного из авторов, кроме первого. Проверить, что все работает аналогично. 12. Выбрать элемент «Add new…» в выпадающем списке пунктов вылета в строке добавления рейсов. Проверить, что открывается форма редактирования данных о пунктах назначения. 13. Выбрать элемент «Add new…» в выпадающем списке пунктов назначения в строке добавления рейсов. Проверить, что открывается форма редактирования данных о пунктах назначения. 14. Выбрать элемент «Add new…» в выпадающем списке компаний в строке добавления рейсов. Проверить, что открывается форма редактирования данных о компаниях. 15. Нажать на ссылку Edit в одной из строк таблицы. Проверить, что в третьем и четвертом ее полях появляются выпадающие списки с пунктами назначения, причем в них выбраны пункт вылета и пункт назначения выбранного рейса. Проверить, что в пятом поле появляется выпадающий список компаний, причем в нем выбрана компания данного рейса. Проверить, что в шестом поле появляется поле ввода, содержащее короткий номер рейса, а аббревиатура компании остается перед ним в виде нередактируемой метки. Проверить, что в седьмом и восьмом полях появляются поля ввода, содержащие время вылета и время полета для данного рейса. 16. Нажать на ссылку Edit в одной из строк таблицы. Выбрать в выпадающем списке другую компанию. Проверить, что метка перед полем ввода для номера рейса изменяется, показывая аббревиатуру выбранной компании. Сохранить измененные данные. Проверить, что в таблице этот рейс показан как выполняемый выбранной компанией. 17. Нажать на ссылку Edit в одной из строк таблицы. Ввести корректное время вылета и строку из букв в поле для продолжительности полета. Попытаться сохранить эти данные. Проверить, что появляется сообщение об ошибке в поле «Время в пути». 18. Нажать на ссылку Edit в одной из строк таблицы. Ввести корректное значение время полета и оставить поле для времени вылета пустым. Попытаться сохранить эти данные. Проверить, что появляется сообщение об ошибке в поле «Время вылета». 19. Нажать на ссылку Edit в одной из строк таблицы. Ввести новые корректные значения времени вылета и времени полета. Попытаться сохранить эти данные. Проверить, что информация о выбранном рейсе в таблице изменяется, и новое время прибытия вычисляется правильно. 20. Нажать на ссылку Edit в одной из строк таблицы. Выбрать элемент «Add new…» в выпадающем списке пунктов вылета. Проверить, что открывается форма редактирования данных о пунктах назначения. Нажать на ней ссылку Cancel. Проверить, что в открывшейся форме редактирования данных о рейсах выбранная ранее строка осталась в режиме редактирования. 23
21. Нажать на ссылку Edit в одной из строк таблицы. Выбрать элемент «Add new…» в выпадающем списке пунктов назначения. Проверить, что открывается форма редактирования данных о пунктах назначения. Нажать на ней ссылку Cancel. Проверить, что в открывшейся форме редактирования данных о рейсах выбранная ранее строка осталась в режиме редактирования. 22. Нажать на ссылку Edit в одной из строк таблицы. Выбрать элемент «Add new…» в выпадающем списке компаний. Проверить, что открывается форма редактирования данных о компаниях. Нажать на ней ссылку Cancel. Проверить, что в открывшейся форме редактирования данных о рейсах выбранная ранее строка осталась в режиме редактирования.
Форма редактирования данных о пунктах назначения и навигация с нее 1. Ввести название нового пункта назначения. Попробовать добавить его с помощью ссылки Add. Проверить, что появляется сообщение об отсутствующем значении временной зоны. 2. Ввести корректное значение временной зоны нового пункта назначения. Попробовать добавить его с помощью ссылки Add. Проверить, что появляется сообщение об отсутствующем названии. 3. Ввести название нового пункта назначения и строку из букв в качестве временной зоны. Попробовать добавить его с помощью ссылки Add. Проверить, что появляется сообщение об ошибочном значении временной зоны. 4. Ввести название нового пункта назначения и число 107 в качестве временной зоны. Попробовать добавить его с помощью ссылки Add. Проверить, что появляется сообщение об ошибочном значении временной зоны. 5. Ввести название нового пункта назначения и корректное значение временной зоны. Попробовать добавить его с помощью ссылки Add. Проверить, что введенная информация появляется в таблице. С помощью ссылки Cancel перейти на форму редактирования информации о рейсах. Проверить, что новый пункт назначения появился в соответствующих выпадающих списках. 6. Удалить один из пунктов назначения. Проверить, что информация о нем пропадает из таблицы. С помощью ссылки Cancel перейти на форму редактирования информации о рейсах. Проверить, что удаленный пункт назначения исчез в соответствующих выпадающих списках. Выбрав в верхних выпадающих списках элементы «*», проверить, что информация о рейсах из этого пункта или в него тоже удалена из БД приложения. 7. Нажать на ссылку Edit в одной из строк таблицы. Проверить, что в третьем и четвертом ее полях появляются поля ввода, содержащие название и временную зону выбранного пункта назначения. 8. Нажать на ссылку Edit в одной из строк таблицы. Ввести строку из букв в поле ввода временной зоны. Попробовать сохранить эту информацию. Проверить, что появляется сообщение об ошибочном значении временной зоны. 9. Нажать на ссылку Edit в одной из строк таблицы. Ввести новое название и новое корректное значение временной зоны. Попробовать сохранить эту информацию. Проверить, что в таблице пунктов назначения появляется измененная информация. С помощью ссылки Cancel перейти на форму редактирования информации о рейсах. Проверить, что в информации обо всех рейсах, связанных с выбранным
24
пунктом назначения, его название изменилось. Проверить, что правильно вычислено новое время прибытия нескольких таких рейсов.
Форма редактирования данных о компаниях и навигация с нее 1. Ввести название новой компании. Попробовать добавить его с помощью ссылки Add. Проверить, что появляется сообщение об отсутствующем значении аббревиатуры. 2. Ввести корректное значение аббревиатуры новой компании. Попробовать добавить ее с помощью ссылки Add. Проверить, что появляется сообщение об отсутствующем названии. 3. Ввести название новой компании и строку из знаков ‘%’ в качестве аббревиатуры. Попробовать добавить его с помощью ссылки Add. Проверить, что появляется сообщение об ошибочном значении аббревиатуры. 4. Ввести название новой компании и корректное значение аббревиатуры. Попробовать добавить его с помощью ссылки Add. Проверить, что введенная информация появляется в таблице. С помощью ссылки Cancel перейти на форму редактирования информации о рейсах. Проверить, что новая компания появилась в соответствующих выпадающих списках. 5. Удалить одну из компаний. Проверить, что информация о ней пропадает из таблицы. С помощью ссылки Cancel перейти на форму редактирования информации о рейсах. Проверить, что удаленная компания исчезла в соответствующих выпадающих списках. Выбрав в верхних выпадающих списках элементы «*», проверить, что информация о рейсах этой компании тоже удалена из БД приложения. 6. Нажать на ссылку Edit в одной из строк таблицы. Проверить, что в третьем и четвертом ее полях появляются поля ввода, содержащие название и аббревиатуру выбранной компании. 7. Нажать на ссылку Edit в одной из строк таблицы. Ввести строку из знаков ‘+’ в поле ввода аббревиатуры. Попробовать сохранить эту информацию. Проверить, что появляется сообщение об ошибочном значении аббревиатуры. 8. Нажать на ссылку Edit в одной из строк таблицы. Ввести новое название и новое корректное значение аббревиатуры. Попробовать сохранить эту информацию. Проверить, что в таблице компаний появляется измененная информация. С помощью ссылки Cancel перейти на форму редактирования информации о рейсах. Проверить, что в информации обо всех рейсах этой компании ее название изменилось. Проверить, что правильно изменились полные номера таких рейсов, начинаясь теперь с новой аббревиатуры.
Приложение 9. Пример конфигурационных файлов и кода форм приложения. Здесь приведен вариант размещения файлов приложения, оформления конфигурационных файлов, а также вариант кода двух форм из представленных в проекте в Приложении 7.
Расположение файлов приложения и конфигурационные файлы Файлы приложения расположены в двух директориях. Основная форма и вспомогательный код помещается в директории верхнего уровня. Все формы редактирования и форма аутентификации, а также код, поддерживающий их работу, помещен в поддиректорию SECURE. 25
Рисунок 10. Размещение файлов проекта.
Для основной директории приложения автоматически созданный в среде Microsoft Visual Studio конфигурационный файл был исправлен в одном месте. Это исправление указывает используемый механизм аутентификации (формы) и его параметры (форму аутентификации, название cookie, сохраняемого на компьютере клиента, чтобы не проходить аутентификацию слишком часто, и время действия сохраненного cookie), а также список привилегированных пользователей с их паролями. <system.web>... <user name="editor" password="test_editor" /> ...
Замечание. В примере показано представление пароля в открытом виде, что не обеспечивает высокий уровень защиты. Вариант, обеспечивающий более высокую защищенность, состоит в том, чтобы записать в конфигурационный файл хэш-коды паролей, а не их самих. В конфигурационном файле директории SECURE нужно указать только запрет доступа для анонимных пользователей. Ниже приведен код этого файла целиком.