如果是最小单位为小时的话,我觉得表结构可以这样:
id
type(用来标识是vip还是普通车位)
date(日期,如果Type为vip,这个就是每月的几号;如果是普通车位,那就是星期几)
hour(小时,如1点、2点、3点等)
price(每小时的价格)
然后在表里面把每种车位的每个小时的默认单价先存到数据库,在管理员设置了某个小时的价格后,直接覆盖数据库里面的默认的那条记录就行了。
这样在计算停车费的时候,就根据停车的车位类型、日期(每月几号或星期几)、hour(停车了好几个小时,就取多条记录进行相加)、price,来计算总金额。
上面是我自己的思路,不知道能不能满足楼主需求。
id
type(用来标识是vip还是普通车位)
date(日期,如果Type为vip,这个就是每月的几号;如果是普通车位,那就是星期几)
hour(小时,如1点、2点、3点等)
price(每小时的价格)
然后在表里面把每种车位的每个小时的默认单价先存到数据库,在管理员设置了某个小时的价格后,直接覆盖数据库里面的默认的那条记录就行了。
这样在计算停车费的时候,就根据停车的车位类型、日期(每月几号或星期几)、hour(停车了好几个小时,就取多条记录进行相加)、price,来计算总金额。
上面是我自己的思路,不知道能不能满足楼主需求。
解决方案 »
- ldap 用户验证失败,在线等急急急!!!
- 项目无法访问
- 关于软件工程的趣味面试题
- struts2怎么用validation框架校验下拉列表?
- 刚学struts 有个问题不解
- 各位推荐一下,哪种报表可以实现冻结表头合并单元格,谢谢!
- 非常简单,但可能会很少人去想的问题
- 正则表达式求帮忙
- struts中bean:write问题?!在线等。
- cannot load TLD: weblogic.xml.dom.ChildCountException: extra child description in taglib,这是什么错误阿。
- tomcat每天启动后,晚上无人操作,但第二天铁定假死,线程dump已抓,请各位帮忙分析一下问题所在
- socket 调用 websercice 后,得到的SOCKET响应流后,只能获得响应头信息。
基础类IdEntity:
package entity;import java.io.Serializable;
import java.util.Date;/**
* 统一定义id的entity基类.
*
* 基类统一定义id的属性名称、数据类型、列名映射及生成策略. 子类可重载getId()函数重定义id的列名映射和生成策略.
*/
public abstract class IdEntity implements Serializable { protected static final long serialVersionUID = Long.MAX_VALUE; private Long id; protected Date createDate = new Date(); public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public void setCreateDate(Date createDate) {
this.createDate = createDate;
} public Date getCreateDate() {
return createDate;
} /**
* 重写equals方法,以id为准判断
*
* @param object
*
* @return boolean
*/
@Override
public boolean equals(Object object) { if (this == object) {
return true;
} if (object == null) {
return false;
} if (object instanceof IdEntity) { IdEntity idEntity = (IdEntity) object;
// 由于IdEntity是hibernate托管的,所以一定要用getUuid方法,而不能直接用uuid if (this.getId() == null || idEntity.getId() == null) { return false;
} else { return this.getId().equals(idEntity.getId());
}
} return false; } /**
* 重写hashCode方法,直接返回uuid的hash code
*
* @param hashCode
*
* @return int
*/
@Override
public int hashCode() { return getId() == null ? super.hashCode() : getId().hashCode();
}
}
停车位抽象类ParkingSpace:
package entity;
public abstract class ParkingSpace extends IdEntity { private static final long serialVersionUID = 1L; private String no; // 停车位编号
private Type type;
public ParkingSpace() {
}
public static ParkingSpace getInstance(Type type) {
if (Type.VIP == type) {
return new VipParkingSpace();
} else {
return new GeneralParkingSpace();
}
} public String getNo() {
return no;
} public void setNo(String no) {
this.no = no;
}
public Type getType() {
return type;
} public void setType(Type type) {
this.type = type;
} public static enum Type { // 贵宾、普通
VIP, GENERAL
}
}
贵宾停车位VipParkingSpace:
package entity;public class VipParkingSpace extends ParkingSpace { private static final long serialVersionUID = 1L; public VipParkingSpace() {
this.setType(ParkingSpace.Type.VIP);
}
}
普通车位GeneralParkingSpace:
package entity;public class GeneralParkingSpace extends ParkingSpace { private static final long serialVersionUID = 1L; public GeneralParkingSpace() {
this.setType(ParkingSpace.Type.GENERAL);
}
}
时间区间基类DateRange:
package entity;import java.util.Date;public class DateRange extends IdEntity { private static final long serialVersionUID = 1L;
private String alias; // 区间别名,如"一号", "十五号" private Date startDate;
private Date endDate; public Date getStartDate() {
return startDate;
} public void setStartDate(Date startDate) {
this.startDate = startDate;
} public Date getEndDate() {
return endDate;
} public void setEndDate(Date endDate) {
this.endDate = endDate;
} public String getAlias() {
return alias;
} public void setAlias(String alias) {
this.alias = alias;
}
}
价格策略抽象类PriceStrategy:
package entity;
public abstract class PriceStrategy extends IdEntity { private static final long serialVersionUID = 1L;
private double price;
public static PriceStrategy getInstance(ParkingSpace.Type type, DateRange dateRange) {
if (dateRange != null) {
return new DateRangePriceStrategy(type, dateRange);
} else {
return new GeneralPriceStrategy(type);
}
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
}
}
特殊时间区间价格策略DateRangePriceStrategy:
package entity;
public class DateRangePriceStrategy extends PriceStrategy { private static final long serialVersionUID = 1L; private ParkingSpace parkingSpace;
private DateRange dateRange;
public DateRangePriceStrategy() {
}
public DateRangePriceStrategy(ParkingSpace.Type type, DateRange dateRange) {
this.parkingSpace = ParkingSpace.getInstance(type);
this.dateRange = dateRange;
} public ParkingSpace getParkingSpace() {
return parkingSpace;
} public void setParkingSpace(ParkingSpace parkingSpace) {
this.parkingSpace = parkingSpace;
} public DateRange getDateRange() {
return dateRange;
} public void setDateRange(DateRange dateRange) {
this.dateRange = dateRange;
}
}
普通时间区间价格策略GeneralPriceStrategy:
package entity;public class GeneralPriceStrategy extends PriceStrategy { private static final long serialVersionUID = 1L; private ParkingSpace parkingSpace;
public GeneralPriceStrategy() {
}
public GeneralPriceStrategy(ParkingSpace.Type type) {
this.parkingSpace = ParkingSpace.getInstance(type);
} public ParkingSpace getParkingSpace() {
return parkingSpace;
} public void setParkingSpace(ParkingSpace parkingSpace) {
this.parkingSpace = parkingSpace;
}
}大致如此了,楼主感受下。
你可以好好理解下我说的表的date字段的意义就好了。