Создание системы "Домашняя бухгалтерия"
Описание и обоснование выбора процедур процесса конструирования. Требования к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие. Тестирование модуля регистрации, авторизации, восстановления и смены пароля.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 29.10.2017 |
Размер файла | 361,1 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Факультет Информационных систем и технологий
Кафедра Информационных систем
Дисциплина Конструирование программного обеспечения
КУРСОВОЙ ПРОЕКТ (РАБОТА)
Тема: Домашняя бухгалтерия
Выполнил студент
Кураков С. Б.
Руководитель:
Романов А.А.
Ульяновск 2014 г
Задание на курсовой проект (работу)
студенту ____ПИбд-41____________ ______Кураков С. Б.________________
группа фамилия, инициалы
Тема проекта (работы)_________ Домашняя бухгалтерия________________________
Срок сдачи законченного проекта (работы) «___» ________________20____г.
Исходные данные к проекту (работе)____задание кафедры_______________________
(базовое предприятие, характер курсового проекта (работы):
________________
задание кафедры, инициативная НИР, рекомендуемая литература, материалы практики)
_______________
Содержание пояснительной записки (перечень подлежащих разработке вопросов)______________________________________
Перечень графического материала (с точным указанием обязательных чертежей)
___________________________________________
Руководитель преподаватель кафедры ИС _____________ /___А. А., Романов__/ должность подпись инициалы, фамилия
Студент ___________________________ /____С. Б. Кураков____________/ подпись инициалы, фамилия
Содержание
Введение
1. Планирование разработки проекта
2. Описание, обоснование выбора процедур процесса конструирования
3. Методология
4. Стратегия
5. Качество конструирования
Заключение
Приложение
Введение
Проблема управления личным бюджетом является актуальной для каждого человека. Мы постоянно совершаем различные покупки, берём деньги в долг, храним сбережения... И наш бюджет стремительно падает, если мы неэфеективно тратим имеющиеся финансы. Грамотно распоряжающийся своим бюджетом человек постоянно сделит за тем, сколько денег у него есть, рассчитывает, сколько денег ему нужно потратить, и принимает решения, где он может сэкономить и от чего он может вообще отказаться. Мы могли бы многократно упростить данные процессы, разработав автоматизированную систему управления личным бюджетом. Именно для этой цели и был придуман проект «Домашняя бухгалтерия», о котором далее пойдёт речь.
Задачи
Цель «Домашней бухгалтерии» - автоматизировать наши повседневные финансовые расчёты.
Почти каджый день мы тратим деньги на различные покупки и услуги. Разрабатываемая система позволит нам вести дневник затрат и поступлений, рассчитывать, как они повлияют на общий бюджет, а также анализировать, когда и из-за чего было потрачено/получено наибольшее количество денег.
Система позволит вести учёт не только совершённых финансовых операциях, но и планируемых. Мы можем брать дениги в долг, выплачивать кредиты и т.д. «Домашняя бухгалтерия» позволит нам вести дневник долгов и выплат по ним, рассчитывать, сколько денег осталось выплатить и уведомлять о предстоящих выплатах.
Система должна быть эффективной, в плане обработки данных, выполнения программных функций; должна быть устойчивой, т.е. выполнять все функции, которые будут разработаны, независимо от внешних факторов или же реагировать на изменения путем вызова системной ошибки(возможно показывать на каком месте произошел сбой). Должны быть созданы диалоговые окна для интерактивного режима работы с пользователем. Выполнение требований эргономичности интерфейса, создание комфортных условий работы.
1. Планирование разработки проекта
Работы по созданию системы выполняются в три этапа:
Этап |
Продолжительность |
||
1. |
Проектирование, разработка эскизного проекта, разработка технического проекта |
2,5 месяца |
|
2. |
Разработка рабочей документации. Адаптация программ |
1 месяц |
|
3. |
Ввод в действие |
1 месяц |
Конкретные сроки выполнения стадий и этапов разработки и создания Системы определяются Правилом выполнения работ, который установлен договором на выполнение работ по настоящему техническому заданию.
Описание проектирования
Диаграмма вариантов использования
Требования к функциям, выполняемые системой
Программа должна предоставлять следующие возможности:
· Добавлять и изменять записи о совершённых и планируемых денежных поступлениях и расходах
· Добавлять и изменять записи о долгах и устанавливать по ним планы выплат: сколько денег нужно вернуть, до какого числа должен быть выплачен долг и с какой периодичностью будут проводиться выплаты
· Вручную добавлять и изменять записи о выплатах по долгам
· Указывать, к какой категории относится финансовая опрация
· Отображать информацию о текущем состоянии баланса
· Уведомлять пользователя о запланированных действиях
· Строить графики изменения баланса и указывать, в какой момент времени баланс достиг максимального/минимального значения
· Строить графики сравнения моментов времени по сумме финансовых операций и указывать, в какой момент времени сумма финансовых операций была наибольшей/наименьшей
· Строить графики сравнения категорий по сумме финансовых операций и указывать, в какой категории сумма финансовых операций была наибольшей/наименьшей
Исходные данные:
· Данные о денежных поступлениях и расходах пользователя: дата, категория, сумма, комментарий
· Данные о долгах: дата начала выплат, дата окончания выплат, категория, полученная сумма, возвращаемая сумма, периодичность выплат, сумма выплаты
Выходные данные:
· Список сохранённых данных по финансовым операциям пользователя
· Текстовая и графическая информация, полученная в результате анализа исходных данных
Требования к надёжности
Программа должна работать с текстовыми и числовыми данными, в соответствии с обработкой и их использованием, выдавать сообщения об ошибках при неверно заданных исходных данных, поддерживать диалоговый режим в рамках предоставленных пользовательских возможностей.
Условия эксплуатации
Условия эксплуатации программы совпадают с условиями эксплуатации ПК. Программа должна быть рассчитана на непрофессионального пользователя.
Взаимодействие с другими модулями
Приложение работает с использованием следующих библиотек:
· JavaEE 7.0
· Primefaces 5.1
Требования к составу и параметрам технических средств
· Клавиатура, мышь, дисплей
· Процессор с тактовой частотой от 1 GHz
· 2GB DDR3 Memory
Требования к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие
В перечень основных мероприятий включают:
· Приведение поступающей в систему информации (в соответствии с требованиями к информационному и лингвистическому обеспечению) к виду, пригодному для обработки с помощью ЭВМ;
· Изменения, которые необходимо осуществить в объекте автоматизации;
· Создание условий функционирования объекта автоматизации, при которых гарантируется соответствие создаваемой системы требованиям
2. Описание, обоснование выбора процедур процесса конструирования
Календарный план:
Задача |
Время (в часах) |
|
Исследование аналогов системы |
4 |
|
Составление списка функций |
4 |
|
Проектирование макета |
8 |
|
Выбор стратегии разработки проекта |
2 |
|
Проектирование диаграммы |
4 |
|
Разработка прототипа |
16 |
|
Разработка ПО |
80 |
|
Тестирование ПО, исправление багов |
40 |
|
Документирование |
16 |
|
Составление актов сдачи приёмки |
6 |
|
Суммарно |
180 |
Описание функций:
1. Регистрация пользователей - добавление новых пользователей в систему. При регистрации пользователь вводит свой email и пароль, после чего ему на почту присылается письмо с подтверждением регистрации. Перейдя по ссылке письме, он активирует свой аккаунт и получает возможность войти в систему.
2. Авторизация пользователей - проверка истинности введённых логина и пароля пользователя.
3. Смена и восстановление пароля - если пользователь забыл пароль, он может перейти по ссылке восстановления пароля, ввести свой email и получить на указанный адрес письмо с временным паролем, после чего он сможет указать новый пароль.
4. Список расходов и поступлений - пользователь может сохранить в системе запись о финансовой операции, указав дату, сумму, категорию, комментарий. На странице списка расходов и поступлений отображаются все оставленные пользователем записи, он может их редактировать и удалять.
5. Дневник расходов и поступлений - на верхнем меню отображается уведомление о том, сколько дейстивий запланировано на сегодняшний день. Пользователь может просмотреть эти действия, а также просмотреть действия, запланированные на другой день, выбрав другую дату на странице дневника. По выбранному дню рассчитывается и выводится общее состояние баланса.
6. График изменения баланса - по данным о платежах рассчитвается состояния баланса в указанные пользователем дни и отображаются на графике.
7. График сравнения дней по сумме финансовых операций - рассчитвается сумма всех поступлений/затрат по каждому дню и отображается на графике.
8. График сравнения категорий по сумме финансовых операций - рассчитывается сумма всех поступлений/затрат по каждой категории и отображается на графике.
9. Список долгов - пользователь может сохранить в системе запись о долге, указав дату начала выплат, дату окончания выплат, полученную сумму, возвращаемую сумму, периодичность выплат, сумму выплаты, категорию, комментарий. На странице списка долгов отображаются все оставленные пользователем записи о долгах, он может их редактировать, удалять.
10. Список выплат по долгам - при создании долга в систему добавляются записи по выплатам. На странице списка долгов можно выбрать долг для просмотра и редактирования выплат.
11. График сравнения дней по сумме задолженностей - рассчитывается сумма невыплаченных долгов по каждому дню и отображается на графике.
12. Интерактивные графики - пользователь может выбрать день, щелкнув по точке на графике баланса или сравнения дней, и перейти на страницу дневника, чтобы просмотреть, какие операции были совершены в выбранный день. Также, под графиком отображается дни, в которых баланс был максимальным/минимальным, и кнопки просмотра этих дней на странице дневника.
3. Методология
В качестве методологии разработки системы выбраны agile-методы. Это серия подходов к разработке программного обеспечения, ориентированных на использование итеративной разработки, динамическое формирование требований и обеспечение их реализации в результате постоянного взаимодействия внутри самоорганизующихся рабочих групп, состоящих из специалистов различного профиля.
Данные методология нацелена на минимизацию рисков путём сведения разработки к серии коротких циклов, называемых итерациями, которые длятся две-три недели. Каждая итерация сама по себе выглядит как программный проект в миниатюре и включает все задачи, необходимые для выдачи мини-прироста по функциональности: планирование, анализ требований, проектирование, программирование, тестирование и документирование. По окончании каждой итерации выполняется переоценка приоритетов разработки.
Также используются принципы Scrum - набор принципов, на которых строится процесс разработки, позволяющий в жёстко фиксированные и небольшие по времени итерации, называемые спринтами (sprints), предоставлять конечному пользователю работающее ПО с новыми возможностями, для которых определён наибольший приоритет. Возможности ПО к реализации в очередном спринте определяются в начале спринта на этапе планирования и не могут изменяться на всём его протяжении. При этом строго фиксированная небольшая длительность спринта придаёт процессу разработки предсказуемость и гибкость.
4. Стратегия
Разработка общей модели
Разработка начинается с высокоуровневого сквозного анализа широты решаемого круга задач и контекста системы. Далее для каждой моделируемой области делается более детальный сквозной анализ. Сквозные описания составляются и выносятся на дальнейшее обсуждение и экспертную оценку. Одна из предлагаемых моделей или их объединение становится моделью для конкретной области. Модели каждой области задач объединяются в общую итоговую модель, которая изменяется в ходе работы.
Составление списка необходимых функций системы
Информация, собранная при построении общей модели, используется для составления списка функций. Это осуществляется разбиением областей на подобласти (предметные области) с точки зрения функциональности. Каждая отдельная подобласть соответствует какому-либо бизнес-процессу, шаги которого становятся списком функций (свойств). В данном случае функции -- это маленькие части понимаемых пользователем функций, представленных в виде «<действие> <результат> <объект>», например, «проверка пароля пользователя».
В данном случае рассмотрим бизнес процессы ведения БД товаров, материалов, списка клиентов, пользователей, поставщиков; журналирование заказов; ведение отчетности и прайс листа. Данные бизнес процессы включают в себя выделенные далее функции.
Разработка каждой функции должна занимать не более 2 недель, иначе задачу необходимо разбить на несколько подзадач, каждая их которых сможет быть завершена за установленный двухнедельный срок.
1. Список выделенных функций:
2. Регистрация пользователей
3. Авторизация пользователей
4. Смена и восстановление пароля
5. Список расходов и поступлений
6. Дневник расходов и поступлений
7. График изменения баланса
8. График сравнения дней по сумме финансовых операций
9. График сравнения категорий по сумме финансовых операций
10. Список долгов
11. Список выплат по долгам
12. График сравнения дней по сумме задолженностей
13. Интерактивные графики
Планирование работы над каждой функцией
После составления списка основных функций, наступает черёд составления плана разработки программного обеспечения. Владение классами распределяется среди программистов путем упорядочивания и организации свойств (или наборов свойств) в классы. Методы и конструкторы проекта (см. Приложение 1).
Проектирование функции
Для каждого свойства создается проектировочный пакет. Ведущий программист выделяет небольшую группу свойств для разработки в течение двух недель. Далее пишутся «болванки» классов и методов, и происходит критическое рассмотрение дизайна. Методы и конструкторы проекта (см. Приложение 1).
Реализация функции
После успешного рассмотрения дизайна, данная видимая клиенту функциональность реализуется до состояния готовности. Для каждого класса пишется программный код. После модульного тестирования каждого блока и проверки кода, завершенная функция включается в основной проект.
Время затраченное на реализацию функций:
Функция |
Затраченные часы |
Итерации |
|
Регистрация пользователей |
4 |
2 |
|
Авторизация пользователей |
2 |
1 |
|
Смена и восстановление пароля |
2 |
3 |
|
Список расходов и поступлений |
24 |
8 |
|
Дневник расходов и поступлений |
16 |
6 |
|
График изменения баланса |
16 |
4 |
|
График сравнения дней по сумме финансовых операций |
4 |
2 |
|
График сравнения категорий по сумме финансовых операций |
4 |
2 |
|
Список долгов |
8 |
4 |
|
Список выплат по долгам |
4 |
4 |
|
График сравнения дней по сумме задолженностей |
4 |
2 |
|
Интерактивные графики |
8 |
4 |
|
Суммарно |
96 |
42 |
Используемые языки
Используемый язык программирования - Java. Для вёрстки и дизайна веб-страниц были использованы языки XHTML и CSS. Конфигурационные файлы реализованы в формате XML.
Инструменты
Перечень программ:
· Среда Eclipse Luna
· Сервер Wildfly
· СУБД PostgreSQL
Серверная часть должна работать под управлением систем Linux или Windows. Клиентская часть должна работать под управлением браузеров Mozilla Firefox, Google Chrome или Opera.
Техника кодирования
Используются стандартные библиотеки, модули и пакеты Java, а также набор библиотек Java EE.
5. Качество конструирования
Было проведено ручное тестирование каждого модуля системы. Ниже приведён процесс тестирования и результаты.
1. Тестирование модуля регистрации
В качестве тестовых данных было зарегистрировано 5 пользователей с разными почтовыми адресами. Каждый пользователь был успешно добавлен в БД. На почте каждого тестового пользователя появилось письмо подтверждения регистрации.
При попытке создания пользователя с уже зарегистрированным email-адресом происходит редирект на страницу регистрации и вывод ошибки.
При попытке создания пользователя с некорректным email-адресом система выдавала сообщение об ошибке.
2. Тестирование модуля авторизации
При попытке входа в тестовые учетные записи было выведено сообщение об ошибке, так как профили не были подтверждены. После перехода по ссылкам из писем подтверждения регистрации были произведены повторные попытки входа в учётные записи. После ввода email и пароля каждый пользователь получил доступ к функциям системы. При попытке перехода на страницы сервиса без авторизации пользователь возвращался на страницу регистрации и видел сообщение об ошибке.
3. Тестирование модуля восстановления и смены пароля
Был произведён переход по ссылке «Восстановление пароля». В появившейся форме восстановления пароля в текстовое поле был введён email одного из тестовых пользователей, после чего была нажата кнопка подтверждения. На email пользователя пришло сообщение, в сообщении - ссылка, при переходе по которой появляется форма смены пароля. В текстовое поле был введён новый пароль. После ввода изменённых данных профиля в форме авторизации пользователь получал доступ к функциям системы. автоматизация тестирование модуль регистрация
4. Тестирование списка расходов и поступлений
1. Добавление поступления - дата: 9.03.2014 (сегодня), сумма: 1000, категория: «Auto». Платёж успешно добавлен, отображается количество платежей - 1. В вехнем левом углу экрана отображается количество действий, которые нужно выполнить сегодня - 1.
2. Добавление расхода - дата: 10.03.2014, сумма: -500, категория: «Home». Расход успешно добавлен, отображается количество платежей - 2.
3. Удаление действия 1. Платёж успешно удалён, отображается количество платежей - 1. В вехнем левом углу экрана отображается количество действий, которые нужно выполнить сегодня - 0.
5. Тестирование дневника расходов и поступлений
1. Выполнение действий 4.1 и 4.2. Переход в дневник. Отображается сегодняшняя дата: 9.03.2015. Отображается действие 4.1, баланс: 1000, количество: 1. Смена даты на 10.03.2015. Отображается действие 3.2, баланс: 500, количество: 1.
2. Добавление платежа - сумма: -200, категория: «Eat». Платёж успешно добавлен, отображается баланс - 300, количество: 2.
6. Тестирование списка долгов и списка выплат
1. Переход на страницу списка долгов. Добавление долга - дата: 10.03.2015, окончание: 10.03.2016, сумма: 100000, сумма выплаты: 1000, частота выплат: 1 месяц, категория: «Relax». Долг успешно добавлен и отображён в списке, также успешно добавлены и отображены 12 выплат суммой по 1000.
2. Удаление долга - после нажатии кнопки удаления долг был успешно удалён.
7. Тестирование графика изменения баланса
Выполненение действий 4.1, 4.2, 5.2. Добавление долга - дата: 10.03.2015, окончание 10.03.2016, сумма: 10000, сумма выплаты: 2000, частота выплат: 1 день, категория: «Auto». На странице графика выбираем диапазон отображается следующая динамика баланса: 800, 10300, 8300, 6300, 4300, 2300.
8. Тестирование графика сравнения дней по сумме финансовых операций
Выполнение действий из пункта 7. Полученный график: 800, 9500, -2000, -2000, -2000, -2000.
9. Тестирование графика сравнения дней по сумме задолженностей
Выполнение действий 7.
10. Тестирование графика сравнения категорий по сумме финансовых операций Выполнение действий 4.1, 4.2, 5.2. Полученный график: 1000, -500, -200.
Заключение
В ходе выполнения курсовой работы были использованы гибкие методологии разработки продукта, язык программирования - Java. На выходе получен продукт, удовлетворяющий потребности заказчика.
Выбранная методология позволила сформировать жесткие сроки на создание функционала программы, а также обеспечить достаточное количество времени на каждую итерацию. Причём все заданные функции выполнены в срок, без каких-либо накладок и выбора наиболее и наименее важных функций.
Процесс конструирования позволил избежать накладок при работе приложения(например, введения некорректных данных и “падения” программы), а также доработать диалоговые окна для взаимодействия с пользователем и протестировать корректность работы БД с помощью тестовых данных. Соответственно данные действия повысили качество программы.
Приложение
Код программы
BalanceBacking.java
package ru.ulstu.secretary.chart;
import java.util.Date;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.db.ActionByDateService;
@Named
@ViewScoped
public class BalanceBacking extends DateChartBacking {
private static final long serialVersionUID = 8470304964338154695L;
@Inject
private ActionByDateService actionByDateService;
protected double getNextY(double y, Date x) {
return y + actionByDateService.getList(x).stream().mapToDouble(task -> task.getBalance()).sum();
}
@Override
protected String getRedirect() {
return "diary";
}
}
CategoryBalanceBacking.cs
package ru.ulstu.secretary.chart;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.db.CategoryService;
import ru.ulstu.secretary.db.TaskByCategoryService;
import ru.ulstu.secretary.entity.Category;
@Named
@ViewScoped
public class CategoryBalanceBacking extends ChartBacking<Category> {
private static final long serialVersionUID = 1L;
@Inject
private CategoryService categoryService;
@Inject
private TaskByCategoryService taskByCategoryService;
@Override
protected Iterable<Category> getRangeOfX() {
return categoryService.getList();
}
@Override
protected double getNextY(double y, Category x) {
return taskByCategoryService.getList(x).stream().mapToDouble(task -> task.getBalance()).sum();
}
@Override
protected String getRedirect() {
return "";
}
@Override
protected void prepareRedirect(Category category) {
}
}
ChartBacking.java
package ru.ulstu.secretary.chart;
import java.io.Serializable;
import org.primefaces.model.chart.BarChartModel;
import org.primefaces.model.chart.ChartSeries;
public abstract class ChartBacking<X> implements Serializable {
private static final long serialVersionUID = 5722395681760535076L;
protected abstract Iterable<X> getRangeOfX();
protected abstract double getNextY(double y, X x);
public BarChartModel getModel() {
BarChartModel model = new BarChartModel();
ChartSeries series = new ChartSeries();
double y = 0;
for (X x : getRangeOfX()) {
y = getNextY(y, x);
series.set(x, y);
}
model.addSeries(series);
return model;
}
public X getMin() {
X result = null;
double resultValue = Double.MAX_VALUE;
double y = 0;
for (X x : getRangeOfX()) {
y = getNextY(y, x);
if (y <= resultValue) {
resultValue = y;
result = x;
}
}
return result;
}
public X getMax() {
X result = null;
double resultValue = Double.MIN_VALUE;
double y = 0;
for (X x : getRangeOfX()) {
y = getNextY(y, x);
if (y >= resultValue) {
resultValue = y;
result = x;
}
}
return result;
}
public double getMinValue() {
double resultValue = Double.MAX_VALUE;
double y = 0;
for (X x : getRangeOfX()) {
y = getNextY(y, x);
if (y <= resultValue) {
resultValue = y;
}
}
return resultValue;
}
public double getMaxValue() {
double resultValue = Double.MIN_VALUE;
double y = 0;
for (X x : getRangeOfX()) {
y = getNextY(y, x);
if (y >= resultValue) {
resultValue = y;
}
}
if (resultValue == Double.MIN_VALUE) {
return 0;
}
return resultValue;
}
protected abstract void prepareRedirect(X selected);
protected abstract String getRedirect();
public String redirect(X selected) {
prepareRedirect(selected);
String redirect = getRedirect() + "?faces-redirect=true";
return redirect;
}
}
DateChartBacking.java
package ru.ulstu.secretary.chart;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import ru.ulstu.secretary.grid.DateBacking;
import ru.ulstu.secretary.utils.DateUtil;
public abstract class DateChartBacking extends ChartBacking<Date> {
private static final long serialVersionUID = -5928036826842490016L;
private Date from;
private Date to;
@Inject
private DateBacking dateBacking;
@PostConstruct
private void init() {
from = DateUtil.getToday();
to = DateUtil.getToday();
change(-1, 1);
}
@Override
protected Iterable<Date> getRangeOfX() {
long dayCount = TimeUnit.DAYS.convert(to.getTime() - from.getTime(), TimeUnit.MILLISECONDS) + 1;
return () -> IntStream.iterate(0, i -> i + 1).limit(dayCount).mapToObj(i -> {
Calendar calendar = new GregorianCalendar();
calendar.setTime(from);
calendar.add(Calendar.DATE, i);
return calendar.getTime();
}).iterator();
}
public Date getFrom() {
return from;
}
public void setFrom(Date from) {
this.from = from;
}
public Date getTo() {
return to;
}
public void setTo(Date to) {
this.to = to;
}
public void change(int left, int right) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(from);
calendar.add(Calendar.DATE, left);
from = calendar.getTime();
calendar.setTime(to);
calendar.add(Calendar.DATE, right);
to = calendar.getTime();
}
@Override
protected void prepareRedirect(Date selected) {
dateBacking.setDate(selected);
}
}
DayBacking.java
package ru.ulstu.secretary.chart;
import java.util.Date;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.db.ActionByDateService;
@Named
@ViewScoped
public class DayBacking extends DateChartBacking {
private static final long serialVersionUID = 8470304964338154695L;
@Inject
private ActionByDateService actionByDateService;
protected double getNextY(double y, Date x) {
return actionByDateService.getList(x).stream().mapToDouble(task -> task.getBalance()).sum();
}
@Override
protected String getRedirect() {
return "diary";
}
}
UnpaidBacking.java
package ru.ulstu.secretary.chart;
import java.util.Date;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.db.EntityService;
import ru.ulstu.secretary.entity.Debt;
@Named
@ViewScoped
public class UnpaidBacking extends DateChartBacking {
private static final long serialVersionUID = 981680502855109121L;
@Inject
private EntityService entityService;
@Override
protected double getNextY(double y, Date x) {
return entityService.getList(Debt.class).stream().mapToDouble(debt -> debt.getUnpaid(x)).sum();
}
@Override
protected String getRedirect() {
return "diary";
}
}
CriteriaService.java
package ru.ulstu.secretary.criteria;
import java.util.Collection;
import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
public abstract class CriteriaService<Entity> {
@PersistenceContext
private EntityManager entityManager;
private CriteriaBuilder builder;
private CriteriaQuery<Entity> query;
private Root<Entity> root;
@PostConstruct
private void initCriteriaService() {
builder = entityManager.getCriteriaBuilder();
query = builder.createQuery(getType());
root = query.from(getType());
}
protected abstract Class<Entity> getType();
protected CriteriaBuilder getBuilder() {
return builder;
}
protected CriteriaQuery<Entity> getQuery() {
return query;
}
protected Root<Entity> getRoot() {
return root;
}
protected Collection<Entity> getList(Predicate restriction) {
query.where(restriction);
return entityManager.createQuery(query).getResultList();
}
}
PropertyCriteriaService.java
package ru.ulstu.secretary.criteria;
import java.util.Collection;
public abstract class PropertyCriteriaService<Entity, Property> extends CriteriaService<Entity> {
public Collection<Entity> getList(Property property) {
return getList(getBuilder().equal(getRoot().get(getProperty()), property));
}
protected abstract String getProperty();
}
RangeCriteriaService.java
package ru.ulstu.secretary.criteria;
import java.util.Collection;
public abstract class RangeCriteriaService<Entity, Property extends Comparable<Property>> extends CriteriaService<Entity> {
public Collection<Entity> getAll(Property from, Property to) {
return getList(getBuilder().between(getRoot().get(getProperty()), from, to));
}
protected abstract String getProperty();
}
UpperLimitCriteriaService.java
package ru.ulstu.secretary.criteria;
import java.util.Collection;
public abstract class UpperLimitCriteriaService<X extends Comparable<X>, Y> extends CriteriaService<Y> {
public Collection<Y> getList(X x) {
return getList(getBuilder().lessThanOrEqualTo(getRoot().get(getProperty()), x));
}
protected abstract String getProperty();
}
ActionByDateService.java
package ru.ulstu.secretary.db;
import java.util.Date;
import javax.ejb.Stateless;
import ru.ulstu.secretary.criteria.PropertyCriteriaService;
import ru.ulstu.secretary.entity.Action;
@Stateless
public class ActionByDateService extends PropertyCriteriaService<Action, Date> {
@Override
protected String getProperty() {
return "date";
}
@Override
protected Class<Action> getType() {
return Action.class;
}
}
CategoryService.java
package ru.ulstu.secretary.db;
import java.util.Arrays;
import javax.ejb.Stateless;
import javax.inject.Named;
import ru.ulstu.secretary.entity.Category;
@Named
@Stateless
public class CategoryService {
public Iterable<Category> getList() {
return Arrays.asList(Category.values());
}
}
DebtByDateService.java
package ru.ulstu.secretary.db;
import java.util.Date;
import javax.ejb.Stateless;
import ru.ulstu.secretary.criteria.UpperLimitCriteriaService;
import ru.ulstu.secretary.entity.Debt;
@Stateless
public class DebtByDateService extends UpperLimitCriteriaService<Date, Debt> {
@Override
protected String getProperty() {
return "date";
}
@Override
protected Class<Debt> getType() {
return Debt.class;
}
}
EntityService.java
package ru.ulstu.secretary.db;
import java.util.Collection;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
@Stateless
public class EntityService {
@PersistenceContext
private EntityManager entityManager;
public <T> Collection<T> getList(Class<T> type) {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<T> query = builder.createQuery(type);
query.from(type);
return entityManager.createQuery(query).getResultList();
}
public <T> T save(T entity) {
return entityManager.merge(entity);
}
public <T> void remove(T entity) {
entity = entityManager.merge(entity);
entityManager.remove(entity);
}
}
PayByDateService.java
package ru.ulstu.secretary.db;
import java.util.Date;
import javax.ejb.Stateless;
import ru.ulstu.secretary.criteria.PropertyCriteriaService;
import ru.ulstu.secretary.entity.Pay;
@Stateless
public class PayByDateService extends PropertyCriteriaService<Pay, Date> {
@Override
protected String getProperty() {
return "date";
}
@Override
protected Class<Pay> getType() {
return Pay.class;
}
}
RepayByDateService.java
package ru.ulstu.secretary.db;
import java.util.Date;
import javax.ejb.Stateless;
import ru.ulstu.secretary.criteria.PropertyCriteriaService;
import ru.ulstu.secretary.entity.Repay;
@Stateless
public class RepayByDateService extends PropertyCriteriaService<Repay, Date> {
@Override
protected String getProperty() {
return "date";
}
@Override
protected Class<Repay> getType() {
return Repay.class;
}
}
TaskByCategoryService.java
package ru.ulstu.secretary.db;
import javax.ejb.Stateless;
import ru.ulstu.secretary.criteria.PropertyCriteriaService;
import ru.ulstu.secretary.entity.Category;
import ru.ulstu.secretary.entity.Task;
@Stateless
public class TaskByCategoryService extends PropertyCriteriaService<Task, Category> {
@Override
protected String getProperty() {
return "category";
}
@Override
protected Class<Task> getType() {
return Task.class;
}
}
TaskByDateService.java
package ru.ulstu.secretary.db;
import java.util.Date;
import javax.ejb.Stateless;
import ru.ulstu.secretary.criteria.PropertyCriteriaService;
import ru.ulstu.secretary.entity.Task;
@Stateless
public class TaskByDateService extends PropertyCriteriaService<Task, Date> {
@Override
protected String getProperty() {
return "date";
}
@Override
protected Class<Task> getType() {
return Task.class;
}
}
UnitService.java
package ru.ulstu.secretary.db;
import javax.ejb.Stateless;
import javax.inject.Named;
import ru.ulstu.secretary.entity.Unit;
@Named
@Stateless
public class UnitService {
public Unit[] getList() {
return Unit.values();
}
}
Action.java
package ru.ulstu.secretary.entity;
import java.util.Date;
import javax.persistence.Entity;
@Entity
public class Action extends BaseEntity {
private Date date;
private Double balance;
private String comment;
private Category category;
private boolean complete;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Double getBalance() {
return balance;
}
public void setBalance(Double money) {
this.balance = money;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public boolean isComplete() {
return complete;
}
public void setComplete(boolean complete) {
this.complete = complete;
}
}
BaseEntity.java
package ru.ulstu.secretary.entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Category.java
package ru.ulstu.secretary.entity;
public enum Category {
AUTO("auto"),
HOME("home");
private final String i18n;
private Category(String i18n) {
this.i18n = i18n;
}
public String toString() {
return i18n;
}
}
Debt.java
package ru.ulstu.secretary.entity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Debt extends Action {
private Date deadline;
private Double repay;
private Integer frequency;
private Unit unit;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Repay> repays;
public Debt() {
unit = Unit.DAY;
repays = new ArrayList<>();
}
public Date getDeadline() {
return deadline;
}
public void setDeadline(Date deadline) {
this.deadline = deadline;
}
public Double getRepay() {
return repay;
}
public void setRepay(Double repay) {
this.repay = repay;
}
public Integer getFrequency() {
return frequency;
}
public void setFrequency(Integer frequency) {
this.frequency = frequency;
}
public Unit getUnit() {
return unit;
}
public void setUnit(Unit unit) {
this.unit = unit;
}
public List<Repay> getRepays() {
return repays;
}
public void setRepays(List<Repay> repays) {
this.repays = repays;
}
public double getUnpaid(Date moment) {
if (moment.before(getDate())) {
return 0;
}
double sum = repays.stream().filter(repay -> !repay.getDate().after(moment)).mapToDouble(repay -> repay.getBalance()).sum();
return Math.max(0, getBalance() + sum);
}
}
Pay.java
package ru.ulstu.secretary.entity;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Pay extends Task {}
Repay.java
package ru.ulstu.secretary.entity;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Repay extends Task {
@ManyToOne(cascade = CascadeType.ALL)
private Debt debt;
public Debt getDebt() {
return debt;
}
public void setDebt(Debt debt) {
this.debt = debt;
}
}
Task.java
package ru.ulstu.secretary.entity;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Task extends Action {}
Unit.java
package ru.ulstu.secretary.entity;
import java.util.Calendar;
public enum Unit {
YEAR("year", Calendar.YEAR),
MONTH("month", Calendar.MONTH),
WEEK("week", Calendar.WEEK_OF_MONTH),
DAY("day", Calendar.DAY_OF_WEEK);
private final String i18n;
private final int code;
private Unit(String i18n, int code) {
this.i18n = i18n;
this.code = code;
}
public int getCode() {
return code;
}
public String toString() {
return i18n;
}
}
DateBacking.java
package ru.ulstu.secretary.grid;
import java.io.Serializable;
import java.util.Date;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import ru.ulstu.secretary.utils.DateUtil;
@Named
@SessionScoped
public class DateBacking implements Serializable {
private static final long serialVersionUID = -7664901585738595118L;
private Date date;
@PostConstruct
private void init() {
date = DateUtil.getToday();
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
DebtBacking.java
package ru.ulstu.secretary.grid;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import ru.ulstu.secretary.entity.Debt;
import ru.ulstu.secretary.entity.Repay;
import ru.ulstu.secretary.utils.DateUtil;
@Named
@ViewScoped
public class DebtBacking extends GridBacking<Debt> {
private static final long serialVersionUID = 714120325390373523L;
private Debt debt;
@Override
protected Debt getNewBlank() {
Debt debt = new Debt();
debt.setDate(DateUtil.getToday());
return debt;
}
@Override
protected Class<Debt> getType() {
return Debt.class;
}
@Override
public void save() throws Exception {
Calendar calendar = new GregorianCalendar();
calendar.setTime(getBlank().getDate());
while (true) {
calendar.add(getBlank().getUnit().getCode(), 1);
if (calendar.getTime().after(getBlank().getDeadline())) {
break;
}
Repay repay = new Repay();
repay.setDate(calendar.getTime());
repay.setCategory(getBlank().getCategory());
repay.setBalance(-getBlank().getRepay());
getBlank().getRepays().add(repay);
}
debt = getBlank();
super.save();
}
public Debt getDebt() {
return debt;
}
public void setDebt(Debt debt) {
this.debt = debt;
}
}
DiaryPayBacking.java
package ru.ulstu.secretary.grid;
import java.util.Collection;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.db.ActionByDateService;
import ru.ulstu.secretary.db.PayByDateService;
import ru.ulstu.secretary.entity.Pay;
@Named
@ViewScoped
public class DiaryPayBacking extends GridBacking<Pay> {
private static final long serialVersionUID = -3370333139341916306L;
@Inject
private DateBacking dateBacking;
@Inject
private ActionByDateService actionByDateService;
@Inject
private PayByDateService payByDateService;
@Override
protected Class<Pay> getType() {
return Pay.class;
}
@Override
protected Pay getNewBlank() {
Pay pay = new Pay();
pay.setDate(dateBacking.getDate());
return pay;
}
@Override
public Collection<Pay> getList() {
return payByDateService.getList(dateBacking.getDate());
}
public double getBalance() {
return actionByDateService.getList(dateBacking.getDate()).stream().mapToDouble(task -> task.getBalance()).sum();
}
}
DiaryRepayBacking.java
package ru.ulstu.secretary.grid;
import java.util.Collection;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.db.RepayByDateService;
import ru.ulstu.secretary.entity.Repay;
@Named
@ViewScoped
public class DiaryRepayBacking extends GridBacking<Repay> {
private static final long serialVersionUID = 8966176107954231754L;
@Inject
private DateBacking dateBacking;
@Inject
private RepayByDateService repayByDateService;
@Override
protected Class<Repay> getType() {
return Repay.class;
}
public Collection<Repay> getList() {
return repayByDateService.getList(dateBacking.getDate());
}
}
GridBacking.java
package ru.ulstu.secretary.grid;
import java.io.Serializable;
import java.util.Collection;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import ru.ulstu.secretary.db.EntityService;
public abstract class GridBacking<Entity> implements Serializable {
private static final long serialVersionUID = -2639437488394357753L;
@Inject
private EntityService entityService;
private Entity blank;
@PostConstruct
private void init() throws Exception {
blank = getNewBlank();
}
protected abstract Class<Entity> getType();
protected Entity getNewBlank() throws Exception {
return getType().getConstructor().newInstance();
}
public Collection<Entity> getList() {
return entityService.getList(getType());
}
public Entity getBlank() {
return blank;
}
public void save() throws Exception {
entityService.save(blank);
blank = getNewBlank();
}
public void remove(Entity obj) {
entityService.remove(obj);
}
}
PayBacking.java
package ru.ulstu.secretary.grid;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import ru.ulstu.secretary.entity.Pay;
import static ru.ulstu.secretary.utils.DateUtil.getToday;
@Named
@ViewScoped
public class PayBacking extends GridBacking<Pay> {
private static final long serialVersionUID = -520158973748994729L;
@Override
protected Class<Pay> getType() {
return Pay.class;
}
protected Pay getNewBlank() {
Pay pay = new Pay();
pay.setDate(getToday());
return pay;
}
public int getCount() {
return getList().size();
}
public double getBalance() {
return getList().stream().mapToDouble(pay -> pay.getBalance()).sum();
}
}
RepayBacking.java
package ru.ulstu.secretary.grid;
import java.util.Collection;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.entity.Repay;
@Named
@ViewScoped
public class RepayBacking extends GridBacking<Repay> {
private static final long serialVersionUID = -5042825198701507477L;
@Inject
private DebtBacking debtBacking;
@Override
protected Class<Repay> getType() {
return Repay.class;
}
@Override
public Collection<Repay> getList() {
return debtBacking.getDebt() == null ? null : debtBacking.getDebt().getRepays();
}
}
TodayBacking.java
package ru.ulstu.secretary.grid;
import java.io.Serializable;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import ru.ulstu.secretary.db.TaskByDateService;
import ru.ulstu.secretary.utils.DateUtil;
@Named
@ViewScoped
public class TodayBacking implements Serializable {
private static final long serialVersionUID = -6983619217861517215L;
@Inject
private TaskByDateService taskByDateService;
public int getCount() {
return taskByDateService.getList(DateUtil.getToday()).size();
}
}
DateUtil.java
package ru.ulstu.secretary.utils;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class DateUtil {
public static Date getToday() {
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
}
Balance.xhtml
<ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:s="http://java.sun.com/jsf/composite/secretary">
<ui:define name="title">#{i18n.balance}</ui:define>
<ui:define name="body">
<s:chart backing="#{balanceBacking}"/>
</ui:define>
</ui:composition>
Category.xhtml
<ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:s="http://java.sun.com/jsf/composite/secretary">
<ui:define name="title">#{i18n.category}</ui:define>
<ui:define name="body">
<s:chart backing="#{categoryBalanceBacking}" hasPeriod="false"/>
</ui:define>
</ui:composition>
Day.xhtml
<ui:composition template="/WEB-INF/tpl/base.xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:s="http://java.sun.com/jsf/composite/secretary">
<ui:define name="title">#{i18n.day}</ui:define>
<ui:define name="body">
<s:chart backing="#{dayBacking}"/>
</ui:define>
</ui:composition>
Debt.xhtml
<ui:composition template="/WEB-INF/tpl/base.xhtml"
<ui:define name="title">Debt</ui:define>
<ui:define name="body">
<s:grid name="debt" backing="#{debtBacking}"/>
<s:grid name="repay" backing="#{repayBacking}" editable="false"/>
</ui:define>
</ui:composition>
Diary.xhtml
<ui:composition template="/WEB-INF/tpl/base.xhtml"
<ui:define name="title">#{i18n.diary}</ui:define>
<ui:define name="body">
<div class="panel panel-info">
<div class="panel-heading"><span class="glyphicon glyphicon-calendar"/> #{i18n.date}</div>
<div class="panel-body">
<div class="form-inline">
<h:inputText styleClass="form-control" value="#{dateBacking.date}">
<f:convertDateTime pattern="yyyy-MM-dd"/>
</h:inputText>
<h:commandButton styleClass="btn btn-primary" value="#{i18n.see}"/>
</div>
</div>
</div>
<s:grid name="diary" backing="#{diaryPayBacking}"/>
<s:grid name="repay" backing="#{diaryRepayBacking}" editable="false"/>
<div class="panel panel-info">
<div class="panel-heading"><span class="glyphicon glyphicon-ok"/> #{i18n.total}</div>
<div class="panel-body">
<p><strong>#{i18n.balance}</strong>: #{diaryPayBacking.balance}</p>
</div>
</div>
</ui:define>
</ui:composition>
Pay.xhtml
<ui:composition template="/WEB-INF/tpl/base.xhtml"
<ui:define name="title">#{i18n.pay}</ui:define>
<ui:define name="body">
<s:grid name="pay" backing="#{payBacking}"/>
<div class="panel panel-info">
<div class="panel-heading"><span class="glyphicon glyphicon-ok"/> #{i18n.total}</div>
<div class="panel-body">
<p><strong>#{i18n.count}</strong>: #{payBacking.count}</p>
</div>
</div>
</ui:define>
</ui:composition>
Unpaid.xhtml
<ui:composition template="/WEB-INF/tpl/base.xhtml"
<ui:define name="title">#{i18n.unpaid}</ui:define>...
Подобные документы
Краткая характеристика предприятия и его организационная структура, описание технического и программного обеспечения. Требования к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие. Расчет трудоемкости внедрения.
отчет по практике [167,4 K], добавлен 11.12.2013Требования к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие. Средства, расширяющие возможности операционной системы. Руководство пользователя. Функции "Учет пациентов". Ввод в действие, методика испытаний.
дипломная работа [2,2 M], добавлен 29.07.2016Назначение и цели создания программы, требования к ее функциональности и возможностям, к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие. Расчет экономической эффективности от внедрения разработанной базы данных.
дипломная работа [762,5 K], добавлен 27.05.2015Анализ аналогов информационно-справочной системы Laboratory of complex and atypical prosthetics. Требования к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие. Автоматическое обновление каталогов продукции.
курсовая работа [4,0 M], добавлен 09.07.2023Перечень документов, на основании которых создается система автоматизации бухгалтерского учета товарно-материальных ценностей. Назначение и цели создания системы. Требование к содержанию работ по подготовке объекта автоматизации к вводу системы в действие
курсовая работа [1,1 M], добавлен 05.07.2014Основные понятия баз данных и требования к их созданию. Разработка проекта СУБД для учета продаж и работы сотрудников в кофейне с поиском информации по определенным параметрам. Мероприятия по подготовке объекта автоматизации к вводу системы в действие.
курсовая работа [1,8 M], добавлен 10.02.2014Состав и содержание работ по подготовке объекта автоматизации к вводу подсистемы в действие. Реализация пользовательского интерфейса "Менеджер". Создание проекта в программе "1С: Предприятие". Экономическая эффективность внедрения программного продукта.
дипломная работа [7,2 M], добавлен 01.07.2011Написание программы входа пользователя в систему через пароль. Необходимость содержания входа в систему через ввод, проверки пароля, а также регистрации пользователя с занесением его имени и пароля в базу данных. Блокировка системы при неверном пароле.
лабораторная работа [2,7 M], добавлен 19.10.2009Описание процесса разработки информационной системы. Анализ тестирования и выявления ошибок разработанного модуля. Обследование объекта автоматизации и оформление документации по эксплуатации программы. Сущность экспортирования и импортирования данных.
отчет по практике [1,3 M], добавлен 20.05.2017Обследование объекта, обоснование необходимости систем компьютерного тестирования. Анализ существующих разработок и обоснование выбора технологии проектирования. Создание системы компьютерного тестирования на основе случайного выбора в среде Visual Basic.
дипломная работа [2,4 M], добавлен 18.08.2013Обзор предметной области и описание основных понятий в сфере ведения домашней бухгалтерии. Домашняя бухгалтерия Lite 4,4.5.0.2, "Дребеденьги" и прочие аналоги. Архитектура разрабатываемого Web-сайта: описание таблиц в базе данных и работы сайта.
дипломная работа [3,5 M], добавлен 11.07.2012Автоматизация рутинных бизнес-процессов технической поддержки организации с помощью встраиваемого модуля технологии системы IP-телефонии. Особенности проектирования, разработки и реализации модуля. Описание информационной системы, ее тестирование.
дипломная работа [2,3 M], добавлен 10.12.2016Общая характеристика и основные требования к функциям, выполняемые системой, условия эксплуатации. Взаимодействие с другими модулями. Выбор и обоснование необходимого программного обеспечения, его техническим характеристикам. Техника кодирования.
курсовая работа [234,9 K], добавлен 04.04.2015Создание информационной системы автоматизации процесса управления базами данных компании ООО "Роснефть". Требования к характеристикам технических средств. Обоснование выбора CASE-средства. Разработка программного обеспечения, расчет затрат цены и прибыли.
дипломная работа [3,9 M], добавлен 24.03.2012Описание объекта автоматизации и технологического процесса (доменная печь). Требования к структуре и функционированию системы, информационное обеспечения, стандартизация и унификация. Компоненты системы управления. Режим работы участка автоматизации.
дипломная работа [4,3 M], добавлен 19.01.2017Виды и особенности ИТ-проектов, риски и управление ими, способы оценки. Описание и правила операций над нечеткими лингвистическими переменными. Программная реализация алгоритмов. Требования к составу, параметрам технических средств. Тестирование системы.
дипломная работа [3,5 M], добавлен 10.06.2013Обоснование выбора среды программирования и технических средств. Определение требований к компонентам системы. Описания объекта автоматизации. Написание инструкции по эксплуатации для пользователя. Разработка программных компонентов. Выбор методики СУБД.
курсовая работа [1,3 M], добавлен 27.10.2012Организация и продажа оргтехники. Цели автоматизированной системы и автоматизируемые функции. Характеристика функциональной структуры информационной системы. Проектирование функциональной части объекта автоматизации. Обоснование выбора подсистемы.
курсовая работа [129,6 K], добавлен 19.12.2010Обзор медицинских информационных систем. Анализ и моделирование автоматизированной системы "Регистратура". Требования к составу и параметрам вычислительной системы. Обоснование выбора системы управления базами данных. Разработка инструкции пользователя.
дипломная работа [1,2 M], добавлен 14.10.2012Обоснование выбора системы управления базы данных. Delphi и его основные компоненты. Обоснование среды программирования. Создание базы данных и ее связь со средой программирования. Анализ и описание предметной области. Описание процедур программы.
курсовая работа [1,3 M], добавлен 25.05.2015