Социальная сеть
Разработка модели системы. Оценка методологии моделирования предметной области. Анализ диаграмм декомпозиции функции. Определение дополнительных ограничений целостности. Описание групп пользователей и прав доступа. Разработка алгоритмов работы системы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 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