基于B/S模式的学生选课系

http://www.codesky.net/article/200607/73310.html

由于我们传统的选课方式不仅麻烦而且容易出错,老师和同学以及教务部门都为每学年的学生选课感到头痛,况且随着高校的扩招,学生人数的剧增,以前传 统的选课方式已经不能适应学校发展的需要,因此开发一个既方便有效又简单易行的网上选课系统就显得很有实用价值,它定为使得复杂且易出错的学生选课程序变 得简单且可靠。本文通过采用Delphi 提供的Web Broker技术,利用B/S模式,设置了学生选课页面、选课结果查询页面、以及重选信息页面,使的学生选课真正网络化。

关键词:B/S模式、Web Broke技术、Delphi 7、Web Server应用程序、Apache服务器

Abstract

Teachers,students and educational department of universities are feel uneasy with the annual choosing courses of students due to the traditional form of choosing courses, of which not only troublesome but also has a high rate of making mistakes. What is worse, with the colleges and universities enlarge their enrollment tremendously, the number of students has increased dramatically, the traditional form of choosing courses couldn’t catch up with the development of schools. Thus, it is valuable to develop a convenient and flexible choosing courses system that can reached by every student through the Internet, I am sure it is bound to make the traditional one easy and responsible.This thesis takes advantage of the techniques provided by Delphi as well as Browser/Server mode.It sets the page of student choosing courses,the page of choosing result,and the page of rechoosing information,which virtually render the student choosing courses via internet.

Keywords:B/S mode、Web Broker technics、Delphi 7、Web Server application program、 Apache Server

目 录
摘 要 1
目 录 2
引 言 3
1. 本文的研究背景 3
2. 本文的工作及组织 3
第一章 B/S体系结构简介 3
第二章 Web Broker技术 6
2.1 Web Broker应用程序类型 6
2.2 Web Broker技术 6
第三章 系统数据库设计 8
3.1 数据库需求分析 8
3.2 数据库逻辑结构设计 9
第四章 系统设计 12
4.1 创建登录页面 12
4.2 创建选课页面 12
4.3 重修课程查询页面 13
第五章 系统实现 15
5.1 编写事件处理程序 15
5.2 编译 20
第六章 应用程序的发布 21
第七章 总结与讨论 21
参考文献 22
致谢 22

引言

1、本文的研究背景

户机/服务器(C/S)体系结构在20世纪90年代初得到了大量应用,随着Internet的飞速发展,软件系统的体系结构跨入了一个新的阶段,即浏览器
/服务器体系结构(简称B/S模式)。借助Internet平台,网上购物,网上银行,网上书店等一系列采用B/S模式的在线电子商务服务系统得到了广泛
应用,作为实现这些系统的关键技术——Web Server应用系统开发技术,自然就成为了一门很热门的技术。
2、本文的工作及组织
本文详细介绍了使用Delphi开发Web Server应用程序的实现技术和技巧。首先介绍了B/S体系结构以及Delphi支持B/S开发的Web Broker技术,最后介绍的学生选课系统是一个典型的B/S体系结构系统。

第一章 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占有优势的是其灵活性。任何时间、任何地点、任何系统,只要可以使用浏览器上网,就可以使用B/S系统的终端。近年来,智能手机、智能家电、PDA等传统电脑之外的上网方式发展迅速,这在一定程度上为B/S结构增加了砝码。

 
 不过,采用B/S结构,客户端只能完成浏览、查询、数据输入等简单功能,绝大部分工作由服务器承担,这使得服务器的负担很重。采用C/S结构时,客户端
和服务器端都能够处理任务,这虽然对客户机的要求较高,但因此可以减轻服务器的压力。而且,由于客户端使用浏览器,使得网上发布的信息必须是以HTML格
式为主,其它格式文件多半是以附件的形式存放。而HTML格式文件(也就是Web页面)不便于编辑修改,给文件管理带来了许多不便。

  系统的开发

 
 最新的C/S结构是建立在中间件产品基础之上的,严格来讲这些产品还缺乏作为企业级应用平台的一些特性,难以扩展到互联网这样的环境上去,而且要求应用
开发者自己去处理事务管理、消息队列、数据的复制和同步、通信安全等等系统级的问题。这对应用开发者提出了较高的要求,而且迫使应用开发者投入很多精力来
解决应用程序以外的问题。这使得应用程序的维护、移植和互操作变得复杂,成了C/S的一大缺陷。如果客户端是在不同的操作系统上(比如Windows
2000以及不同版本的Unix),C/S结构的软件需要开发不同版本的客户端软件。如果产品经常需要更新换代,那么升级系统时候需要付出的高代价以及工
作的低效率会在一定程度上制约企业的应用。

  但是,与B/S结构相比,C/S技术发展历史更为“悠久”。从技术成熟度及软件设计、开发
人员的掌握水平来看,C/S技术应是更成熟、更可靠的。和佳软件总裁陈佳认为:对于ERP软件而言,采用100%的B/S方式将造成系统响应速度慢、服务
器开销大、通信带宽要求高、安全性差、总投资增加等问题。而且,对于复杂的应用,B/S方式目前尚没有合适方式进行开发。

  系统的升级维护

 
 C/S系统的各部分模块中有一部分改变,就要关联到其它模块的变动,使系统升级成本比较大。B/S与C/S处理模式相比,则大大简化了客户端,只要客户
端机器能上网就可以。对于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服务器),就构成了一个三层结构的客户服务器体系。其体系结构如图所示。

图1 B/S体系结构


B/S模式中,客户端只需要运行浏览器软。浏览器以超文本形式向Web服务器提出访问数据库的请求,Web服务器接受客户端请求后,将这个请求转化为
SQL语句,并交给数据库服务器;数据库服务器得到请求后,验证SQL语句的合法性,并进行数据处理然后将处理后的结果返回给Web服务器;Web服务器
动态生成HTML文档,其中嵌入数据库服务器处理的结果,转发给客户端浏览器以Web页面形式显示。
B/S体系具有以下优点。
1. 系统易于扩展。B/S结构具有很大的伸缩性,既可以将Web服务器与数据库服务器合二为一,也可以同时连接多台数据库服务器。
2. 跨平台的系统集成服务。多种网络操作系统、多种数据库管理系统等通过统一的协议和标准集成在B/S结构中,为用户提供清晰、统一的信息服务界面。
3. 大大降低了对网络带宽的要求。由于采用B/S结构,用户端只需要数据的呈现和录入设备,业务逻辑完全在服务器上实现,从而大幅降低了网络负荷。
4. 系统安装维护简单,方便数据的集中管理,便于分散用户。
Delphi 7提供了大量的组件和对象支持Web Server程序的开发,使得开发Web Server应用程序非常简单、方便、高效。
5. B/S 建立在广域网上,面向不同的用户群,地域分散,与操作系统平台的选择关系小。
6. B/S建立在浏览器上,有更加丰富和生动的表现方式与用户交流,并且系统设计难度小,开发成本降低。
7. 对于终端用户来讲,B/S模式比C/S简化了客户端程序,减少了终端用户的投入成本。

第二章 Web Broker技术

2.1 Web Broker应用程序类型
Web
Server应用程序是Web服务器在功能上的扩展。当Web
Server应用程序从Web服务器中获取到一个HTTP请求消息时,就对该消息进行分析、处理,生成相应的Web页面传递给Web服务器,再由Web传
递给用户。除此之外,Web Server应用程序还可以像一般的应用程序一样完成一些特定的任务。
Delphi
7支持开发ISAPI(Microsoft Server DLL)NSAPI(Netscape Server DLL)
Apache服务器动态库、控制台CGI及Windows CGI这5种类型的Web
Server应用程序。ISAPI,NSAPI和Apache服务器动态库是以动态连接库(DLL)形式存在的Web
Server应用程序。此外,你还可以建立Web应用调试程序(Web Application Debugger),它将Web
Server集成到应用程序中,便于调试程序逻辑。Web应用调试程序只是为调试程序而建立的,当正式发布应用程序的时候,需要转换为这5种类型中的一
种。
这5种类型的Web
Server应用程序都由TwebApplication,TwebRequest,TwebResponse衍生而来,其
中,TwebApplication用于管理Web
Server应用程序的运行,TwebRequest负责获取客户端的请求消息,TwebResponse负责将处理结果呈现给客户端。
下面分别介绍这5种Web Server应用程序类型。
1.
ISAPI和NSAPI是一种以动态链接库形式存在的Web
Server应用程序,由Web服务器载入内存,对应于TwebApplication,TwebRequest,TwebResponse的对象分别为
TISAPIApplication,TISAPIRequest,TISAPIResponse.客户请求信息以结构形式传递给
TISAPIApplicaction处理,由TISAPIApplication应用程序创建请求对象TISAPIRequest和响应对象
TISAPIResponse。每个请求消息在单独执行的线程中处理。
2. Apache服务器动态库也是一种以动态链接库形式存在的Web
Server应用程序,由Web服务器载入内存,对应于TwebApplication,TwebRequest,TwebResponse的对象分别为
TapacheApplication,TapacheRequest,TapachResponse。客户请求信息以结构形式传递线段
TapacheApplication处理,由TapacheApplication应用程序创建请求对象TapacheRequest和响应对象
TapacheResponse。每个请求消息在单独执行的线程中处理。
3. 控制台CGI服务器应用程序是一种以可执行文件形式存在的Web
Server应用程序,对应于TwebApplication,TwebRequest,TwebResponse别为
TCGIApplication,TCGIRequest,TCGIResponse.。控制台CGI服务器应用程序从标准输入服务器接收客户端的请求,
并且把处理结果返回给标准输出服务器。每个请求信息由应用程序的单独实例处理。
4. Windows
CGI服务器应用程序是一个独立的Windows应用程序,对应于TwebApplication,TwebRequest,TwebResponse的
对象分别为TWinCGIApplication,TWinCGIRequest,TWinCGIResponse.。Windows
CGI服务器应用程序从服务生成的特定文件(INI)中接收消息由应用程序的单独实例处理。
2.2 Web Broker技术

Delphi 7提供了两种不同结构的Web Server应用程序开发技术:Web Broker和Web Snap。尽管Web
Broker和Web Snap是两种不同结构的开发技术,它们却具有很多相同点,例如,Web Broker组件和Web
Snap组件可以混合使用。Web Snap可以看作Web Broker的一个超集,它提供更多的组件和特色。本节重点介绍Web Broker技术。
Web Broker的应用结构如图所示。

图 Web Broker应用结构
从Web
Broker应用结构图中看到,Web
Server应用程序从Web服务器中获取一个HTTP请求消息时,它创建了一个TwebRequest对象描述这个HTTP请求消息,并且创建了一个
TwebResponse对象描述将要返回的响应消息,然后将这些对象传递给Web模块(TwebDispatcher)。Web模块是整个Web
Server应用程序的调度中心,它管理一组处理响应HTTP请求消息的动作项(TwebActionItem)。Web模块根据HTTP请求消息指派其
中一个动作项去处理客户请求,然后由这个动作项选择设定的网页生成成组件(TpageProducer)生成响应页面返回给Web服务器。
1.
Web模块(Web Module)。当Delphi创建一个Web Server应用程序时,它会自动包含一个Web Module,Web
Module是整个Web Server应用程序的核心部件。Web
Module是从TcustomWeb-Dispatcher类继承下来的,TcustomWebDispatcher类又是从TdataModule类
继承下来的,因此,Web
Module可以是一个容器,像传统的数据模块使用方式一样,可封装商业规则和放置Tsession组件、Ttable组件、TpageProducer
组件等非可视化组件。
2.
动作项(ActionItem)。Web模块用动作项来响应HTTP请求消息,一个动作项就是一个TwebActioItem对象,负责完成读取请求消息
和组织响应消息。一个Web
Server应用程序往往有多个动作项,一般每个动作项单独完成对HTTP请求消息的响应,也可以和其他动作项一起协同完成。动作项一般不需要显式地发送
HTTP响应消息,而由Web Server应用程序自动把HTML页面传给Web服务器。
3.
网页生成组件(PageProducer).TpageProducer组件可以形象地看作是网页生成器,它能够基于一个已经设计好的HTML模板分析客
户的输入,并动态生成HTML页面。网页生成器是基于模板的,在使用网页生成器之前,需要先建立HTML模板,由模板告诉网页生成器如何转换。

第三章 系统数据库设计

3.1 数据库需求分析

生选课系统是一个采用Delphi 7的Web
Broker技术开发的网上数据库应用系统,学生通过它可以查询学校开设的课程情况,并根据自己实际情况进行网上报名。学生选课系统解决了过去选课需要排
队登记,以及选课结果需要大量人工处理的问题。考虑到实际选课的情况比较复杂和篇幅所限,本例简化了繁杂的业务逻辑。
系统的运行环境如下:
服务器操作系统:Microsoft Windows 2000 Server
Web服务器系统:Apache 2.0.39
数据库系统:Microsoft SQL Server 2000
学生选课系统包括登录、选课、查询重修、选课结果查看等功能,
该系统包括登录页面、选课页面和重修课程查询页面,分别包括以下功能:
1.登录页面
(1) 填写学生编号(如20010001)和登录密码,单击“提交”按钮;
(2) 若当前进行在线选项课人数超过系统允许最大在线人数,各级组织弹出错误对话框提示“系统忙,请稍后再试”,选课操作不能继续;
(3) 若所输入的学生编号不正确,系统弹出错误提示对话框提示“学生编号不正确,请重新输入“,选课操作不能继续;
(4) 若所输入的密码不正确,系统弹出错误提示对话框提示“密码不正确,请重新输入”,选课操作不能继续;
(5) 经过验证,进入选课操作页面。
2. 选课页面
学生登录成功后,显示其学号、姓名、专业、年级、应选学分和已选课程,并统计其已选学分。
选课操作
(1) 输入课程编号、课堂号,单击“提交”按钮,系统验证输入的正确发型右正确刚自动显示相应课程名称;若错误,系统弹出错误提示对话框提示“课程〈〉不存在,请检查并重新输入”;
(2) 系统验证当前学生是否已选所输入的课程编号,若已选,系统弹出错误提示对话框提示“课程〈〉已经选修,请检查输入是否正确”;
(3) 系统验证当前学生的性别是否受所选课的限制,若受限制,系统弹出错误提示对话框“课程〈〉限选男(女)生!”;
(4) 系统比较所输入的课程编号的限选人数和选课人数,若已经人数大于或等于限选人数,系统弹出错误提示对话框提示“课程〈〉第〈〉课堂人数已满!”;
(5) 经过以上的验证,成功则新增一条选课记录。系统重新统计当前学生的已选学分。
退出操作
单击“退出选课系统”按钮,关闭浏览器。
3. 重修课程查询页面
在选课页面在单击“查看重修”按钮进入重修课程查询页面,该页面显示当前学生需要重修的课程信息(课程编号、课程名称、课程标志、学期、平时成绩、期末成绩、总评成绩、学分)。

3.2 数据库逻辑结构设计
我们采用Microsoft SQL Server 2000数据库来存放数据。在本例中,我们将数据库服务器命名为dbserver,数据库命名为“选课系统”。在“选课系统”数据库中,新建7个数据表,表名和表的说明见下表:
表1 选课系统的数据表
序号 表名 用途
1 系统参数表 选课系参数
2 选课登记表 记录当前选课学生信息
3 专业基本信息表 学校专业的设置情况
4 学生基本信息表 学校学生基本信息
5 学生重修课程表 学生需要进行重修的课程信息
6 选课手册表 学校开设课程信息
7 选课结果表 学生选修课程信息
各个数据表的结构信息见如下几个表。

系统参数表结构
字段名称 数据类型 字段大小 说明
学期 smallint 2 形式为20031。前4位为年度,最后一位为上下学期标记 (1或2)
人数限制 smallint 2 同时在线选课最大人数
选课登记表结构
字段名称 数据类型 字段大小 说明
学生编号 char 8
登录时间 datetime 8
选课ID int 登录成功后分配的标识号

专业基本信息表结构
字段名称 数据类型 字段大小 说明
专业编号 char 3
专业名称 varchar 50
专业简称 varchar 10
所属院系编号 char 3
公共必修学分 numeric 5
专业必修学分 numeric 5
专业选修学分 numeric 5
任意选修学分 numeric 5

学生基本信息表结构
字段编号 数据类型 字段大小 说明
学生编号 char 8
学生姓名 char 8
学生性别 bit 1
所属专业编号 char 3
年级 smallint 2
班级编号 smallint 2
密码 varchar 8

选课手册表结构
字段名称 数据类型 字段大小 说明
课程编号 char 8
课堂号 tinyint 1
课程名称 varchar 20
课程标志 char 8
开课专业编号 char 3
开课年级 smallint 2
学分 numeric 5
先行课 varchar 30
考试方式 char 10
任课教师 varchar 20
上课地点 varchar 8
上课时间 smallint 2
起始周次 smallint 2
男女限制 tinyint 1
限选人数 int
选课人数 int

选课结果表结构
字段名称 数据类型 字段大小 说明
SN int 自增长
学生编号 char 8
课程编号 char 8
课堂号 tinyint 1
课程标志 char 8
是否得修 bit 1

学生重修课程表结 构
字段名称 数据类型 字段大小 说明
学生编号 char 8
课程编号 char 8
学期 smallint 2
课程标志 char 8
平时成绩 smallint 2
期末成绩 smallint 2
总评成绩 smallint 2
学分 numeric 5

第四章 系统设计

4.1 创建登录页面
页面模板可以用Microsoft FrontPage或其他一些网页编辑工具生成,学生选课系统共有3个页面模板:login.htm,main.htm,fail.htm。为清晰起见,对这三个页面模板进行了简化。
1. 创建登录页面
login.htm提供用户输入学生编号和密码的登录界面。创建login.htm的HTML文件,在其中设置的动态标记见下表。
Login.htm中的动态标记设置
动态标记名 说明
<#Verify> 验证标记
<#SdXH> 学生编号
<#SdXM> 学生姓名
<#SdTotal> 当前在线选课人数
界面如下图所示:

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> 重修课程列表
界面如下图所示:

第五章 系统实现

5.1 编写事件处理程序
这个系统要实现应该包括几个事件处理过程,其中有:
1.
WebMoudule1的OnCreate 事件处理过程 当Web
Server应用程序首次装载运行时将创建WebModule1实例,触发WebModule1的OnCreate事件,在OnCreate事件中我们进
行一些初始化工作,包括创建ADO数据库连接和ADO数据组件。
2. WebMoudule1的OnDestroy事件的处理过程 当Web
Server应用程序被卸载时将销毁WebModule1实例,触发WebModule1的OnDestroy事件。在OnDestroy事件中我们进行
一些“收尾”工作,释放先前占用的资源。
3. 组件PageLogin的OnHTMLTag事件的处理过程
当有关动作项调用网页生成器PageLogin时,触发PageLogin的OnHTMLTag事件。我们将在OnHTMLTag事件中逐一分析
login.htm模板中的动态标记,并将之转换成实际内容。
4. 组件PageMain的OnHTMLTag事件的处理过程 当有关动作项调用网页生成器PageMain时,触发PageMain的OnHTMLTag事件。在OnHTMLTag事件中逐一分析main.htm模板中的动态标记,并将之转换成实际内容。
5. 组件PageFail的OnHTMLTag事件的处理过程 当有关动作项调用网页生成器PageFail时,触发PageFail的OnHTMLTag事件。我们将在OnHTMLTag事件中逐一分析fail.htm模板中的动态标记,并将之转换成实际内容。
6. 动作项ailogin的OnAction事件的处理过程 当客户端请求login入口点时,WebModule1将请求信息转交给ailogin 动作项处理,此时触发ailogin的OnAction 事件。
7. 动作项aiini的OnAction事件的处理过程 当客户端请求init入口点时,WebModule1将请求信息转交给aiinit 动作项处理,此时触发aiinit的OnAction 事件。
8. 动作项aisubmit的OnAction事件的处理过程 当客户端请求submit入口点时,WebModule1将请求信息转交给aisubmit 动作项处理,此时触发aisubmit的OnAction 事件。
由于篇幅所限,不能给出所有程序的代码。现以动作项aisubmit的OnAction事件的处理过程为例,给出这个模块的程序源代码,如下:

procedure TWebModule1.WebModule1aisubmitAction(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
i: integer;
aCookie: TStringList;
begin
SubmitType := 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‘];

if SubmitType = ‘logout‘ then
begin
queryString := ‘delete 选课登记 where SN=‘‘‘ + 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 := ‘‘;

queryString := ‘select count(*) from 选课登记 where datediff(mi,登录时间,getdate())<30‘;
ADOQryTemp.Close;
ADOQryTemp.SQL.Clear;
ADOQryTemp.SQL.Add(queryString);
ADOQryTemp.Open;
SdTotal := ADOQryTemp.Fields[0].AsString;

Response.Content := PageLogin.Content;
Exit;
end;

if Request.CookieFields.Values[‘LoginSN‘] <> ‘"‘ + LoginSN + ‘"‘ then
begin
Response.Content := ‘

错误:你未登录或超时,请重新登录



返回

‘;
Exit;
end;

if SubmitType = ‘getcx‘ then
begin
queryString := ‘select * from 学生重修课程 where 学生编号=‘‘‘ + SdXH + ‘‘‘‘;
ADOQryTemp.Close;
ADOQryTemp.SQL.Clear;
ADOQryTemp.SQL.Add(queryString);
ADOQryTemp.Open;

Response.Content := PageFail.Content;
Exit;
end
else if SubmitType = ‘getkc‘ then
begin
queryString := ‘select 课程名称 from 选课手册 where 课程编号=‘‘‘ + KcBH + ‘‘‘‘;

ADOQryTemp.Close;
ADOQryTemp.SQL.Clear;
ADOQryTemp.SQL.Add(queryString);
ADOQryTemp.Open;
if ADOQryTemp.IsEmpty then
begin
Response.Content := ‘

错误:本学期课程<‘ + KcBH + ‘>不存在,请检查并重新输入



返回

‘;
Exit;
end;

KtH := ‘‘;
KcMc := ADOQryTemp.FieldByName(‘课程名称‘).AsString;

ADOQuery1.Close;
ADOQuery1.Parameters[0].Value := SdXH;
ADOQuery1.Open;

Response.Content := PageMain.Content;
Handled := true;
end
else if SubmitType = ‘getweek‘ then
begin
ADOQuery1.Close;
ADOQuery1.Parameters[0].Value := SdXH;
ADOQuery1.Open;

Response.Content := PageMain.Content;
Handled := true;
end
else if SubmitType = ‘add‘ then
begin
with ADOStoredProc2 do
begin
Parameters.ParamByName(‘@学生编号‘).Value := SdXH;
Parameters.ParamByName(‘@课程编号‘).Value := KcBH;
Parameters.ParamByName(‘@课堂号‘).Value := KtH;
ExecProc;

case Parameters.ParamByName(‘@返回码‘).Value of
1:
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 := ‘‘;

ADOQuery1.Close;
ADOQuery1.Parameters[0].Value := SdXH;
ADOQuery1.Open;

Response.Content := PageMain.Content;
Handled := true;
end else if SubmitType = ‘del‘ then
begin
for i := 0 to KcbhList.Count - 1 do
begin
with ADOStoredProc3 do
begin
Parameters.ParamByName(‘@SN‘).Value := KcbhList[i];
ExecProc;
end;
end;

ADOQuery1.Close;
ADOQuery1.Parameters[0].Value := SdXH;
ADOQuery1.Open;

Response.Content := PageMain.Content;
Handled := true;
end;
end;

5.2 编译
在Delphi的File菜单下单击File|Save Project
As子菜单项保存以上建立的工程文件,工程文件取名为xuanke.dpr,Project菜单下的Build
Project1子菜单自动转变为Build
xuanke,单击它,Delphi将编译、链接这个工程文件,生成文件名为xuanke.dll的动态链接库,这就是我们所需要的Web
Server应用程序。

第六章 应用程序的发布

Borland从Delphi 6.0以后开始支持Apache
Web服务器,Apache以其出色的性能及安全性得到很多人的青睐。Delphi 6只支持Apache 1.x版本,Delphi
7支持Apache 2.0版本。在学生选课系统中,我们使用的就是Apache 2.0.39版本。
1. 安装Apache服务器
使用默认配置进行安装。
2. 复制应用程序

C:\Apache
Group\Apache2目录下新建目录XK,然后将页面模板文件login.htm,main.htm,和fail.htm复制到XK目录中,将
xuanke.dll文件复制到C:\ Apache Group\Apache2\modules目录中。
3. 配置Apache服务器
Apache主配置文件为C:\Apache Group\Apache2\conf目录下的httpd.conf文件。Httpd.conf是一个文本文件,我们可以用记事本或其他文本编辑器编辑它。根据学生选课系统的需要,我们增加,修改以下内容:
#装载选课应用模块
LoadModule xuanke_module modules/mod_xuanke..dll

SetHandler mod_xuanke_handler

#新建虚拟目录XK
Alias /XK “c:/ Apache Group/Apache2/XK”

Options FollowSymLinks Multiviews IncludesNoExec
AddOutputFilter Includes html
AllowOverride None
Order allow,deny
Allow from all

#设置默认字符集为GB2312
AddDefaultCharset GB2312
4.运行应用程序
打开IE浏览器,在浏览器地址栏中输入网址:http://localhost/xk.login就可以进入学生选课系统的登录页面。

总结与讨论


次论文的撰写虽然时间不长,但通过用Delphi 7提供的Web
Broker技术来做这样一个学生选课系统,不仅让我学会了用Delphi这样一个功能强大,使用方便的开发工具开发一些小的应用程序,而且通过做这样一
个论文专题,使我把自己所学的专业知识应用到实际中,其知识点涉及到软件工程、面向对象程序设计、数据结构、数据库等专业的内容。这无疑是对我四年学习的
一个很好的总结,本人将以此为新的起点,不断地向更高的目标攀登。
由于时间仓促,加之对Delphi不怎么熟悉,水平有限,论文中的缺点和不足之处希望指导老师能批评指正。
参考文献
1.Delphi 7数据库系统设计与开发……………………………………… 清华大学出版社
2.Server 2000中文版 入门与提高……………………………………… 清华大学出版社
4. Delphi 7程序设计教程…………………………………………………. 清华大学出版社

致 谢


本文的撰写过程中,得到很多人无私的帮助和建议。首先要极其感谢我的指导老师揭老师,有了他的指导方向、教导和支持才使我一直坚持不懈地做这篇论文的工作
并最终完成。还要感谢文春勇同学,高衍鹏同学,周小山同学他们为我提供电脑及上网的环境。感谢章文杰同学,他为我提供了大量的参考书籍。以及感谢李广平同
学,陆森众同学,杜菊滚同学,他们在我撰写论文期间给了我生活上很大的帮助。我还要向所有评阅老师和同学致谢,感谢他们非常有益的指点。

时间: 2024-10-13 01:59:25

基于B/S模式的学生选课系的相关文章

PHP基于B/S模式下的学生选课管理系统、源码分享

大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON.PHP.C#.安卓等多项技术. 今天将为大家分析一个学生选课管理系统,本系统采用目前最流行的B/S结构和myeclipse编辑器.PHP开发语言,MySQL数据库设计并实现的. 随着教育规模的不断壮大,信息变得越来越多.同时计算机网络技术高速发展,网络管理运用也变得越来越广泛.因此,建立一个B/S结构的学生选课管理系统来管理学校信息,会使管理工作系统化.规范化,也会提高学校形象,提高管理效

对于学生选课和成绩管理系统数据库设计的分析

额数据库是啥呢 数据库是存储在计算机上的有组织可共享的大量数据的集合 那么我们应当解决两个问题 第一怎么存 第二存什么 第三如何取 第四如何更新 那么设计什么样的数据结构跟实现什么样的功能是密切相关的 那么看到标题就可以想到是学生选课和学生成绩管理 那么最基础的肯定要有学生,课程,成绩 这三种数据对象 如果有大量的数据实例我们都可以分到这几种数据对象里 那么首先我们要分析学生与课程的关系是选与被选.. 那么这里就有一个基础的问题了通过学生一个实例我们怎么知道他选了哪些课程呢 图论里我们知道如果一

Collection的实现——学生选课(一)

学生选课--创建学生类和课程类 创建课程类  Course package xuanke; /* * 课程类 */ public class Course { public String id; public String name; public Course(String id,String name) { //传递参数 this.id=id; this.name=name; } } id --课程序号 name--课程名称 一般情况下应该定义id 和name为私有类型私有属性及其应用 *

3.python小项目:学生选课系统

学生选课系统 编程核心:在对象中封装对象 目录结构: 1.administrator.py import random import os import sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) import time import pickle from lib import models from config import settings from lib.models import * # 全部导入

学生选课系统----SelectCourseDAO

/** * @author 李佩 * * @version v1 * * @time 2016/12/5 22:03 * * @program 已选课程信息与数据库进行操作的类 * */ package com.csms.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.ut

学生选课系统----TeacherDAO

老师信息操作: /** * @author 李佩 * * @version v1 * * @time 2016/12/2 14:54 * * @program 老师信息与数据库之间的操作 * */ package com.csms.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import ja

学生选课系统----实体类

学生: package com.csms.entity; /** * @author 李佩 * * @version v1 * * @time 2016/12/1 10:10 * * @program 创建对应数据表实体的学生类,方便dao与数据库的连接 * */ public class Student { // 学生登录系统的登录名 private String loginName; // 登录密码 private String loginPSD; // 学生学号 private Strin

SQL Server 【附】创建&quot;商品管理数据库&quot;、&quot;学生选课数据库&quot;的SQL语句

附:(创建“商品管理数据库”的SQL语句) --建立"商品管理数据库"数据库-- create database 商品管理数据库 on(name='商品管理数据库_m', filename='D:\商品管理系统\商品管理数据库_m.mdf', size=6mb,filegrowth=1mb,maxsize=unlimited) log on(name='商品管理数据库_l', filename='D:\商品管理系统\商品管理数据库_l.ldf', size=1,filegrowth=1

Puppet基于Master/Agent模式实现LNMP平台部署

前言 随着IT行业的迅猛发展,传统的运维方式靠大量人力比较吃力,运维人员面对日益增长的服务器和运维工作,不得不把很多重复的.繁琐的工作利用自动化处理.前期我们介绍了运维自动化工具ansible的简单应用,本期带来的是运维自动化神器puppet基于Master/Agent模式实现LNMP平台部署. Puppet 简介 Puppet是基于ruby语言开发的一种Linux.Unix.Windows平台的集中配置管理系统,可以C/S模式或独立运行,使用自有的puppet描述语言,可管理配置文件.用户.c