分页类。

本文介绍了一个实用的分页工具类PaginationUtil的设计与实现细节,该工具类支持灵活配置每页显示数量、页数间隔等参数,适用于各种分页场景。文章通过具体代码展示了如何根据总记录数、当前页数等信息生成分页导航所需的页码索引。
package util.page;
import java.util.ArrayList;
import java.util.List;
public class PaginationUtil {

public static final int PAGENUMBER=1;
public static final int MAXRESULTS=10;
public static final int INTERVAL=3;
public static final int FIXEDINTERVAL=3;
public static final int SORT=0;

private int rowCount; //总结果数
private int maxResults; //每页的结果数
private int pageNumber; //当前页数

private int fixedInterval; //固定的起始结束页数
private int interval; //活动的页数
private int sort; //排序方式

private boolean end; //是否结尾
private boolean first; //是否开始

private List records; //记录

public PaginationUtil(int rowCount,int pageNumber,int maxResults){
setMaxResults(maxResults);
setRowCount(rowCount);
setPageNumber(pageNumber);
fixedInterval=FIXEDINTERVAL;
interval=INTERVAL;
sort=SORT;
}
/**
*
* @param pageNumber 页数
* @param fixedInterval 最前最后用于显示的页数
* @param interval 页数往后显示几页
* @param maxResults 每页的记录数
* @param rowCount 总记录数
* @param sort 排序
*/
public PaginationUtil(int pageNumber,int fixedInterval,int interval,int maxResults,int sort,int rowCount){
setMaxResults(maxResults);
setRowCount(rowCount);
setFixedInterval(fixedInterval);
setInterval(interval);
setSort(sort);
setPageNumber(pageNumber);
}

/**
* 设置和取得总记录数
* @return
*/
public int getRowCount() {
return rowCount;
}
public void setRowCount(int rowCount) {
this.rowCount = rowCount;
}

/**
* 设定活动页数
* @return
*/
public int getInterval() {
return interval;
}
public void setInterval(int interval) {
this.interval = interval;
}

/**
* 设定固定页数
* @return
*/
public int getFixedInterval() {
return fixedInterval;
}
public void setFixedInterval(int fixedInterval) {
this.fixedInterval = fixedInterval;
}

/**
* 用于取得第一个记录
* @return
*/
public int getFirstResult() {

int first=(pageNumber-1)*maxResults;

if(first>-1)return first;

return 0;
}

/**
* 设置和取得总记录数
* @return
*/
public int getMaxResults() {
return maxResults;
}
public void setMaxResults(int maxResults) {
this.maxResults = maxResults;
}

/**
* 用于取得当前的页数
* @return
*/
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {

if(pageNumber<1)
this.pageNumber=1;

else if(pageNumber>getPages())
this.pageNumber=getPages();

else
this.pageNumber = pageNumber;
}

/**
*
* 取得前一页
* @return
*/
public int getPrevious() {

if(pageNumber<2)
return 1;

return pageNumber-1;
}

/**
* 取得后一页
* @return
*/
public int getNext() {

if(pageNumber>=getPages())
return getPages();

return pageNumber+1;
}

/**
* 取得总页数
* @return
*/
public int getPages() {
if(rowCount%maxResults==0)return rowCount/maxResults;
return rowCount/maxResults+1;
}

/**
* 取得排序的方式
* @return
*/
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
/**
* 判断是否是最后一页和第一页
* @return
*/
public boolean isEnd() {
end=getPageNumber()>=getPages();
return end;
}
public boolean isFirst() {
first=getPageNumber()<=1;
return first;
}

/**
* 取得一个页码的索引,按照给出的固定页数和增加页数以及当前页数算出一个数组,-1代表跨过可以在表现层写"..."。
* @return
*/
public Integer[] getPageIndex() {
int pages=getPages();
if(fixedInterval>=pages){
System.out.println("-1-");
return makeArray(1,pages);
}
else if((2*fixedInterval)>=pages){
System.out.println("-2-");
return makeArray(1,pages);
}else if((pageNumber+interval)<=fixedInterval){
System.out.println("-3-");
ArrayList<Integer> result=new ArrayList<Integer>();
result.addAll(makeList(1,fixedInterval));
result.add(-1);
result.addAll(makeList(pages-fixedInterval+1,pages));
return result.toArray(new Integer[0]);
}else{
if(pageNumber>pages-fixedInterval){
System.out.println("-4-");
ArrayList<Integer> result=new ArrayList<Integer>();
result.addAll(makeList(1,fixedInterval));
result.add(-1);
result.addAll(makeList(pages-fixedInterval+1,pages));
return result.toArray(new Integer[0]);
}
if(pageNumber>fixedInterval&&pageNumber<=(pages-fixedInterval)){
System.out.println("-5-");
if((pageNumber+interval)<pages-fixedInterval+1){
System.out.println("-5-1-");
ArrayList<Integer> result=new ArrayList<Integer>();
result.addAll(makeList(1,fixedInterval));
result.add(-1);
result.addAll(makeList(pageNumber,pageNumber+interval));
result.add(-1);
result.addAll(makeList(pages-fixedInterval+1,pages));
return result.toArray(new Integer[0]);
}
else{
System.out.println("-5-2-");
ArrayList<Integer> result=new ArrayList<Integer>();
result.addAll(makeList(1,fixedInterval));
result.add(-1);
result.addAll(makeList(pageNumber,pages));
return result.toArray(new Integer[0]);
}
}
if(pageNumber<=fixedInterval){
System.out.println("-6-");
if((pageNumber+interval)>(pages-fixedInterval+1)){
System.out.println("-6-1-");
return makeArray(1,pages);
}
else{
System.out.println("-6-2-");
ArrayList<Integer> result=new ArrayList<Integer>();
result.addAll(makeList(1,fixedInterval));
result.add(-1);
result.addAll(makeList(pages-fixedInterval+1,pages));
return result.toArray(new Integer[0]);
}
}
}
return makeArray(1,pages);
}

/**
* 建立一个顺序的数组
* @param start 起始数
* @param end 结束数
* @return
*/
public static Integer[] makeArray(int start,int end){
Integer[] array=new Integer[end-start+1];
for(int i=0;i<=end-start;i++){
array=i+start;
}
return array;
}

/**
* 建立一个顺序的列表
* @param start 起始数
* @param end 结束数
* @return
*/
public static List<Integer> makeList(int start,int end){
List<Integer> list=new ArrayList<Integer>();
for(int i=0;i<=end-start;i++){
list.add(i+start);
}
return list;
}
/**
* 加入记录集
* @return
*/
public List getRecords() {
return records;
}
public void setRecords(List records) {
this.records = records;
}
/**
* 显示所有的数据。
* @return
*/
public String toString(){
return
" interval:"+getInterval()+
" fixedInterval:"+getFixedInterval()+
" pages:"+getPages()+
" pageNumber:"+getPageNumber()+
" rowCount:"+getRowCount()+
" firstResult:"+getFirstResult()+
" maxResults:"+getMaxResults()+
" previous:"+getPrevious()+
" next:"+getNext()+
" sort:"+getSort()+
" end:"+isEnd()+
" first:"+isFirst();
}


public static void main(String[] args){
PaginationUtil page=new PaginationUtil(72,1,5);

for(int i=1;i<=15;i++){
page.setPageNumber(i);
System.out.print(i+":");
for(int i1:page.getPageIndex()){
System.out.print(i1+"_");
}
System.out.println();
}
}
}
基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无法检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值