⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function1.asp

📁 实验教学系统 很好用 有学生 老师 管理等模块 便于学校使用
💻 ASP
字号:
<%
'***************************************
'函数文件一,专门实现购物车功能
'注意保存图书的用了两个一维数组,
'图书编号数组保存在Session("Books")中;图书数量数组保存在Session("BooksNum")中。注意这两个数组时刻要一一对应
'另外在AddBook中要注意BooksNum 和 BookNum 的区别,前者有s,用来保存书本数量的数组,后者没有s,是选中这本书的数量。
'***************************************

'判断一件货物是否在购物车中已存在,如果存在,则返回对应的数组下标,否则返回-1
Function BookExist(BookId)
	Dim Books
	Books=Session("Books")
	'如果条件成立,表示不是数组,说明其中根本没有书,直接返回值,退出函数即可
	If IsArray(Books)=False Then 
		BookExist=-1
		Exit Function
	End If

	Dim numTemp,subScript
	subScript=-1			          '用于获得对应于该书的下标
	numTemp=Ubound(Books)             '获得数组的最大下标,也就是长度
	Dim I
	For I=0 To numTemp                
		If Books(I)=BookId Then       '存在相同的书号,返回数组的下标值
			subScript=I
			Exit For
		End If
	Next
	BookExist=subScript
End Function

'向购物车中添加货物
Sub AddBook(BookId,BookNum)
	'首先返回两个数组
	Dim Books,BooksNum
	Books=Session("Books")
	BooksNum=Session("BooksNum")
	'调用函数返回该书在已有数组中的编号,如果尚不存在,则返回-1
	Dim subScript
	subScript=BookExist(BookId)

	'下面根据各种情况判断
	If IsArray(Books)=False Then
		'不是数组,说明其中还没有任何书,这是添加的第一本
		ReDim Books(0)
		Redim BooksNum(0)
		Books(0)=BookId
		BooksNum(0)=BookNum
	ElseIf subScript<>-1 Then 
		'这表示该书已经在购物车,只要修改添加数量即可
		BooksNum(subScript) = BookNum + BooksNum(subScript)
	Else
		'这表示购物车有书,但是该书不存在,重新定义数组长度,添加到后面即可
		Dim numTemp
		numTemp=Ubound(Books)
		Redim Preserve Books(numTemp+1)        '重新定义数组
		Redim Preserve BooksNum(numTemp+1)     '重新定义数组
		Books(numTemp+1)=BookId
		BooksNum(numTemp+1)=BookNum
	End If
	'最后将新的购物车数组保存到Session中
	Session("Books")=Books
	Session("BooksNum")=BooksNum
End Sub

'在购物车中删除一件货物
Sub DelBook(BookId)
	'返回两个数组
	Dim Books,BooksNum
	Books=Session("Books")
	BooksNum=Session("BooksNum")
	'首先调用函数找到该书编号在数组中的下标
	Dim subScript
	subScript=BookExist(BookId)
	'返回数组的长度
	Dim numTemp
	numTemp=Ubound(Books)
	If numTemp=0 Then
		'这表示就一本书,直接清空数组即可
		Session("Books")=""
		Session("BooksNum")=""
	Else
		'这表示有若干本书,将该书以后的图书往前移动一位即可
		Dim I
		For I=subScript To numTemp-1
			Books(I)=Books(I+1)
			BooksNum(I)=BooksNum(I+1)
		Next
		Redim Preserve Books(numTemp-1)        '重新定义数组
		Redim Preserve BooksNum(numTemp-1)     '重新定义数组
		'最后将新的购物车数组保存到Session中
		Session("Books")=Books
		Session("BooksNum")=BooksNum
	End If
End Sub

'更改购物车中的货物数量
Sub UpdateBook(BookId,BookNum)
	'返回两个数组
	Dim Books,BooksNum
	Books=Session("Books")
	BooksNum=Session("BooksNum")
	'首先找到该书编号在数组中的下标
	Dim subScript
	subScript=BookExist(BookId)
	'下面分两种情况修改数量
	If subScript<>-1 And BookNum>0 Then
		'这表示该书存在,且数量不为0,直接修改数量即可
		BooksNum(subScript)=BookNum
		'最后将新的购物车数组保存到Session中
		Session("Books")=Books
		Session("BooksNum")=BooksNum
	Elseif subScript<>-1 And BookNum<=0 Then
		'这表示该书存在,但是数量为0或负数,直接调用函数删除即可
		Call DelBook(BookId)
	End If
End Sub


'获得购物车中的总货物数
Function GetTotalNum()
	Dim Books,BooksNum,numTemp
	Books=Session("Books")
	'如果该条件成立,表示其中没有任何货物
	If IsArray(Books)=False Then
		GetTotalNum=0
		Exit Function
	End If
	BooksNum=Session("BooksNum")
	numTemp=Ubound(Books)
	Dim I,total
	total=0
	For I=0 To numTemp
		total=total+BooksNum(I) '累加求的总数
	Next
	GetTotalNum=total
End Function

'获得购物车中的货物的总金额,此时需要从数据库中读取价格
Function GetTotalMoney()
	Dim Books,BooksNum,numTemp
	Books=Session("Books")
	BooksNum=Session("BooksNum")
	'该条件表示没有任何书,直接退出函数即可
	If IsArray(Books)=False Then
		GetTotalMoney=0
		Exit Function
	End If
	'下面开始计算
	numTemp=Ubound(Books)
	Dim I,total
	total=0
	Dim rs,strSql
	'累加求总金额
	For I=0 To numTemp
		strSql="Select * from book where BookId=" & Books(I)
		Set rs=db.Execute(strSql)
		total=total+BooksNum(I)*rs("bookprice")
		rs.Close
	Next
	Set rs=Nothing
	GetTotalMoney=total     '返回函数值
End Function

'结账函数,产生本次订单,并记录明细情况,最后返回订单号码
Function CheckOut()
	Dim Books,BooksNum,numTemp
	Books=Session("Books")
	BooksNum=Session("BooksNum")
	'这表示根本没有买书,不必结算
	If IsArray(Books)=False Then
		Exit Function
	End If

	'首先添加一个订单,这里要调用求总数量和总金额的函数
	Dim rs,rs2,strSql
	strSql="Insert Into orders(UserId,TotalNum,TotalMoney,SubmitDate) Values('" & Session("UserId") & "'," & GetTotalNum() & "," & GetTotalMoney() & ",#" & Now() & "#)"
	db.Execute(strSql)

	'马上返回本次的订单编号
	Dim OrderId
	strSql="Select Top 1 OrderId From orders Where UserId='" & Session("UserId") & "' Order By OrderId Desc"
	Set rs=db.Execute(strSql)
	OrderId=rs("OrderId")

	'下面再依次将每一项添加到明细表Orders_particular中,这里使用了RecordSet对象添加
	'当然也可以不用Recordset对象,循环执行多条Insert语句也可以
	Set rs=Server.CreateObject("Adodb.recordset")
	rs.open "Select * From Orders_particular",db,0,2
	numTemp=Ubound(Books)
	For I=0 To numTemp
		rs.Addnew
		rs("OrderId")=OrderId
		rs("BookId")=Books(I)
		rs("BuyNum")=BooksNum(I)
		rs.Update
	Next
	rs.Close
	
	'结账完毕,可以将数组清空
	Session("Books")=""
	Session("BooksNum")=""

	'返回订单号
	CheckOut=OrderId
End Function
%>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -