Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Тестирование графика сравнения категорий по сумме финансовых операций 1 страница




Тестирование графика сравнения дней по сумме задолженностей

Тестирование графика сравнения дней по сумме финансовых операций

Выполнение действий из пункта 7. Полученный график: 800, 9500, -2000, -2000, -2000, -2000.

Выполнение действий 7.

 

Выполнение действий 4.1, 4.2, 5.2. Полученный график: 1000, -500, -200.

Заключение

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

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

Процесс конструирования позволил избежать накладок при работе приложения(например, введения некорректных данных и “падения” программы), а также доработать диалоговые окна для взаимодействия с пользователем и протестировать корректность работы БД с помощью тестовых данных. Соответственно данные действия повысили качество программы.

Приложение 1. Код программы

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;

 




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 300; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.469 сек.