由于我们传统的选课方式不仅麻烦而且容易出错,老师和同学以及教务部门都为每学年的学生选课感到头痛,况且随着高校的扩招,学生人数的剧增,以前传统的选课方式已经不能适应学校发展的需要,因此开发一个既方便有效又简单易行的网上选课系统就显得很有实用价值,它定为使得复杂且易出错的学生选课程序变得简单且可靠。本文通过采用Delphi提供的WebBroker技术,利用B/S模式,设置了学生选课页面、选课结果查询页面、以及重选信息页面,使的学生选课真正网络化。
关键词:B/S模式、WebBroke技术、Delphi7、WebServer应用程序、Apache服务器
Abstract
Teachers,studentsandeducationaldepartmentofuniversitiesarefeeluneasywiththeannualchoosingcoursesofstudentsduetothetraditionalformofchoosingcourses,ofwhichnotonlytroublesomebutalsohasahighrateofmakingmistakes.Whatisworse,withthecollegesanduniversitiesenlargetheirenrollmenttremendously,thenumberofstudentshasincreaseddramatically,thetraditionalformofchoosingcoursescouldn’tcatchupwiththedevelopmentofschools.Thus,itisvaluabletodevelopaconvenientandflexiblechoosingcoursessystemthatcanreachedbyeverystudentthroughtheInternet,Iamsureitisboundtomakethetraditionaloneeasyandresponsible.ThisthesistakesadvantageofthetechniquesprovidedbyDelphiaswellasBrowser/Servermode.Itsetsthepageofstudentchoosingcourses,thepageofchoosingresult,andthepageofrechoosinginformation,whichvirtuallyrenderthestudentchoosingcoursesviainternet.
Keywords:B/Smode、WebBrokertechnics、Delphi7、WebServerapplicationprogram、ApacheServer
引言
第一章B/S体系结构简介
随着PC机的诞生与应用,计算模式从集中式(数据和应用程序在一台主机上)转向了分布式(数据和应用程序跨越多个节点机),尤为典型的是C/S结构(Client/Server的简称,客户机/服务器模式)。两层结构C/S模式,在上个世纪八十年代及九十年代初得到了大量应用,最直接的原因是可视化开发工具的推广。之后,它开始向三层结构发展。近来,随着网络技术不断发展,尤其是基于Web的信息发布和检索技术、Java计算技术以及网络分布式对象技术的飞速发展,导致了很多应用系统的体系结构从C/S结构向更加灵活的多级分布结构演变,使得软件系统的网络体系结构跨入一个新阶段,即B/S体系结构(Browser/Server的简称,浏览器/服务器模式)。基于Web的B/S方式其实也是一种客户机/服务器方式,只不过它的客户端是浏览器。为了区别于传统的C/S模式,才特意将其称为B/S(浏览器/服务器)模式。认识到这些结构的特征,对于系统的选型而言是很关键的。
系统的性能
不过,采用B/S结构,客户端只能完成浏览、查询、数据输入等简单功能,绝大部分工作由服务器承担,这使得服务器的负担很重。采用C/S结构时,客户端和服务器端都能够处理任务,这虽然对客户机的要求较高,但因此可以减轻服务器的压力。而且,由于客户端使用浏览器,使得网上发布的信息必须是以HTML格式为主,其它格式文件多半是以附件的形式存放。而HTML格式文件(也就是Web页面)不便于编辑修改,给文件管理带来了许多不便。
系统的开发
最新的C/S结构是建立在中间件产品基础之上的,严格来讲这些产品还缺乏作为企业级应用平台的一些特性,难以扩展到互联网这样的环境上去,而且要求应用开发者自己去处理事务管理、消息队列、数据的复制和同步、通信安全等等系统级的问题。这对应用开发者提出了较高的要求,而且迫使应用开发者投入很多精力来解决应用程序以外的问题。这使得应用程序的维护、移植和互操作变得复杂,成了C/S的一大缺陷。如果客户端是在不同的操作系统上(比如Windows2000以及不同版本的Unix),C/S结构的软件需要开发不同版本的客户端软件。如果产品经常需要更新换代,那么升级系统时候需要付出的高代价以及工作的低效率会在一定程度上制约企业的应用。
但是,与B/S结构相比,C/S技术发展历史更为“悠久”。从技术成熟度及软件设计、开发人员的掌握水平来看,C/S技术应是更成熟、更可靠的。和佳软件总裁陈佳认为:对于ERP软件而言,采用100%的B/S方式将造成系统响应速度慢、服务器开销大、通信带宽要求高、安全性差、总投资增加等问题。而且,对于复杂的应用,B/S方式目前尚没有合适方式进行开发。
系统的升级维护
在系统安全维护上,B/S则略显不足,B/S结构尤其得考虑数据的安全性和服务器的安全性,毕竟现在的网络安全系数并不高。以OA软件为例,B/S结构要实现办公协作过程中复杂的工作流控制与安全性控制,还有很多技术上的难点。因此,当前虽然出现了B/S结构的OA系统产品,但尚未大范围推广。
融合——取长补短
客观地分析C/S、B/S的优劣,规划系统的时候有的放矢地“趋利避害”,才能够搭建成合适的信息系统。我们接触的很多开发人员认为,在大型信息系统中采用B/S、C/S混合模式比较可行。在今年参与评测的一套软件系统中,开发人员就将C/S、B/S有机结合起来:需要对数据库进行频繁操作例如添加、修改资料的人员使用C/S客户端,这样客户端功能比较强、安全系数也高;领导层则使用B/S客户端进行数据的查询,这样客户端比较灵活,只要能上网即可以操作。如此处理,可充分发挥各种模式的优越性——避免了B/S结构在安全性、保密性和响应速度等方面的缺点以及C/S结构在维护和灵活性等方面的缺点。B/S模式是一种以Web技术为基础的新型的管理信息系统平台模式。把传统的C/S模式中的服务器部分分解为一个数据服务器与一个或多个应用服务器(Web服务器),就构成了一个三层结构的客户服务器体系。其体系结构如图所示。
图1B/S体系结构
第二章WebBroker技术
第三章系统数据库设计
3.2数据库逻辑结构设计我们采用MicrosoftSQLServer2000数据库来存放数据。在本例中,我们将数据库服务器命名为dbserver,数据库命名为“选课系统”。在“选课系统”数据库中,新建7个数据表,表名和表的说明见下表:表1选课系统的数据表序号表名用途1系统参数表选课系参数2选课登记表记录当前选课学生信息3专业基本信息表学校专业的设置情况4学生基本信息表学校学生基本信息5学生重修课程表学生需要进行重修的课程信息6选课手册表学校开设课程信息7选课结果表学生选修课程信息各个数据表的结构信息见如下几个表。
学生基本信息表结构字段编号数据类型字段大小说明学生编号char8学生姓名char8学生性别bit1所属专业编号char3年级smallint2班级编号smallint2密码varchar8
选课结果表结构字段名称数据类型字段大小说明SNint自增长学生编号char8课程编号char8课堂号tinyint1课程标志char8是否得修bit1
学生重修课程表结构字段名称数据类型字段大小说明学生编号char8课程编号char8学期smallint2课程标志char8平时成绩smallint2期末成绩smallint2总评成绩smallint2学分numeric5
4.2创建选课页面main.htm提供用户进行选课的操作界面。创建main.htm的HTML文件,在其中设置的动态标记见下表。
表main.htm中的动态标记设置动态标记名说明<#LoginSN>学生选课标识号<#SdXH>学生编号<#SdXM>学生姓名<#SdXb>学生性别<#SdZyBH>学生专业编号<#SdZyMc>学生专业名称<#SdNj>学生年级<#GongBil>公共必修学分<#ZhuanBil>专业必修学分<#ZhaunXuan1>专业选修学分<#RenXuan1>任意选修学分<#KcBH>课程编号<#KtH>课堂号<#KcMc>课程名称<#LessonList>选修结果列表界面如下图所示:
4.3重修课程查询页面fail.htm提供重修课程的查询界面。创建fail.htm的HTML文件,并在其在设置动态标记见下表:表fail.htm中的动态标记设置动态标记名说明<#SdXH>学生编号<#SdXM>学生姓名<#FailList>重修课程列表界面如下图所示:
第五章系统实现
procedureTWebModule1.WebModule1aisubmitAction(Sender:TObject;Request:TWebRequest;Response:TWebResponse;varHandled:Boolean);vari:integer;aCookie:TStringList;beginSubmitType:=Request.ContentFields.Values['strSubmitType'];LoginSN:=Request.ContentFields.Values['LoginSN'];
SdXH:=Request.ContentFields.Values['strSdXH'];SdXM:=Request.ContentFields.Values['strSdXM'];SdZyBH:=Request.ContentFields.Values['strSdZyBH'];SdZyMc:=Request.ContentFields.Values['strSdZyMc'];SdXb:=Request.ContentFields.Values['strSdXb'];SdNj:=Request.ContentFields.Values['strSdNj'];GongBi1:=Request.ContentFields.Values['strGongBi1'];ZhuanBi1:=Request.ContentFields.Values['strZhuanBi1'];ZhuanXuan1:=Request.ContentFields.Values['strZhuanXuan1'];RenXuan1:=Request.ContentFields.Values['strRenXuan1'];
KcBH:=Request.ContentFields.Values['strKcBH'];KtH:=Request.ContentFields.Values['strKtH'];KcMc:=Request.ContentFields.Values['strKcMc'];KcbhList:=TStringList.Create;KcbhList.Delimiter:=',';KcbhList.DelimitedText:=Request.ContentFields.Values['strDelnoteSN'];
ifSubmitType='logout'thenbeginqueryString:='delete选课登记whereSN='''+LoginSN+'''';ADOQryTemp.Close;ADOQryTemp.SQL.Clear;ADOQryTemp.SQL.Add(queryString);ADOQryTemp.ExecSQL;
aCookie:=TStringList.Create;aCookie.Add('LoginSN"'+LoginSN+'"');Response.SetCookieField(aCookie,Request.Host,'/',(Now-1),False);aCookie.Free;
SdVerify:='';SdXH:='';SdXM:='';
Response.Content:=PageLogin.Content;Exit;end;
ifRequest.CookieFields.Values['LoginSN']<>'"'+LoginSN+'"'thenbeginResponse.Content:='
';Exit;end;
ifSubmitType='getcx'thenbeginqueryString:='select*from学生重修课程where学生编号='''+SdXH+'''';ADOQryTemp.Close;ADOQryTemp.SQL.Clear;ADOQryTemp.SQL.Add(queryString);ADOQryTemp.Open;
Response.Content:=PageFail.Content;Exit;endelseifSubmitType='getkc'thenbeginqueryString:='select课程名称from选课手册where课程编号='''+KcBH+'''';
ADOQryTemp.Close;ADOQryTemp.SQL.Clear;ADOQryTemp.SQL.Add(queryString);ADOQryTemp.Open;ifADOQryTemp.IsEmptythenbeginResponse.Content:='
错误:本学期课程<'+KcBH+'>不存在,请检查并重新输入
返回
KtH:='';KcMc:=ADOQryTemp.FieldByName('课程名称').AsString;
ADOQuery1.Close;ADOQuery1.Parameters[0].Value:=SdXH;ADOQuery1.Open;
Response.Content:=PageMain.Content;Handled:=true;endelseifSubmitType='getweek'thenbeginADOQuery1.Close;ADOQuery1.Parameters[0].Value:=SdXH;ADOQuery1.Open;
Response.Content:=PageMain.Content;Handled:=true;endelseifSubmitType='add'thenbeginwithADOStoredProc2dobeginParameters.ParamByName('@学生编号').Value:=SdXH;Parameters.ParamByName('@课程编号').Value:=KcBH;Parameters.ParamByName('@课堂号').Value:=KtH;ExecProc;
caseParameters.ParamByName('@返回码').Valueof1:begin//重复选课Response.Content:='
错误:课程<'+KcBH+'>已在本学期选修,请检查输入是否正确
';Exit;end;2:begin//课堂号不存在Response.Content:='
错误:课堂号<'+KtH+'>不存在,请检查并重新输入
';Exit;end;3:begin//限选男生Response.Content:='
错误:课程<'+KcBH+'>限选男生!
';Exit;end;4:begin//限选女生Response.Content:='
错误:课程<'+KcBH+'>限选女生!
';Exit;end;5:begin//人数限制-改选Response.Content:='
错误:课程<'+KcBH+'>第'+KtH+'课堂选课人数已满!
';Exit;end;end;end;
SubmitType:='';KcBH:='';KtH:='';KcMc:='';
Response.Content:=PageMain.Content;Handled:=true;endelseifSubmitType='del'thenbeginfori:=0toKcbhList.Count-1dobeginwithADOStoredProc3dobeginParameters.ParamByName('@SN').Value:=KcbhList[i];ExecProc;end;end;
Response.Content:=PageMain.Content;Handled:=true;end;end;
5.2编译在Delphi的File菜单下单击File|SaveProjectAs子菜单项保存以上建立的工程文件,工程文件取名为xuanke.dpr,Project菜单下的BuildProject1子菜单自动转变为Buildxuanke,单击它,Delphi将编译、链接这个工程文件,生成文件名为xuanke.dll的动态链接库,这就是我们所需要的WebServer应用程序。
第六章应用程序的发布
总结与讨论
致谢
在本文的撰写过程中,得到很多人无私的帮助和建议。首先要极其感谢我的指导老师揭老师,有了他的指导方向、教导和支持才使我一直坚持不懈地做这篇论文的工作并最终完成。还要感谢文春勇同学,高衍鹏同学,周小山同学他们为我提供电脑及上网的环境。感谢章文杰同学,他为我提供了大量的参考书籍。以及感谢李广平同学,陆森众同学,杜菊滚同学,他们在我撰写论文期间给了我生活上很大的帮助。我还要向所有评阅老师和同学致谢,感谢他们非常有益的指点。