Автоматизована інформаційна система "Перевірки фірм"

 

Міністерство освіти і науки України

Черкаський державний технологічний університет

Кафедра програмного забезпечення автоматизованих систем












КУРСОВА РОБОТА

з курсу

«Конструювання програмного забезпечення»

на тему:

Автоматизована інформаційна система «Перевірки фірм»











Черкаси 2013

Зміст


Завдання

Теоретичні відомості..Servlet

Лістинг програми

Скрипти таблиць бази даних

Інструкція користувача

Висновок


Завдання


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

Необхідно розробити web-додаток який здійснює наступну обробку даних:

представлення перевірок які відбувалися впродовж вказаного діапазону часу (дата початку - дата закінчення) для вказаної фірми;

перегляд результатів перевірки у вигляді:

працівники організації, що перевіряє;

знайдені порушення.

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

за вказаний період ефективність роботи працівників які перевіряють, у вигляді кількості знайдених ним порушень та помилок.

Теоретичні відомості


Огляд обєктно-реляційних перетворень (O/RM - Object-relational mapping). O/RM використовується для перетворення обєктів мов обєктно-орієнтованого програмування (таких, як Java, C++, C#) в реляційні структури баз даних і навпаки. O/RM-продукти надають мовам програмування обєктний інтерфейс доступу до РБД, такий, як інтерфейс доступу до ООБД. Їх використання робить код меншим, полегшує програмування за рахунок "прозорого зберігання" (transparent persistence) і збільшує продуктивність за рахунок кешування в порівнянні з стандартними інтерфейсами доступу до баз даних, таких, як JDBC чи ODBC. (З точки зору продуктивності пряме використання SQL дає більшу продуктивність при використані складних запитів, в той час як O/RM - при використанні простих).

Обєктно-реляційні системи вирішують проблему обєктно-реляційних перетворень шляхом надання бібліотек класів, які здатні робити перетворення (mapping) автоматично. Отримуючи список таблиць в базі даних і обєктів в програмі, вони автоматично перетворюють (маплять) запити з однієї форми в іншу. Наприклад, звернення до обєкта спричиняє неявне формування і виконання відповідного запиту до бази даних. Таким чином, система бачиться як постійне сховище (хранилище, store) обєктів - програміст створює обєкти і працює з ними, і інформація автоматично попадає в БД. Хоча іноді доводиться відступати від даного стилю, наприклад, з міркувань ефективності.

Існують як безкоштовні, так і комерційні O/RM; часто програмісти створюють власні такого роду системи в рамках своїх проектів.системи для Java:

·Java Persistence API (частина J2EE)

·Speedo <#"justify">В найпростішому випадку розробники сприймають JavaBean'и як прості Java-класи, що відповідають певним правилам іменування.

Hibernate

є легковісним O/RM сервісом для Java. Легковісний означає, що він спроектований як нескладний для вивчення і використання, а також висуває невисокі вимоги до системних ресурсів в порівнянні з деякими іншими системами.може використовувати XML-документи (другий спосіб - використання анотаційних класів) для відображення звязку між таблицями БД і Java-класами, які проектуються у вигляді JavaBeans. Відповідності повинні бути описані всередині тега <hibernate-mapping>. Рядок 6 показує, що мапиться таблиця PERSON в клас readtable.Person. Доцільно робити мапінг для одного класу в одному xml-файлі і розміщувати xml-файл в тій же папці, що і файл класу.

Далі описується звязок полів таблиці БД з властивостями класу Java. В hibernate первинний ключ повинен називатися id. В даному випадку так позначатиметься поле ID. Клас генератора "increment" (рядок 8) використовується зокрема для баз даних MySQL.

Далі йде опис властивостей, що відповідають іншим полям таблиці. Якщо назва поля таблиці БД та поля JavaBean класу співпадають, то задається тільки властивість name (рядки 10, 11), в іншому випадку потрібно задавати name - імя поля JavaBean класу та column - імя поля таблиці БД).

Servlet


Сервлет - Java-обєкт, що працює всередині спеціальної програми сервлет-контейнера <#"justify">1.Клієнт (наприклад, Web-броузер), при виконанні користувачем певних дій на web-сторінці, надсилає HTTP запит на web-сервер.

2.Web-сервер отримує запит і, визначивши, що запит іде до сервлета, передає його контейнеру сервлетів. Контейнер сервлетів може виконуватись в тому ж самому процесі, що і web-сервер, в окремому процесі на тій же системі, що і web-сервер, або взагалі на іншій системі.

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

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

.Після того, як сервлет припиняє обробку запиту, контейнер сервлетів перевіряє коректність відправки відповіді та повертає управління до web-сервера, який, в свою чергу, пересилає відповідь клієнту.

JSP


Технологія Java Server Pages (JSP) є складовою частиною єдиної технології створення програм на основі технології J2EE з використанням web-інтерфейсу. JSP - це альтернативна технології Java Servlet методика розробки програм, що динамічно генерують відповідь на ті або інші запити клієнта. Перш ніж JSP документ буде використаний, спеціальна процедура перетворить його у відповідний сервлет. У свою чергу, сервлет, як правило, пишеться на мові Java і реалізує певний інтерфейс. Далі, сервлет також не є самостійною програмою і функціонує, тільки будучи поміщеним у відповідний сервлет-контейнер. Сервлет-контейнер забезпечує обмін даними між сервлетом і клієнтами, бере на себе виконання таких функцій, як створення програмного середовища для функціонування сервлета, ідентифікацію і авторизацію клієнтів, організацію сесії для кожного з них тощо.

Сервлети, одержані після перетворення JSP сторінок, функціонують в рамках стандартного контейнера сервлетів і використовують суворо регламентований інтерфейс. Тому ця технологія не залежить від яких-небудь особливостей тієї або іншої платформи. З іншого боку, оскільки JSP технології може будуватися на базі мови Java, що інтерпретується, то це дає гарантію портованості програм, побудованих на технології JSP, на будь-яку платформу, де можна встановити віртуальну Java машину.

На даний момент реалізована трансляція JSP сторінки в сервлет, програмний код якого пишеться на мові Java. Проте автори специфікації Java Server Pages залишають можливість реалізації JSP і на інших мовах програмування.

Залежність між сервлетами програми і адресами URL на сервері задається в дескрипторі розміщення (спеціальному файлі web.xml). Відносно технології створення сервлетів, важливо відзначити той факт, що програмний код, що використовується для написання сервлетів, не завжди зручний для динамічної генерації текстових документів у відповідь на запит клієнта.

Лістинг програми

сервлет програмування web java

Контролер FirstController.java

package org.springproject.controller;

import java.text.DateFormat;java.text.ParseException;java.text.SimpleDateFormat;java.util.ArrayList;java.util.Date;java.util.HashMap;java.util.List;javax.servlet.http.HttpSession;org.springframework.beans.factory.annotation.Autowired;org.springframework.stereotype.Controller;org.springframework.web.bind.annotation.RequestMapping;org.springframework.web.bind.annotation.RequestParam;org.springframework.web.servlet.ModelAndView;org.springproject.dao.SpringProjectDAO;org.springproject.entity.Firma;org.springproject.entity.People;org.springproject.entity.PerevirkaPeople;org.springproject.entity.Perevirku;org.springproject.entity.Violation;org.springproject.entity.ViolationType;org.springproject.service.Service;

@Controllerclass FirstController {

@Autowireddao;

@AutowiredhttpSession;

@RequestMapping("/start.do")ModelAndView start(){mav=new ModelAndView("start");<Firma> firma = dao.readFirma();.out.println("firma.size="+firma.size());.addObject("firma",firma);violationEmployeeView=false;.setAttribute("violationEmployeeView", violationEmployeeView);mav;

}

@RequestMapping("/addPeople.do")ModelAndView addPeople(){addPeopleFormView=(Boolean)httpSession.getAttribute("addPeopleFormView");((addPeopleFormView == null) || (addPeopleFormView==false))=true;addPeopleFormView=false;.setAttribute("addPeopleFormView", addPeopleFormView);auditId=(String)httpSession.getAttribute("auditId");firmaId=(String)httpSession.getAttribute("firmaId");resultAudit(auditId, firmaId);

}

@RequestMapping("/audits.do")ModelAndView audits(@RequestParam String firm, @RequestParam String begindate, @RequestParam String enddate){mav=new ModelAndView("start");<Firma> firms = dao.readFirma();firma = dao.readFirma(Integer.parseInt(firm));.setAttribute("nameFirma", firma.getNazva());beginDate=null, endDate=null;(begindate=="" || enddate==""){.out.println("виберіть дату");

} else {{= new SimpleDateFormat("yyyy-MM-dd").parse(begindate);= new SimpleDateFormat("yyyy-MM-dd").parse(enddate);

} catch (ParseException e) {

// TODO Auto-generated catch block.printStackTrace();

}

}.out.println("db-"+beginDate);.out.println("db-"+endDate);dateFormat = new SimpleDateFormat("dd.MM.yyyy");beginDateForm = dateFormat.format(beginDate);endDateForm = dateFormat.format(endDate);.addObject("beginDateForm", beginDateForm);.addObject("endDateForm", endDateForm);<Perevirku> perevirku = dao.readPerevirku();(beginDate!=null && endDate!=null && firm!="all"){= dao.readPerevirku(Integer.parseInt(firm), beginDate, endDate);

} else {(firm.equals("all")){= dao.readPerevirku();

} else {= dao.readPerevirkuForFirm(Integer.parseInt(firm));

}

}.addObject("perevirku",perevirku);.addObject("firma",firms);.setAttribute("violationEmployeeFirma", firm);.setAttribute("dateBeginDate", begindate);.setAttribute("dateEndDate", enddate);violationEmployeeView=false;.setAttribute("violationEmployeeView", violationEmployeeView);mav;

}

@RequestMapping("/violationEmploee.do")ModelAndView violationEmployee(){violationEmployeeFirmId = (String)httpSession.getAttribute("violationEmployeeFirma");mav=new ModelAndView("start");(!violationEmployeeFirmId.equals("all")){violationEmployeeFirm = dao.readViolationEmploee(Integer.parseInt(violationEmployeeFirmId));<Object[]> countError = (List<Object[]>)violationEmployeeFirm.get(0);<Object[]> countViolation = (List<Object[]>)violationEmployeeFirm.get(1);<Object[]> resultCountViolation = new ArrayList<Object[]>();<String, Long> errorsMap = new HashMap<String, Long>();<String, Long> violationsMap = new HashMap<String, Long>();service = new Service();= service.listToMap(countError);= service.listToMap(countViolation);= service.mapToList(errorsMap, violationsMap);<Perevirku> perevirku = dao.readPerevirkuForFirm(Integer.parseInt(violationEmployeeFirmId));.addObject("violationEmployeeFirm", resultCountViolation);//violationEmployeeFirm.addObject("perevirku",perevirku);

}violationEmployeeView=(Boolean)httpSession.getAttribute("violationEmployeeView");(violationEmployeeView==null || violationEmployeeView==false)= true;= false;

.setAttribute("violationEmployeeView", violationEmployeeView);<Firma> firma = dao.readFirma();.addObject("firma",firma);mav;

}

@RequestMapping("/result.do")ModelAndView resultAudit(@RequestParam String audit, @RequestParam String firma){mav=new ModelAndView("result");<People> people = dao.readPeople();<PerevirkaPeople>auditPeople = dao.readPerevirkaPeople(Integer.parseInt(audit));<Violation>violations = dao.readViolations(Integer.parseInt(audit));thisAudits = dao.readPerevirku(Integer.parseInt(audit));<ViolationType> typeViolations = dao.readViolationTypes();.setAttribute("audit", thisAudits);.setAttribute("auditId", audit);.setAttribute("firmaId", firma);.setAttribute("violations", violations);.setAttribute("auditPeole", auditPeople);.setAttribute("people", people);.addObject("typeViolations", typeViolations);//typeViolation.addObject("people", people);.addObject("auditpeople", auditPeople);.addObject("violation", violations);mav;

}

@RequestMapping("/people.do")ModelAndView employeeAudit(){mav = new ModelAndView("people");mav;

}

@RequestMapping("/addPeopleAudit.do")ModelAndView addPeoleAudit(@RequestParam String people, @RequestParam String dateBegin, @RequestParam String dateEnd){mav=new ModelAndView("result");peopleObj = dao.readPeople(Integer.parseInt(people));<Perevirku> audit = dao.readPerevirku();peopleAudit = new PerevirkaPeople();.setPeople(peopleObj);beginDate=null, endDate=null;(dateBegin=="" || dateEnd==""){.out.println("виберіть дату");

} else {{= new SimpleDateFormat("yyyy-MM-dd").parse(dateBegin);= new SimpleDateFormat("yyyy-MM-dd").parse(dateEnd);

} catch (ParseException e) {.printStackTrace();

}

}(beginDate!=null && endDate!=null){.setDateBegin(beginDate);.setDateEnd(endDate);

}thisAudit = (Perevirku)httpSession.getAttribute("audit");.setPerevirka(thisAudit);auditId=(String)httpSession.getAttribute("auditId");firmaId=(String)httpSession.getAttribute("firmaId");.storePeopleAudit(peopleAudit);resultAudit(auditId, firmaId);

}

@RequestMapping("/peopleViolation.do")ModelAndView peopleViolation(@RequestParam String begindate, @RequestParam String enddate){mav = new ModelAndView("people");beginDate=null, endDate=null;{= new SimpleDateFormat("yyyy-MM-dd").parse(begindate);= new SimpleDateFormat("yyyy-MM-dd").parse(enddate);

} catch (ParseException e) {

// TODO Auto-generated catch block.printStackTrace();

}dateFormat = new SimpleDateFormat("dd.MM.yyyy");beginDateForm = dateFormat.format(beginDate);endDateForm = dateFormat.format(endDate);.addObject("beginDateForm", beginDateForm);.addObject("endDateForm", endDateForm);viplationPeople = dao.readViolationPeople(beginDate, endDate);<Object[]> countViolation = (List<Object[]>)viplationPeople.get(0);<Object[]> countError = (List<Object[]>)viplationPeople.get(1);<Object[]> resultCountViolation = new ArrayList<Object[]>();<String, Long> errorsMap = new HashMap<String, Long>();<String, Long> violationsMap = new HashMap<String, Long>();service = new Service();= service.listToMap(countError);= service.listToMap(countViolation);= service.mapToList(errorsMap, violationsMap);.addObject("violationPeople", resultCountViolation);mav;

}

}.javaorg.springproject.dao;java.util.ArrayList;java.util.Date;java.util.List;org.hibernate.SessionFactory;org.springframework.beans.factory.annotation.Autowired;org.springframework.stereotype.Repository;org.springframework.transaction.annotation.Transactional;org.springproject.entity.Employees;org.springproject.entity.Firma;org.springproject.entity.People;org.springproject.entity.PerevirkaPeople;org.springproject.entity.Perevirku;org.springproject.entity.TupPerevirku;org.springproject.entity.Violation;org.springproject.entity.ViolationType;

@Repositoryclass SpringProjectDAOImpl implements SpringProjectDAO{

@AutowiredsessionFactory;

@Transactional(readOnly=true)List<Firma> readFirma() {sessionFactory.getCurrentSession().createQuery("from Firma").list();

}

@Transactional(readOnly=true)Firma readFirma(Integer id) {(Firma)sessionFactory.getCurrentSession().createQuery("from Firma f where f.id=:id").setParameter("id", id).list().get(0);

}

@Transactional(readOnly=true)List<Employees> readEmployees(Integer firma){sessionFactory.getCurrentSession().createQuery("from Employees emp where emp.firma.id = :firma").setParameter("firma", firma)

.list();

}

@Transactional(readOnly=true)List<Employees> readEmployees(){sessionFactory.getCurrentSession().createQuery("from Employees").list();

}

@Transactional(readOnly=true)List<TupPerevirku> readTupPerevirku(){sessionFactory.getCurrentSession().createQuery("from TupPerevirku").list();

}

@Transactional(readOnly=true)List<Perevirku> readPerevirku(){sessionFactory.getCurrentSession().createQuery("from Perevirku").list();

}

@Transactional(readOnly=true)Perevirku readPerevirku(Integer id){(Perevirku)sessionFactory.getCurrentSession().load(Perevirku.class, id);

}

@Transactional(readOnly=true)List<Perevirku> readPerevirkuForFirm(Integer firma){sessionFactory.getCurrentSession().createQuery("from Perevirku p where p.firma.id=:firma")

.setParameter("firma", firma).list();

}

@Transactional(readOnly=true)List<Perevirku> readPerevirku(Integer firma, Date beginDate, Date endDate){sessionFactory.getCurrentSession().createQuery("from Perevirku p where p.firma.id=:firma and p.dateBegin>=:date1 and p.dateEnd<=:date2")

.setParameter("firma", firma)

.setParameter("date1", beginDate)

.setParameter("date2", endDate)

.list();

}

@Transactional(readOnly=true)List<People> readPeople(){sessionFactory.getCurrentSession().createQuery("from People").list();

}

@Transactional(readOnly=true)People readPeople(Integer id){(People)sessionFactory.getCurrentSession().load(People.class, id);

}

@Transactional(readOnly=true)List<PerevirkaPeople> readPerevirkaPeople(Integer audit){sessionFactory.getCurrentSession().createQuery("from PerevirkaPeople where perevirka.id=:audit")

.setParameter("audit", audit).list();

}

@Transactional(readOnly=true)List<Violation> readViolations(Integer audit){sessionFactory.getCurrentSession().createQuery("from Violation where perevirka.id=:audit").setParameter("audit", audit).list();

}

@Transactional(readOnly=true)List readViolationEmploee(Integer firma){resultViolations = new ArrayList();<Object[]> selectCountError = sessionFactory.getCurrentSession().createQuery("Select count(*) AS c, viol.employee.pib from Violation viol where viol.employee.firma.id=:firma and violationType.nazva='помилки' GROUP BY viol.employee.pib").setParameter("firma", firma)

.list();<Object[]> selectCountViolation = sessionFactory.getCurrentSession().createQuery("Select count(*) AS c, viol.employee.pib from Violation viol where viol.employee.firma.id=:firma and violationType.nazva='порушення' GROUP BY viol.employee.pib")

.setParameter("firma", firma)

.list();.add(selectCountError);.add(selectCountViolation);resultViolations;

}

@Transactional(readOnly=true)List<Object[]> readViolationPeople(Date beginDate, Date endDate){resultViolations = new ArrayList();<Object[]> selectCountViolation = sessionFactory.getCurrentSession().createQuery("Select count(*), viol.people.surname ||' '|| viol.people.name ||' '|| viol.people.patronimic from Violation viol where dateViolation>=:beginDate and dateViolation<=:endDate and violationType.nazva='порушення' GROUP BY viol.people.name")

.setParameter("beginDate", beginDate)

.setParameter("endDate", endDate)

.list();<Object[]> selectCountError=sessionFactory.getCurrentSession().createQuery("Select count(*), viol.people.surname ||' '|| viol.people.name ||' '|| viol.people.patronimic from Violation viol where dateViolation>:beginDate and dateViolation<:endDate and violationType.nazva='помилки' GROUP BY viol.people.name")

.setParameter("beginDate", beginDate)

.setParameter("endDate", endDate)

.list();.add(selectCountViolation);.add(selectCountError);resultViolations;

}

@Transactional(readOnly=true)List<ViolationType> readViolationTypes(){sessionFactory.getCurrentSession().createQuery("from ViolationType").list();

}

@Transactional(readOnly=false)void savePerevirka(Perevirku audit){.getCurrentSession().save(audit);

}

@Transactional(readOnly=false)void storePeopleAudit(PerevirkaPeople peopleAudit) {.getCurrentSession().merge(peopleAudit);

}

@Transactional(readOnly=false)void storeViolation(Violation violation) {.getCurrentSession().merge(violation);

}

}

Представлення Start.jsp. Перегляд перевірок фірм.

<%@ taglib prefix="c" uri="#"justify"><%@ taglib prefix="fmt" uri="#"justify"><%@ page language="java" contentType="text/html; charset=utf-8"="utf-8"%>

<%@ include file="header.jsp" %>

<div id="bottom_heder">

<h2>Виконання перевірок</h2>

<p id="actDescription">Ми виконуємо різнотипні перевірки фірм</p>

<img src="img/logo.png" alt="Логотип перевірки" />

</div><!-- end bottom_heder -->

</div><!-- end heder -->

<div id="conteiner">

<div id="content">

<form action="audits.do">

<table>

<tr>

<td>Період з:&nbsp</td>

<td><input type="date" name="begindate" value="2013-04-01"/></td>

<td>&nbsp по: &nbsp</td>

<td><input type="date" name="enddate" value="2013-05-01"/></td>

<td>&nbsp для фірми: &nbsp</td>

<td>

<select name="firm">

<c:forEach var="firm" items="${firma}">

<option value="${firm.id}">${firm.nazva}</option>

</c:forEach>

</select>

</td>

<td><input type="submit" value="Вибір"></td>

</tr>

</table>

<br/>

<p>Для фірми: <b>${nameFirma}</b></p>

<p>За період з <b>${beginDateForm}</b> по <b>${endDateForm}</b> знайдено:</p>

<br/>

</form>

<table>

<caption>Результати виконання:</caption>

<tr>

<td>№</td>

<td>Тип</td>

<td>Фірма</td>

<td>початок</td>

<td>закінчення</td>

<td>результат</td>

</tr>

<c:forEach var="audits" items="${perevirku}">

<tr>

<td>${audits.id}</td>

<td>${audits.tup.tupPerevirku}</td>

<td>${audits.firma.nazva}</td>

<td><fmt:formatDate value="${audits.dateBegin}" pattern="dd.MM.yyyy" /></td>

<td><fmt:formatDate value="${audits.dateEnd}" pattern="dd.MM.yyyy" /></td>

<td><a href="result.do?audit=${audits.id}&firma=${audits.firma.id}">результат</a></td>

</tr>

</c:forEach>

</table>

<c:if test="${violationEmployeeView}">

<table>

<caption>Порушення працівників:</caption>

<tr>

<td rowspan="2">П.І.Б. працівника фірми</td>

<td colspan="2">зроблено</td>

</tr>

<tr>

<td>помилок</td>

<td>порушень</td>

</tr>

<c:forEach var="violatEmploee" items="${violationEmployeeFirm}">

<tr>

<td>${violatEmploee[0]}</td>

<td>${violatEmploee[1]}</td>

<td>${violatEmploee[2]}</td>

</tr>

</c:forEach>

</table>

</c:if>

</div><!-- end content -->

<div id="sidebar">

<div id="menu">

<ul>

<li><a href="addAudit.do">Додати</a></li>

<li><a href="violationEmploee.do">Порушення працівників</a></li>

</ul>

</div><!-- end menu -->

</div><!-- end sidebar -->

<div>

<div id="footer">

<p>Copyright 2013 - Перевірки</p>

</div><!-- end footer -->

</div><!-- end conteiner -->

</div><!-- end wrap -->

</body>

</html>

Представлення Result.jsp. Результати виконання перевірок

<%@ taglib prefix="form" uri="#"justify"><%@ taglib prefix="c" uri="#"justify"><%@ taglib prefix="fmt" uri="#"justify"><%@ page language="java" contentType="text/html; charset=utf-8"="utf-8"%>

<%@ include file="header.jsp" %>

<div id="bottom_heder">

<h2>Результати виконання перевірок</h2>

<p id="actDescription">Опис знайдених порушень</p>

<img src="img/logo.png" alt="Логотип перевірки" />

</div><!-- end bottom_heder -->

</div><!-- end heder -->

<div id="conteiner">

<div id="content">

<c:if test="${addPeopleFormView}">

<%@ include file="addPeople.jsp" %>

</c:if>

<br/>

<table>

<caption>Перевіряючі</caption>

<tr>

<td>Прізвище</td>

<td>Імя</td>

<td>Посада</td>

<td>початок</td>

<td>закінчення</td>

</tr>

<c:forEach var="auditp" items="${auditpeople}">

<tr>

<td>${auditp.people.name}</td>

<td>${auditp.people.surname}</td>

<td>${auditp.people.posada}</td>

<td><fmt:formatDate value="${auditp.dateBegin}" pattern="dd.MM.yyyy" /></td>

<td><fmt:formatDate value="${auditp.dateEnd}" pattern="dd.MM.yyyy" /></td>

</tr>

</c:forEach>

</table>

<br/>

<c:if test="${addViolationFormView}">

<%@ include file="addViolation.jsp" %>

</c:if>

<br/>

<table>

<caption>Знайдені порушення</caption>

<tr>

<td>Тип</td>

<td>Перевіряючий</td>

<td>Співробітник</td>

<td>Дата</td>

<td>Опис</td>

</tr>

<c:forEach var="violat" items="${violations}">

<tr>

<td>${violat.violationType.nazva}</td>

<td>${violat.people.surname} ${violat.people.name} ${violat.people.patronimic}</td>

<td>${violat.employee.pib}</td>

<td><fmt:formatDate value="${violat.dateViolation}" pattern="dd.MM.yyyy" /></td>

<td>${violat.description}</td>

</tr>

</c:forEach>

</table>

</div><!-- end content -->

<div id="sidebar">

<div id="menu">

<ul>

<li><a href="addPeople.do">Додати перевіряючого</a></li>

<li><a href="addViolation.do">Додати порушення</a></li>

</ul>

</div><!-- end menu -->

</div><!-- end sidebar -->

<div>

<div id="footer">

<p>Copyright 2013 - Перевірки</p>

</div><!-- end footer -->

</div><!-- end conteiner -->

</div><!-- end wrap -->

</body>

</html>

Представлення AddAudit.jsp. Додавання перевірки

<%@ taglib prefix="form" uri="#"justify"><%@ taglib prefix="c" uri="#"justify"><%@ taglib prefix="fmt" uri="#"justify"><%@ page language="java" contentType="text/html; charset=utf-8"="utf-8"%>

<%@ include file="header.jsp" %>

<div id="bottom_heder">

<h2>Додавання нової перевірки</h2>

<p id="actDescription">Заповніть поля для додавання перевірки</p>

<img src="img/logo.png" alt="Логотип перевірки" />

</div><!-- end bottom_heder -->

</div><!-- end heder -->

<div id="conteiner">

<div id="content">

<form:form modelAttribute="audit" method="POST">

<table id="audits">

<tr>

<td>Фірма: </td>

<td><form:select path="firma" items="${firms}"/></td>

</tr>

<tr>

<td>Тип перевірки: </td>

<td> <form:select path="tup" items="${types}"/></td>

</tr>

<tr>

<td>Дата початку: </td>

<td><form:input path="dateBegin" size="10" maxlength="10"/> (yyyy-mm-dd)</td>

</tr>

<tr>

<td>Дата закінчення: </td>>

<form:input path="dateEnd" size="10" maxlength="10"/> (yyyy-mm-dd)

</td>

</tr>

<tr>

<td></td>

<td><input type="submit" value="Додати"/></td>

</tr>

</table>

</form:form>

</div><!-- end content -->

<div id="sidebar">

<div id="menu">

<ul>

<li><a href="#">Додати</a></li>

<li><a href="#">Фільтрувати</a></li>

</ul>

</div><!-- end menu -->

</div><!-- end sidebar -->

<div>

<div id="footer">

<p>Copyright 2013 - Перевірки</p>

</div><!-- end footer -->

</div><!-- end conteiner -->

</div><!-- end wrap -->

</body>

</html>

Скрипти таблиць бази даних


СпівробітникиTABLE `employees` (

`id` int(10) NOT NULL,

`PIB` varchar(50) DEFAULT NULL,

`post` varchar(30) DEFAULT NULL,

`adres` varchar(30) DEFAULT NULL,

`phone` varchar(15) DEFAULT NULL,

`firma_id` int(11) DEFAULT NULL,KEY (`id`),`FK9D39EF85EDD3E383` (`firma_id`),`FK9D39EF85EDD3E383` FOREIGN KEY (`firma_id`) REFERENCES `firma` (`id`),`FK_emp_firma` FOREIGN KEY (`firma_id`) REFERENCES `firma` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

ФірмаTABLE `firma` (

`id` int(10) NOT NULL,

`nazva` varchar(20) NOT NULL,

`adresa` varchar(30) NOT NULL,

`telephon` varchar(15) NOT NULL,KEY (`id`)

)

ПеревіряючіTABLE `people` (

`id` int(10) NOT NULL DEFAULT '0',

`name` varchar(15) DEFAULT NULL,

`surname` varchar(15) DEFAULT NULL,

`posada` varchar(15) DEFAULT NULL,

`patronimic` varchar(255) DEFAULT NULL,KEY (`id`)

)

Перевірки працівниківTABLE `perevirka_people` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`people_id` int(10) DEFAULT NULL,

`perevirka_id` int(10) DEFAULT NULL,

`date_begin` datetime DEFAULT NULL,

`date_end` datetime DEFAULT NULL,KEY (`id`),`FKF379D7416ED7A6D7` (`perevirka_id`),`FKF379D7416FB067D1` (`people_id`),`FKF379D7416ED7A6D7` FOREIGN KEY (`perevirka_id`) REFERENCES `perevirku` (`id`),`FKF379D7416FB067D1` FOREIGN KEY (`people_id`) REFERENCES `people` (`id`),`FK_perevirka` FOREIGN KEY (`perevirka_id`) REFERENCES `perevirku` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,`FK_perev_people` FOREIGN KEY (`people_id`) REFERENCES `people` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

)

Перевірки

TABLE `perevirku` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`tup_id` int(10) DEFAULT NULL,

`date_begin` date DEFAULT NULL,

`date_end` date DEFAULT NULL,

`rezult` text,

`firma_id` int(11) DEFAULT NULL,KEY (`id`),`FK1B5767E13D48A714` (`tup_id`),`FK1B5767E1EDD3E383` (`firma_id`),`FK_firma` FOREIGN KEY (`firma_id`) REFERENCES `firma` (`id`),`FK_type` FOREIGN KEY (`tup_id`) REFERENCES `tup_perevirku` (`id`)

)

Типи перевіркокTABLE `tup_perevirku` (

`id` int(10) NOT NULL,

`tup_perevirku` varchar(15) NOT NULL,

`opus` varchar(25) NOT NULL,KEY (`id`)

)

ПорушенняTABLE `violation` (

`id` int(10) NOT NULL AUTO_INCREMENT,

`type_violation_id` int(10) DEFAULT NULL,

`emploee_id` int(10) DEFAULT NULL,

`perevirka_id` int(10) DEFAULT NULL,

`people_id` int(10) DEFAULT NULL,

`date_violation` datetime DEFAULT NULL,

`description` varchar(200) DEFAULT NULL,KEY (`id`),`FKA092E1256ED7A6D7` (`perevirka_id`),`FKA092E125CE729D02` (`type_violation_id`),`FKA092E125392A675D` (`emploee_id`),`FKA092E1256FB067D1` (`people_id`),`FK_emp_violation` FOREIGN KEY (`emploee_id`) REFERENCES `employees` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,`FK_people_violation` FOREIGN KEY (`people_id`) REFERENCES `people` (`id`),`FK_perevirka_violation` FOREIGN KEY (`perevirka_id`) REFERENCES `perevirku` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,`FK_type_violation` FOREIGN KEY (`type_violation_id`) REFERENCES `violation_type` (`id`)

)

Типи порушеньTABLE `violation_type` (

`id` int(10) NOT NULL DEFAULT '0',

`nazva` varchar(30) DEFAULT NULL,KEY (`id`)

)

Інструкція користувача


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

.Потрібно встановити сервер бази даних MySQL версії 5.х, дистрибутив якого можна завантажити на офіційному сайті.

.Завантажити та встановити сервер додатків Apache Tomcat.

.Створити на сервері в папці що розміщена за адресою apache-tomcat-7.0.22\webapps папку із назвою AuditSysytem і скопіювати в неї весь вміст із паки WebContent нашого проекту.

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

AuditSystem\WEB-INF\classes і знаходимо файл під назвою jdbc.properties, відкриваємо його за допомогою текстового редактора і заміняємо значення властивостей jdbc.username = імя користувача.password = пароль

(імя користувача та пароль, ті які були вказані при встановленні сервера БД)

Після чого зберігаємо зроблені зміни.

Дії по налаштуванню завершені, переходимо до запуску проекту.

Перед цим потрібно запустити сервер за допомогою файлу startup.bat що знаходиться за адресою apache-tomcat\bin. Тепер запускаємо додаток, для цього відкриваємо браузер і в стрічці адреси набираємо наступний адрес: <#"331" src="doc_zip1.jpg" />

Рисунок 1 - Головна сторінка


У горі знаходиться головне меню додатку(рис. 2), нижче опис обраного пункту меню, по середині робоча область на якій відображаються дані, з права функції які доступні у обраному пункті меню.


Рисунок 2 - Головне меню програми


На головній сторінці користувачу пропонується переглянути за певний період часу для вибраної фірми перевірки які проводилися. Після вибору періоду та фірми потрібно натиснути кнопку «вибір», на екрані відобразяться перевірки які відповідають вказаним критеріям (рис. 3)

Рисунок 3 - Результати вибору перевірок


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

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


Рисунок 4 - Результати перевірок

Щоб повернутися на головну сторінку потрібно натиснути у головному меню пункт «перевірки». На головній сторінці є можливість переглянути список співробітників та кількість зроблених ними порушень та помилок, не заходячи в результати перевірки. Для цього вибрати фірму для якої будемо формувати список співробітників натискаємо кнопку «вибір», вікні відображається сформований список перевірок потім натискаємо посилання справа під назвою «порушення працівників», результат зображено на рис. 5.


Рисунок 5 - Список працівників фірми


Також є можливість додати нову перевірку натиснувши в меню, що знаходиться з права пункт «додати». Після цього заповнити всі поля та натиснути кнопку «додати», дані про нову перевірку будуть збережені у БД системи перевірок.

Щоб переглянути ефективність роботи співробітників організації, що займається перевіркою фірм, потрібно вибрати пункт головного меню «Перевіряючі». На сторінці, що завантажиться вибрати діапазон часу та натиснути кнопку «вибір» сформується список працівників та ефективність їх роботи у вигляді кількості знайдених ним помилок та порушень (рис. 6).

Рисунок 6 - Ефективність роботи працівників


Висновок


При виконанні курсової роботи ознайомився з технологіями як Object-relational mapping (O/RM), JavaServlet, JSP, та Spring framework для розробки web- проектів на мові програмування Java. Результатом роботи є розроблений web-додаток що реалізує MVC шаблон проектування. Додаток володіє всією зазначеною у завданні функціональністю та має простий, зручний, зрозумілий інтерфейс.


Міністерство освіти і науки України Черкаський державний технологічний університет Кафедра програмного забезпечення автоматизованих систем

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ