Автоматизація реєстрації користувачів

Розробка системи, призначеної для автоматизації процесу реєстрації користувачів (студентів-першокурсників) в базі даних Active Directory. Інформаційне, програмне та технічне забезпечення проекту. Керівництво користувача та системного програміста.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 19.11.2013
Размер файла 603,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ «КПІ»

Кафедра автоматизованих систем обробки інформації та управління

Пояснювальна записка до курсової роботи

з дисципліни "Об'єктно-орієнтоване програмування"

на тему: "Автоматизація реєстрації користувачів"

Керівник : доц. Ковалюк Т. В.

Виконав: Саган Б. Г.

студент гр. ІС-11, ФІОТ, 2 курс

№IC-1122

Київ 2013

Зміст

1. Загальні положення

1.1 Опис предметного середовища

1.2 Огляд наявних аналогів

1.3 Постановка задачі

Висновки до розділу

2. Інформаційне забезпечення

2.1 Вхідні дані

2.2 Вихідні дані

Висновки до розділу

3. Постановка задачі

3.1 Організаційно-інформаційна сутність задачі

4. Програмне та технічне забезпечення

4.1 Засоби розробки

4.2 Загальні вимоги до технічного забезпечення

Висновки до розділу

5. Технологічний розділ

5.1 Керівництво користувача

5.2 Керівництво системного програміста

5.3 Керівництво програміста

5.4 Випробування програмного продукту

Загальні висновки

Перелік посилань

1. Загальні положення

1.1 Опис предметного середовища

Active Directory - LDAP-сумісна реалізація інтелектуальної служби каталогів корпорації Microsoft для операційних систем родини Windows NT. Active Directory дозволяє адміністраторам використовувати групові політики (GPO) для забезпечення подібного налаштування користувацького робочого середовища, розгортати ПЗ на великій кількості комп'ютерів (через групові політики або за допомогою Microsoft Systems Management Server 2003 (або System Center Configuration Manager)), встановлювати оновлення ОС, прикладного та серверного ПЗ на всіх комп'ютерах в мережі (із використанням Windows Server Update Services (WSUS); Software Update Services (SUS) раніше). Active Directory зберігає дані і налаштування середовища в централізованій базі данних. Мережі Active Directory можуть бути різного розміру: від кількох сотень до кількох мільйонів об'єктів.

Microsoft Windows Server 2008, іноді скорочено "Win2k8» або "W2K8" (кодове ім'я «Longhorn Server») - версія серверної операційної системи від Microsoft. Запущений у виробництво 4 лютого 2008 року і офіційно випущений 27 лютого 2008, він є наступником Windows Server 2003, випущений майже п'ять років тому. Другий реліз, названий Windows Server 2008 R2, був запущений у виробництво на 22 липня 2009 року. Як Windows Vista і Windows 7, Windows Server 2008 заснований на Windows NT 6.x. Ця версія замінює Windows Server 2003 як представник операційних систем покоління Vista (NT 6.x).

Опис процесу діяльності

Система призначена для полегшення процесу реєстрації користувачів в базі даних Active Directory. Система працює з урахування специфіки та політики безпеки Windows Server 2008R2 і Windows Active Directory.

Опис функціональної моделі

Для автоматизації та оптимізації роботи системних адміністраторів кафедри АСОІУ система підтримує реалізацію таких функцій, що допомагають полегшити процес реєстрації користувачів в базі даних Active Directory:

· створення облікового запису в базі даних Active Directory;

· заповнення анкети персональних даних користувача;

· розповсюдження на обліковий запис, певних групових політик(GPO);

· відправка на електронну пошту користувача листа з «Правилами поведінки в аудиторіях кафедри» та «Правилами користування обладнанням кафедри».

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

Адміністратор має можливість: змінити GPO, що розповсюджуються на обліковий запис користувача, змінити параметри облікового запису, вміст листа що відправляється на пошту користувача.

1.2 Огляд наявних аналогів

На момент розробки даної системи не було знайдено подібних систем.

1.3 Постановка задачі

Призначення розробки

Система «Автоматизація реєстрації користувачів» розробляється для полегшення процесу створення облікових записів користувачів в базі даних Active Directory.

Цілі створення

Цілями створення даної системи є:

· оптимізація роботи системних адміністраторів;

· автоматизація створення облікових записів користувачів.

Для реалізації поставлених цілей система повинна рішити наступні задачі:

· створення зручного, легкого та зрозумілого у користуванні зовнішнього інтерфейсу;

· розробка програми, що буде створювати облікові записи користувачів та наділяти їх відповідними правами.

Висновки до розділу

У даному розділі були розглянуті проаналізовані та поставлені основні цілі для створення системи. Проведена постановка задачі для системи. Проведений опис діяльності та описані функціональні можливості системи для автоматизації користувачів Active Directory.

При аналізі існуючих рішень було виявлено та проаналізовано декілька розробок. Жодна з них повністю не задовольнили вимоги до системи, що і спонукало до створення даної розробки.

2. Інформаційне забезпечення

2.1 Вхідні дані

Дані вводяться в систему користувачем, через веб-сторінку.

Дані, що надходять від користувача:

· ім'я;

· прізвище;

· номер залікової книжки;

· пароль;

· адреса електронної пошти.

Це дозволяє створити обліковий запис в базі даних Active Directory та заповнити інформацію про користувача.

2.2 Вихідні дані

Вихідною інформацією є повідомлення про успішну реєстрацію користувача в базі даних Active Directory та створений обліковий запис користувача.

Висновки до розділу

У даному розділі був приведений структурний опис первісних даних системи, запропоновані макети виглядів вигляду веб-сторінки в якості вихідних даних.

3. Постановка задачі

3.1 Організаційно-інформаційна сутність задачі

Спочатку кожного навчального року, першокурсники повинні пройти процес реєстрації особистих облікових записів в базі даних Active Directory, які в подальшому їхньому навчанні будуть використовуватись для роботи в комп'ютерних аудиторія кафедри. Дана програма створена для того, щоб знизити затрати часу на цей процес та підвищити ефективність роботи системних адміністраторів.

Об'єкти представляють собою окремі сутності (користувача, комп'ютер, принтер, програму або спільну мережеву папку) і їх атрибути. Об'єкти також можуть бути контейнерами для інших об'єктів. Об'єкт унікально ідентифікується своїм ім'ям і має набір атрибутів:

· характеристик;

· даних, які об'єкт може містити.

4. Програмне та технічне забезпечення

4.1 Засоби розробки

При створенні даного програмного продукту були використані такі засоби програмування як Microsoft Visual Studio 2010 (ASP.NET) та Script Editor.

Для створення програми, що працює даними Active Directory використовувалась мова програмування C#. Головною перевагою C# в створенні даної системи - її пристосованість до роботи з Microsoft AD, а саме легке управління об'єктами бази даних AD.

Для створення графічної оболонки (веб-сторінки) використовувалась мова розмітки HTML/CSS та JavaScript - для динамічної зміні змісту сторінки.

4.2 Загальні вимоги до технічного забезпечення

Даний програмний продукт являє собою систему, що створює облікові записи користувачів в базі даних AD.

Для правильної роботи програми до складу технічних засобів повинні входити:

a) ПК під управлінням однієї з перелічених операційних систем: Windows XP/Vista/7/8, Linux, MacOS;

b) Технічні параметри ПК повинні задовольняти перелічені нижче:

· Процесор з тактовою частотою не нижче 1.6 ГГц;

· Достатній об'єм оперативної пам'яті (не менше 512 МБ);

· Широкий канал підключення до мережі Інтернет;

· Браузер (Google Chrome, Opera, Mozilla Firefox);

c) Технічні параметри сервера:

· Процесор з тактовою частотою не нижче 1.6 ГГц;

· Достатній об'єм оперативної пам'яті (не менше 512 МБ);

· Широкий канал підключення до мережі Інтернет;

· Встановлений IIS Web;

Висновки до розділу

Розглянуто основні особливості розробки програм для роботи з AD за допомогою мови програмування C#.

До системи, що розробляється були поставлені мінімальні технічні вимоги для функціонування системи.

5. Технологічний розділ

5.1 Керівництво користувача

автоматизація реєстрація користувач програміст

Для запуску даної системи потрібно відкрити браузер та перейти за вказаним інтернет-адресом. При відкриті веб-сторінки, користувачу буде відображено форму з «Правилами кафедри АСОЇУ». Вигляд даної форми наведено на рисунку 5.1.

Рисунок 5.1 - Блок ознайомлення з «Правилами кафедри»

Перехід до блоку заповнення персональної інформації користувача здійснюється після натиснення кнопки «Далі», що знаходиться на правій стороні форми. Після натиснення перед вами з'явиться анкета зображена на рисунку 5.2.

Правила вводу персональних даних:

· Ім'я та Прізвище повинні бути введені латиницею, перші букви мають бути великими;

· Номер залікової книжки повинен бути введений в такому форматі: isXXXX/ipXXXX, де is/ip - напрямок навчання, XXXX-номер заліковки;

· Пароль повинен містити мінімум 8 символів, серед яких мають бути великі та маленькі літери та цифри;

Рисунок 5.2 - Блок заповнення персональних даних

При наступному натисненні кнопки «Далі» користувач перейде до блоку, де він має засвідчитись, що всі введені ним дані є коректними. Приклад показаний на рисунку 5.3.

Також користувач має право проходити процедуру реєстрації на англійській мові.

Рисунок 5.3 - Блок перевірки даних

Наступне натискання кнопки «Далі» відправить запит на сервер і якщо дані є вірними створить користувача. Також на електронну адресу користувача буде надіслано повідомлення з його персональними даними та «Правилами кафедри АСОІУ».

5.2 Керівництво системного програміста

Для коректної роботи системи потрібно:

Технічні параметри сервера:

· Процесор з тактовою частотою не нижче 1.6 ГГц;

· Достатній об'єм оперативної пам'яті (не менше 512 МБ);

· Широкий канал підключення до мережі Інтернет;

На сервері повинна бути встановлена операційна система Windows Server 2008R2 і піднятий сервіс IISWeb.

IIS (Internet Information Services, до версії 5.1 - Internet Information Server) - це набір серверів для декількох служб Інтернету від компанії Майкрософт. IIS поширюється з операційними системами родини Windows NT.

Основний компонент IIS - веб-сервер, який дозволяє розміщувати в Інтернет сайти. IIS підтримує протоколи HTTP, HTTPS, FTP, POP3,SMTP, NNTP. IIS другий за популярністю веб-сервер за кількістю сайтів, після Apache HTTP Server. За даними компанії Netcraft на11.10.2007, понад 37.13% сайтів обслуговується веб-сервером IIS.

Даний сервіс встановлюється з офіційного сайту Microsoft: http://www.microsoft.com/en-us/download/details.aspx?id=1038

Після оснащення сервера вказаним вище програмним забезпеченням на ньому можна розгортати дану систему згідно з інструкціями Windows.

5.3 Керівництво програміста

Для створення даної системи використовувались Microsoft Visual Studio 2010 Professionalі Sublime 2.

Код мовою C#, що виконує реєстрацію користувачів на сервері:

//e-mail

//========================================

MailMessage mail = newMailMessage();

SmtpClient SmtpServer = newSmtpClient("smtp.gmail.com");

mail.From = newMailAddress("asoiu.kpi@gmail.com");

mail.To.Add(email.Text);

mail.Subject = "Test Mail";

mail.Body = " Name: " + studname.Text + "\n Surname: " + studsurname.Text + "\n login: " + recordbook.Text

+ "\n Password: " + pass.Text;

SmtpServer.Port = 587;

SmtpServer.Credentials =

new System.Net.NetworkCredential("asoiu.kpi@gmail.com", "fiot_asoiu");

SmtpServer.EnableSsl = true;

SmtpServer.Send(mail);

//AD

//========================================

string connectionPrefix = "LDAP://10.18.16.13";

DirectoryEntry dirEntry = newDirectoryEntry(connectionPrefix);

DirectoryEntry newUser = dirEntry.Children.Add("CN=" + studname.Text + " " + studsurname.Text, "user");

//=======

newUser.Properties["samAccountName"].Value = recordbook.Text;

newUser.Invoke("Put", newobject[] { "Description", recordbook.Text });

newUser.Properties["displayName"].Value = studname.Text + " " + studsurname.Text;

newUser.Properties["givenName"].Value = studname.Text;

newUser.Properties["sn"].Value = studsurname.Text;

newUser.Properties["mail"].Value = email.Text;

//=======

newUser.CommitChanges();

//=======

newUser.Invoke("SetPassword", newobject[] { pass.Text });

newUser.Invoke("Put", newobject[] { "userPrincipalName", recordbook.Text + "@asoiu.ntu-kpi.kiev.ua" });

//=======

newUser.CommitChanges();

//=======

PrincipalContext ctx = newPrincipalContext(ContextType.Domain, "10.18.16.13");

UserPrincipal principal = UserPrincipal.FindByIdentity(ctx, recordbook.Text);

principal.UserCannotChangePassword = true;

principal.Save();

//=======

newUser.Properties["userAccountControl"].Value = 0x10002;

newUser.CommitChanges();

dirEntry.Close();

newUser.Close();

MessageBox.Show("Registration was complete");

Додаткові значення “userAccountControl”:

UF_TEMP_DUPLICATE_ACCOUNT = 0x0100,

UF_NORMAL_ACCOUNT = 0x0200,

UF_INTERDOMAIN_TRUST_ACCOUNT = 0x0800,

UF_WORKSTATION_TRUST_ACCOUNT = 0x1000,

UF_SERVER_TRUST_ACCOUNT = 0x2000,

UF_DONT_EXPIRE_PASSWD = 0x10000,

UF_SCRIPT = 0x0001,

UF_ACCOUNTDISABLE = 0x0002,

UF_HOMEDIR_REQUIRED = 0x0008,

UF_LOCKOUT = 0x0010,

UF_PASSWD_NOTREQD = 0x0020,

UF_PASSWD_CANT_CHANGE = 0x0040,

UF_ACCOUNT_LOCKOUT = 0X0010,

UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 0X0080,

Код форми реєстрації:

function $(str) { return document.querySelector(str) }

function hasClass(el, name) {

returnnew RegExp('(\\s|^)'+name+'(\\s|$)').test(el.className);

}

function addClass(el, name)

{

if (!hasClass(el, name)) { el.className += (el.className ? ' ' : '') +name; }

}

function removeClass(el, name)

{

if (hasClass(el, name)) {

el.className=el.className.replace(new RegExp('(\\s|^)'+name+'(\\s|$)'),' ').replace(/^\s+|\s+$/g, '');

}

}

function getXmlHttp() {

var xmlhttp;

try {

xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

try {

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch (E) {

xmlhttp = false;

}

}

if (!xmlhttp &&typeof XMLHttpRequest!='undefined') {

xmlhttp = new XMLHttpRequest();

}

return xmlhttp;

}

var Scroller = {

posX : 0,

posY : 0,

content : null,

sizeX : 0,

sizeY : 0,

w:0,

h:0,

updatePosition : function(){

with (this) {

content.style.left=-posX*w+'px';

content.style.top=-posY*h+'px';

}

},

left : function(){

with (this) {

posX -= 1;

posX = (posX<0) ? 0 : posX;

updatePosition()

}

},

right : function(){

with (this) {

posX += 1;

posX = (posX>sizeX-1) ? sizeX-1 : posX;

updatePosition()

}

},

up : function(){

with (this) {

posY -= 1;

posY = (posY<0) ? 0 : posY;

updatePosition()

}

},

down : function(){

with (this) {

posY += 1;

posY = (posY>sizeY-1) ? sizeY-1 : posY;

updatePosition()

}

},

moveto : function(x,y) {

with (this) {

posY = y

posY = (posY<0) ? 0 : posY

posY = (posY>sizeY-1) ? sizeY-1 : posY

posX = x

posX = (posX<0) ? 0 : posX

posX = (posX>sizeX-1) ? sizeX-1 : posX

updatePosition()

}

},

init : function(x,y,sx,sy,width,height,contentSelector){

with (this) {

posX = x;

posY = y;

sizeX = sx;

sizeY = sy;

content = document.querySelector(contentSelector);

content.style.position='relative'

w=width

h=height

}

returnthis;

}

}

var scroll = null;

function Registration() {

var scriptAddres = 'http://localhost/index.php',

blocks = {},

selectors = {

'rules' : '#rules',

'form' : '#regBlock',

'formData' : '#regFormData',

'langPanel' : '#langPanel',

'confirm' : '#confirm',

'nextBtn' : '#nextBtn',

'canselBtn' : '#CancelBtn',

'wait' : '#wait',

'supportBtn' : '#support',

'supportBlock' : '#supportBlock',

'stepBar' : '#stepBar',

'procWaiter' : '#waiter',

'procError' : '#error',

'procSuccess' : '#success',

'support' : '#supportBlock',

'backBtn' : '#backBtn'

},

fieldSelectors = {

'name' : '#Name',

'surname' : '#SurName',

'group' : '#Group',

'pass' : '#Pass',

'pass2' : '#CPass',

'mail' : '#EMail'

},

fields = {},

warningCodes = {

'name' : '',

'surname' : '',

'group' : '',

'pass' : '',

'mail' : ''

},

languageData = {

'ua' : {

'name' : 'Ім\'я',

'surname' : 'Прізвище',

'group' : 'Номер залікової книжки',

'pass' : 'Пароль',

'pass2' : 'Підтвердження паролю',

'mail' : 'Електронна пошта',

'emptyName' : 'Пусте поле ім\'я',

'emptySurName' : 'Пусте поле прізвища',

'emptyGroup' : 'Пусте поле номера залікової книжки',

'badGroup' : 'Некоректний номер залікової книжки',

'emptyPass' : 'Пусте поле паролю',

'badPass' : 'Некоректний пароль',

'difPass' : 'Паролі не збігаються',

'emptyMail' : 'Пусте поле електронної пошти',

'badMail' : 'Некоректна електронна пошта',

'wait' : 'Будь ласка зачекайте',

'step1' : 'Правила',

'step2' : 'Заповнення даних',

'step3' : 'Перевірка даних',

'step4' : 'Обробка',

'rules' : 'ua rules',

'support' : 'ua support'

},

'eng' : {

'name' : 'Name',

'surname' : 'Last name',

'group' : 'Number of academic records',

'pass' : 'Pass',

'pass2' : 'Confirm Password',

'mail' : 'Email Address',

'emptyName' : 'Empty name',

'emptySurName' : 'Empty last name',

'emptyGroup' : 'Empty number of academic records',

'badGroup' : 'Invalid academic record',

'emptyPass' : 'Empty pass',

'badPass' : 'bad pass',

'difPass' : 'Different pass',

'emptyMail' : 'Empty email',

'badMail' : 'bad mail',

'wait' : 'Please wait',

'step1' : 'Rules',

'step2' : 'Fill data',

'step3' : 'Check data',

'step4' : 'Processing',

'rules' : 'eng rules',

'support' : 'eng support'

}

},

language = 'ua',

mode = 'rules',

timerId = 0,

time = 0;

function hide(el){

el.style.display="none";

}

function show(el){

el.style.display="block";

}

function isBadStr() {

for (var key in arguments)

if (arguments[key]) returnfalse

returntrue;

}

function warningCodeGet(value,flagVal,flag){

if (flag === undefined)

return (value) ? '' : flagVal

else {

if (value)

return (flag) ? '' : flagVal[0]

elsereturn flagVal[1]

}

}

function checkEmail(){

var mail = fields.mail.value

var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

warningCodes.mail = warningCodeGet(mail,[languageData[language] ['badMail'],

languageData[language]['emptyMail']],reg.test(mail))

return isBadStr(warningCodes.mail)

}

function checkNames(){

warningCodes.name = warningCodeGet(fields.name.value,languageData [language]['emptyName'])

warningCodes.surname = warningCodeGet(fields.surname.value,language Data[language]['emptySurName'])

return isBadStr(warningCodes.name,warningCodes.surname)

}

function checkPass() {

if (fields.pass.value==fields.pass2.value) {

var reg = /[^A-Za-z0-9!@#\$%\^&\*()_\+-=]/

var flag = !reg.test() && (fields.pass.value.length >= 8)

warningCodes.pass = warningCodeGet(fields.pass.value,[languageData[language]['badPass'],languageData[language]['emptyPass']],flag)

}

else warningCodes.pass = languageData[language]['difPass']

return isBadStr(warningCodes.pass)

}

function checkGroup() {

var group = $(fieldSelectors.group).value.toLowerCase()

group = group.replace('с','s')

group = group.replace('п','p')

group = group.replace('і','i')

if (group!=fields.group.value)

fields.group.value=group

warningCodes.group = warningCodeGet(group,[languageData[language] ['badGroup'],

languageData[language]['emptyGroup']],

(group[0]=='i'&& (group[1]=='p' || group[1]=='s') && group.length==6))

return isBadStr(warningCodes.group)

}

function check(){

var r = checkNames() + checkGroup() + checkPass() + checkEmail()

return (r<4) ? false : true

}

function removeToolTip(el){

removeClass(el.parentNode.parentNode.querySelector('.tool-tip'),'tool-tip-show')

addClass(el.parentNode,'input-correct')

}

function addToolTip(el,str){

removeClass(el.parentNode,'input-correct')

addClass(el.parentNode.parentNode.querySelector('.tool-tip'),'tool-tip-show')

el.parentNode.parentNode.querySelector('.tool-tip').innerHTML = str;

}

function applyLanguage(e){

if (typeof e != "string") {

language1 = e.target.getAttribute('data-lang')

}

else language1 = e

language = language1

if (!language) return;

for (var key in fields)

fields[key].parentNode.parentNode.querySelector('span').innerHTML = languageData[language][key]

check()

blocks.rules.innerHTML = languageData[language]['rules']

blocks.support.innerHTML = languageData[language]['support']

for (var key in warningCodes)

fields[key].parentNode.parentNode.querySelector('.tool-tip').innerHTML = warningCodes[key]

blocks.stepBar.innerHTML = languageData[language]['step'+(scroll.posX+ 1)]

blocks.wait.innerHTML = languageData[language]['wait']+' '+time

if (mode=='confirm')

{

blocks.confirm.innerHTML = languageData[language]['name'] + ' : ' + fields.name.value + '<br>' +

languageData[language]['surname'] + ' : ' + fields.surname.value + '<br>' +

languageData[language]['group'] + ' : ' + fields.group.value + '<br>' +

languageData[language]['mail'] + ' : ' + fields.mail.value + '<br>'

}

}

function fieldChecker(e){

check()

for (var key in warningCodes) {

if (e.target == fields[key] || (key=='pass'&& e.target == fields['pass2']))

if (warningCodes[key]) {

addToolTip(fields[key], warningCodes[key])

if (key=='pass') removeClass(fields['pass2'].parentNode,'input-correct')

} else {

removeToolTip(fields[key]);

if (key=='pass') removeToolTip(fields['pass2']);

}

}

}

function waiterLoop(){

if (time == 0) {

blocks.wait.style.display='none'

blocks.nextBtn.disabled = false

clearInterval(timerId)

} else {

blocks.wait.innerHTML = languageData[language]['wait'] + ' ' + time;

time--;

}

}

function init() {

mode = 'rules'

for (var key in selectors)

blocks[key] = $(selectors[key])

for (var key in fieldSelectors)

fields[key] = $(fieldSelectors[key])

blocks.nextBtn.addEventListener('click',nextBtnClick)

blocks.supportBtn.addEventListener('click',supportBtnClick)

blocks.formData.addEventListener('keyup',fieldChecker)

blocks.backBtn.addEventListener('click',backBtnClick)

applyLanguage(language)

waiterLoop()

blocks.langPanel.addEventListener('click',applyLanguage)

timerId = setInterval(waiterLoop, 1000);

}

function supportBtnClick() {

if (scroll.posY==1) scroll.moveto(scroll.posX,0)

else {

blocks.supportBlock.style.left = (scroll.posX*blocks.supportBlock. offsetWidth)+'px';

scroll.moveto(scroll.posX,1);

}

}

function send() {

try {

mode="proc"

blocks.nextBtn.disabled = true

blocks.backBtn.disabled = true

var xmlhttp = getXmlHttp() // Создаём объект XMLHTTP

xmlhttp.open('POST', scriptAddres, true) // Открываем асинхронное соединение

xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') // Отправляем кодировку

//encodeURIComponent

var data = ''

function dataAdd(key,val) {

if (data) data += '&'

data += encodeURIComponent(key) + '=' + encodeURIComponent(val)

}

for (key in fields) {

if (key!='pass2')

dataAdd(key,fields[key].value)

}

hide(blocks.procError)

blocks.procError.style.opacity = 0

hide(blocks.procSuccess)

blocks.procSuccess.style.opacity = 0

//xmlhttp.onreadystatechange

xmlhttp.onreadystatechange = function() { // Ждём ответа от сервера

if (xmlhttp.readyState == 4) { // Ответ пришёл

if(xmlhttp.status == 200) { // Сервер вернул код 200 (что хорошо)

hide(blocks.procWaiter)

///////////////////////////////////////////////////////////

//check correct answer

///////////////////////////////////////////////////////////

//xmlhttp.responseText - то что вернул сервер

//к примеру если нам пришло число 30, то считаем что ответ некоректный

if (xmlhttp.responseText!=30)

{

blocks.procSuccess.innerHTML = xmlhttp.responseText

show(blocks.procSuccess)

blocks.procSuccess.style.opacity = 1

} else {

blocks.procError.innerHTML = "Incorrect answer"

show(blocks.procError)

blocks.procError.style.opacity = 1

blocks.backBtn.disabled = false;

}

}

}

if (xmlhttp.status == 0) {

hide(blocks.procWaiter)

blocks.procError.innerHTML = "Server don`t response"

show(blocks.procError)

blocks.procError.style.opacity = 1

blocks.backBtn.disabled = false;

}

}

xmlhttp.send(data) // Отправляем POST-запрос

}

catch(e) {

hide(blocks.procWaiter)

blocks.procError.style.opacity = 0

blocks.procSuccess.style.opacity = 0

hide(blocks.procSuccess)

blocks.procError.innerHTML = "Error : " + e.message

show(blocks.procError)

blocks.procError.style.opacity = 1

blocks.backBtn.disabled = false;

}

}

function nextBtnClick() {

if (scroll.posY==1) scroll.moveto(scroll.posX,0)

else

if (mode=='rules') {

//check time

mode='fillData'

scroll.moveto(1,0)

} elseif (mode=='fillData') {

if (check())

{

for (var key in warningCodes)

removeToolTip(fields[key])

mode='confirm'

blocks.confirm.innerHTML = languageData[language]['name'] + ' : ' + fields.name.value + '<br>' +

languageData[language]['surname'] + ' : ' + fields.surname.value + '<br>' +

languageData[language]['group'] + ' : ' + fields.group.value + '<br>' +

languageData[language]['mail'] + ' : ' + fields.mail.value + '<br>'

scroll.moveto(2,0)

} else {

for (var key in warningCodes)

if (warningCodes[key]) addToolTip(fields[key], warningCodes[key])

else removeToolTip(fields[key])

}

} elseif (mode=='confirm') {

hide(blocks.procError)

hide(blocks.procSuccess)

show(blocks.procWaiter)

scroll.moveto(3,0);

send()

}

blocks.stepBar.innerHTML = languageData[language]['step'+(scroll.posX +1)]

}

function backBtnClick() {

if (scroll.posY==1) scroll.moveto(scroll.posX,0)

else

switch (mode) {

case'rules' :

break

case'fillData' :

mode='rules'

scroll.moveto(0,0)

break

case'confirm' :

mode='fillData'

scroll.moveto(1,0)

break

case'proc' :

mode='confirm'

scroll.moveto(2,0)

blocks.nextBtn.disabled = false;

break;

}

blocks.stepBar.innerHTML = languageData[language]['step'+(scroll.posX+ 1)];

}

init();

}

window.onload = function(){

scroll = Scroller.init(0,0,4,2,410,416,"#scrollerContent")

//document.querySelector('#leftBtn').addEventListener('click',function(){ scroll.left() })

Registration();

//document.querySelector('#botBtn').addEventListener('click',function(){ scroll.down() })

//document.querySelector('#topBtn').addEventListener('click',function(){ scroll.up() })

}

5.4 Випробування програмного продукту

У ході розробки програмного застосування було проведено ряд тестів на віртуальному сервері на якому було встановлене необхідне програмне забезпечення. Після набуття стабільності систему було перенесено на реальних сервер.

Загальні висновки

Даний проект присвячений опису етапів створення системи «Автоматизація реєстрації користувачів». Були розглянуті структурний опис первісних даних системи, запропоновані веб-сторінки в якості вихідних даних.

Під час створення даного проекту було досягнуто всіх цілей поставлених перед початком розробки.

Перелік посилань

1. ASP.NET MVC Framework с примерами на C# Стивен Сандерсон.

2. Pro ASP.NET 3.5 in C# 2008 Matthew MacDonald and Mario Szpuszta

3. Learning JavaScript Shelley Powers

4. Pro JavaScript Techniques John Resig

5. Пости / ASP.NET / Хабрахабр [Електронний ресурс] / Режим доступу: http://habrahabr.ru/hub/aspnet/posts/

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.