Интернет-комплекса «Знание»

Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 03:02, курсовая работа

Описание

Целью данной работы является создание Интернет-комплекса для анализа и хранения информации, который будет использоваться в работе Гродненской областной организации общественного объединения «Белорусское общество «Знание».

Работа состоит из  1 файл

Приложение В-1_Содержание и пример курсовой работы.doc

— 1.78 Мб (Скачать документ)
    • Actors (Деятели)
    • Events (Мероприятия)
    • Lectories (Лектории)
    • Domains (Направления деятельности)
    • Photo (Фотографии)
    • Data (Информация в помощь)

      Так как между некоторыми таблицами  используется связь «многие-ко-многим», то возникла необходимость создать  дополнительные промежуточные таблицы:

    • ActorsAndDomains
    • ActorsAndEvents
    • ActorsAndLectories
    • ActorsAndPhoto
    • DomainsAndData
    • EventsAndDomains
    • EventsAndPhoto

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

3.3. Классы работающие  с базой данных

      Классы, которые относятся к этому  логическому слою, находятся в  пакете by.knowledge.database.

      Класс DBQueryHelper вспомогательный. Он генерирует SQL запросы к базе данных. Например, рассмотрим метод insertQuery, который конструирует SQL запрос, добавляющий новую запись в таблицу:

      public static String insertQuery(String table, String[] fields,

            String[] values) {

            String query = "INSERT INTO " + table + " (";

            for (int i = 0; i < fields.length; i++) {

                  query += fields[i] + ", ";

            }

            query = query.substring(0, query.length() - 2);

            query += ") VALUES (";

            for (int i = 0; i < values.length; i++) {

                  if ("null".equals(values[i])) {

                        query += "NULL, ";

                  }

                  else {

                        query += "'" + values[i] + "', ";

                  }

            }

            query = query.substring(0, query.length() - 2);

            query += ")";

            return query;

      }

      В качестве параметров этот метод принимает  название таблицы table, массив названий полей fields и массив соответствующих значений values.

      Таким образом, в коде не придётся писать полный запрос типа "INSERT INTO Domains (Name_Domain, Description_Domain) VALUES (‘Экология’, ‘Проблемы экологии’)". А достаточно будет вызвать метод insertQuery, передав ему необходимые параметры. Это позволяет избежать возможных опечаток в запросах и упростить разработку приложения.

      Класс DBConnection позволяет работать с базой  данных. В нём реализованы методы, с помощью которых открывается  и закрывается соединение с базой  данных, а также методы, осуществляющие SQL-запросы.

3.4. Классы-сущности

      Как было упомянуто выше, для каждой сущности, выделенной на этапе анализа предметной области, создана таблица в базе данных. В принципе, используя SQL запросы к этим таблицам, уже можно реализовать необходимую функциональность приложения. Однако куда более проще и логичнее создать некоторую программную структуру для каждой сущности, и обращаться с соответствующими запросами к ней, а не непосредственно к базе данных. Вся логика работы с данными на диске будет скрыта в этой сущности, и тем самым будет реализован принцип инкапсуляции, который должен обязательно присутствовать в объектно-ориентированном приложении.

      Классы, которые относятся к этому  логическому слою, находятся в  пакете by.knowledge.entities.

      Каждая  сущность относится к одной определённой записи в таблице базы данных, а полям таблицы соответствуют атрибуты класса. В то же время сущность выступает, как самостоятельный объект, и имеет методы, унаследованные от абстрактного класса AbstractEntity, которые отвечают за загрузку, сохранение, удаление соответствующей записи в таблице. В качестве примера приведём метод, устанавливающий значения полей некоторой сущности.

      public boolean load(int id) throws EntityException {

            boolean loaded = true;

            this.id = id;  

            try {

                  DBConnection conn = new DBConnection();

                String query = DBQueryHelper.selectQuery(getTableName(), new String[] { "*" }, getSelectCondition());

                  ResultSet rs = conn.executeQuery(query);

                  if (loaded = rs.first()) {

                        setValues(rs, 1);

                  }

                  conn.close();

                  return loaded;

            }

          catch (DBException e) {

                  throw new EntityException("Can't load entity", e);

            }

            catch (SQLException e) {

                  throw new EntityException("Can't load entity", e);

            }

      }

      Вначале устанавливается соединения с базой  данных. Затем формируется SQL-запрос. Для этого методу selectQuery передаются параметры getTableName() (имя таблицы), new String[] { "*" } (множество полей, которые необходимо выбрать, getSelectCondition() (условие отбора).

      После проверки, не является ли пустым результат  запроса к базе данных, вызывается метод setValues, который присваивает полям объекта полученные значения.

      После завершения работы с базой данных соединение закрывается.

      Таким образом, классы-сущности позволяют  работать с данными на более высоком  уровне, чем просто обращение к  файлам на диске или к базе данных. Благодаря этому соблюдается принцип модульности: классы, которые работают с сущностями, «не знают» о том, что является источником данных, и каким образом эти данные загружаются.

      В пакете by.knowledge.entities расположен также вспомогательный класс EntitiesManager. Он включает в себя часто используемые методы для работы с сущностями, например методы, которые возвращают список всех деятелей или лекториев.

3.5. Action-классы

      Совокупность Action-классов представляет собой  контроллер приложения. Эти классы находятся в пакете by.knowledge.actions. По своей функциональности action-классы, реализованные в данном приложении, делятся на добавляющие данные, удаляющие данные и другие.

      Главный и обычно единственный метод в  каждом action-классе – execute. Рассмотрим пример метода execute для класса AddDomainAction:

public class AddDomainAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {

      AddDomainFormBean domainForm = (AddDomainFormBean) form;

            DomainEntity domain = new DomainEntity();

            domain.setName(domainForm.getName());

            domain.setDescription(domainForm.getDescription());

            domain.save();

            return (mapping.findForward("success"));

      }

}

      Метод execute получает в качестве параметра объект класса AddDomainFormBean – форму с заполненными пользователем полями. Далее создаётся новый объект сущности DomainEntity и его поля инициализируются в соответствии со значениями формы. После этого объект domain сохраняется.

3.6. Пользовательский интерфейс

      Интерфейс пользователя реализуется в основном с помощью Jsp-страниц. Они расположены в директории WebContent.

      В приложении используется два типа Jsp-страниц: для просмотра информации об одном отдельном объекте (например, о мероприятии) и для просмотра списка всех однородных объектов (например, списка всех проведённых мероприятий).

      В начале страницы осуществляется проверка на то, является ли посетитель сайта  администратором:

      boolean hasAdminRights = false;

      UserEntity currentUser = (UserEntity) session.getAttribute("currentUser");

            if (currentUser != null) {

                  hasAdminRights = currentUser.hasAdminRights();

            }

      Для этого происходит попытка обратится  к объекту “currentUser”, расположенному в сессии. Он будет находится в сессии только, если пользователь вошёл под своим логином и паролем.

      В зависимости от прав посетителя страница меняет свой внешний вид. Так у  администраторов на странице domains.jsp отображается не только список всех направлений деятельности, но и форма для ввода нового направления. А также напротив каждого направления есть кнопка для его удаления.

Заключение

 

      Таким образом, в курсовом проекте был  реализован Интернет-комплекс «Знание» для анализа и хранения информации с использованием программных средств  MySQL, Java и технологии Struts.

      Были  решены следующие задачи:

      1. Изучены материалы, касающиеся  систем и технологий для их  реализации.

      2. Произведено инфологическое моделирование  предметной области

      3. Осуществлена программная реализация  проекта.

      В будущем возможно расширение функциональности Интернет-комплекса. В частности, ведение статистики, которая может быть полезна как пользователям, так и самим сотрудником общества.

 

Список  использованных источников

 
   
  1. Аткинсон, Л. MySQL. Библиотека профессионала / Л. Аткинсон // Пер. с англ. – М.: Издательский дом «Вильяме», 2002 – 624 с.
  2. Struts User’s Guide [Electronic resource] – Mode of access: http://struts.ru/userGuide/index.html – Date of access: 22.10.2007.
  3. Дейтел, Х.М. Технологии программирования на Java 2 / Х.М. Дейтел,  П.Дж. Дейтел, С.И. Сантри // Пер. с англ.– М.: ООО «Бином-Пресс», 2003 г. – 560 с.

 

Приложение  А 
Внешний вид программы

 

Рисунок 1. Страница с информацией  о деятеле

Рисунок 2. Регистрация нового пользователя

Рисунок 3. Добавление администратором нового деятеля

Информация о работе Интернет-комплекса «Знание»