界面演示:

所具备的功能:
1.主程序是用框架制作,是左右型框架。
2.可以添加书籍(书名,分类,出版社,价格,出版日期)。
3.可以添加删除分类并自动加入添加列表。
4.可以分类查询,和详细查询(按分类,价格,出版社,出版日期)。
5.应朋友要求特别做了分页程序(本来不太喜欢做,感觉都很普遍有教程了)。
欠缺部分:
1.没有做后台管理(可参照第一个新闻教程)。
2.对于表单的验证不是很严格。
3.再有什么问题大家在制作中在告诉我吧!
程序目录(看了是不是感觉非常简单啊):

重点就是搜索页面,因为主要的知识点就是在于搜索功能写法,我感觉写的比较全面了!

这个就是书籍添加图片,主要就是放在框架的left.asp,在2节课我会详细讲解!

下面就开始安排一下课程吧!
1.规划目录,建立数据库。
好的程序首先要规划好目录和数据库!

上面就是这个图书的目录!

上面的图片说明必须建立2个表,一个xhbook,用于存放书籍的各个属性,另一个是xhbooktype存放书籍的分类!

上图就是xhbooktype的结构,只有一个booktype就是存放书籍分类。

上面就是xhbook表的结构,下列就是分类:
bookname存放书籍名称
booktype 存放书籍分类
publishing 存放书籍的出版社
bookmoney 存放书籍的价格
xhdate 存放书籍的出版日期
2.写conn.asp数据库连接页面,规划index.asp框架(分left.asp,right.asp)。
在这里conn.asp文件我也不太想多讲解了,很多朋友已经很熟悉了,用于连接数据库文件!
<%
set db=server.createobject("adodb.connection")
db.open "DBQ="&server.mappath("date/xhbook.mdb")&";driver={microsoft access driver (*.mdb)}"
%>
属于规范写法,数据库地址为date/xhbook.mdb为安全期间大家在使用中可以更改为asp格式。
框架页面为index.asp分left.asp和right.asp页面。
left.asp页面中的要点为:

1.为连接数据库conn.asp文件。
2.为一个SQL语句用于输出xhbooktype表中的记录(也就是分类)。
3.执行SQL语句。

这段语句中:
if request.form("active")="" then
else
set rs2=server.createobject("adodb.recordset")
date1=request.form("date1")
date2=request.form("date2")
date3=request.form("date3")
insertsql="select * from xhbook"
rs2.open insertsql,db,1,3
意思为在表单添加了一个隐藏域设置为active值为YES,头句的目的就是打开页面探测一下active是否为空值,如果是就不执行,如果不是执行一下代码!

这里的:
insertsql="select * from xhbook"
rs2.open insertsql,db,1,3
rs2.addnew
rs2("bookname")=trim(request.form("name"))
rs2("booktype")=trim(request.form("select"))
rs2("bookmoney")=trim(request.form("money"))
rs2("publishing")=trim(request.form("publishing"))
rs2("xhdate")=date1&"-"&date2&"-"&date3
rs2.update
为用记录集来更新表xhbook
rs.addnew和rs.update是互相组合的,一个添加记录,一个更新记录!中间5句就是从表单获取值来传递给数据库表单!

这个很简单就是循环了选择表单的值,只要循环一下就可以更新输出了,这样很方便的!
3.显示全部数据页面xh_qlook.asp和添加分类页面xh_add.asp
下图为分页代码:

好了我来讲解一下上面的代码:
set rs=server.createobject("adodb.recordset")
sql="select * from xhbook order by id desc"
rs.open sql,db,1,1
为声明记录集用SQL输出所有XHBOOK记录。
rs.pagesize=10
让每页面显示10条记录。
pagecount1=rs.pagecount
把总页数赋值给pagecount1
if request.querystring("pagenum")=0 or request.querystring("pagenum")="" then
pagenum=1
else
pagenum=request.querystring("pagenum")
rs.absolutepage=trim(request.querystring("pagenum"))
end if
以上代码是判断页面的参数,如果是零或者空值就赋值1。
rs.absolutepage=trim(request.querystring("pagenum"))
赋值给当前页面的数值!
还有一点重要的要讲解的分页就是在循环输出的时候,代码如下:
<%do while not rs.eof and i<=10%>
<%
i=i+1
rs.movenext
loop
%>
必须声明一个变量I,这样才能保证循环次数!

这段代码就是分页了,赋值给首页的数值是1,尾页的数值就是原来赋值的PAGECOUNT1
剩下的就是上页和下页了,我做了判断,看是否给予连接代码中大家可以看到。
<%if pagenum>1 then%>
<%else%>
上一页
<%end if%>
<%if pagenum < trim(pagecount1) then%>
<%else%>
下一页
<%end if%>
上页就用当前值-1,如果下页就+1,主要是通过querystring传递的!
好了开始讲解添加新分类页面xh_add.asp,其实这个页面就是添加新分类页面!就是一个递交页面。大家看看页面代码一下就明白了!
4.删除分类页面xh_del.asp和添加分类页面booktypesave.asp

上述图片的核心句代码就是这个:
booktype=trim(request.form("booktype"))
传嗲的参数给booktype,然后传递给下面的SQL语句,让SQL能完整执行!
sql="select * from xhbooktype where booktype='"&booktype&"'"

这段代码就是判断xhbooktype中是否有相同的分类!
if not rs.eof or not rs.bof then
判断指针是否到头或者到尾。
如果找到相同的记录就输出。
response.write ""
并且返回原来页面从新添加!
如果没有就更新记录,执行:
rs.addnew
rs("booktype")=booktype
rs.update
添加新分类,上节讲了这个东西,大家不会忘记吧!
好了讲解一下删除页面吧!

删除的主要原理就是以下2段代码。
id=request.querystring("id")
sql="delete * from xhbooktype where id="&id
第一个ID主要是通过URL传递过来的参数。
这个SQL语句是delete删除语句,他的where条件就是传递过来的ID值。
想必大家可以明白吧!按照条件删除记录分类。
但是大家别忘记要连接数据库文件啊!第一行
为了方便用户还要在最后一行记得做个跳转页面。
response.redirect "xh_booktype.asp"
这样用户可以继续添加或者转到其他页面~很方便吧。
5.程序的核心:查询页面的制作和处理。
这一节,我们就来讲解这个图书的最后一个关节,查询书籍信息!
看看查询页面的规划。

主要可以按照书籍名,分类,出版社,价格,出版日期查询,基本SQL语句的几个功能都可以用到!
好了,大家来看看查询处理页面!

由于这个代码比较复杂我无法界图上来,让我一句句分析给大家听听!
首先:
set rs=server.createobject("adodb.recordset")
..
..
date33=trim(request("date33"))
date111=date1&"-"&date2&"-"&date3
date222=date11&"-"&date22&"-"&date33
是获取页面传递的值过来的,为什么用request呢,为了自适应,这样有利于分页的时候参数传递!大家过会就明白了!
date111=date1&"-"&date2&"-"&date3
date222=date11&"-"&date22&"-"&date33
两句的意思就是组合一个日期参数,我用了这么一个笨方法,如果大家有好的方法一定告诉我!价格参数我也是这么传递的!
好了来解决这个查询语句吧~!贴处代码解决!大家不要眼花啊!
if len(bookname)<>0 and booktype<>"不清楚" and len(publishing)<>0 then
sql="select * from xhbook where bookname like '%"&bookname&"%' and-
booktype='"&booktype&"' and publishing like '%"&publishing&"%' and-
bookmoney>="&money1&" and bookmoney<="&money2&" and xhdate between #"&date111&"#-
and #"&date222&"# order by id desc"
end if
意思是如果书名不为空,类别不为不清楚,出版社不为空就执行下面这个SQL..
好了相同的意思,想必大家可以看明白下面3个SQL语句。
我就不一句句废话的讲解了!
只得一提的是,大家要了解SQL查询的条件,ID LIKE "%A%"这种模糊查询的方式,这是规范写法,还有通配符%,在ACCESS中是*,大家要牢记啊!
好了下面开始写这个分页,这个东西当时可是浪费了我好多时间!
dim pagenum,i
i=0
rs.pagesize=5
pagecount1=rs.pagecount
if request.querystring("pagenum")=0 or request.querystring("pagenum")="" then
pagenum=1
else
pagenum=request.querystring("pagenum")
rs.absolutepage=trim(request.querystring("pagenum"))
end if
这段代码和2讲里面的分页原理是相同的,赋值每页显示5条记录!
然后把总野鼠赋值给pagecount1,I的赋值到后面会给大家讲解!
<%
do while not rs.eof and i<=5
%>
对应的
<%
i=i+1
rs.movenext
loop
rs.close
set rs=nothing
%>
大家可以明白I的作用了吧,就是控制循环次数!
好了大家看看这个分页的连接参数传递,比较繁琐,但是每办法必须这么写,首先是首页的连接。
response.write "
&publishing&"&money1="&money1&"&money2="&money2&"&date1="&date1&"&- date2="&date2&"&date3="&date3&"&date11="&date11&"&date22="&date22&"- &date33="&date33&">首页
看明白了吗?主要是逐个的传递参数,原因就是分页后,跳转页面必须传递否则就会出现SQL找不到参数,必会出错!
上页的代码写法一样,把赋值运算写上去就可以了!
主要功能就显示了,到此这篇教程我就写完了!
代码演示
代码下载

