asp课程设计-作业提交系统.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateasp课程设计-作业提交系统asp课程设计-作业提交系统 湖南工业大学课 程 设 计资 料 袋 计算机与通信 学院(系、部) 2009-2010 学年第 2 学期 课程名称 WEB程序设计 指导教师 欧阳旻 职称 讲师 学生姓名 肖君诺 专业班级 计本073 学号 07408100321 题 目 作业提交系统 成 绩 起止日期 2010 年 6 月 12 日 2010 年 6 月 20 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书12课程设计说明书13课程设计报告1张WEB程序设计课程设计说明书 作业提交系统起止日期: 2010 年 6 月 12 日 至 2010 年 6 月 20 日学生姓名肖君诺班级计本073班学号07408100321成绩指导教师(签字)计算机与通信学院(部)2010年 6月 20 日教师评语:成绩: 指导教师: 年 月 日一、 实训题目ASP动态网页设计作业提交系统二、 实训目的进一步巩固和加深“ASP动态网页设计”课程的基本知识,了解ASP动态网页设计知识在实际中的应用。综合运用“ASP动态网页设计”课程和先修课程的理论及生产实际知识去分析和解决问题,进行的相关训练。学习ASP动态网页设计的一般方法,了解和掌握通用数据库的连接、数据的相关操作或网站的设计过程和进行方式,培养正确的设计思想和分析问题、解决问题的能力,特别是网站功能规划的能力和实现相关功能的能力。通过能系统的分析、系统设计、数据库设计和功能的实现等,培养ASP动态网页设计的基本技能三、 设计概述设计一个网上作业提交系统设计要求:系统要求教师具有网上作业的布置、题库的修改、解答学生提问等功能,学生用户具有选择章节选择作业、提交作业、查看作业结果等功能。四、 设计思想基于系统开发需要,我们采用了 一下几种技术进行开发:运用ASP做服务端的业务逻辑处理,用DreamweaverCS4进行网页设计,主要利用表单和表格进行数据的展现,用JavaScript进行客户端的验证和事件处理,采用大型数据库SQLServer2005存储数据,用ADO存取数据库,采用OLEDB方式连接数据库,并采用第三方组件ASPUpload进行文件上传,灵活运用。系统的开发主要环境为DreamweaverCS4+IIS5.1服务器+SQLServer2005,这是开发ASP动态网站的理想选择。五、 设计任务本系统包括:管理员,老师,学生三个角色,分别实施不同的动作管理员:院系管理,班级管理,课程管理,用户审核与修改,提问的删除。老师的课程,班级课程的安排等新注册的用户需要管理员审核通过之后才能登录。管理员可以修改增设院系,给院系添加班级,给班级安排课程。课程安排,哪些老师能教什么课,给班级安排课程,一个老师能教多门课程,一个班级有多门课程,两个班级有同一门课程都有可能不是同一个老师教。所以班级、老师、课程这三个实体之间两两都有多对多关系。老师:题库管理,回答提问,布置作业,评阅作业布置作业,作业随机生成,由题库中取出,学生提交过一次之后,记录这次的题目,在老师还没有评阅之前,学生还可以修改。评阅作业,选择题,判断题由电脑阅卷,填空,问答,应用题由老师评阅,最后计算总分,修改状态,公布答案,供学生查看学生:做作业,提问六、 设计要求采用DreamweaverCS+ASP+SQLSever2005综合进行课程设计,开发一个动态网站系统。要求能够根据设计题目的要求,划分功能模块;根据功能模块的划分,进行相应的数据库设计;画出程序流程图,列出组成网页的文件清单;完成程序代码;对各模块进行整合,并进行调试;编写课程设计报告。七、设计步骤(包括流程图或框图)7.1、总体结构设计系统主要的功能模块如下:作业提交系统管理员老师学生院系管理班级管理课程管理用户管理布置作业评阅作业在线作业查看作业学生提问提问管理题库管理回答提问7.2、数据库设计 物理结构设计7.3 数据字典 略八、设计代码(程序设计类课程)1、连接数据库文件 conn.asp<% sub closedb '关闭数据库连接 if rs.State =1 then rs.Close set rs=nothing if conn.State =1 then conn.Close set conn=nothing end sub'=连接数据库= 'Server对象的CreateObject方法建立Connection对象 set conn=Server.CreateObject("adodb.connection")'新定义一个数据库的连接conn.Connectionstring="DRIVER=SQL Server;SERVER=127.0.0.1;UID=sa;PWD=123457;DATABASE=network;"conn.Open '定义Recordset对象 Set rs=Server.CreateObject("ADODB.Recordset") '设置Connection对象的ConnectionString '设置rs的ActiveConnection属性,绑定到连接 Set rs.ActiveConnection = conn '设置游标类型 rs.CursorType = 3 '打开记录集%>2、编码转换 和权限验证文件 encoding.asp<%LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><%session.CodePage=65001%><%response.Charset="utf-8"%><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><%以上为编码转换'得到当前页面的地址 Function GetUrl() On Error Resume Next Dim strTemp If LCase(Request.ServerVariables("HTTPS") = "off" Then strTemp = "http:/" Else strTemp = "https:/" End If strTemp = strTemp & Request.ServerVariables("SERVER_NAME") If Request.ServerVariables("SERVER_PORT") <> 80 Then strTemp = strTemp & ":" & Request.ServerVariables("SERVER_PORT") strTemp = strTemp & Request.ServerVariables("URL") If Trim(Request.QueryString) <> "" Then strTemp = strTemp & "?" & Trim(Request.QueryString) GetUrl = strTemp End Function %><%if session("roleid")="" then session("roleid")=0response.Redirect("loginput.asp")end ifdim url,realurlrealurl=GetUrl()得到请求的地址url=Request.ServerVariables("URL")'response.Write(url&"-"&left(url,14)if left(url,14)="/network/admin" then 判断请求的是否是 文件夹admin里面的资源,如果是则判断是否admin,不是则返回登陆,说明权限不足if session("roleid")<>1 then response.Redirect("./loginput.asp?message="&server.URLEncode("你不是管理员,权限不足.") end ifelseif left(url,16)="/network/teacher" thenif session("roleid")<>1 and session("roleid")<>2 then response.Redirect("./loginput.asp?message="&server.URLEncode("你不是老师,权限不足.") end ifend if%>3、在线作业生成页面 dowork.asp<!-#include file=./comm/encoding.asp -> <!-#include file=./comm/conn.asp -> <!DOCTYPE html PUBLIC "-/W3C/DTD XHTML 1.0 Transitional/EN" "http:/www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http:/www.w3.org/1999/xhtml"><head><link href="./css/com.css" rel="stylesheet" type="text/css" /><link href="./css/index.css" rel="stylesheet" type="text/css" /><title>mainFrm</title></head><body ><div id="box"><div class="plate_out" ><div class="plate" > <div class="plate_top"> <span class="plate_title">在线作业 </span> </div><div class="handleform" > <div class="block_out_nobg"> <div style=" font-size:16px"> <% dim sql,uid,wid,makepolicy,courseid,levelid,showans dim selectnum,selectpoint,judgenum,judgepoint,fillspacenum,fillspacepoint,essaynum,essaypoint,applicationnum,applicationpoint wid=request.QueryString("wid") uid=session("uid") rs.Open "select w.state ,w.showans,w.workname,w.levelid,levelname,w.courseid ,coursename, maxtime ,makepolicy,remark from work as w,course as c,courselevel as cl where w.courseid=c.courseid and w.levelid=cl.levelid and wid="&wid If rs.EOF Then response.write "没有记录" Else courseid=rs("courseid") levelid=rs("levelid") response.Write(" <b>作业名:</b><font color='red'>"&rs("workname")&"</font>")response.Write(" <b>课程:</b><font color='red'>"&rs("coursename")&"</font> ") response.Write(" <b>章节:</b><font color='red'>"&rs("levelname")&"</font>")response.Write(" <b>答题时间:</b><font color='red'>"&rs("maxtime")&" </font> 分钟")response.Write(" <br/><b>备注:</b><font color='red'>"&rs("remark")&"</font>")makepolicy=rs("makepolicy")showans=rs("showans")End If rs.closedim arrdim arr2,arr3arr=split(makepolicy,chr(9)dim iFor i=1 To ubound(arr)arr2=split(arr(i-1),":")arr3=split(arr2(1),",")select case arr2(0)case "select" selectnum=arr3(0)selectpoint=arr3(1)case "judge" judgenum=arr3(0)judgepoint=arr3(1)case "fillspace" fillspacenum=arr3(0)fillspacepoint=arr3(1)case "essay" essaynum=arr3(0)essaypoint=arr3(1)case "application" applicationnum=arr3(0)applicationpoint=arr3(1) end select Nextresponse.Write("<br/>")'查找是否已经提交过dim prevquestions,otherans,hasdo,youansArr,thestatehasdo=0rs.Open "select * from dowork where uid="&uid&" and wid="&wid If not rs.EOF Then hasdo=1prevquestions=rs("questions")otherans=rs("otherans")youansArr=split(otherans,chr(9)thestate=rs("state")'response.Write(otherans&" "&youansArr(0)end ifrs.closefunction getYouAns(quizid,quiztype)dim tansfor i=0 to ubound(youansArr) if left(youansArr(i),len(quiztype)=quiztype then tans=mid(youansArr(i),len(quiztype)+2) exit for end ifnext'response.Write(tans&" - ")youansArr2=split(tans,"")for i=0 to ubound(youansArr2) if quizid&""=left(youansArr2(i),len(quizid&"") then getYouAns=mid(youansArr2(i),len(quizid&"")+2)'response.Write("<br>"&left(youansArr2(i),len(quizid&"")&"<br>")exit forend ifnext'response.Write(getYouAns)end functionfunction findArr(arr,num1,ind)'在数组中查找 是否有该数字 如果有则返回1dim jfindArr=0'response.Write("num :"&num1&" ind:"&ind&"<br>")for j=1 to ind'response.Write(arr(j-1)&"find ")if arr(j-1)=num1 then findArr=1 exit for end ifnextend function '在数据库中查找出来的合理数据的索引号中 随机生成num2个 不同的数字function getRandArr(num2,maxnum)dim rand ,i1,indexs1()redim indexs1(num2-1)randomize '产生随机化种子for i1=1 to num2do rand =int(maxnum*rnd)+1 '产生随机数loop while findArr(indexs1,rand,i1)=1 '如果在数组中没有找到 则跳出循环 说明生成了一个有效的 索引 随机数indexs1(i1-1)=rand '将随机数 赋值给索引数组nextgetRandArr=indexs1 end function'输出一类题目function makequiz(qtype,quenum,qpoint)response.Write("<div style='padding-left:30px;'>")'如果已经提交过 则解析出提交过的题目的iddim qidsqids=""if hasdo=1 thendim qarr,qiqarr=split(prevquestions,chr(9)for qi=0 to ubound(qarr)if left(qarr(qi),len(qtype)=qtype thenqids= mid(qarr(qi),len(qtype)+2)'response.Write(qids)exit for end ifnextqids=" and qid in ("&qids&")"quenum=split(qids,",")quenum=ubound(quenum)end ifdim sqltestsqltest="select * from quiz where qtype='"&qtype&"' and courseid="&courseid &" and levelid="&levelid&qidsrs.Open sqltest If rs.EOF Then response.write sqltest Else dim indexs,i2if cint(rs.RecordCount)>=cint(quenum) then '随机生成quenum个数字从 1rs.recordcount中indexs=getRandArr(quenum, rs.recordcount)elseresponse.Write("<font color='red'>warning:题库中没有足够的题目,需要"&quenum&"个,题库中只有"&rs.recordcount&"个</font>")end ifFor i2=1 To rs.RecordCountIf rs.eof Then Exit Forif cint(rs.RecordCount)<=cint(quenum) then '如果题库中的题目数量少于要求的数量则不随机 直接全部输出outquiz(qpoint/quenum)elseif findArr(indexs,i2,quenum)=1 then '题库中有足够多的题目,则查找数组中是否有该索引值,有则输出该题目outquiz(qpoint/quenum)end ifend ifrs.movenextNext End Ifrs.closeresponse.Write("</div>")end function'输出一个题目function outquiz(qpoint)dim qtype,qid,qname,qkeyqid=rs("qid")qtype=rs("qtype")qname=rs("qname")qkey=rs("qkey")qindex=qindex+1questions=questions&","&qidresponse.Write("<br/> "&qindex&". <span class='qname'>"&qname&"</span>("&formatnumber(qpoint,1)&"分)")dim youansyouans=-1if hasdo=1 then'如果是已经提交过 则处理以前做过的答案youans=getYouAns (qid,qtype)if showans=1 or thestate="已评阅" then'如果设定了显示答案 或者 已评阅 则 输出正确答案if qtype="select" or qtype="judge" thenif youans=rs("qkey") then response.Write(" <img src='./images/system/check_right.gif' />")elseresponse.Write(" <img src='./images/system/check_error.gif' />")end if end ifresponse.Write("<div class='align_right' ><b> 正确答案:</b><font color='red'>"&qkey&"</font></div>")end ifif qtype="select" thenif youans<>"" then youans=Asc(youans)-Asc("A")end ifend ifend ifresponse.Write("<br/>")dim checkselect case qtypecase "select"dim ansArr1,ansArr2ansArr1=split(rs("qoption"),"")for i=0 to ubound(ansArr1)ansArr2=split(ansArr1(i),":")check=""if youans=i then check="checked='checked'" end ifresponse.Write(" <input name='qindex"&rs("qid")&"' type='radio' value='"&ansArr2(0)&"' "&check&"> "&ansArr1(i)&"<br/>")nextcase "judge"dim check1,check2if youans=1 then check1="checked='checked'" end ifif youans=0 then check2="checked='checked'" end ifresponse.Write(" <input name='qindex"&rs("qid")&"' type='radio' value='1' "&check1&">是 <input name='qindex"&rs("qid")&"' type='radio' value='0' " &check2&">不是<br/>")case "fillspace"response.Write("这 是 摆 设")case "essay"if youans=-1 then youans="答:" end ifresponse.Write("<textarea name='qindex"&rs("qid")&"' cols='60' rows='5' >"&youans&"</textarea>")case "application"if youans=-1 then youans="解:" end ifresponse.Write("<textarea name='qindex"&rs("qid")&"' cols='60' rows='5'>"&youans&"</textarea>")end select end function%> <hr/> <%dim qindex,questions, p qindex=0if hasdo=1 then p="update" else p="add" end if%> <form action="doworkaction.asp?p=<%=p%>&wid=<%=wid%>" method="post"> <div class="block_out_nobg"> <%questions=questions&"select:0"response.Write("<font color='#CC00FF'>一、选择题:"&selectnum&"个 分值:"&selectpoint&"</font><br/>")makequiz "select",selectnum,selectpoint%> </div> <hr/> <div class="block_out_nobg"> <%questions=questions&chr(9)&"judge:0"response.Write("<font color='#CC00FF'>二、判断题:"&judgenum&"个 分值:"&judgepoint&"</font><br/>")makequiz "judge",judgenum,judgepoint%> </div> <hr/> <div class="block_out_nobg"> <%questions=questions&chr(9)&"fillspace:0"response.Write("<font color='#CC00FF'>三、填空题:"&fillspacenum&"个 分值:"&fillspacepoint&"</font><br/>")makequiz "fillspace",fillspacenum,fillspacepoint %> </div> <hr/> <div class="block_out_nobg"> <%questions=questions&chr(9)&"essay:0"response.Write("<font color='#CC00FF'>四、简答题:"&essaynum&"个 分值:"&essaypoint&"</font><br/>")makequiz "essay",essaynum,essaypoint%> </div> <hr/> <div class="block_out_nobg"> <%questions=questions&chr(9)&"application:0"response.Write("<font color='#CC00FF'>五、应用题:"&applicationnum&"个 分值:"&applicationpoint&"</font><br/>")makequiz "application",applicationnum ,applicationpoint%> </div> <input type="hidden" name="questions" value="<%=questions%>" /> <input type="hidden" name="worktype" value="在线作业" /> <input type="hidden" name="cid" value="<%=session("cid")%>" /> <input type="hidden" name="uid" value="<%=uid%>" /> <center> <%if request.QueryString("p")<>"showans" then response.Write(" <input type='submit' name='submit' value='提交' />")end if%> </cen