КАТЕГОРИИ: Архитектура-(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; Просмотров: 313; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |