图1系统后台管理界面(2)数据库结构采用SQLSERVER2000,建立名称为“CourseWareDownL
oadSystem”的数据库,包括课件信息表(coursesInfo)、用户信息表(userInfo)、课程信息表(KCInfo)、类型信息表(typeInfo)、等级信息表(rankInfo)、专业信息表(professionInfo)、年级信息表(gradeInfo)、公告信息表(boardInfo)、投票信息表(noteInfo)等。如图2所示。
图2数据库中主要的表及相互关系(3)特点
1、登录后才能下载和统计下载次数判断Session["LoginUserID"]是否存在,如果不存在则显示“请先登录或
注册”,如果存在则显示问候语,同时提供本地下载地址,为了防止用户用课件地址直接下载,此地址的格式应为“Download.aspx?ID=XXX”,由Download.aspx根据ID的值找到数据库的真实下载地址,然后以字符流的形式下载文件,同时在数据库在更新此课件的下载次数,并将此次下载情况存在下载表中,以便于该用户再次下载时不会重复扣分。实现效果因为用了JQuery技术,界面比较美观,如图3~图5所示。
图3未登录状态
图4登录窗口
图5登录后状态
2、TreeView动态目录树的创建编写一个名称为InitTree的方法,首先建立根结点,循环读取课程名称表,建立相应“课程名结点”,然后读取类型表,在前一结点上建立“类型子结点”。如图所示。
源代码如下:privatevoidInitTree()//根结点加载函数{TreeView1.Nodes.Clear();//TV为TreeView控件TreeNodeT_root=newTreeNode();T_root.Text="课程
管理系统";T_root.ImageUrl="images/base.gif";T_root.SelectAction=TreeNodeSelectAction.None;//在选定节点时不引发任何事件TreeView1.Nodes.Add(T_root);dvKC=DBFun.GetDataView("select*fromKCInfo");dvType=DBFun.GetDataView("select*fromtypeInfo");foreach(DataRowViewdrvindvKC)//遍历所有课程{TreeNodeFst=newTreeNode();Fst.Text=drv["kcName"].ToString();Fst.ImageUrl="images/ico_jingpin.gif";Fst.SelectAction=TreeNodeSelectAction.Expand;//切换节点的展开和折叠状态。T_root.ChildNodes.Add(Fst);
foreach(DataRowViewdrv2indvType)//遍历所有类型{TreeNodeFst2=newTreeNode();Fst2.Text=drv2["typeName"].ToString();Fst2.ImageUrl="images/file.gif";Fst2.NavigateUrl="~/Admin/Manage.aspx?kcid="+drv["ID"].ToString()+"&;typeid="+drv2["ID"].ToString();Fst2.Target="main";Fst.ChildNodes.Add(Fst2);}}}实现效果如图6所示。
图6后台主界面左侧的动态目录树3、Gridview分页查询ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制,即当ASP.NET中的表单被提交时,表单会随所有表单值一同重新出现。利用此原理,就可以在回传时将查询数据状态保存在一个变量中。Gridview查询分页后数据不一致的
问题就得以解决。具体实现步骤:(1)加载时“动态绑定”方法,将SqlDataSource类型的"SqlDataSource1"控件中的SelectCommand设为"<%=str
sqllh%>"(2)在后台代码中,定义公共字符串属性strsqllh,代码如下:publicstringstrsqllh{//取数据get{
if(ViewState["strsqllh"]==null){//访问课件信息表return"SELECT[ID],[courseName],[updateTime],[fileSize],[madeSurrounding],[isChecked]FROM[coursesInfo]wherekcID="+Request["kcid"]+"andtypeID="+Request["typeid"];}else{returnViewState["strsqllh"].ToString();}}//给strsqllh赋值set{ViewState["strsqllh"]=value;}}(3)在页面装载或查询时,将strsqllh动态绑定到SqlDataSource1上。SqlDataSource1.SelectCommand=strsqllh;GridView1.DataBind();4结束语在解决了一系列如登录后才能下载、统计下载次数、点击次数防刷新、TreeView目录树的创建、Gridview分页查询、JQuery弹出窗口、大文件上传等难题后,设计并实现了课件下载系统。实验证明,通过百位用户的并发上传下载测试,系统稳定。5参考文献[1]张风祥,关于课件误区若干问题的探讨,全国
计算机新科技与计算机教育论文集第14卷)上集[M].西南交通大学出版社,2006.[2]单东林,锋利的jQuery,人民邮电出版社,2009,2(3).[3]刘刚.基于Web的课件上传下载分类搜索系统的设计与制作.安徽教育学报,2004.作者简介赵震奇,男,生于1976年,无锡机电高等职业技术讲师硕士江苏无锡214028