Таблицы принятия решений в СУБД с табличной моделью данных
Универсальная модель данных. Использование функций пакета. Нечёткая логика в таблицах принятия решений. Динамические 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