Социальная сеть

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

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

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

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

Остановим свое внимание на Grails и попутно рассмотрим ее преимущества над другими платформами.

Grails - платформа «нового поколения» разработки веб-приложений на языке Java, которая позаимствовала оптимальные инструментальные средства веб-разработки, приемы и методики из существующих платформ Java и объединила их с мощным и передовым динамическим языком программирования Groovy. Благодаря использованию языка Groovy она предоставляет в распоряжение разработчика мощный Java-подобный язык, а также полный доступ ко всем Java-библиотекам. В результате получилась платформа, предоставляющая стабильные технологии, защищающая от утомительных настроек, сложностей проектирования и необходимости написания шаблонного программного кода, который делает разработку веб-приложений на языке Java несколько утомительной.

Groovy -- объектно-ориентированный язык программирования разработанный для платформы Java как альтернатива языку Java с возможностями Python, Ruby и Smalltalk.

Groovy использует Java-подобный синтаксис с динамической компиляцией в JVM байт-код и напрямую работает с другим Java кодом и библиотеками. Язык может использоваться в любом Java проекте или как скриптовый язык.

Возможности Groovy (отличающие его от Java):

Статическая и динамическая типизация

Встроенный синтаксис для списков, ассоциативных массивов, массивов и регулярных выражений

Замыкания

Перегрузка операций

Существует мнение, что платформа Grails является реализацией Ruby on Rails на языке Java, однако это ошибочное мнение легко опровергается следующими сведениями о Grails:

Платформа Grails привнесла удивительные инновации в сектор разработки корпоративных приложений.

На Grails оказал влияние широкий диапазон платформ, таких как Ruby,Python, PHP и Java.

Многие особенности, имеющиеся в арсенале Grails, отсутствуют в Rails - особенности использования корпоративного окружения, созданные в течение длинной истории развития виртуальных машин Java (JVM).

Семь основных доводов, обеспечивающих платформе Grails доминирующее положение на рынке веб-платформ на языке Java (рисунок 16).

Рисунок 16 - Доводы преимуществ платформы Grails

1. Преимущество соглашений перед настройками

В платформе Grails мало файлов с настройками. Большинство решений принимается платформой Grails на основе достаточно разумных значений по умолчанию в программном коде. Однако, это не означает использование соглашений вместо настроек. Если потребуется отладить поведение по умолчанию, для этого имеются все средства.

2. Философия гибкой разработки

Платформа Grails обеспечивает серьезные возможности, дающие ей право называться гибкой веб-платформой. Благодаря использованию динамического языка программирования (Groovy) платформа Grails позволяет легко и просто создавать вещи, которые при работе на языке Java были очень трудоемкими. Например, обработка форм, реализация библиотек тегов и написание тестов. Появляется возможность изменять поведение приложения прямо во время его выполнения без перезагрузки сервера. Платформа Grails выводит гибкость разработки веб-приложений на языке Java на совершенно новый уровень.

3. Надежная основа

Grails наполнена новыми, ультрасовременными идеями, но основу ее составляют испытанные технологии: Spring и Hibernate. Данные технологии используются во многих проектах на Java, они надежны и проверены временем. Модуль планировщика выполненения заданий построен на базе механизма Quartz, модуль поиска - на базе библиотек Lucence и Compass. А механизм отображения - на базе SiteMesh.

Имеет место что-то вроде максимального улучшения существующих приемов разработки без отказа от надежных и проверенных технологий.

4. Скаффолдинг и шаблоны

Если попробовать вручную развернуть приложение на платформе Spring MVC, потребуется создать каталог для файлов JAR, множество файлов с определениями специальных классов бинов (bean), набор файлов web.xml с настройками, связку аннотированных объектов POJO, несколько файлов с настройками для библиотеки Hibernate, сценарий создания базы данных, после чего система сборки сможет превратить все это в работающее приложение. На платформе Grails достаточно всего одной команды чтобы собрать работающее приложение. Командой выполняются те же самые операции, но они опираются на соглашения и разумные значения по умолчанию, а не на настройки определяемые вручную.

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

Платформа Grails обладает удивительной особенностью, получившей название «скаффолдинг» (scaffolding). На основе классов, описывающих модель (структуру) базы данных, платформа Grails может динамически генерировать набор представлений и контроллеров, позволяющих выполнять простейшие CRUD-операции - creating (создание), reading (чтение), updating (изменение) и deleting (удаление) - без единой строчки программного кода.

5. Интеграция с Java

Одна из уникальных особенностей сообщества Groovy и Grails состоит в том, что в отличие от некоторых других языков, поддерживаемых JVM, сообщество Grails признает, что есть задачи и решения которые лучше реализуются на языке со статической типизацией, поэтому нет проблем при создании классов обработки форм на языке Groovy и реализации высокопроизводительных вычислительных алгоритмов на языке Java.

6. Дружелюбное сообщество

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

7. Идеальная производительность труда

Платформа Grails открывает возможность быстро и производительно разрабатывать надежные веб-приложения, увеличивает производительность разработчика благодаря совместному использованию динамического языка программирования, философии преимущества соглашений перед настройками, мощных практичных инструментов и гибких методик, заимствованных из лучших парадигм веб-разработки.

Подводя итог, можно сделать вывод, что Grails является отличным кандидатом для реализации веб-проекта [13].

4.4 Описание структур кода. Особенности программирования на Grails

При написании программ на платформе Grails происходит взаимодействие таких объектов как:

1) Контроллеры (Controllers)

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

2) Представления (views)

Реализация оформления страниц на платформе Grails происходит при помощи представлений. Представление - это отдельные файлы, содержащие логику управления отображениями.

3) Макеты

Макеты обеспечивают возможность определить шаблоны размещения определенных частей приложения.

4) Модели данных (models)

Для описания объектов данных, которые могут сохраняться в базе данных, в платформе Grails используется классы предметной области. Классы модели хранятся в директории проекта Grails [13].

Приложения Grails работают согласно архитектуре «Модель-представление-контроллер» (MVC)

«Архитектурная схема модель-представление-контроллер (MVC) осуществляет разделение между “логикой предметной области” (также называемой “бизнес-логикой”) от логики ввода и логики представления, связанной с графическим интерфейсом пользователя (GUI). В случае веб-приложений, “логика предметной области” обычно состоит из модели данных для таких вещей как пользователи, статьи, продукты, а GUI это просто веб-страница в браузере.

Взаимодействуя с приложением Grails, браузер отправляет запрос, который принимается веб-сервером и передается контроллеру Grails, отвечающему за то, что делать дальше (рисунок 17). В некоторых случаях контроллер сразу визуализирует представление, которое является шаблоном, конвертирующим полученное в HTML и отсылающим назад к браузеру. Более обычно для динамичных сайтов, когда контроллер взаимодействует с моделью, которая является объектом Groovy, который представляет собой элемент сайта (такой как пользователь) и отвечает за коммуникацию с базой данных. После вызова модели, контроллер затем визуализирует представление и возвращает полную веб-страницу браузеру как HTML» [15].

Рисунок 17 - Схематичное изображение модель-представление-контроллер (MVC) архитектуры

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

Заключение

Итогом проделанной работы является созданная автоматизированная система коммуникации субъектов учебного процесса. В процессе разработки были выполнены следующие задачи:

Описана предметная область и сформулирована постановка задачи дипломной работы

Разработана функциональная модель системы в виде отображения внутренних процессов при помощи построения операционных диаграмм стандарта IDEF0

Спроектирована и реализована структура базы данных

Проведен анализ различных СУБД

Построены общие алгоритмы и реализован заявленный набор функций при помощи платформы grails на java подобном языке.

Рассмотрены возможности и особенности программирования на платформе Grails.

Для решения поставленной задачи была изучена набирающая популярность перспективная платформа разработки веб-приложений Grails. Также такие технологии как html, css, javascript, ajax; прикладная программа визуального моделирования BPwin, язык структурированных запросов sql и работа с системой управления базами данных MySQL.

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

Список литературы

1. При написании данной дипломной работы использовались следующие книги и интернет-ресурсы:

2. Уроки, справочники [Электронный ресурс]: Методологии моделирования предметной области. Режим доступа к ресурсу: http://do.gendocs.ru/docs/index-101511.html

3. Автоматизация управления компаниями [Электронный ресурс]: Описание стандарта IDEF0. Режим доступа к ресурсу: http://www.insapov.ru/idef0-standard-description.html

4. Лунаев Е.А. Информационные технологии управления персоналом [Электронный ресурс]: Моделирование бизнес-процессов. Режим доступа к ресурсу: http://www.e-college.ru/xbooks/xbook106/book/index/index.html?go=part-007*page.htm

5. Карпова И.П."Проектирование реляционных баз данных".- М.: Московский Государственный институт электроники и математики, 2010. - 32 с.

6. Карпова И.П. "Основы баз данных. Учебное пособие". - М.: Московский Государственный институт электроники и математики, 2007. - 75 с.

7. Microsoft® SQL Server™ 2005.Реализация и обслуживание. Учебный курс Microsoft (Экзамен 70-431). -- М.: «Питер», 2007. -- С. 767

8. ABACUS Корпоративные информационные системы [Электронный ресурс]: Характеристика СУБД Oracle. Режим доступа к ресурсу: http://www.omega.ru/oracleinfo.html

9. Балдин Е.М. История о PostgreSQL [Электронный ресурс]: Возможности PostgreSQL. Режим доступа к ресурсу: http://www.inp.nsk.su/~baldin/PostgreSQL/postgresql-possibility.pdf

10. Кузнецов Максим, Симдянов Игорь. Самоучитель MySQL 5. -- Спб.: «БХВ-Петербург», 2006. -- С. 560.

11. Пол Макфедрис. «Создание веб-страниц». - М.: АСТ., 2005 - 387 с.

12. Мержевич В.В. «Справочник по HTML. Версия 7.0». - 2011

13. Мержевич В.В. «Справочник CSS v 6.0», - 2011

14. Глен Смит, Питер Ледбрук «Grails. Гибкость Groovy и надежность Java». - Санкт-Петербург, Москва., 2010

15. Нечаев А.М. Создание программ для компьютера. Учебное пособие - Московский государственный институт электроники и математики. М., 2003

16. Майкл Хартл. [Электронный ресурс]: Изучение Rails на Примерах, 2010. Режим доступа к ресурсу: http://railstutorial.ru/chapters/beginning?version=3.0#sec:mvc

Приложение

Объекты предметной области

package soc

class Badge {

String name

byte[] picture

long weight = 1

Date dateCreated

Date lastUpdated

static constraints = {

name(blank: false)

picture(maxSize: 1024)

}

}

package soc

class Comment {

static belongsTo = Post

String content

User master

Date dateCreated

Date lastUpdated

static constraints = {

content(nullable: false, minSize: 6, maxSize: 3000)

master(nullable: true)

}

static mapping = {

autoTimestamp true

master(lazy: false)

}

}

package soc

class Community {

String type

String privateType

String shortName // Абривиатура

String c_describe // Описание

String name // Название

Date dateCreated

Date lastUpdated

TrainingDepartment studyingDivision

static constraints = {

name(blank: false, maxSize: 100, unique: true)

shortName(blank: false, maxSize: 30)

c_describe(blank: false, maxSize: 300)

master(nullable: true)

type(inList: ["научное", "университет", "факультет", "кафедра", "группа", "по интересам"])

privateType(inList: ["закрытое", "открытое"])

studyingDivision(nullable: true)

}

static mapping = {

posts(lazy: false)

members(lazy: false)

master(lazy: false)

studyingDivision(lazy: false)

}

static belongsTo = [master: User]

static hasMany = [posts: Post, members: Member]

boolean userIsMember(User user) {

if (!user) return false

return members.contains(user)

}

boolean getIsPrivate() {

return privateType == "закрытое"

}

}

package soc

class Contact {

String info

Date dateCreated

Date lastUpdated

static constraints = {

info(blank: false, maxSize: 300)

}

static belongsTo = TrainingDepartment // Объект Contact принадлежит TrainingDepartment (учебное отделение)

}

package soc

class Department {

String shortName // Абривиатура

String c_describe // Описание

String name // Название

Date dateCreated

Date lastUpdated

static constraints = {

shortName(nullable: false, maxSize: 30)

c_describe(nullable: false, maxSize: 300)

name(nullable: false, maxSize: 100)

}

}

package soc

class Discipline {

String name

Date dateCreated

Date lastUpdated

TrainingCourse course

static constraints = {

name(blank: false, minSize: 3)

}

}

package soc

class DisciplineTeacher {

static belongsTo = [teacher: User, discipline: Discipline]

}

package soc

class Group {

String shortName // Абривиатура

String c_describe // Описание

String name // Название

Date dateCreated

Date lastUpdated

static hasMany = [students: User]

static constraints = {

shortName(nullable: false, maxSize: 30, unique: true)

c_describe(nullable: false, maxSize: 300)

name(nullable: false, maxSize: 100, unique: true)

students(nullable: true)

}

static mapping = {

table name: '`group`'

}

}

package soc

class Member {

Date dateCreated

Date lastUpdated

static belongsTo = [user: User, community: Community]

}

package soc

class Post {

String name

Member author

Date dateCreated

Date lastUpdated

static constraints = {

name(nullable: false, size: 3..30)

author(nullable: true)

comments(nullable: true)

}

static mapping = {

autoTimestamp true

comments(lazy: false)

}

static belongsTo = Community

static hasMany = [comments: Comment]

}

package soc

/**

* Request Map domain class.

*/

class Requestmap {

String url

String configAttribute

static constraints = {

url(blank: false, unique: true)

configAttribute(blank: false)

}

}

package soc

/**

* Authority domain class.

*/

class Role {

static hasMany = [people: User]

/** description */

String description

/** ROLE String */

String authority

String name

static constraints = {

authority(nullable: false, blank: false, unique: true)

description(nullable: true, blank: true)

name(nullable: true, blank: true)

people(nullable: true)

}

@Override

String toString() {

return name ?: description

}

}

package soc

class StudentTask {

Date dateCreated

Date lastUpdated

static belongsTo = [student: User, task: Task]

}

package soc

class Task {

String type

Date dateCreated

Date lastUpdated

String content

static constraints = {

content(blank: false, minSize: 6)

type(inList: ["домашняя работа", "лабораторная работа", "курсовая работа", "самостоятельная работа", "другое"])

}

static hasMany = [matireals: TrainingMaterial]

}

package soc

class TrainingCourse {

int numLectures

int numRecords

Date dateCreated

Date lastUpdated

static constraints = {

numLectures(min: 1)

numRecords(min: 1)

}

static belongsTo = [department: TrainingDepartment]

}

package soc

// Модель учебного отделения

class TrainingDepartment {

String shortName // Абривиатура

String c_describe // Описание

String name // Название

Date dateCreated

Date lastUpdated

Contact contacts

static constraints = {

name(nullable: false, maxSize: 100)

shortName(nullable: false, maxSize: 30)

c_describe(nullable: false, maxSize: 300)

contacts(nullable: false)

communities(nullable: true)

members(nullable: true)

}

String toString() {

return name

}

static hasMany = [communities: Community, members: TrainingMember]

}

package soc

class TrainingFile {

byte [] content

Date dateCreated

Date lastUpdated

static constraints = {

content(maxSize: 10240)

}

}

package soc

class TrainingMaterial {

String name

Date dateCreated

Date lastUpdated

static constraints = {

name(blank: false, minSize: 6)

}

static belongsTo = [discipline: Discipline]

}

package soc

class TrainingMember {

static belongsTo = [division: TrainingDepartment, user: User]

Date dateCreated

Date lastUpdated

}

package soc

class User {

static transients = ['pass']

static hasOne = [group: Group]

static hasMany = [authorities: Role]

static belongsTo = Role

String login

String password

UserContact contacts

UserProfile profile

Date dateCreated

Date lastUpdated

// For Spring Security plugin's user registration.

String email

String userRealName = "man"

boolean emailShow = false

boolean enabled = true

/** description */

String description = ''

/** plain password to newComm a MD5 password */

String pass = '[secret]'

static constraints = {

login(blank: false, unique: true, size: 3..10)

email(blank: false, unique: true, email: true)

password(blank: false, minSize: 6)

enabled()

dateCreated()

lastUpdated()

role()

profile(nullable: true)

contacts(nullable: true)

group(nullable: true)

description(blank: true)

userRealName(blank: true)

}

static mapping = {

profile(lazy: false)

role(lazy: false)

contacts(lazy: false)

authorities(lazy: false)

}

Role getRole() {

if (!authorities) return null

for (role in authorities) {

return role

}

return null

}

}

package soc

class UserBadge {

static constraints = {

}

Date dateCreated

Date lastUpdated

static belongsTo = [badge: Badge, user: User]

}

package soc

class UserContact {

static belongsTo = User

String content

Date dateCreated

Date lastUpdated

static constraints = {

content(minSize: 6)

}

}

package soc

class UserProfile {

static belongsTo = User

String aboutMe

String state

String surname // фамилия

String name // имя

String middle_name // отчество

String work

Date birthday

Group group

Department department

UserRating rating

Boolean editable = true

Date dateCreated

Date lastUpdated

byte[] photo

static constraints = {

aboutMe(blank: true)

editable()

state(blank: true)

work(blank: true)

birthday(nullable: true)

group(nullable: true)

department(nullable: true)

badges(nullable: true)

photo(nullable: true, maxSize: 1024)

surname(blank: false, minSize: 3)

name(blank: false, minSize: 3)

middle_name(blank: false, minSize: 3)

rating(nullable: false)

}

static mapping = {

group(lazy: false)

department(lazy: false)

}

static hasMany = [badges: UserBadge]

}

package soc

class UserRating {

static belongsTo = UserProfile

Date dateCreated

Date lastUpdated

int value = 0

static constraints = {

value(min: 0)

}

}

Контроллеры

package soc

class BadgeController {

def index = { redirect(action: "allComm", params: params) }

// the delete, saveComm and update actions only accept POST requests

static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

def list = {

params.max = Math.min(params.max ? params.max.toInteger() : 10, 100)

[badgeInstanceList: Badge.list(params), badgeInstanceTotal: Badge.count()]

}

def create = {

def badgeInstance = new Badge()

badgeInstance.properties = params

return [badgeInstance: badgeInstance]

}

def save = {

def badgeInstance = new Badge(params)

if (!badgeInstance.hasErrors() && badgeInstance.save()) {

flash.message = "badge.created"

flash.args = [badgeInstance.id]

flash.defaultMessage = "Badge ${badgeInstance.id} created"

redirect(action: "showComm", id: badgeInstance.id)

}

else {

render(view: "newComm", model: [badgeInstance: badgeInstance])

}

}

def show = {

def badgeInstance = Badge.get(params.id)

if (!badgeInstance) {

flash.message = "badge.not.found"

flash.args = [params.id]

flash.defaultMessage = "Badge not found with id ${params.id}"

redirect(action: "list")

}

else {

return [badgeInstance: badgeInstance]

}

}

def edit = {

def badgeInstance = Badge.get(params.id)

if (!badgeInstance) {

flash.message = "badge.not.found"

flash.args = [params.id]

flash.defaultMessage = "Badge not found with id ${params.id}"

redirect(action: "list")

}

else {

return [badgeInstance: badgeInstance]

}

}

def update = {

def badgeInstance = Badge.get(params.id)

if (badgeInstance) {

if (params.version) {

def version = params.version.toLong()

if (badgeInstance.version > version) {

badgeInstance.errors.rejectValue("version", "badge.optimistic.locking.failure", "Another user has updated this Badge while you were editing")

render(view: "edit", model: [badgeInstance: badgeInstance])

return

}

}

badgeInstance.properties = params

if (!badgeInstance.hasErrors() && badgeInstance.save()) {

flash.message = "badge.updated"

flash.args = [params.id]

flash.defaultMessage = "Badge ${params.id} updated"

redirect(action: "showComm", id: badgeInstance.id)

}

else {

render(view: "edit", model: [badgeInstance: badgeInstance])

}

}

else {

flash.message = "badge.not.found"

flash.args = [params.id]

flash.defaultMessage = "Badge not found with id ${params.id}"

redirect(action: "edit", id: params.id)

}

}

def delete = {

def badgeInstance = Badge.get(params.id)

if (badgeInstance) {

try {

badgeInstance.delete()

flash.message = "badge.deleted"

flash.args = [params.id]

flash.defaultMessage = "Badge ${params.id} deleted"

redirect(action: "list")

}

catch (org.springframework.dao.DataIntegrityViolationException e) {

flash.message = "badge.not.deleted"

flash.args = [params.id]

flash.defaultMessage = "Badge ${params.id} could not be deleted"

redirect(action: "showComm", id: params.id)

}

}

else {

flash.message = "badge.not.found"

flash.args = [params.id]

flash.defaultMessage = "Badge not found with id ${params.id}"

redirect(action: "list")

}

}

}

package soc

class BasicController {

def authenticateService

def userService

def index() {

User user = authenticateService.userDomain() as User

[user: user]

}

def aboutInstitute() {

User user = authenticateService.userDomain() as User

[user: user]

}

def aboutCathedra() {

User user = authenticateService.userDomain() as User

[user: user]

}

def contacts() {

User user = authenticateService.userDomain() as User

[user: user]

}

def doLogin() {

def login = params.j_username

def unhashedPassword = params.j_password

def password = authenticateService.encodePassword(params.j_password)

User user = login ? User.findByLoginAndPassword(login, password) : null

session.user = null

if (user) {

user = userService.deleteSecretFields(user)

session.user = user

}

redirect(action: "index")

}

def logout = {

User user = authenticateService.userDomain() as User

session.user = null

redirect(uri: "/")

}

def toMiem() {

redirect(url: "http://miem.edu.ru/%D0%9E%D0%B1-%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82%D0%B5.html")

}

def toHome() {

redirect(url: "http://fe.miem.edu.ru/tree/?id=55")

}

}

package soc

import java.awt.Color

import java.awt.Font

import java.awt.Graphics2D

import java.awt.RenderingHints

import java.awt.geom.Rectangle2D

import java.awt.image.BufferedImage

import javax.imageio.ImageIO

class CaptchaController {

private static final String SOURCECHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def index = {

response.setContentType('image/png')

response.setHeader('Cache-control', 'no-cache')

// Generate and remember the Source Character string (6 characters)

int l = SOURCECHARS.length()

StringBuilder b = new StringBuilder()

6.times {

int r = (int) (Math.random() * l)

b.append(SOURCECHARS.charAt(r))

}

final int height = 200

final int width = 200

final int space = 8

System.setProperty('java.awt.headless', 'true')

BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)

Graphics2D g2d = bufferedImage.createGraphics()

Font font = new Font('Serif', Font.BOLD, 18)

g2d.setFont(font)

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)

Rectangle2D fontRect = font.getStringBounds(b.toString(), g2d.getFontRenderContext())

// Now, newComm a graphic 'space' pixels wider and taller than the the font

bufferedImage = new BufferedImage((int) fontRect.getWidth() + space,

(int) fontRect.getHeight() + space,

BufferedImage.TYPE_INT_RGB)

g2d = bufferedImage.createGraphics()

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON)

g2d.setFont(font)

// Draw the background

g2d.setColor(Color.WHITE)

g2d.fillRect(0, 0, width, height)

// Draw the lines

g2d.setColor(Color.GRAY)

int x1

int y1

int x2

int y2

final int step = 10

x1 = 0

y1 = step

x2 = step

y2 = 0

while (x1 < width || x2 < width || y1 < height || y2 < height) {

g2d.drawLine(x1, y1, x2, y2)

if (y1 < height) {

x1 = 0

y1 += step

}

else if (x1 < width) {

y1 = height

x1 += step

}

else {

x1 = width

y1 = height

}

if (x2 < width) {

y2 = 0

x2 += step

}

else if (y2 < height) {

x2 = width

y2 += step

}

else {

y2 = height

x2 = width

}

}

// Draw the String

g2d.setColor(Color.BLACK)

g2d.drawString(b.toString(), (int) (space / 2), (int) (space / 4) + (int) fontRect.getHeight())

OutputStream out = response.getOutputStream()

ImageIO.write(bufferedImage, 'PNG', out)

out.close()

session.setAttribute('captcha', b.toString())

}

}

package soc

class CommentController {

def scaffold = true

def index = {}

}

package soc

class CommunityController {

def scaffold = true

def rolesService

def authenticateService

def communityService

def paginateService

static defaultAction = "allComm"

def newComm = {

def communityInstance = new Community()

communityInstance.properties = params

return [communityInstance: communityInstance]

}

def saveComm = {

User user = authenticateService.userDomain() as User

if (user) params.put("master", user)

def communityInstance = new Community(params)

if (!communityInstance.hasErrors() && communityInstance.save()) {

flash.message = "community.created"

flash.args = [communityInstance.id]

flash.defaultMessage = "Community ${communityInstance.id} created"

def community = Community.findById(communityInstance.id)

if (community && user) {

Member member = new Member(community: community, user: user)

if (member) community.addToMembers(member)

}

redirect(action: "showComm", id: communityInstance.id)

}

else {

render(view: "newComm", model: [communityInstance: communityInstance])

}

}

def allComm = {

User user = rolesService.authenticateService.userDomain() as User

if (user)

params.max = Math.min(params.max ? params.max.toInteger() : 7, 100)

[communityInstanceList: Community.list(params), communityInstanceTotal: Community.count()]

}

def filter = {

params.max = Math.min(params.max ? params.int('max') : 7, 100)

render(template: "listTemplate", model: [communityInstanceList: Community.list(params), communityInstanceTotal: Community.count()])

}

def ajaxPost = {

Community communityInstance = Community.get(session.comm_id)

def point = 0

if (communityInstance) {

params.max = Math.min(params.max ? params.int('max') : 7, 100)

List posts = communityInstance.posts as List

int offset = (params.offset ?: 0) as int

int max = params.int('max')

int totalPost = posts.size()

List<Post> subList = paginateService.getPaginateList(posts, offset, max) as List<Post>

render(template: "listPosts", model: [posts: subList, totalPost: totalPost])

} else {

redirect(action: "allComm")

}

}

def getCommunties = {

[communities: Community.list(params), total: Community.count()]

}

def showComm = {

def communityInstance = Community.findByShortName(params.id)

if (communityInstance) {

communityService.community = communityInstance.id

flash.comm_id = communityInstance.id

session.comm_id = communityInstance.id

}

if (!communityInstance) {

flash.message = "community.not.found"

flash.args = [params.id]

flash.defaultMessage = "Community not found with id ${params.id}"

redirect(action: "allComm")

} else {

User user = authenticateService.userDomain() as User

Member member = Member.findByUserAndCommunity(user, communityInstance)

boolean isAdmin = authenticateService.ifAnyGranted(rolesService.admin)

Role rector = Role.findByAuthority(rolesService.rector)

Role teacher = Role.findByAuthority(rolesService.teacher)

Role student = Role.findByAuthority(rolesService.student)

Role userRole = Role.findByAuthority(rolesService.user)

ArrayList<Member> members = communityInstance.members

ArrayList<User> rectors = userList(members, rector)

ArrayList<User> teachers = userList(members, teacher)

ArrayList<User> students = userList(members, student)

ArrayList<User> users = userList(members, userRole)

List posts = communityInstance.posts as List

params.max = Math.min(params.max ? params.int('max') : 7, 100)

def offset = params.offset ?: 0

def totalPost = posts.size()

def max = Math.min(((params.max ?: 0) + offset - 1), totalPost - 1)

List subList = totalPost != 0 ? posts[offset..max] : null

flash.rectors = rectors

flash.teachers = teachers

flash.students = students

flash.users = users

def point = 0

if ((communityInstance.isPrivate) && ((!isAdmin) || (!member))) {

return [community: communityInstance, posts: null, totalPost: 0, rectors: null, teachers: null, students: null,

users: null, rolesService: rolesService]

}

return [community: communityInstance, posts: subList, totalPost: totalPost, rectors: rectors, teachers: teachers, students: students,

users: users, rolesService: rolesService]

}

}

private ArrayList<User> userList(ArrayList<Member> members, Role role) {

ArrayList<User> result = new ArrayList<User>()

for (Member member : members) {

User user = member.user

if (user.role == role)

result.add(user)

}

return result;

}

}

package soc

class ContactController {

def scaffold = true

def index = {}

}

package soc

class DepartmentController {

def scaffold = true

def index = {}

}

package soc

class DisciplineController {

def scaffold = true

def index = {}

}

package soc

class DisciplineTeacherController {

def scaffold = true

def index = {}

}

package soc

class FileController {

def index() { }

}

package soc

import org.springframework.security.context.SecurityContextHolder as SCH

import org.codehaus.groovy.grails.plugins.springsecurity.RedirectUtils

import org.springframework.security.AuthenticationTrustResolverImpl

import org.springframework.security.DisabledException

import org.springframework.security.ui.AbstractProcessingFilter

import org.springframework.security.ui.webapp.AuthenticationProcessingFilter

/**

* Login Controller (Example).

*/

class LoginController {

/**

* Dependency injection for the authentication service.

*/

def authenticateService

/**

* Dependency injection for OpenIDConsumer.

*/

def openIDConsumer

/**

* Dependency injection for OpenIDAuthenticationProcessingFilter.

*/

def openIDAuthenticationProcessingFilter

private final authenticationTrustResolver = new AuthenticationTrustResolverImpl()

def index = {

if (isLoggedIn()) {

redirect uri: '/'

}

else {

redirect action: auth, params: params

}

}

/**

* Show the login page.

*/

def auth = {

nocache response

if (isLoggedIn()) {

redirect uri: '/'

return

}

String view

String postUrl

def config = authenticateService.securityConfig.security

if (config.useOpenId) {

view = 'openIdAuth'

postUrl = "${request.contextPath}/login/openIdAuthenticate"

}

else if (config.useFacebook) {

view = 'facebookAuth'

postUrl = "${request.contextPath}${config.facebook.filterProcessesUrl}"

}

else {

view = 'auth'

postUrl = "${request.contextPath}${config.filterProcessesUrl}"

}

render view: view, model: [postUrl: postUrl]

}

/**

* Form submit action to start an OpenID authentication.

*/

def openIdAuthenticate = {

String openID = params['j_username']

try {

String returnToURL = RedirectUtils.buildRedirectUrl(

request, response, openIDAuthenticationProcessingFilter.filterProcessesUrl)

String redirectUrl = openIDConsumer.beginConsumption(request, openID, returnToURL)

redirect url: redirectUrl

}

catch (org.springframework.security.ui.openid.OpenIDConsumerException e) {

log.error "Consumer error: $e.message", e

redirect url: openIDAuthenticationProcessingFilter.authenticationFailureUrl

}

}

// Login page (function|json) for Ajax access.

def authAjax = {

nocache(response)

//this is example:

render """

<script type='text/javascript'>

(function() {

loginForm();

})();

</script>

"""

}

/**

* The Ajax success redirect url.

*/

def ajaxSuccess = {

nocache(response)

render '{success: true}'

}

/**

* Show denied page.

*/

def denied = {

if (isLoggedIn() && authenticationTrustResolver.isRememberMe(SCH.context?.authentication)) {

// have cookie but the page is guarded with IS_AUTHENTICATED_FULLY

redirect action: full, params: params

}

}

/**

* Login page for users with a remember-me cookie but accessing a IS_AUTHENTICATED_FULLY page.

*/

def full = {

render view: 'auth', params: params,

model: [hasCookie: authenticationTrustResolver.isRememberMe(SCH.context?.authentication)]

}

// Denial page (data|view|json) for Ajax access.

def deniedAjax = {

//this is example:

render "{error: 'access denied'}"

}

/**

* login failed

*/

def authfail = {

def username = session[AuthenticationProcessingFilter.SPRING_SECURITY_LAST_USERNAME_KEY]

def msg = ''

def exception = session[AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY]

if (exception) {

if (exception instanceof DisabledException) {

msg = "[$username] не поддтвержден"

}

else {

msg = "[$username] неверные логин/пароль"

}

}

if (isAjax()) {

render "{error: '${msg}'}"

}

else {

flash.message = msg

redirect uri: "/", params: params

}

}

/**

* Check if logged in.

*/

private boolean isLoggedIn() {

return authenticateService.isLoggedIn()

}

private boolean isAjax() {

return authenticateService.isAjax(request)

}

/** cache controls */

private void nocache(response) {

response.setHeader('Cache-Control', 'no-cache') // HTTP 1.1

response.addDateHeader('Expires', 0)

response.setDateHeader('max-age', 0)

response.setIntHeader('Expires', -1) //prevents caching at the proxy server

response.addHeader('cache-Control', 'private') //IE5.x only

}

}

package soc

/**

* Logout Controller (Example).

*/

class LogoutController {

/**

* Index action. Redirects to the Spring security logout uri.

*/

def index = {

// TODO put any pre-logout code here

redirect(uri: '/j_spring_security_logout')

}

}

package soc

class PostController {

def authenticateService

def scaffold = true

def index = {}

def createPost() {

Community community = Community.get(params.community_id)

if (!community) redirect(controller: "community", action: "allComm")

[post: new Post(params), community_id: community.id]

}

def savePost() {

Community community = Community.get(params.community_id)

User user = authenticateService.userDomain() as User

if (!community || !user) redirect(controller: "community", action: "allComm")

Post post = new Post(params)

if (post.validate()) {

String content = params.content

Member member = Member.findByUser(user)

post.author = member

Comment comment = new Comment(content: content, master: user).save()

if (!comment) {

render(view: "createPost", model: [post: post])

}

post = post.addToComments(comment).save()

community.addToPosts(post)

redirect(controller: "community", action: "showComm", id: community.shortName)

} else {

render(view: "createPost", model: [post: post])

}

}

def newComment() {

Post post = Post.get(params.id)

User user = authenticateService.userDomain() as User

def g = params

String content = params.coment

Comment comment = new Comment(content: content, master: user)

if (comment.validate()) {

post.addToComments(comment)

post.save()

} else {

flash.error_message = "Ошибка добавления поста!"

}

redirect(action: "showPost", id: "${params.id}")

}

def showPost = {

Community communityInstance = Community.get(session.comm_id)

Post postInstance = Post.get(params.id)

if (!communityInstance) redirect(controller: "community", action: "allComm")

if (!postInstance) {

redirect(controller: "community", action: "showComm", id: "${communityInstance.shortName}")

} else {

List<Comment> comments = postInstance.comments as List<Comment>

List rectors = flash.rectors

List teachers = flash.teachers

List students = flash.students

List users = flash.users

flash.rectors = rectors

flash.teachers = teachers

flash.students = students

flash.users = users

List sortComments = comments.sort {comm1, comm2 ->

comm1.lastUpdated <=> comm2.lastUpdated

}

Comment firstComment = sortComments[0]

session.comments = sortComments

session.firstComment = firstComment

[post: postInstance, firstComment: firstComment, comments: sortComments[1..<sortComments.size()], community: communityInstance, rectors: rectors, teachers: teachers, students: students,

users: users]

}

}

def ajaxPost = {

Community communityInstance = Community.get(session.comm_id)

def point = 0

if (communityInstance) {

params.max = Math.min(params.max ? params.int('max') : 7, 100)

List posts = communityInstance.posts as List

int offset = (params.offset ?: 0) as int

def totalPost = posts.size()

int newTotalPosts = totalPost.toInteger() - 1

int newMax = params.int('max') + offset.toInteger() - 1

def max = Math.min(newTotalPosts, newMax)

List subList = posts[offset..max]

def meow = 0

render(template: "listPosts", model: [posts: subList, totalPost: totalPost])

} else {

redirect(action: "allComm")

}

}

}

package soc

import org.springframework.security.providers.UsernamePasswordAuthenticationToken as AuthToken

import org.springframework.security.context.SecurityContextHolder as SCH

/**

* Registration controller.

*/

class RegisterController {

def authenticateService

def daoAuthenticationProvider

def emailerService

def rolesService

static Map allowedMethods = [save: 'POST', update: 'POST']

/**

* User Registration Top page.

*/

def index = {

// skip if already logged in

if (authenticateService.isLoggedIn()) {

redirect action: show

return

}

if (session.id) {

def person = new User()

person.properties = params

return [person: person]

}

redirect uri: '/'

}

/**

* User Information page for current user.

*/

def show = {

// get user id from session's domain class.

User user = authenticateService.userDomain() as User

if (user) {

render view: 'show', model: [person: User.get(user.id)]

}

else {

redirect action: index

}

}

/**

* Edit page for current user.

*/

def edit = {

User person

User user = authenticateService.userDomain() as User

if (user) {

person = User.get(user.id)

}

if (!person) {

flash.message = "[Illegal Access] User not found with id ${params.id}"

redirect action: index

return

}

[person: person]

}

/**

* update action for current user's edit page

*/

def update = {

def person

User user = authenticateService.userDomain() as User

if (user) {

person = User.get(user.id)

}

else {

redirect action: index

return

}

if (!person) {

flash.message = "[Illegal Access] User not found with id ${params.id}"

redirect action: index, id: params.id

return

}

// if user want to change password. leave passwd field blank, passwd will not change.

if (params.password && params.password.length() > 0

&& params.repassword && params.repassword.length() > 0) {

if (params.password == params.repassword) {

person.password = authenticateService.encodePassword(params.passwd)

}

else {

person.password = ''

flash.message = 'The passwords you entered do not match.'

render view: 'edit', model: [person: person]

return

}

}

person.userRealName = params.userRealName

person.email = params.email

if (params.emailShow) {

person.emailShow = true

}

else {

person.emailShow = false

}

if (person.save()) {

redirect action: show, id: person.id

}

else {

render view: 'edit', model: [person: person]

}

}

/**

* Person save action.

*/

def save = {

// skip if already logged in

if (authenticateService.isLoggedIn()) {

redirect action: show

return

}

def person = new User()

person.properties = params

def config = authenticateService.securityConfig

def defaultRole = config.security.defaultRole

def role = Role.findByAuthority(defaultRole)

if (!role) {

person.password = ''

flash.message = 'Default Role not found.'

render view: 'index', model: [person: person]

return

}

if (params.captcha.toUpperCase() != session.captcha) {

person.password = ''

flash.message = 'Код введён неверно!.'

render view: 'index', model: [person: person]

return

}

if (params.password != params.repassword) {

person.password = ''

flash.message = 'The passwords you entered do not match.'

render view: 'index', model: [person: person]

return

}

def pass = authenticateService.encodePassword(params.password)

person.password = pass

person.enabled = true

person.emailShow = true

person.description = ''

person = person.save()

if (person) {

Role newRole = Role.findByAuthority(rolesService.user)

// now add the User to the role

newRole.addToPeople(person)

// Записываем всё в базу

newRole.save()

if (config.security.useMail) {

String emailContent = """You have signed up for an account at:

${request.scheme}://${request.serverName}:${request.serverPort}${request.contextPath}

Here are the details of your account:

-------------------------------------

LoginName: ${person.login}

Email: ${person.email}

Full Name: ${person.userRealName}

Password: ${params.password}

"""

def email = [

to: [person.email], // 'to' expects a List, NOT a single email address

subject: "[${request.contextPath}] Account Signed Up",

text: emailContent // 'text' is the email body

]

emailerService.sendEmails([email])

}

person.save(flush: true)

def auth = new AuthToken(person.login, params.password)

def authtoken = daoAuthenticationProvider.authenticate(auth)

SCH.context.authentication = authtoken

redirect uri: '/'

}

else {

person.password = ''

render view: 'index', model: [person: person]

}

}

}

package soc

/**

* soc.Requestmap controller.

*/

class RequestmapController {

def authenticateService

// the delete, saveComm and update actions only accept POST requests

static Map allowedMethods = [delete: 'POST', save: 'POST', update: 'POST']

def index = {

redirect action: list, params: params

}

def list = {

if (!params.max) {

params.max = 10

}

[requestmapList: Requestmap.list(params)]

}

def show = {

def requestmap = Requestmap.get(params.id)

if (!requestmap) {

flash.message = "soc.Requestmap not found with id $params.id"

redirect action: list

return

}

[requestmap: requestmap]

}

def delete = {

def requestmap = Requestmap.get(params.id)

if (!requestmap) {

flash.message = "soc.Requestmap not found with id $params.id"

redirect action: list

return

}

requestmap.delete()

authenticateService.clearCachedRequestmaps()

flash.message = "soc.Requestmap $params.id deleted."

redirect(action: list)

}

def edit = {

def requestmap = Requestmap.get(params.id)

if (!requestmap) {

flash.message = "soc.Requestmap not found with id $params.id"

redirect(action: list)

return

}

[requestmap: requestmap]

}

/**

* Update action, called when an existing soc.Requestmap is updated.

*/

def update = {

def requestmap = Requestmap.get(params.id)

if (!requestmap) {

flash.message = "soc.Requestmap not found with id $params.id"

redirect(action: edit, id: params.id)

return

}

long version = params.version.toLong()

if (requestmap.version > version) {

requestmap.errors.rejectValue 'version', "requestmap.optimistic.locking.failure",

"Another user has updated this soc.Requestmap while you were editing."

render view: 'edit', model: [requestmap: requestmap]

return

}

requestmap.properties = params

if (requestmap.save()) {

authenticateService.clearCachedRequestmaps()

redirect action: show, id: requestmap.id

}

else {

render view: 'edit', model: [requestmap: requestmap]

}

}

def create = {

[requestmap: new Requestmap(params)]

}

/**

* Save action, called when a new soc.Requestmap is created.

*/

def save = {

def requestmap = new Requestmap(params)

if (requestmap.save()) {

authenticateService.clearCachedRequestmaps()

redirect action: show, id: requestmap.id

}

else {

render view: 'create', model: [requestmap: requestmap]

}

}

}

package soc

import soc.Role

/**

* Authority Controller.

*/

class RoleController {

// the delete, saveComm and update actions only accept POST requests

static Map allowedMethods = [delete: 'POST', save: 'POST', update: 'POST']

def authenticateService

def index = {

redirect action: list, params: params

}

/**

* Display the allComm authority page.

*/

def list = {

if (!params.max) {

params.max = 10

}

[authorityList: Role.list(params)]

}

/**

* Display the showComm authority page.

*/

def show = {

def authority = Role.get(params.id)

if (!authority) {

flash.message = "soc.Role not found with id $params.id"

redirect action: list

return

}

[authority: authority]

}

/**

* Delete an authority.

*/

def delete = {

def authority = Role.get(params.id)

if (!authority) {

flash.message = "soc.Role not found with id $params.id"

redirect action: list

return

}

authenticateService.deleteRole(authority)

flash.message = "soc.Role $params.id deleted."

redirect action: list

}

/**

* Display the edit authority page.

*/

def edit = {

def authority = Role.get(params.id)

if (!authority) {

flash.message = "soc.Role not found with id $params.id"

redirect action: list

return

}

[authority: authority]

}

/**

* Authority update action.

*/

def update = {

def authority = Role.get(params.id)

if (!authority) {

flash.message = "soc.Role not found with id $params.id"

redirect action: edit, id: params.id

return

}

long version = params.version.toLong()

if (authority.version > version) {

authority.errors.rejectValue 'version', 'authority.optimistic.locking.failure',

'Another user has updated this soc.Role while you were editing.'

render view: 'edit', model: [authority: authority]

return

}

if (authenticateService.updateRole(authority, params)) {

authenticateService.clearCachedRequestmaps()

redirect action: show, id: authority.id

}

else {

render view: 'edit', model: [authority: authority]

}

}

/**

* Display the newComm new authority page.

*/

def create = {

[authority: new Role()]

}

/**

* Save a new authority.

*/

def save = {

def authority = new Role()

authority.properties = params

if (authority.save()) {

redirect action: show, id: authority.id

}

else {

render view: 'create', model: [authority: authority]

}

}

}

package soc

class SecretController {

def index() { }

}

package soc

import javax.servlet.http.HttpServletResponse

class UserController {

def scaffold = true

def authenticateService

def rolesService

def secureService

def register = {

if (params) {

if (params.password) {

params.password = authenticateService.encodePassword(params.password)

}

def user = new User(params)

if (user.validate()) {

if (params.captcha?.toUpperCase() != session.captcha) {

user.password = ""

flash.message = "Неправильный код"

return [user: user]

}

user = user.save()

Role role = Role.findById(rolesService.USER)

role.addToPeople(user)

role.save()

flash.message = "Вы успешно зарегистрировались"

redirect(uri: '/success')

} else {

user.password = ""

flash.message = "Ошибка регистрации"

return [user: user]

}

}

}

def showProfile = {

User user = User.get(params.id)

if (!user) {

response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404

return

}

User myUser = authenticateService.userDomain() as User

int userRating = user?.profile?.rating?.value ?: 0

userRating /= 1000000 / 100

List<Comment> comments = Comment.findAllByMaster(user, [offset: 0, max: 10])

[user: user, myUser: myUser, userRating: userRating]

}

def changeRole = {

List users = User.findAll()

List roles = Role.findAll()

[users: users, roles: roles]

}

def saveRole = {

def p = params

String role_id = params.role_id == "null" ? "" : params.role_id

if (role_id.isEmpty()) {

flash.error_message = "Роль #${params.role_id} отсутствует!"

redirect(action: "changeRole")

return

}

User user = User.get(params.user_id)

Role role = Role.get(params.role_id)

if (!user) {

flash.error_message = "Пользователь #${params.user_id} не найден!"

redirect(action: "changeRole")

return

}

if (!role) {

flash.error_message = "Роль #${params.role_id} отсутствует!"

redirect(action: "changeRole")

return

}

User myUser = authenticateService.userDomain() as User

if (user.id == myUser.id) {

flash.error_message = "Вы не можете изменить роль самому себе!"

redirect(action: "changeRole")

return

}

user.save()

Role.findAll().each { it.removeFromPeople(user) }

Role.findByAuthority(role.authority).addToPeople(user)

user = User.get(params.user_id)

if (!user.profile) {

UserRating _rating = new UserRating().save()

UserProfile prof = new UserProfile(aboutMe: "Новый пользователь", birthday: new Date(0, 0, 0),

name: "Новый", surname: "Пользователь", middle_name: "Очень", rating: _rating,

work: "Новый пользователь", state: "Здравствуйте!").save()

user.profile = prof

} else {

user.profile.editable = false

}

user.save()

flash.success_message = "Роль пользователя #${user.id} успешно изменена на ${role.toString()}!"

redirect(action: "changeRole")

}

def test = {

ArrayList<String> keys = secureService.getGeneratedKeys(10, 10)

keys.clear()

}

}

Представления

<nav>

<table width="100%" align="center">

<tr>

<td><a href="<g:createLink action="index"/>">О проекте</a></td>

<td><a href="<g:createLink action="aboutInstitute"/>">Об институте</a></td>

<td><a class="active" href="<g:createLink action="aboutCathedra"/>">О кафедре</a></td>

<td><a href="<g:createLink controller="community" action="allComm"/>">Соо...


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

  • Выбор основных средств и методологии проектирования и СУБД. Построение инфологической модели предметной области. Выявление полного перечня ограничений целостности. Описание информационных потребностей пользователей и выбор способов их реализации.

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

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

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

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

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

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

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

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

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

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

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

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

    курсовая работа [487,2 K], добавлен 17.03.2014

  • Понятие и разновидности, подходы к формированию инфологических моделей. Модель информационной системы Захмана, направления ее развития и анализ результатов. Компоненты инфологического уровня описания предметной области. Сбор требований пользователей.

    презентация [136,3 K], добавлен 19.08.2013

  • Определение предметной области базы данных ("Сеть ресторанов"), виды ее моделирования. Первоначальный набор сущностей и атрибутов предметной области. Процесс смыслового наполнения базы данных. Атрибуты в концептуальной модели. Характеристика видов связей.

    контрольная работа [510,9 K], добавлен 03.12.2014

  • Определение класса защищённости АС. Разработка модели угроз. Выбор механизмов и средств защиты информационных ресурсов от несанкционированного доступа. Создание структуры каталогов для заданного количества пользователей автоматизированной системы.

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

  • Анализ предметной области и разработка проекта информационной системы по поддержке пользователей на базе 1С: Предприятие. Проведение формализации логических моделей информационных процессов и процедур в проектной системе. Реализация функций системы 1С.

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

  • Анализ информационной системы ИНЭК "Страховщик". Описание предметной области с использованием модели "сущность-связь". Моделирование бизнес-процессов с помощью IDEF0-диаграмм. Проектирование и разработка приложения в среде Delphi и создание интерфейса.

    отчет по практике [4,9 M], добавлен 28.12.2014

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

    курсовая работа [706,2 K], добавлен 17.06.2012

  • Анализ предметной области и требований пользователей для разработки программного средства по автоматизации работы склада строительных материалов. Описание работы с базой данных Access, позволяющей добавлять и редактировать информацию, оформлять накладную.

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

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

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

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

    курсовая работа [4,3 M], добавлен 19.12.2011

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

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

  • Анализ предметной области "Конкурс поэтов" на основе объектно-ориентированного подхода. Разработка оконного приложения и описание информационной модели предметной области. Описание разработанных процедур С++ и результатов тестирования приложения.

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

  • Системный анализ предметной области. Построение концептуальной и даталогичной модели базы данных. Физическое проектирование базы данных. Описание функциональной модели системы управления базами данных. Разработка экранных форм ввода-вывода и отчета.

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

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

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

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