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

📄 makeinvoice.asp

📁 fger th t ytwety w4t qrt 43 q34rt5 q34t3q4t
💻 ASP
字号:
<!--#INCLUDE file="config.inc" -->
<%
' 如果用户已经结账
 If session("hasitem")<>session.sessionid Then
    Response.Write "<center><font style=""font:10pt"">目前您的购物车里没有货物或者购买数为零!</font><center><br>"
    response.write "<center><font style=""font:10pt"">请您继续在本店购物<a href=""show.asp"">>>go</a></font></center>"
	response.end
 end if
' 判断用户是否已经登录
if session("login")<>session.sessionid then
     response.redirect "login.asp"
end if
' 函数sqlstr用来规范sql查询语句 
function sqlstr(data)
   sqlstr="'" & Replace(data,"'","''") & "'"
end function

' 连接数据库
 Set conn = Server.CreateObject("ADODB.Connection")
 conn.Open ConnString 
 set objusersrs=server.createobject("ADODB.recordset")
 ssql2="select * from users"
 objusersrs.open ssql2,conn,1,3
 loginuser=session("loginuser")
    
    ' 为了防止一切可能的情况,这里还对会员数据库进行检查。有这样的一种可能:管理员可能发现该用户不合法,将他从数据库中删除;而此时该会员用户正在进行定单操作。这就会产生一个冲突,事实上定单操作进行时,该用户已经不存在,所以在这里进行一个判断。如果发生这种情况,则提前终止程序的继续执行。
 if objusersrs.eof then
    response.write "<font style=""font:10pt"">对不起这个用户已经被删除,请<a href=""enroll.asp"">重新注册</a></font>"
	response.end
 end if
 objusersrs.movefirst
  do until objusersrs.eof
   if loginuser = objusersrs("userid")  then

	exit do      ' 找到了该用户,退出循环
   end if
   objusersrs.movenext
  loop  
 ' 求出定单号,为现有定单号中最大的一个再加上1
 application.lock 
' 定单号的计算涉及到数据表中已经存在的最大定单号,所以需要锁定。而且,下面的程序中涉及到多次对数据库的存储、修改操作。	  
   set objordersrs=server.createobject("adodb.recordset")
   ssql3="select orderid from orders order by orderid"
   objordersrs.open ssql3,conn,1,3

	  if objordersrs.eof then
	       idtemp="00001"      ' 表明这是第一个定单
	  else
	       objordersrs.movelast
' 因为打开数据表时排序了,所以最后一个记录就是最大号的记录。存储在数据库中的定单号是字符串型的,需先把字符串型的数据修改为数值型的,加上1以后再转换回来,并且需要规范为统一的5位定单号
    	   idtemp=cint(objordersrs("orderid"))
	       idtemp=idtemp+1
	  end if
 ' 结束定单号的计算,开始规范化定单号
      ordernumber = CStr(idtemp)
	  lentemp=len(ordernumber)
      for i=lentemp to 4
	      ordernumber="0"&ordernumber
	  next            ' 将定单号规范化,统一为5位
	  ordertime = now
	  custid=objusersrs("custid")
      response.write "<center><font color=#FF0000 style=""font:10pt"">恭喜您完成了一次购物!</font></center>"

     ' 打印出定单的细节部分,在此同时把计算的结果存入数据库orders表中。
         totalmoney=0 '此次定单的总金额
		 totalitem=0       ' 定单中总共的商品种类数量
		 details=""        ' 记录所有购买商品的名字和数量的字符串
		 writetable=0      ' 标记将要写出的是表头部分还是表元部分
		 i=cstr(1)         ' 该变量用来循环取得存储在Session变量中的需要购买的商品数
         for each key in request.cookies("itembuy")
		     if request.cookies("itembuy")(key)<>"" then  
				productid=request.cookies("itembuy")(key)   ' 获取商品编号
				quantity=cint(session(i))           ' 获取此项商品的购买数 
           		i=cint(i)+1
				i=cstr(i)

               ' 在表product中取出这个商品的名称和单价
				set objproductrs=server.createobject("adodb.recordset")
                ssql1="select * from product where productid=" & sqlstr(productid)
                objproductrs.open ssql1,conn,1,3
               
' 打印订购细节的表头部分。由于打印表头和打印表元的格式不同,因此设立了writetable来标识要打印的是表头部分还是表元部分。这里我们提供给用户
                if writetable=0 then
				   writetable=1
				   Response.Write "<center><br><font  style=""font:10pt"">您的购买信息</font><br><TABLE width=400 border=1 bordercolor=#999900 cellspacing=0>" 
                   Response.Write "<TR><td width=100>"
	               Response.Write "<center>商品名</center></td>"
                   Response.Write "<td width=100>" 
                   Response.Write "<center>单价(元)</center>"
	               Response.Write "</td><td width=100>" 
                   Response.Write "<center>购买数</center>"
	               Response.Write "</td><TD width=100>"
	               Response.write "<center>合计金额(元)</center></TD>"
                   Response.Write "</TR>"
		       end if
				if quantity<>0 then
				response.write "<tr><td>" & objproductrs("name") & "</td><td>" & objproductrs("price")
				response.write "</td><td>" & cint(quantity) & "</td>"
				
				onetotal=cint(objproductrs("price"))*cint(quantity)
				totalmoney=totalmoney+onetotal
				totalitem=totalitem+1
				  if details="" then 
				     details=details & objproductrs("name")&"*"&quantity
                  else 
				     details=details & "," & objproductrs("name")&"*"&quantity
				  end if
				response.write "<td>" & onetotal & "</td></tr>"
			    end if
				objproductrs.close
			 end if
		 next     ' 循环,读取
         Response.Write "</TABLE><br>" & vbCrLf

      ' 将定单信息插入定单表
	  conn.execute("INSERT INTO orders VALUES ('"&ordernumber&"','"&ordertime&"','"&custid&"','"&details&"','"&totalitem&"','"&totalmoney&"',0)")
	  
	  session("insert")=session.sessionid    ' 标记用户刚进行了一次定单操作
      session("hasitem")=false                   ' 完成了插入,则购物车为空

	  ' 更新用户的积点数,积点数为数字型
	  points=cint(objusersrs("points"))
	  change=cint(totalmoney*0.1)
	  points=points+change

      response.write "<font color=#FF0000 style=""font:10pt"">恭喜您在这次购物中获得了"&change&"点积分!</font>"
      response.write "<br><font color=#FF0000 style=""font:10pt"">您的积分累计已达"&points&"分!继续努力!</font>"
	  ssql="update users set points="& points
      ssql=ssql & " where custid=" & sqlstr(custid)
	  conn.execute(ssql)
application.unlock
%>
<HTML>
<HEAD>
<TITLE>下定单</TITLE>
<meta http-equiv="content-language" content="zh-CN">
<meta http-equiv="content-type" content="text/html;charset=gb2312">
<style type="text/css">
<!-- 
input{background-color:#eeeeee;border-style:solid;border-color:#6666cc;border-width:1;}
td{font:10pt;}
-->
</style></HEAD>
<BODY style="font:10pt">
<center>请您继续在本店购物<a href="temp.htm">>>Go...</a></center></body>
</html>

⌨️ 快捷键说明

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