Таблицы принятия решений в СУБД с табличной моделью данных

Универсальная модель данных. Использование функций пакета. Нечёткая логика в таблицах принятия решений. Динамические SQL-запросы и их использование. Прямой и обратный логический выводы. Контроль корректности данных. Адаптивный интерфейс пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 23.07.2015
Размер файла 5,2 M

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

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

AND brackets = '(';

SELECT COUNT(brackets) INTO v_left_bkt

FROM metadata

WHERE sid = c_sid

AND brackets = ')';

IF v_left_bkt <> v_right_bkt THEN raise_application_error(-20050,'Количество открывающих и закрывающих скобок в таблице metadata не совпадает. Обратитесь к разработчику.'); END IF;

SELECT user_id INTO c_user_id FROM data_clients

WHERE client_id = p_client_id;

SELECT COUNT(prod_id) INTO c_product --находим количество продукций для данной таблицы

FROM decision

WHERE sid = c_sid;

FOR i IN 1..c_condition LOOP --записываем логические операции в массив

SELECT connection, brackets INTO m_connection(i),m_char(i)

FROM metadata

WHERE sid = c_sid

AND condition_id = i;

END LOOP;

SELECT MIN(condition_id) INTO c_min_condition

FROM data --берём номер условия, с которого есть ответы пользователя

WHERE sid = c_sid

AND client_id = p_client_id;

FOR i IN c_min_condition..c_condition LOOP

SELECT type INTO v_type

FROM metadata

WHERE sid = c_sid

AND condition_id = i;

CASE v_type

WHEN 'checkbox' THEN

SELECT answer INTO m_answer(i)

FROM data --берём ответы пользователя

WHERE sid = c_sid

AND client_id = p_client_id

AND condition_id = i;

WHEN 'text' THEN

SELECT CASE

WHEN TO_NUMBER(answer, '999D9999') > 0 THEN 'yes'

ELSE 'no'

END INTO m_answer(i)

FROM data --берём ответы пользователя

WHERE sid = c_sid

AND client_id = p_client_id

AND condition_id = i;

END CASE;

END LOOP;

IF c_min_condition > 1 THEN -- если в начале ответов не хватает, то заполняем пробелы '_'

FOR i IN 1..c_min_condition LOOP

m_answer(i):='_';

END LOOP;

END IF;

FOR i IN 1..c_product LOOP --=== режем все комбинации ответов и записываем в один массив

SELECT conditions INTO v_condition--m_condition(i)

FROM decision

WHERE sid = c_sid

AND prod_id = i;

FOR j IN 1..c_condition-1 LOOP

--IF j <> c_condition THEN

--BEGIN

SELECT regexp_substr(v_condition, '[^'||m_connection(j)||']+', 1, 1),

INSTR(v_condition,m_connection(j))

INTO m_product((i-1)*c_condition+j),

v_in_str

FROM dual; --режем исходную строку с комбинацией условий в один большой массив

--SELECT INSTR(v_condition,m_connection(j)) INTO v_in_str --ищем номер первого вхождения условия соединения

-- FROM dual;

SELECT SUBSTR(v_condition,v_in_str+1,LENGTH(v_condition)) INTO v_substr_condition --вырезаем строку, начиная с этой позиции

FROM dual;

v_condition := v_substr_condition;

--END;

--ELSE m_product((i-1)*c_condition+j):=v_substr_condition;

--END IF;

END LOOP;

m_product((i-1)*c_condition+c_condition):=v_substr_condition;

END LOOP;

FOR i IN 1..c_product LOOP

v_equals_cnt := 0;

q_select:= 'SELECT COUNT(*) FROM dual WHERE ';

q_where:='';

FOR j IN 1..c_condition LOOP

IF m_connection(j)='&' THEN v_connection :=' AND ';

ELSIF m_connection(j)='||' THEN v_connection :=' OR ';

ELSE v_connection :='';

END IF;

IF SUBSTR(m_char(j),1,1)='(' THEN v_char_left:=m_char(j); v_char_right:=''; --чтобы правильно расставить скобки

ELSIF SUBSTR(m_char(j),1,1)=')' THEN v_char_left:=''; v_char_right:=m_char(j);

ELSE v_char_left:=''; v_char_right:='';

END IF;

q_where:= q_where||v_char_left||'(('''||m_answer(j)||'''='''||m_product((i-1)*c_condition+j)||''')OR('''||m_product((i-1)*c_condition+j)||'''=''_''))'||v_char_right;

IF j <> c_condition THEN q_where:=q_where||v_connection; END IF;-- если есть ещё условия, добавляем соединение

END LOOP;

q_select:=q_select||q_where;

EXECUTE IMMEDIATE q_select INTO v_equals_cnt; -- есть ли совпадения, если есть - запоминаем

IF v_equals_cnt > 0 THEN v_count := v_count+1;

v_productuctno:=i; -- если нашлось совпадение, считаем значение полученной продукции

v_prod_value := pkg_get_answer.fnc_get_value(c_sid, p_client_id, v_productuctno);

--dbms_output.put_line('Продукция = '||v_prod_value);

PRC_ADD_HISTORY(c_sid, c_user_id, p_client_id, v_productuctno, v_count, v_prod_value);

END IF;

END LOOP;

SELECT MIN(step) INTO x

FROM history

WHERE client_id = p_client_id

AND status = 'nostarted'

AND user_id = c_user_id;

IF x = 0 THEN

dbms_output.put_line('Работа с системой завершена. Проверьте результаты');

END IF;

TIME_END := SYSTIMESTAMP;

-- TIME_WORK := TIME_END - TIME_START;

dbms_output.put_line('Времы работы: '||(TIME_end-TIME_START));

END prc_go;

PROCEDURE PRC_ADD_HISTORY( p_sid history.sid%TYPE,

p_user history.user_id%TYPE,

p_client history.client_id%TYPE,

p_prod_id NUMBER,

p_position NUMBER,

p_prod_value history.prod_value%TYPE )

AS

c_table_name metadata.tablename%TYPE;

c_table_id NUMBER; -- номер таблицы, для которой вызвали процедуру

c_action decision.actions%TYPE; -- нераспарсенные строки

c_aftereffect decision.aftereffect%TYPE;

v_condition decision.conditions%TYPE;

c_condition NUMBER; --количество условий

c_step NUMBER :=0; -- номер последнего шага

v_step NUMBER :=0; -- номер шага, который запишем

v_query VARCHAR2(2000):=''; -- для динамического запроса

v_action NUMBER; -- число действий

v_aftereffect NUMBER; -- число последействий

v_table_id NUMBER;

v_sid NUMBER;

v_progress VARCHAR2(50);

v_in_str NUMBER;

v_substr_condition VARCHAR2(2000);

v_basis_name history.basis_name%TYPE := '';

m_action arr_type; -- массив рспарсенных действий

m_aftereffect arr_type;

--m_condition_num arr_type;

v_condition_num VARCHAR2(5);

v_product_part metadata.condition%TYPE;

v_reason_part metadata.condition%TYPE;

v_limit metadata.prod_limit%TYPE;

v_connection VARCHAR2(5);

-- чёрная рабочая сила

i NUMBER;

j NUMBER;

c NUMBER;

f BOOLEAN;

s VARCHAR2(2000);

v_reason VARCHAR2(2000) := '';

v_in_array NUMBER :=0;

c_sysname decision.sysname%TYPE;

c_domain decision.domain%TYPE;

c_subdomain decision.subdomain%TYPE;

c_min_condition_id NUMBER := 1;

BEGIN

SELECT DISTINCT table_id, tablename, sysname, domain, subdomain

INTO c_table_id, c_table_name, c_sysname, c_domain, c_subdomain

FROM metadata --ищем номер таблицы по sid

WHERE sid = p_sid;

SELECT COUNT(*) INTO c

FROM history --смотрим были ли уже в этой таблице и прошли ли её полностью

WHERE client_id = p_client

AND user_id = p_user

AND sid = p_sid

AND condition_id = 1

AND status = 'complete';

IF c>0 THEN

--здесь проверить список условий

raise_application_error(-20050, 'Таблица, для которой была вызвана процедура уже была использована.');

END IF;

SELECT NVL(MAX(step),0) INTO c_step

FROM history

WHERE user_id = p_user

AND client_id = p_client;

IF p_position = 1 THEN v_step := c_step + 1; --если это первая продукция для данной таблицы, то шаг=МАХ+1

ELSE v_step := c_step;

END IF; -- иначе шаг=МАХ

-- если в этой таблице не работали, или прошли её не полностью

IF c_step>0 THEN

v_query := 'UPDATE history SET status = ''complete'' WHERE user_id='||p_user||

' AND client_id='||p_client||

' AND step='||c_step;

EXECUTE IMMEDIATE V_QUERY ; COMMIT;

--dbms_output.put_line(v_query);

END IF;

SELECT basis_name INTO v_basis_name --смотрим базис, в котором рабоает клиент

FROM data_clients

WHERE client_id = p_client;

--порог

SELECT MAX(prod_limit) INTO v_limit

FROM metadata

WHERE sid = p_sid;

--формируем обоснование

SELECT COUNT(condition_id) INTO c_condition --находим количество условий и действий

FROM metadata

WHERE sid = p_sid;

SELECT conditions INTO v_condition --берём продукцтю

FROM decision

WHERE sid = p_sid

AND prod_id = p_prod_id;

FOR j IN 1..c_condition-1 LOOP

SELECT connection INTO v_connection --m_connection(i)

FROM metadata

WHERE sid = p_sid

AND condition_id = j;

SELECT regexp_substr(v_condition, '[^'||v_connection||']+', 1, 1),

INSTR(v_condition,v_connection)

INTO v_product_part, --m_product(j),

v_in_str

FROM dual; --режем исходную строку с комбинацией условий в один большой массив

SELECT condition INTO v_reason_part

FROM metadata

WHERE sid = p_sid

AND condition_id = j;

IF v_product_part = 'yes' THEN v_reason := v_reason || v_reason_part || ', ';

ELSIF v_product_part = 'no' THEN v_reason := v_reason || 'not ' || v_reason_part || ', ';

ELSIF v_product_part = '_' THEN v_reason := v_reason || 'no matter ' || v_reason_part || ', ';

END IF;

SELECT SUBSTR(v_condition,v_in_str+1,LENGTH(v_condition)) INTO v_substr_condition --вырезаем строку, начиная с этой позиции

FROM dual;

v_condition := v_substr_condition;

END LOOP;

SELECT condition INTO v_reason_part

FROM metadata

WHERE sid = p_sid

AND condition_id = c_condition;

IF v_substr_condition = 'yes' THEN v_reason := v_reason || v_reason_part;

ELSIF v_substr_condition = 'no' THEN v_reason := v_reason || 'not ' || v_reason_part;

ELSIF v_substr_condition = '_' THEN v_reason := v_reason || 'no matter ' || v_reason_part || ', ';

END IF;

IF p_prod_value < v_limit THEN --если продукция не проходит порог

v_reason := v_reason || ' (value = '||p_prod_value||'< lower limit = '||v_limit||')';

v_query := 'INSERT INTO history(sid, tablename, user_id, client_id, status, step, prod_id, prod_value, basis_name, condition_id, reason)

VALUES('||p_sid||', '''||c_table_name||''', '||p_user||', '||p_client||', ''abort'', '||v_step||', '||p_prod_id||', '||p_prod_value||', '''||v_basis_name||''', '||c_min_condition_id||', '''||v_reason||''')'; --m_condition_num(i)

EXECUTE IMMEDIATE v_query; COMMIT;

ELSE

v_reason := v_reason || ' (value = '||p_prod_value||'> lower limit = '||v_limit||')';

SELECT actions, aftereffect INTO c_action, c_aftereffect

FROM decision

WHERE sid = p_sid

AND prod_id = p_prod_id;

SELECT LENGTH(c_action)-LENGTH(REPLACE(c_action, '&')) INTO v_action FROM dual;

v_action := v_action + 1; --считаем количество действий в строке (кол-во разделителей+1)

FOR i IN 1..v_action LOOP

SELECT REGEXP_SUBSTR(c_action,'[^&]+',1,i) INTO m_action(i) --режем эту строку в массив

FROM dual;--(SELECT c_action FROM dual);

END LOOP;

IF c_aftereffect IS NULL THEN

FOR i IN 1..v_action LOOP --записываем список действий

v_query := 'INSERT INTO history (sid, tablename, user_id, client_id, action, aftereffect, status, step, prod_value, reason, basis_name)

VALUES('||p_sid||', '''||c_table_name||''', '||p_user||', '||p_client||', '''||m_action(i)||''', ''null'', ''end'', '||v_step||', '||p_prod_value||', '''||v_reason||''', '''||v_basis_name||''')';

EXECUTE IMMEDIATE v_query;

--dbms_output.put_line(v_query);

COMMIT;

END LOOP;

--проверяем, есть ли непройденные ветки

/* SELECT MIN(step) INTO x

FROM history

WHERE client_id = p_client

AND status = 'nostarted'

AND user_id = p_user;

IF x > 0 THEN

SELECT MIN(prod_id) INTO y

FROM history

WHERE client_id = p_client

AND status = 'nostarted'

AND user_id = p_user

AND step = x;

SELECT aftereffect INTO z

FROM history

WHERE client_id = p_client

AND status = 'nostarted'

AND user_id = p_user

AND step = x

AND prod_id = y;

v_query := 'UPDATE data_clients SET current_progress = '||SUBSTR(z,7,3)||' WHERE client_id='||p_client;

EXECUTE IMMEDIATE v_query;

COMMIT;

dbms_output.put_line('Работа с одной из веток завершена. Проверьте результаты');

ELSE */

--т.к. дошли до конца, ставим current_progress = 0

v_query := 'UPDATE data_clients SET current_progress = 0 WHERE client_id='||p_client;

EXECUTE IMMEDIATE v_query;

--dbms_output.put_line(v_query);

COMMIT;

dbms_output.put_line('Работа с веткой решений завершена.');--('Работа с системой завершена. Проверьте результаты');

--END IF;

-- Если последействие IS NOT NULL --

ELSE

SELECT MIN(condition_id) INTO c_min_condition_id

FROM data

WHERE sid = p_sid

AND client_id = p_client;

SELECT LENGTH(c_aftereffect)-LENGTH(REPLACE(c_aftereffect, '|')) INTO v_aftereffect FROM dual;

v_aftereffect := v_aftereffect +1; --считаем количество последействий (кол-во разделителей +1)

FOR i IN 1..v_aftereffect LOOP

--f := false;-- повторений не было

SELECT REGEXP_SUBSTR(c_aftereffect ,'[^|]+',1,i) INTO s--распарсиваем список последействий по разделителям

FROM dual;

--SELECT REGEXP_SUBSTR(s,'[^"]+',1,2) INTO v_tablename --берём название таблицы из кавычек

-- FROM dual;

SELECT DISTINCT table_id INTO v_table_id

FROM metadata --ищем номер таблицы по названию

WHERE UPPER(tablename) = UPPER((SELECT REGEXP_SUBSTR(s,'[^"]+',1,2) --берём название таблицы из кавычек

FROM dual))

AND sysname = c_sysname

AND domain = c_domain

AND subdomain = c_subdomain;

SELECT DISTINCT sid INTO v_sid

FROM metadata -- ищем sid по номеру

WHERE table_id = v_table_id

AND sysname = c_sysname

AND domain = c_domain

AND subdomain = c_subdomain;

-- !!!!!!!!!!!!!!!!

SELECT COUNT(*) INTO c FROM history --смотрим были ли уже в таблице, на которую хотим перейти

WHERE client_id = p_client

AND user_id = p_user

AND sid = v_sid

AND condition_id = 1

AND status = 'complete';

IF c = 0 THEN -- если нет, то запишем последействия

--IF v_in_array > 0 THEN -- если в массив уже что-то записали, то ищем повторения

-- FOR j IN 1..v_in_array LOOP

-- IF 'table_'||v_table_id||'_1' = m_aftereffect(j) THEN f := true; END IF; --нашли повторение

-- END LOOP;

--END IF;

--

--IF f = false THEN -- если повторений нет, то записываем новый элемент

v_in_array := v_in_array + 1;

SELECT NVL(REGEXP_SUBSTR(s,'[0-9]*$'),1) INTO v_condition_num--m_condition_num(v_in_array )

FROM dual; --(SELECT s FROM dual); --вытаскиваем номер условия, к которому нужно перейти

IF v_condition_num IS NULL THEN m_aftereffect(v_in_array):='table_'||v_table_id||'_1';

ELSE m_aftereffect(v_in_array):='table_'||v_table_id||'_'||v_condition_num;

END IF;

--END IF;

END IF;

END LOOP;

IF v_in_array = 0 THEN raise_application_error(-20050, 'Все таблицы из списка последействий уже пройдены.'); END IF;

v_aftereffect := v_in_array ;

IF v_aftereffect > v_action THEN --== дополняем массивы

FOR i IN v_action+1..v_aftereffect LOOP

m_action(i):='';

END LOOP;

c := v_aftereffect;

ELSE

FOR i IN v_aftereffect+1..v_action LOOP

m_aftereffect(i):='';

END LOOP;

c:=v_action;

END IF;

FOR i IN 1..c LOOP -- записываем следующие шаги

v_query := 'INSERT INTO history(sid, tablename, user_id, client_id, action, aftereffect, status, step, prod_id, prod_value, basis_name, condition_id, reason)

VALUES('||p_sid||', '''||c_table_name||''', '||p_user||', '||p_client||',

'''||m_action(i)||''', '''||m_aftereffect(i)||''',

''nostarted'', '||v_step||', '||p_prod_id||', '||p_prod_value||', '''||v_basis_name||''', '||c_min_condition_id||', '''||v_reason||''')'; --m_condition_num(i)

EXECUTE IMMEDIATE v_query; COMMIT;

--dbms_output.put_line(v_query);

END LOOP;

--== берём номер таблицы, на которую перешли, записываем в progress в client_id ==

v_progress := SUBSTR(m_aftereffect(1),7,3);

v_query := 'UPDATE data_clients SET current_progress ='''||v_progress||''' WHERE client_id='||p_client;

EXECUTE IMMEDIATE v_query; COMMIT;

--dbms_output.put_line(v_query);

END IF; -- close if aftereffect is not null

END IF; --close limit

END prc_add_history;

PROCEDURE PRC_TRANSLATE( p_sysname decision.sysname%TYPE,

p_domain decision.domain%TYPE,

p_subdomain decision.subdomain%TYPE,

p_table_id decision.table_id%TYPE )

AS

m_action arr_type; --массив действий

m_connection arr_type;

m_product arr_type;

c_sid NUMBER;

v_condition NUMBER; --чиcло условий

v_action NUMBER; --число действий

v_product NUMBER;

v_in_str NUMBER;

--для динамических запросов

q VARCHAR(2000);

q_execute VARCHAR(2000);

--чёрная рабочая сила

i NUMBER;

c NUMBER;

j NUMBER;

s decision.actions%TYPE;

str decision.actions%TYPE;

M_CONDITION DECISION.CONDITIONS%TYPE;

TIME_START TIMESTAMP;

time_end TIMESTAMP;

BEGIN

TIME_START := SYSTIMESTAMP;

SELECT DISTINCT sid INTO c_sid FROM metadata

WHERE sysname = p_sysname

AND domain = p_domain

AND subdomain = p_subdomain

AND table_id = p_table_id;

SELECT COUNT(condition_id),COUNT(action_id) INTO v_condition, v_action --находим количество условий и действий

FROM metadata

WHERE sid = c_sid;

FOR i IN 1..v_action LOOP --записываем названия условий в массив

SELECT action INTO m_action(i) FROM metadata

WHERE sid = c_sid

AND action_id = i;

END LOOP;

FOR i IN 1..v_condition LOOP --записываем логические операции в массив

SELECT connection INTO m_connection(i) FROM metadata

WHERE sid = c_sid

AND condition_id = i;

END LOOP;

SELECT COUNT(prod_id) INTO v_product --находим количество продукций

FROM decision

WHERE sid = c_sid;

FOR i IN 1..v_product LOOP

q:=q||', prod_'||i||' VARCHAR(30)';

END LOOP;

SELECT COUNT(table_name) INTO c FROM user_tables WHERE table_name='DECISION_'||p_table_id;

IF c=0 THEN

q_execute :='CREATE GLOBAL TEMPORARY TABLE decision_'||p_table_id||'(names varchar2(100)'||q||') ON COMMIT DELETE ROWS';

EXECUTE IMMEDIATE q_execute;

END IF;

FOR i IN 1..v_product LOOP --=== режем все продукции на элементы и записываем в один ольшой массив

SELECT conditions INTO m_condition

FROM decision

WHERE sid = c_sid

AND prod_id = i;

FOR j IN 1..v_condition LOOP

IF j <> v_condition THEN

SELECT regexp_substr(m_condition, '[^'||m_connection(j)||']+', 1, 1) INTO m_product((i-1)*v_condition+j)

FROM dual; -- выпезаем первое условие

SELECT INSTR(m_condition, m_connection(j)) INTO v_in_str

FROM dual; -- находим позицию первого соединения

SELECT SUBSTR(m_condition, v_in_str + 1, LENGTH(m_condition)) INTO s

FROM dual;

m_condition := s; -- вырезаем строку с этой позиции и обрабатываем дальше

ELSE m_product((i-1)*v_condition+j) := s;

END IF;

END LOOP;

END LOOP;

FOR i IN 1..v_condition LOOP --=== заполняем decision условиями

SELECT condition INTO m_condition

FROM metadata

WHERE sid = c_sid

AND condition_id = i;

q := '';

FOR j IN 1..v_product LOOP

SELECT DECODE(m_product((j-1)*v_condition+i),'yes','+','no','-','_','/','[/w0-9<>]*') INTO s

FROM (SELECT m_product((j-1)*v_condition+i) FROM dual); -- преобразуем ответы в символьный вид

q:=q||', '''||s||'''';

END LOOP;

q_execute:='INSERT INTO decision_'||p_table_id||' VALUES('''||m_condition||''''||q||')';

EXECUTE IMMEDIATE q_execute; -- заполняем таблицу условиями

END LOOP;

FOR i IN 1..v_action LOOP

q_execute:='INSERT INTO decision_'||p_table_id||'(names) VALUES('''||m_action(i)||''')';

EXECUTE IMMEDIATE q_execute; -- заполняем таблицу названиями действий

END LOOP;

FOR j IN 1..v_product LOOP

SELECT actions INTO str

FROM decision

WHERE sid = c_sid

AND prod_id = j;

FOR i IN 1..v_condition LOOP -- парсим строку действий в массив

IF i <> v_condition THEN

SELECT regexp_substr(str, '[^'||m_connection(i)||']+', 1, 1) INTO m_product(i)

FROM (SELECT str FROM dual);

SELECT INSTR(str, m_connection(i)) INTO v_in_str FROM (SELECT str FROM dual);

SELECT SUBSTR(str, v_in_str+1, LENGTH(str)) INTO s FROM (SELECT str FROM dual);

str := s;

ELSE m_product(i):=s;

END IF;

END LOOP;

FOR i IN 1..v_condition LOOP -- ставим крестики напротив необходмых действий

q_execute:='UPDATE decision_'||p_table_id||' SET prod_'||j||'=''x'' WHERE names='''||m_product(i)||'''';

EXECUTE IMMEDIATE q_execute;

END LOOP;

END LOOP;

TIME_END := SYSTIMESTAMP;

dbms_output.put_line('Времы работы: '||(TIME_END-TIME_START));

END prc_translate;

BEGIN

NULL;

END pkg_get_answer;

ПРИЛОЖЕНИЕ В

Интерфейс пользователя

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> // главная страница

<html xmlns="http://www.w3.org/1999/xhtml" >

<head>

<title>БЗ</title>

<link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon">

<link rel="stylesheet" href="style.css">

<link rel="stylesheet" href="accord.css">

<script type="text/javascript" src="jquery.tools.min.js" ></script>

<script type="text/javascript" src="main.js"></script>

</head>

<body>

<div id='header'>

<img class='home' src='images/robot.png' >

<div class='ithink'>IThink</div>

</div>

<div id='wrap'>

<div id="accordion">

<img src="images/i1.jpg" />

<div style="width:200px; display:block">

<h2>Work with knowledgebase </h2>

<a class='menu' id='logdb' href="#" rel="#login">Login</a>

</div>

<img src="images/i2.jpg" />

<div >

<h2>Knowledge base</h2>

<a class='menu' href="createdb.htm">Create</a>

</div>

<img src="images/i3.jpg" />

<div>

<h2>Getting started</h2>

<a class='menu' href="doc/usermanual.doc">User Manual</a>

<a class='menu' href="doc/adminmanual.doc">Admin Manual</a>

</div>

<img src="images/i4.jpg" />

<div >

<h2>Manual</h2>

<a class='menu' href="index1.htm">A production system</a>

<a class='menu' href="index2.htm">Decision table</a>

</div>

</div>

<div id="dept"></div>

<div class="overlay" id="login">

<a class="close"></a>

<form id="myform1">

<h2>Login form</h2><br>

<div class='styled-select'><select id='sp1' size="1" > </select></div><br>

<div class='styled-select'><select id='sp2' size="1" ></select></div><br>

<div class='styled-select'><select id='sp3' size="1" ></select></div><br>

<div>Login</div> <input type="text" name="name" pattern="[a-zA-Z ]{5,}" minlength="4" maxlength="30" id='log1' />*<br><br>

<div>Password</div> <input type="password" name="password" minlength="4" id='pas1'/>*<br><br>

<button class='submit' type="submit">Submit form</button>

<br><br> <a id='registr' class='menu'href='#' rel='#regis'>R e g i s t r a t i o n</a>

<A HREF="" id='mainref' ></A>

</form>

</div>

<div class="overlay" id="regis">

<a class="close"></a>

<form id="myform2">

<h2>Registration form</h2><br>

<div>Name</div> <input type="text" name="name" maxlength="30" id='name'/>*

<br><br>

<div class='inline'><div>Login </div><input type="text" name="name" pattern="[a-zA-Z0-9_]{5,}" minlength="4" maxlength="30" id='log2'/>*<br><br></div>

<div class='inline'><div>Password </div><input type="password" name="password" minlength="4" id='pas2'/>*<br><br></div>

<fieldset>

<div class='inline'>Home city </div> <input type="text" name="city" maxlength="30" id='city'/><br><br>

<div class='inline'>Home state </div><input type="text" name="state" maxlength="30" id='state'/><br><br>

<div class='inline'>Home street </div><input type="text" name="street" maxlength="30" id='street'/>

</fieldset>

<br><br><br>

<button class='submit' type="submit">Submit</button>

</form>

</div>

</div>

<div id='footer'>footer</div>

</body>

<!--скрипт для главной страницы-->

$(function() {

$("#accordion").tabs("#accordion div", { //Инициализация аккордиона

tabs: 'img',

effect: 'horizontal'

});

//$(":date").dateinput({lang: 'fr',});

$('#sp2').parent().css('display', 'none'); //Скрываем 2-ой и 3-ий списки в форме аутентификации

$('#sp3').parent().css('display', 'none');

$("#registr").overlay({ // Инициализация регистрационной формы

onBeforeLoad: function() {

// $("#myform1").validator().destroy();

// $("#myform2").validator();

$("#logdb").overlay().close();

$('#log1').val("");

$('#pas1').val("");

},

mask: { color: '#fff',

loadSpeed: 200,

opacity: 0.65

},

});

$("#myform2").submit(function(e) { // Кнопка submit в регистрационной форме

var city = $('#city').val();

var state = $('#state').val();

var street = $('#street').val();

var log = $('#log2').val();

var name = $('#name').val();

var pas = $('#pas2').val();

//var sysname=$('#sp1').val();

//alert(sysname);

if ((log!="")&&(pas!="")) {

$("#registr").overlay().close();

$.ajax({ type:'GET',

url:'index2.php',

data: "col=insert into data_users (user_id,home_city,home_state,home_street,login,name,password,sysname,domain,subdomain) "

+"values (data_us_seq.nextval,'"+city+"','"+state+"','"+street+"','"+log+"','"+name+"','"+pas

+"','Medicine','Diagnostics','Skin')",

timeout: 3000,

success: function(data){

alert('User is added!');

},

});

}

return e.preventDefault();

});

$("#myform1").submit(function(e) { // Кнопка submit в аутентификационной форме

var log = $('#log1').val();

var pas = $('#pas1').val();

var sysname = $('#sp1').val();

var domain = $('#sp2').val();

var subdomain = $('#sp3').val();

//alert("("+log+") ("+pas+")");

if ((log!="")&(pas!=""))

{

$.ajax({ type:'GET',

url:'index1.php',

data: "tag=a&col=select user_id from data_users "+

"where UPPER(sysname)=UPPER('"+sysname+"') and UPPER(domain)=UPPER('"+domain+"') "+

"and UPPER(subdomain)=UPPER('"+subdomain+"') and UPPER(login)=UPPER('"+log+"') and password='"+pas+"'",

timeout: 3000,

async: false,

success: function(data){

//alert(data);

//if (data != "")

// {

$("#logdb").overlay().close();

//alert('Welcome!');

document.location.href ='patients.htm?Name='+sysname+'&ID='+data+'&Domain='+domain+'&Subdomain='+subdomain;

// }

//else { alert('Неверный логин/пароль'); }

$('#log1').val("");

$('#pas1').val("");

},

});

}

return e.preventDefault();

});

$("#logdb").overlay({ // Инициализация аутентификационной формы

onBeforeLoad: function() {

//$("#myform1").validator();

//$("#myform1").validator().submit(function(e){

// alert(e.html());

//});

/*$("#myform1").data("validator").onSuccess(function(e, els) {

//alert(els.html());

// we don't want to submit the form. just show events.

return true;

});*/

$.ajax({

type:'GET',

url:'index1.php',

data: 'tag=option&col=select distinct sysname from decision where LENGTH(sysname)=9',

timeout: 3000,

success: function(data){

//alert(data);

$('#sp1').html("<option value='Please fix this value'>Choose Knowledge base</option>"

+"<option>"+data+"</option>");

},

});

},

});

$('#sp1').change(function() { // Выбор 1-ого списка

$('#sp2').parent().css('display', 'block');

$.ajax({

type:'GET',

url:'index1.php',

data: "tag=option&col=select distinct domain from decision where sysname='"+$('#sp1 option:selected').text()+"'",

timeout: 3000,

success: function(data){

$('#sp2').html("<option value='Please fix this value'> Choose Domain </option>"+"<option>"+data+"</option>");

},

});

});

$('#sp2').change(function() { // Выбор 2-ого списка

$('#sp3').parent().css('display', 'block');

$.ajax({

type:'GET',

url:'index1.php',

data: "tag=option&col=select distinct subdomain from decision where sysname='"+

$('#sp1 option:selected').text()+"' and domain='"+

$('#sp2 option:selected').text()+"'",

timeout: 3000,

success: function(data){

$('#sp3').html("<option value='Please fix this value'>Choose Subdomain </option>"+"<option>"+data+"</option>");

},

});

});

$("#myform1").bind("onFail", function(e, errors) { // Красный кант

// we are only doing stuff when the form is submitted

if (e.originalEvent.type == 'submit') {

// loop through Error objects and add the border color

$.each(errors, function() {

var input = this.input;

input.css({borderColor: 'red'}).focus(function() {

input.css({borderColor: '#444'});

});

});

}

});

$.tools.validator.fn("[minlength]", function(input, value) {

var min = input.attr("minlength");

return value.length >= min ? true : {

en: "Please provide at least " +min+ " character" + (min > 1 ? "s" : ""),

};

});

$('.close').click(function(){}); // Кнопка "Закрыть"

});

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


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

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

    курсовая работа [1,8 M], добавлен 18.07.2014

  • Концептуальная модель базы данных "Бюро по трудоустройству". Разработка информационного и программного обеспечения объектов автоматизации. Реализация базы данных в СУБД MsAccess. Запросы к базе данных. Таблицы, отчеты и макросы. Интерфейс пользователя.

    курсовая работа [5,2 M], добавлен 30.05.2016

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

    курсовая работа [955,8 K], добавлен 10.10.2012

  • Модель, отражающая логические взаимосвязи между элементами данных. Таблицы, запросы, отчеты и экранные формы в Microsoft office Access 2007. Проверка корректности данных при вводе. Доступ к данным в связанных таблицах с помощью подчиненных форм.

    курсовая работа [1,6 M], добавлен 06.06.2013

  • Использование информационных технологий управления, поддержки и принятия решений, экспертных систем и обработки данных. Автоматизация бухгалтерии на примере ООО "Уралконфи": универсальная бухгалтерская программа "1С: Бухгалтерия" и ее основные функции.

    курсовая работа [1,9 M], добавлен 26.03.2012

  • Обслуживание двух встречных потоков информации. Структура информационных систем. Разработка структуры базы данных. Режимы работы с базами данных. Четыре основных компонента системы поддержки принятия решений. Выбор системы управления баз данных.

    курсовая работа [772,0 K], добавлен 21.04.2016

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

    реферат [1,3 M], добавлен 25.03.2013

  • Человеко-машинные комплексы, специально предназначенные для принятия решений. Процесс принятия решений и его этапы. Методы поиска новых вариантов решений: дерево решений, морфологические таблицы, конференции идей. Принцип математической оценки тенденций.

    курсовая работа [272,1 K], добавлен 30.07.2009

  • Краткие сведения о системах принятия решения в режиме показа формул и в режиме пользователя. Принципы решения задач оптимизации. Построение математической модели. Диаграмма "Оптимизация плана перевозок". Создание таблицы БД в Access: база данных, запросы.

    курсовая работа [482,3 K], добавлен 12.08.2012

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

    реферат [115,8 K], добавлен 19.12.2011

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