用于分页的两个函数(原创 vince6799)

在asp代码中分页是有点麻烦的事情,个人在在代码编写过程中把分页代码写成了两个函数,虽然在功能上不是很完善,但对于一般的应用应该是满足的了,如有问题竟联系我(vince6799@hotmail.com)或到本站获取最新信息(http://blog.csdn.net/vince6799)。

<%
'分页函数分为两个函数
'CalcPage(totalrec,msg_per_page,currentpage,n,rowcount,PageRs) 分页计算函数
'PageList(ListType,url,querry,Separator,ListLink) 分页列表函数

'分页计算函数
'totalrec 记录集总数
'msg_per_page 每页显示的记录数,在调用CalcPage时需提前对该变量赋值
'currentpage 当前页变量,在调用CalcPage时需提前对该变量赋值
'n 总页数 
'rowcount 设置每一页的数据记录数
'PageRs 记录集对象
sub CalcPage(totalrec,msg_per_page,currentpage,n,rowcount,PageRs)
 n=0 '设置无记录时页数为0
 if currentpage="" then currentpage=0
 'PageRs.EOF and PageRs.bof  无记录
 'Not PageRs.EOF Or Not PageRs.BOF 有记录
 if Not PageRs.EOF Or Not PageRs.BOF then
  totalrec=PageRs.recordcount
  PageRs.pagesize=msg_per_page
  if totalrec mod msg_per_page = 0 then '计算总页数,recordcount:数据的总记录数
   n = totalrec/msg_per_page 'n:总页数
  else
   n = totalrec/msg_per_page+1
  end if
  if not isnumeric(currentpage) or currentpage="" then currentpage=1
  If currentpage <> "" then
   currentpage = cint(currentpage)
  end if
  if currentpage < 1 then
   currentpage = 1
  end if
  if currentpage*msg_per_page > totalrec and not((currentpage-1)*msg_per_page < totalrec) then
   currentPage=1
  end if
  PageRs.absolutepage = currentpage 'absolutepage:设置指针指向某页开头
  rowcount = PageRs.pagesize            'pagesize:设置每一页的数据记录数
 end if
end sub
%>
<%
'分页列表函数
'url 跳转的地址
'querry ?后的参数
'Separator 分隔符
'ListType 分页类型
'类型:0 "第一页 | 前一页 | 下一页 | 最后页"
'类型:1 "1 | 2 | 3 | 4 | ..........| 下一页"
'类型:2 "第一页 | 前十页 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 后十页 | 最后页"
'ListLink 链接使用的样式

sub PageList(ListType,url,querry,Separator,ListLink)
 if Separator="" then Separator="|"
 if ListType="" then ListType="0"
 select case ListType
  case "0"
   response.write"第"&currentpage&"/"&n&"页&nbsp;&nbsp;"
   response.write"共"&totalrec&"条信息&nbsp;&nbsp;"
   if currentpage <= 1 then
   response.write"第一页&nbsp;"&Separator&"&nbsp;"
   response.write"前一页&nbsp;"&Separator&"&nbsp;"
   else
   response.write"<a href="""&url&"?page=1&"&querry&""" _fcksavedurl=""""&url&"?page=1&"&querry&"""" class="""&ListLink&""">第一页</a>&nbsp;"&Separator&"&nbsp;"
   response.write"<a href="""&url&"?page="&currentpage-1&"&"&querry&"""  class="""&ListLink&""">前一页</a>&nbsp;"&Separator&"&nbsp;"
   end if
   if currentpage = n then
   response.write"下一页&nbsp;"&Separator&"&nbsp;"
   response.write"最后页&nbsp;"
   else
   response.write"<a href="""&url&"?page="&currentpage+1&"&"&querry&"""  class="""&ListLink&""">下一页</a>&nbsp;"&Separator&"&nbsp;"
   response.write"<a href="""&url&"?page="&n&"&"&querry&""" class="""&ListLink&""">最后页</a>&nbsp;"
   end if
  case "1"
   if currentpage < n then
    response.write"<a href="""&url&"?page="&currentpage+1&"&"&querry&""" class="""&ListLink&""">下一页</a>&nbsp;"    
   else
    response.write"下一页&nbsp;"    
   end if
   for i=1 to n
    if cstr(i)=cstr(currentpage) then
     response.write "<b>"&i&"</b>"&"&nbsp;"&Separator&"&nbsp;"
     else
      response.write"<a href="""&url&"?page="&i&"&"&querry&""" class="""&ListLink&""">"&i&"</a>&nbsp;"&Separator&"&nbsp;"  
    end if
   next
   
  case "2"
   PageMerCout=10 '每次可翻的最大页数
   '取得记录的最大页码段
   if n mod PageMerCout=0 then
    MaxPageFiled=n/PageMerCout
   else
    MaxPageFiled=n/PageMerCout+1
   end if
   '判断当前页所在的页码段
   if currentpage mod PageMerCout =0 then
    CurrPageFiled=currentpage/PageMerCout
   else
    CurrPageFiled=currentpage/PageMerCout+1
   end if
   '取得当前页码段的最大页码和最小页码
   MaxPageNo=CurrPageFiled*PageMerCout
   MinPageNo=(CurrPageFiled-1)*PageMerCout+1
   if MinPageNo<0 then MinPageNo=0
   '输出 “第一页 | 前十页 |”
   if currentpage<=1 then
    response.write"第一页&nbsp;"&Separator&"&nbsp;"
   else
    response.write"<a href="""&url&"?page=1&"&querry&""" class="""&ListLink&""">第一页</a>&nbsp;"&Separator&"&nbsp;"
   end if
   if CurrPageFiled<=1 then
    response.write"前十页&nbsp;"&Separator&"&nbsp;"       
   else
    response.write"<a href="""&url&"?page="&MinPageNo-PageMerCout&"&"&querry&""" class="""&ListLink&""">前十页</a>&nbsp;"&Separator&"&nbsp;"       
   end if
   '输出当前页码段
   for i=MinPageNo to MaxPageNo
    if i<=n then
     if cstr(i)=cstr(currentpage) then
      response.write "<b>"&i&"</b>"&"&nbsp;"&Separator&"&nbsp;"
      else
       response.write"<a href="""&url&"?page="&i&"&"&querry&""">"&i&"</a>&nbsp;"&Separator&"&nbsp;"  
     end if
    end if
   next
   '输出 “后十页 | 最后页”
   if CurrPageFiled>=MaxPageFiled then
    response.write"后十页&nbsp;"&Separator&"&nbsp;"       
   else
    response.write"<a href="""&url&"?page="&MaxPageNo+1&"&"&querry&""" class="""&ListLink&""">后十页</a>&nbsp;"&Separator&"&nbsp;"       
   end if
   if currentpage>=n then
    response.write"最后页&nbsp;"  
   else
    response.write"<a href="""&url&"?page="&n&"&"&querry&""" class="""&ListLink&""">最后页</a>&nbsp;"  
   end if
 end select
end sub
%>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的影视库管理系统的示例程序,它可以添加、删除和查找影视作品: ```c++ #include <iostream> #include <vector> #include <algorithm> class Media { public: Media(const std::string& title, const std::string& director, int year) : title_(title), director_(director), year_(year) {} const std::string& get_title() const { return title_; } const std::string& get_director() const { return director_; } int get_year() const { return year_; } private: std::string title_; std::string director_; int year_; }; class Movie : public Media { public: Movie(const std::string& title, const std::string& director, int year, const std::string& actor) : Media(title, director, year), actor_(actor) {} const std::string& get_actor() const { return actor_; } private: std::string actor_; }; class TVShow : public Media { public: TVShow(const std::string& title, const std::string& director, int year, int season, int episode) : Media(title, director, year), season_(season), episode_(episode) {} int get_season() const { return season_; } int get_episode() const { return episode_; } private: int season_; int episode_; }; class MediaLibrary { public: void add_media(Media* media) { media_.push_back(media); } void remove_media(const std::string& title) { auto it = std::find_if(media_.begin(), media_.end(), [&](const Media* m) { return m->get_title() == title; }); if (it != media_.end()) { media_.erase(it); } } const Media* find_media(const std::string& title) const { auto it = std::find_if(media_.begin(), media_.end(), [&](const Media* m) { return m->get_title() == title; }); if (it != media_.end()) { return *it; } else { return nullptr; } } private: std::vector<Media*> media_; }; int main() { MediaLibrary library; // 添加一些影视作品 library.add_media(new Movie("The Shawshank Redemption", "Frank Darabont", 1994, "Tim Robbins")); library.add_media(new Movie("The Godfather", "Francis Ford Coppola", 1972, "Marlon Brando")); library.add_media(new TVShow("Friends", "David Crane, Marta Kauffman", 1994, 1, 1)); library.add_media(new TVShow("Breaking Bad", "Vince Gilligan", 2008, 1, 1)); // 查找特定影视作品 const Media* media = library.find_media("Friends"); if (media) { std::cout << "Found media: " << media->get_title() << '\n'; } else { std::cout << "Media not found!\n"; } // 删除影视作品 library.remove_media("The Godfather"); // 打印所有影视作品 for (const auto& m : library) { std::cout << "Title: " << m->get_title() << '\n'; std::cout << "Director: " << m->get_director() << '\n'; std::cout << "Year: " << m->get_year() << '\n'; const Movie* movie = dynamic_cast<const Movie*>(m); if (movie) { std::cout << "Actor: " << movie->get_actor() << '\n'; } const TVShow* tv_show = dynamic_cast<const TVShow*>(m); if (tv_show) { std::cout << "Season: " << tv_show->get_season() << '\n'; std::cout << "Episode: " << tv_show->get_episode() << '\n'; } std::cout << '\n'; } return 0; } ``` 在这个示例中,我们定义了三个类:`Media`(表示影视作品)、`Movie`(表示电影)和`TVShow`(表示电视剧)。`Movie`和`TVShow`都继承自`Media`,并在此基础上添加了一些额外的特性(如演员和季/集数)。 我们还定义了一个`MediaLibrary`类,它包含了一个`std::vector`,并提供了添加、删除和查找影视作品的方法。在`main`函数中,我们添加了一些影视作品,并演示了如何查找特定影视作品、删除影视作品以及打印所有影视作品的信息。注意,我们使用`dynamic_cast`来在运行时检查`Media`指针的实际类型,并相应地打印特定的信息。 此程序只是一个简单的示例,可能需要进行优化以处理更多的影视作品,并提供更多的功能(如借阅、归还等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值