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

Огляд об’єктно-реляційних перетворень. Схема роботи сервлету. Технології Object-relational mapping, JavaServlet, JSP та Spring framework для розробки web-проектів на мові програмування Java. Генерація текстових документів у відповідь на запит клієнта.

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

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

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

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

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

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

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

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

з курсу

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

на тему:

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

Черкаси 2013

Зміст

Завдання

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

JavaBeans.

Hibernate.

Java Servlet

JSP

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

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

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

Висновок

Завдання

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

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

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

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

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

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

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

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

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

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

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

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

ORM-системи для Java:

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

· Speedo, open source implementation of JDO (Java Data Objects)

· intelliBO by Signsoft, implementation of JDO

· JPOX, open source JDO 2 reference implementation

· Enterprise Objects Framework, Mac OS X/Java, part of Apple WebObjects

· TopLink by Oracle

· CrossDB, open source

· Hibernate, open source

· iBATIS, maintained by ASF, and with .NET port.

· Hydrate, open source, relational/object/XML mapping tool

· Castor, open source, object/XML/relational mapping tool

· Cayenne, open source for java

JavaBeans

Поняття JavaBeans визначається Sun Microsystems як "повторно-використотовувані програмні компоненти, які можуть маніпулюватися візуально в IDE-середовищі".

Для того, щоб вважатися JavaBean класом, клас повинен відповідати певним критеріям відносно назви методів, конструкторів і поведінки. Ці критерії дають можливість створювати програмні інструменти, що можуть використовувати, повторно використовувати, заміняти і підключати JavaBean'и.

Обов'язкові критерії такі:

– клас повинен бути serializable (здатний зберігатися на диску);

– в класі повинен бути конструктор без параметрів;

– його властивості повинні бути доступні через спеціальні get та set методи, які відповідають загальній системі іменування;

– він повинен мати всі необхідні методи обробки подій.

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

Hibernate

Hibernate є легковісним O/RM сервісом для Java. Легковісний означає, що він спроектований як нескладний для вивчення і використання, а також висуває невисокі вимоги до системних ресурсів в порівнянні з деякими іншими системами.

Hibernate може використовувати 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 - ім'я поля таблиці БД).

Java Servlet

Сервлет -- Java-об'єкт, що працює всередині спеціальної програми сервлет-контейнера і застосовується для динамічного генерування даних. Кожен сервлет описується в окремому класі, який реалізує інтерфейс Servlet. В більшості сервлети використовуються для динамічного генерування Web-сторінок. В цьому випадку сервлет-контейнер повинен бути зв'язаний з Web-сервером (або можна сказати, Web-сервер повинен підтримувати роботу з сервлетами). Взаємодія сервлетів з клієнтами реалізована згідно із парадигмою запит-відповідь. Сервлети, що генерують Web-сторінки, працюють за протоколом HTTP (є HTTP-сервлетами). Для таких сервлетів існує абстрактний клас HttpServlet, від якого розробникам пропонується успадковувати свої сервлети. Такі сервлети є альтернативами таких технологій, як CGI, ISAPI, PHP, Perl тощо.

Першим web-сервером, який підтримував сервлети, став випущений компанією JavaSoft сервер Jeeves, який потім назвали Java Web Server (JWS). Існує велика кількість інших web-серверів з підтримкою сервлетів. Для стандартних web-серверів, таких, як Netscape, IIS, Apache, JavaSoft пропонується Java Servlet Developers Kit, що дозволяє завантажувати сервлети на більшості зі стандартних серверів. В даний час широко використовується web-сервер з сервлет-контейнером Apache Tomcat.

Схема роботи сервлету:

1. Клієнт (наприклад, Web-броузер), при виконанні користувачем певних дій на web-сторінці, надсилає HTTP запит на web-сервер.

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

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

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

5. Після того, як сервлет припиняє обробку запиту, контейнер сервлетів перевіряє коректність відправки відповіді та повертає управління до 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;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.servlet.ModelAndView;

import org.springproject.dao.SpringProjectDAO;

import org.springproject.entity.Firma;

import org.springproject.entity.People;

import org.springproject.entity.PerevirkaPeople;

import org.springproject.entity.Perevirku;

import org.springproject.entity.Violation;

import org.springproject.entity.ViolationType;

import org.springproject.service.Service;

@Controller

public class FirstController {

@Autowired

SpringProjectDAO dao;

@Autowired

HttpSession httpSession;

@RequestMapping("/start.do")

public ModelAndView start(){

ModelAndView mav=new ModelAndView("start");

List<Firma> firma = dao.readFirma();

System.out.println("firma.size="+firma.size());

mav.addObject("firma",firma);

Boolean violationEmployeeView=false;

httpSession.setAttribute("violationEmployeeView", violationEmployeeView);

return mav;

}

@RequestMapping("/addPeople.do")

public ModelAndView addPeople(){

Boolean addPeopleFormView=(Boolean)httpSession.getAttribute("addPeopleFormView");

if ((addPeopleFormView == null) || (addPeopleFormView==false))

addPeopleFormView=true;

else addPeopleFormView=false;

httpSession.setAttribute("addPeopleFormView", addPeopleFormView);

String auditId=(String)httpSession.getAttribute("auditId");

String firmaId=(String)httpSession.getAttribute("firmaId");

return resultAudit(auditId, firmaId);

}

@RequestMapping("/audits.do")

public ModelAndView audits(@RequestParam String firm, @RequestParam String begindate, @RequestParam String enddate){

ModelAndView mav=new ModelAndView("start");

List<Firma> firms = dao.readFirma();

Firma firma = dao.readFirma(Integer.parseInt(firm));

httpSession.setAttribute("nameFirma", firma.getNazva());

Date beginDate=null, endDate=null;

if (begindate=="" || enddate==""){

System.out.println("виберіть дату");

} else {

try {

beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(begindate);

endDate = new SimpleDateFormat("yyyy-MM-dd").parse(enddate);

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

System.out.println("db-"+beginDate);

System.out.println("db-"+endDate);

DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");

String beginDateForm = dateFormat.format(beginDate);

String endDateForm = dateFormat.format(endDate);

mav.addObject("beginDateForm", beginDateForm);

mav.addObject("endDateForm", endDateForm);

List<Perevirku> perevirku = dao.readPerevirku();

if (beginDate!=null && endDate!=null && firm!="all"){

perevirku = dao.readPerevirku(Integer.parseInt(firm), beginDate, endDate);

} else {

if (firm.equals("all")){

perevirku = dao.readPerevirku();

} else {

perevirku = dao.readPerevirkuForFirm(Integer.parseInt(firm));

}

}

mav.addObject("perevirku",perevirku);

mav.addObject("firma",firms);

httpSession.setAttribute("violationEmployeeFirma", firm);

httpSession.setAttribute("dateBeginDate", begindate);

httpSession.setAttribute("dateEndDate", enddate);

Boolean violationEmployeeView=false;

httpSession.setAttribute("violationEmployeeView", violationEmployeeView);

return mav;

}

@RequestMapping("/violationEmploee.do")

public ModelAndView violationEmployee(){

String violationEmployeeFirmId = (String)httpSession.getAttribute("violationEmployeeFirma");

ModelAndView mav=new ModelAndView("start");

if (!violationEmployeeFirmId.equals("all")){

List violationEmployeeFirm = dao.readViolationEmploee(Integer.parseInt(violationEmployeeFirmId));

List<Object[]> countError = (List<Object[]>)violationEmployeeFirm.get(0);

List<Object[]> countViolation = (List<Object[]>)violationEmployeeFirm.get(1);

List<Object[]> resultCountViolation = new ArrayList<Object[]>();

HashMap<String, Long> errorsMap = new HashMap<String, Long>();

HashMap<String, Long> violationsMap = new HashMap<String, Long>();

Service service = new Service();

errorsMap = service.listToMap(countError);

violationsMap = service.listToMap(countViolation);

resultCountViolation = service.mapToList(errorsMap, violationsMap);

List<Perevirku> perevirku = dao.readPerevirkuForFirm(Integer.parseInt(violationEmployeeFirmId));

mav.addObject("violationEmployeeFirm", resultCountViolation);//violationEmployeeFirm

mav.addObject("perevirku",perevirku);

}

Boolean violationEmployeeView=(Boolean)httpSession.getAttribute("violationEmployeeView");

if (violationEmployeeView==null || violationEmployeeView==false)

violationEmployeeView = true;

else

violationEmployeeView = false;

httpSession.setAttribute("violationEmployeeView", violationEmployeeView);

List<Firma> firma = dao.readFirma();

mav.addObject("firma",firma);

return mav;

}

@RequestMapping("/result.do")

public ModelAndView resultAudit(@RequestParam String audit, @RequestParam String firma){

ModelAndView mav=new ModelAndView("result");

List<People> people = dao.readPeople();

List<PerevirkaPeople>auditPeople = dao.readPerevirkaPeople(Integer.parseInt(audit));

List<Violation>violations = dao.readViolations(Integer.parseInt(audit));

Perevirku thisAudits = dao.readPerevirku(Integer.parseInt(audit));

List<ViolationType> typeViolations = dao.readViolationTypes();

httpSession.setAttribute("audit", thisAudits);

httpSession.setAttribute("auditId", audit);

httpSession.setAttribute("firmaId", firma);

httpSession.setAttribute("violations", violations);

httpSession.setAttribute("auditPeole", auditPeople);

httpSession.setAttribute("people", people);

mav.addObject("typeViolations", typeViolations);//typeViolation

mav.addObject("people", people);

mav.addObject("auditpeople", auditPeople);

mav.addObject("violation", violations);

return mav;

}

@RequestMapping("/people.do")

public ModelAndView employeeAudit(){

ModelAndView mav = new ModelAndView("people");

return mav;

}

@RequestMapping("/addPeopleAudit.do")

public ModelAndView addPeoleAudit(@RequestParam String people, @RequestParam String dateBegin, @RequestParam String dateEnd){

ModelAndView mav=new ModelAndView("result");

People peopleObj = dao.readPeople(Integer.parseInt(people));

List<Perevirku> audit = dao.readPerevirku();

PerevirkaPeople peopleAudit = new PerevirkaPeople();

peopleAudit.setPeople(peopleObj);

Date beginDate=null, endDate=null;

if (dateBegin=="" || dateEnd==""){

System.out.println("виберіть дату");

} else {

try {

beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(dateBegin);

endDate = new SimpleDateFormat("yyyy-MM-dd").parse(dateEnd);

} catch (ParseException e) {

e.printStackTrace();

}

}

if (beginDate!=null && endDate!=null){

peopleAudit.setDateBegin(beginDate);

peopleAudit.setDateEnd(endDate);

}

Perevirku thisAudit = (Perevirku)httpSession.getAttribute("audit");

peopleAudit.setPerevirka(thisAudit);

String auditId=(String)httpSession.getAttribute("auditId");

String firmaId=(String)httpSession.getAttribute("firmaId");

dao.storePeopleAudit(peopleAudit);

return resultAudit(auditId, firmaId);

}

@RequestMapping("/peopleViolation.do")

public ModelAndView peopleViolation(@RequestParam String begindate, @RequestParam String enddate){

ModelAndView mav = new ModelAndView("people");

Date beginDate=null, endDate=null;

try {

beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(begindate);

endDate = new SimpleDateFormat("yyyy-MM-dd").parse(enddate);

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");

String beginDateForm = dateFormat.format(beginDate);

String endDateForm = dateFormat.format(endDate);

mav.addObject("beginDateForm", beginDateForm);

mav.addObject("endDateForm", endDateForm);

List viplationPeople = dao.readViolationPeople(beginDate, endDate);

List<Object[]> countViolation = (List<Object[]>)viplationPeople.get(0);

List<Object[]> countError = (List<Object[]>)viplationPeople.get(1);

List<Object[]> resultCountViolation = new ArrayList<Object[]>();

HashMap<String, Long> errorsMap = new HashMap<String, Long>();

HashMap<String, Long> violationsMap = new HashMap<String, Long>();

Service service = new Service();

errorsMap = service.listToMap(countError);

violationsMap = service.listToMap(countViolation);

resultCountViolation = service.mapToList(errorsMap, violationsMap);

mav.addObject("violationPeople", resultCountViolation);

return mav;

}

}

DAOImpl.java

package org.springproject.dao;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

import org.springframework.transaction.annotation.Transactional;

import org.springproject.entity.Employees;

import org.springproject.entity.Firma;

import org.springproject.entity.People;

import org.springproject.entity.PerevirkaPeople;

import org.springproject.entity.Perevirku;

import org.springproject.entity.TupPerevirku;

import org.springproject.entity.Violation;

import org.springproject.entity.ViolationType;

@Repository

public class SpringProjectDAOImpl implements SpringProjectDAO{

@Autowired

SessionFactory sessionFactory;

@Transactional(readOnly=true)

public List<Firma> readFirma() {

return sessionFactory.getCurrentSession().createQuery("from Firma").list();

}

@Transactional(readOnly=true)

public Firma readFirma(Integer id) {

return (Firma)sessionFactory.getCurrentSession().createQuery("from Firma f where f.id=:id").setParameter("id", id).list().get(0);

}

@Transactional(readOnly=true)

public List<Employees> readEmployees(Integer firma){

return sessionFactory.getCurrentSession().createQuery("from Employees emp where emp.firma.id = :firma").setParameter("firma", firma)

.list();

}

@Transactional(readOnly=true)

public List<Employees> readEmployees(){

return sessionFactory.getCurrentSession().createQuery("from Employees").list();

}

@Transactional(readOnly=true)

public List<TupPerevirku> readTupPerevirku(){

return sessionFactory.getCurrentSession().createQuery("from TupPerevirku").list();

}

@Transactional(readOnly=true)

public List<Perevirku> readPerevirku(){

return sessionFactory.getCurrentSession().createQuery("from Perevirku").list();

}

@Transactional(readOnly=true)

public Perevirku readPerevirku(Integer id){

return (Perevirku)sessionFactory.getCurrentSession().load(Perevirku.class, id);

}

@Transactional(readOnly=true)

public List<Perevirku> readPerevirkuForFirm(Integer firma){

return sessionFactory.getCurrentSession().createQuery("from Perevirku p where p.firma.id=:firma")

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

}

@Transactional(readOnly=true)

public List<Perevirku> readPerevirku(Integer firma, Date beginDate, Date endDate){

return 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)

public List<People> readPeople(){

return sessionFactory.getCurrentSession().createQuery("from People").list();

}

@Transactional(readOnly=true)

public People readPeople(Integer id){

return (People)sessionFactory.getCurrentSession().load(People.class, id);

}

@Transactional(readOnly=true)

public List<PerevirkaPeople> readPerevirkaPeople(Integer audit){

return sessionFactory.getCurrentSession().createQuery("from PerevirkaPeople where perevirka.id=:audit")

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

}

@Transactional(readOnly=true)

public List<Violation> readViolations(Integer audit){

return sessionFactory.getCurrentSession().createQuery("from Violation where perevirka.id=:audit").setParameter("audit", audit).list();

}

@Transactional(readOnly=true)

public List readViolationEmploee(Integer firma){

List resultViolations = new ArrayList();

List<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();

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();

resultViolations.add(selectCountError);

resultViolations.add(selectCountViolation);

return resultViolations;

}

@Transactional(readOnly=true)

public List<Object[]> readViolationPeople(Date beginDate, Date endDate){

List resultViolations = new ArrayList();

List<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();

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();

resultViolations.add(selectCountViolation);

resultViolations.add(selectCountError);

return resultViolations;

}

@Transactional(readOnly=true)

public List<ViolationType> readViolationTypes(){

return sessionFactory.getCurrentSession().createQuery("from ViolationType").list();

}

@Transactional(readOnly=false)

public void savePerevirka(Perevirku audit){

sessionFactory.getCurrentSession().save(audit);

}

@Transactional(readOnly=false)

public void storePeopleAudit(PerevirkaPeople peopleAudit) {

sessionFactory.getCurrentSession().merge(peopleAudit);

}

@Transactional(readOnly=false)

public void storeViolation(Violation violation) {

sessionFactory.getCurrentSession().merge(violation);

}

}

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

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="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 class="view">

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

<tr class="head">

<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 class="view">

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

<tr class="head">

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

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

</tr>

<tr class="head">

<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 class="clear"></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="http://www.springframework.org/tags/form"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="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 class="view">

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

<tr class="head">

<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 class="view">

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

<tr class="head">

<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 class="clear"></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="http://www.springframework.org/tags/form"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="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>

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 class="clear"></div>

<div id="footer">

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

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

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

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

</body>

</html>

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

Співробітники

CREATE 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,

PRIMARY KEY (`id`),

KEY `FK9D39EF85EDD3E383` (`firma_id`),

CONSTRAINT `FK9D39EF85EDD3E383` FOREIGN KEY (`firma_id`) REFERENCES `firma` (`id`),

CONSTRAINT `FK_emp_firma` FOREIGN KEY (`firma_id`) REFERENCES `firma` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

Фірма

CREATE TABLE `firma` (

`id` int(10) NOT NULL,

`nazva` varchar(20) NOT NULL,

`adresa` varchar(30) NOT NULL,

`telephon` varchar(15) NOT NULL,

PRIMARY KEY (`id`)

)

Перевіряючі

CREATE 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,

PRIMARY KEY (`id`)

)

Перевірки працівників

CREATE 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,

PRIMARY KEY (`id`),

KEY `FKF379D7416ED7A6D7` (`perevirka_id`),

KEY `FKF379D7416FB067D1` (`people_id`),

CONSTRAINT `FKF379D7416ED7A6D7` FOREIGN KEY (`perevirka_id`) REFERENCES `perevirku` (`id`),

CONSTRAINT `FKF379D7416FB067D1` FOREIGN KEY (`people_id`) REFERENCES `people` (`id`),

CONSTRAINT `FK_perevirka` FOREIGN KEY (`perevirka_id`) REFERENCES `perevirku` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `FK_perev_people` FOREIGN KEY (`people_id`) REFERENCES `people` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

)

Перевірки

CREATE 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,

PRIMARY KEY (`id`),

KEY `FK1B5767E13D48A714` (`tup_id`),

KEY `FK1B5767E1EDD3E383` (`firma_id`),

CONSTRAINT `FK_firma` FOREIGN KEY (`firma_id`) REFERENCES `firma` (`id`),

CONSTRAINT `FK_type` FOREIGN KEY (`tup_id`) REFERENCES `tup_perevirku` (`id`)

)

Типи перевіркок

CREATE TABLE `tup_perevirku` (

`id` int(10) NOT NULL,

`tup_perevirku` varchar(15) NOT NULL,

`opus` varchar(25) NOT NULL,

PRIMARY KEY (`id`)

)

Порушення

CREATE 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,

PRIMARY KEY (`id`),

KEY `FKA092E1256ED7A6D7` (`perevirka_id`),

KEY `FKA092E125CE729D02` (`type_violation_id`),

KEY `FKA092E125392A675D` (`emploee_id`),

KEY `FKA092E1256FB067D1` (`people_id`),

CONSTRAINT `FK_emp_violation` FOREIGN KEY (`emploee_id`) REFERENCES `employees` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `FK_people_violation` FOREIGN KEY (`people_id`) REFERENCES `people` (`id`),

CONSTRAINT `FK_perevirka_violation` FOREIGN KEY (`perevirka_id`) REFERENCES `perevirku` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `FK_type_violation` FOREIGN KEY (`type_violation_id`) REFERENCES `violation_type` (`id`)

)

Типи порушень

CREATE TABLE `violation_type` (

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

`nazva` varchar(30) DEFAULT NULL,

PRIMARY KEY (`id`)

)

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

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

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

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

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

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

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

jdbc.password = пароль

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

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

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

Перед цим потрібно запустити сервер за допомогою файлу startup.bat що знаходиться за адресою apache-tomcat\bin. Тепер запускаємо додаток, для цього відкриваємо браузер і в стрічці адреси набираємо наступний адрес: http://localhost:8080/AuditSystem/ та натискаємо клавішу Enter. У вікні браузера завантажується головна сторінка веб-додатку яка зображена на рис.1.

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

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

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

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

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

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

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

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

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

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

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

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

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

Висновок

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

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


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

  • Розробка інтерфейсу програми "Автоматизована інформаційна система автошколи". Вибір архітектури, характеристика користувача. Генерація, проектування схеми бази даних, детальне програмування. Розробка структури таблиць. Лістинг програми, результат роботи.

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

  • Історія розвитку мови Java, основні технології та їх застосування для роботи з SQL-серверами. Огляд багатопоточного програмування в Java. Принципи функціонування сервлетів та JSP-сторінок. Зміна розміру графічних об’єктів, робота з кольорами в Java.

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

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Загальна характеристика та особливості програмування сучасних систем автоматизованого проектування. Порівняльна характеристика середовищ розробки прикладних програм на мові JAVA. Ознайомлення з принципами і особливостями роботи певних класів, компонентів.

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

  • Модель в об’єктно-орієнтованих мовах програмування. Програмна модель створена на мові програмування С++, в середовищі програмування Borland С++ Builder 6.0. Вибір засобів реалізації програми. Види інструментів для об'єктно-орієнтованої розробки.

    курсовая работа [116,9 K], добавлен 06.06.2010

  • Програмний засіб моніторингу реалізації проектів з побудовою графіків та завданням відхилень. Вибір моделі життєвого циклу розробки додатків Rapid Application Development об'єктно-орієнтованою мовою програмування C# на платформі Microsoft .NET Framework.

    дипломная работа [1,4 M], добавлен 11.09.2012

  • Основні відомості про історію розвитку мови Object Pascal, середовища Delphi, їх основні технології та застосування для роботи з файлами. Опис основних особливостей мови, основних елементів програмної мови. Принципи об'єктно-орієнтованого програмування.

    курсовая работа [471,5 K], добавлен 12.04.2010

  • Характеристика технології візуального проектування і програмування, суть якої полягає в тому, що область розробки бере на себе більшу частину рутинної роботи. Огляд середовища швидкої розробки, в якій як мова програмування використовується мова Delphi.

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

  • Концепції об'єктно-орієнтованого програмування. Спеціалізовані засоби розробки програмного забезпечення мовою Delphi. Загальні питання побудови та використання сучасних систем об’єктно-орієнтованного та візуального проектування програмних засобів.

    курсовая работа [201,4 K], добавлен 01.04.2016

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

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

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