网站开发技术讲义 - 200907修改版 - 图文

更新时间:2024-06-20 23:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

南开大学本科生公共选修课(E类)讲义

网站开发技术

课程编号 1902012840

主讲教师 刘 冲

南开大学化学院

版本历史

2009年7月 增加数字签名。 修改一些内容,主要内容如下,其他包括:“其它”改为“其他”;“登陆”改为“登录”等,恕不一一列举。

? p. 3 1.2.3 “信息管理系统” (及下一行) 改为 “管理信息系统” ? p.10 3.3.1 示例说明 下第7行 删除“递归”

? p.10 3.3.2 解决方案 下面的整个段落改为:Javascript有两对内置函数与定时功能有关,一对是

setTimeOut(expression, msec) / clearTimeOut(timeoutID),前者的第一个参数表示在指定时间内运行什么操作,通常是一个函数;第二个参数是定时间隔,以毫秒记。使用该函数设定计时器后,需要返回一个对象型变量,标志这个计时器。后者的功能是取消叫做timeoutID的计时器。这一对定时函数只能定时执行一次,即在指定时间后执行一次就告终止,想重复执行的话需重复设定。另一对是setInterval / clearInterval,设定时间间隔后会自动重复执行,一般需要用后面的函数来取消定时操作。本例使用前一对函数。 ? p.11 清单 3-4 计时器 下面的段落,从第8行开始到本段结尾,改为:计时器,第2个参数“1000”

表示在1000毫秒(也就是1秒钟)后运行一次“showTime()”函数,并把该计时器赋值给对象变量“timerID”,以供后来的“clearTimeout”函数使用,取消该计时器。第18行的“return”表示从函数中退出。由于在1秒钟后执行一次后定时就会停止,所以需要在第23行重复设定定时函数,才能保证倒计时不断进行。如果使用setInterval函数,只需设置一次即可。另外,设置时间间隔不宜太短,否则函数执行时间不能忽略,计时不会准确。

? p.20 4.1.2 安装配置 上第二行 “Windows Longhorn” 改为 “Windows Server 2008”

2007年4月 完成第一版,并印刷装订纸质教材。

目 录

1

概述 ................................................................................................ 1

1.1

网站开发的主要内容 .................................................................................... 1

1.1.1 主要内容...................................................................................................... 1 1.1.2 本课程的主要内容........................................................................................ 2 1.2 网站开发的地位 ............................................................................................ 2 1.2.1 客户机/服务器结构....................................................................................... 3 1.2.2 浏览器/服务器结构....................................................................................... 3 1.2.3 信息管理系统............................................................................................... 3 1.3 本课程主要内容及学习方法 ........................................................................ 3 1.3.1 主要内容...................................................................................................... 3 1.3.2 学习方法...................................................................................................... 3

2 HTML............................................................................................. 4

2.1 HTML.................................................................................................................. 4

2.1.1 概述............................................................................................................. 4 2.1.2 语法............................................................................................................. 4 2.2 CSS ...................................................................................................................... 5 2.3 XML .................................................................................................................... 6

3 JAVASCRIPT .................................................................................. 7

3.1 3.2

3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.4 3.4.1 3.4.2 3.5 3.5.1 3.5.2 3.6 3.6.1 3.6.2

概述 ................................................................................................................ 7 示例:输入为空的验证 ................................................................................ 7

示例说明...................................................................................................... 7 解决方案...................................................................................................... 7 示例:计时器 .............................................................................................. 10 示例说明.................................................................................................... 10 解决方案.................................................................................................... 10 示例:键盘事件响应 .................................................................................. 12 示例说明.................................................................................................... 12 解决方案.................................................................................................... 12 示例:复选框全选 ...................................................................................... 13 示例说明.................................................................................................... 13 解决方案.................................................................................................... 14 示例:弹出窗口 .......................................................................................... 15 示例说明.................................................................................................... 15 解决方案.................................................................................................... 15

3.7

3.7.1 3.7.2

示例:联动菜单 .......................................................................................... 17

示例说明.................................................................................................... 17 解决方案.................................................................................................... 17

4 ASP .............................................................................................. 20

4.1

概述 .............................................................................................................. 20

4.1.1 概述........................................................................................................... 20 4.1.2 安装配置.................................................................................................... 20 4.2 HTTP ................................................................................................................. 22 4.2.1 概述........................................................................................................... 22 4.2.2 Request / Response ...................................................................................... 22 4.3 示例:禁止重复登录 .................................................................................. 23

4.3.1 4.3.2 示例说明.................................................................................................... 23 解决方案.................................................................................................... 23

5 项目示例 ...................................................................................... 26

5.1 5.2

概述 .............................................................................................................. 26 设计 .............................................................................................................. 26

5.2.1 需求分析.................................................................................................... 26 5.2.2 概要设计.................................................................................................... 26 5.2.3 详细设计.................................................................................................... 26 5.2.4 数据库设计 ................................................................................................ 31 5.2.5 测试用例.................................................................................................... 31 5.3 开发 .............................................................................................................. 33 5.3.1 管理员维护 ................................................................................................ 33 5.3.2 用户管理.................................................................................................... 41 5.3.3 课程管理.................................................................................................... 45 5.3.4 选课........................................................................................................... 49 5.3.5 成绩管理.................................................................................................... 51 5.3.6 成绩查询.................................................................................................... 54 5.4 总结 .............................................................................................................. 58

程序清单目录

清单 1-1 显示当前日期的JAVASCRIPT程序 .................................................................. 2 清单 3-1 包含输入项的HTML文件 ............................................................................. 7 清单 3-2 提交表单调用的函数 ...................................................................................... 8 清单 3-3 截去空格的函数 .............................................................................................. 9 清单 3-4 计时器 ............................................................................................................ 11 清单 3-5 复选框全选 .................................................................................................... 14 清单 3-6 弹出窗口 ........................................................................................................ 16 清单 3-7 联动菜单 ........................................................................................................ 19 清单 4-1 HTTP REQUEST................................................................................................ 22 清单 4-2 用户登录页面 ................................................................................................ 24 清单 4-3 处理用户登录的ASP文件 ........................................................................... 25 清单 5-1 系统开始页面 ................................................................................................ 34 清单 5-2 LOGIN.ASP ........................................................................................................ 35 清单 5-3 CONN.ASP ......................................................................................................... 36 清单 5-4 ADMIN.ASP ........................................................................................................ 40 清单 5-5 POPUP.ASP ......................................................................................................... 41 清单 5-6 HEAD.ASP.......................................................................................................... 41 清单 5-7 USER.ASP .......................................................................................................... 43 清单 5-8 USER_MANAGE.ASP .......................................................................................... 45 清单 5-9 COURSE.ASP ...................................................................................................... 47 清单 5-10 COURSE_MANAGE.ASP .................................................................................... 49 清单 5-11 SELECT.ASP ..................................................................................................... 51 清单 5-12 SCORE.ASP ...................................................................................................... 53 清单 5-13 SCORE_MANAGE.ASP ...................................................................................... 54 清单 5-14 LIST.ASP .......................................................................................................... 55 清单 5-15 LIST_XSH.ASP ................................................................................................. 56 清单 5-16 LIST_ZHY.ASP.................................................................................................. 57 清单 5-17 LIST_HZ.ASP ................................................................................................... 58

图表目录

图 1-1 南开大学网站主页面 .................................................................................................. 1 图 2-1 一个简单的HTML页面 .............................................................................................. 4 图 2-2 带FORM的HTML页面 ............................................................................................... 5 图 2-3 CSS示例 ........................................................................................................................ 5 图 2-4 使用XML标签的RSS ................................................................................................ 6 图 3-1 IE限制本机含客户端编码的HTML文件 .................................................................. 8 图 3-2 允许IE运行客户端编码.............................................................................................. 8 图 3-3 输入若干空格 ............................................................................................................... 9 图 3-4 提示结果 ..................................................................................................................... 10 图 3-5 输入项包括前后空格及合理字符 ............................................................................. 10 图 3-6 提示截去前后空格后的用户名 ................................................................................. 10 图 3-7 倒计时进行中 ............................................................................................................. 12 图 3-8 倒计时结束 ................................................................................................................. 12 图 3-9 弹出窗口的源文件 ..................................................................................................... 16 图 4-1 IIS配置:网站 ............................................................................................................ 20 图 4-2 IIS配置:主目录 ........................................................................................................ 21 图 4-3 IIS配置:目录安全性 ................................................................................................ 21 图 5-1 登录页面 ..................................................................................................................... 27 图 5-2 超级管理员页面 ......................................................................................................... 27 图 5-3 系统主界面 ................................................................................................................. 27 图 5-4 用户管理界面1 .......................................................................................................... 28 图 5-5 用户管理界面2 .......................................................................................................... 28 图 5-6 课程管理界面1 .......................................................................................................... 28 图 5-7 课程管理界面2 .......................................................................................................... 29 图 5-8 成绩管理界面1 .......................................................................................................... 29 图 5-9 成绩管理界面2 .......................................................................................................... 29 图 5-10 成绩显示 ................................................................................................................... 30 图 5-11 选课系统.................................................................................................................... 30 图 5-12 数据字典 ................................................................................................................... 31 图 5-13 IIS的SESSION超时设置 ........................................................................................... 36 图 5-14 浏览器的SESSION ..................................................................................................... 37 图 5-15 ODBC设置 ................................................................................................................ 39

1 概述

1.1 网站开发的主要内容

1.1.1 主要内容

当前网络应用中万维网因其图文并茂、简单易用而受到广泛欢迎,成为因特网使用最多的一项应用。而网站开发作为计算机软件开发领域的一个分支,作用也日益重要起来。

一般说来,网站开发的技术角色大概分为两类:一类负责页面设计,一类负责程序开发。页面设计主要负责网站页面的布局、装饰与美化,主要使用以下各类型软件:

? HTML编辑工具。如Microsoft FrontPage、Macromedia Dreamweaver等“所见即所得”式的集

成编辑工具。

? 图形图像编辑软件。典型的如Adobe Photoshop、Coral Draw、Cool 3D等二维、三维图形编辑

工具。

? 动画编辑工具。如Macromedia FlashMX可用于制作当前非常流行的Flash动画。

而负责程序开发的技术人员则主要进行网站相关程序的设计、编写、调试与实施等工作,通过编程实现网页动态内容。从程序运行的角度来分,又可分为客户端编程和服务器端编程两种。 下面以南开大学主页面为例来简单分析一下这两种角色的作用,请参看图 1-1。

图 1-1 南开大学网站主页面

该页面的布局(上下结构,下面又分成纵向的三个区域)、字体字号的选择、图片的制作等等,凡是属于页面装饰的内容,都归页面设计人员处理。一般正规软件公司里这种角色叫做“美工”,通常需要美术院校毕业。而页面左上方显示当前日期的地方,则明显是程序所为。让我们查看一下该页面

1

的源文件(IE菜单“查看”->“源文件”)。清单 1-1(实际文件无行号)是该源文件的一部分内容。 1.

2.

5. 28.

29.

清单 1-1 显示当前日期的JavaScript程序

以上可以看到显示当前日期的程序,这里使用的JavaScript的客户端编程,是需要程序开发人员负责的。

这两种角色在软件公司中通常是这样配合工作的:先由美工制作页面文件,制作完成后交客户征求意见,然后修改,直至客户满意。然后由程序开发人员在页面文件的相应部分添加程序代码,并进行调试。

1.1.2 本课程的主要内容

本课程偏重介绍程序开发部分,不介绍页面设计内容。因为页面设计需要一定的艺术修养,并需经过一定的训练才能胜任,而程序开发甚至不需要有计算机专业背景,普通人经过一定的学习、实践即可掌握。

当前能进行网站程序开发的技术有很多,不可能一一涉及。本课程客户端编程部分主要介绍JavaScript编程,服务器端编程重点介绍ASP开发技术,使用VBScript语言。这些虽然不是最新技术,但历经时间考验,是相当成熟、成本比较低、也是当前软件公司较多采用的开发技术。

1.2 网站开发的地位

计算机程序可分为单机程序和网络程序,前者指在单一计算机上运行的程序,不需联网环境。而后者要求运行该程序的计算机必须有网络支持,在运行过程中要从网络传输数据。目前网络程序主要是客户机/服务器结构(Client/Server,C/S),服务器指提供服务的计算机程序,客户机指连接服务器、使用其所提供的服务的程序。一般服务器只有一个,而使用该服务的客户机可以有多个。

2

1.2.1 客户机/服务器结构

C/S结构的网络程序数量庞大,覆盖多个领域,粗略说来,大概有如下几方面的内容: 网络应用:因特网的一些标准应用,如FTP等 即时通讯:Instant Message工具,如QQ、MSN等 网络游戏:如CS、传奇等

商务软件:很多企事业单位使用的管理工具,如ERP、CRM等 C/S结构的应用程序主要优点是可以实现数据、资源的共享(通过网络),而最大缺点则是程序开发维护上的困难。因为每台客户机都需要安装特制的客户端程序,每次升级都需所有客户机重新安装新版本,非常不便。

1.2.2 浏览器/服务器结构

浏览器/服务器结构(Browser/Server,B/S)是C/S结构的一个特例,以Web浏览器作为客户端,以Web服务器作为服务器端,由此避免了C/S客户端程序维护困难的缺点。Web浏览器主要使用Microsoft Internet Explorer、FireFox、Opera等当前流行的工具,服务器可选用Microsoft IIS、Apache等。程序开发人员可以在网页文件中编写代码,实现程序功能。

由于B/S结构更易实施与维护,已经逐渐成为网络应用程序的主要开发模式,尤其是很多原来使用C/S结构的商务软件,如财务软件、ERP等,近年来都有向B/S结构过渡的趋势。

1.2.3 管理信息系统

管理信息系统(Management Information System,MIS)是一大类型网络应用程序,主要针对企事业内部的大量信息、数据的处理,包括MRP、ERP、CRM、财务系统等等,用途广泛,而且大多数是商业系统。从技术上讲,这类系统涉及大量数据操作,需要小型、中型甚至大型数据库支持,数据库操作密集而频繁。目前这种系统大量采用B/S结构,主要使用服务器端编程手段。

1.3 本课程主要内容及学习方法

1.3.1 主要内容

本课程以MIS开发为主线,突出MIS开发的典型问题,重点讲解解决问题的思路。从技术上讲,MIS开发的技术手段有很多,本课程重点讲解其中一种技术(即JavaScript + ASP),以实例方式讲解。所有例子均出自教师在软件公司任职时的实际项目,加以简化,每个例子力求突出MIS开发中的某些典型问题,并详细介绍一种解决方法。

本课程不重语法细节,只着重解题思路。学生实际应用语法时可参考相关语法材料。学生最好系统学习过一门编程语言,会对本课程的学习有极大帮助。

1.3.2 学习方法

南开大学在校本科生,不论是否选修本课程,均可访问“教育在线”网站下载课程讲义、源码和参考资料,并可以提问、交流。

3

2 HTML

2.1 HTML

2.1.1 概述

HTML(HyperText Markup Language,超文本标记语言)是当前主流网络应用“万维网(World Wide Web,WWW)”的主要实现语言,是编写万维网页面文件的标记语言。我们学习网站开发,就是把程序代码插入到HTML代码中,所以必须对HTML有所了解。

HTML是一种标记语言,用于编写HTML文件,扩展名一般为html或htm,为纯文本文件,可用任何文本编辑器编辑,但只有使用Web浏览器打开才能显示标记的效果。该语言的规范由非营利组织World Wide Web Consortium(W3C, http://www.w3.org/)制定,当前语言版本是4.2。

2.1.2 语法

HTML的语法主要由标记(或称标签,Tag)和内容组成,其中标记一般由开始标签和结束标签构成,中间是内容,标记规定内容的显示方式。具体来说,HTML的标记不区分大小写(case-insensitive),标记不能交叉,标记可以包含进一步的参数。

图 2-1显示了一个简单的HTML源文件(右侧内容)及其在浏览器(IE)中的显示效果(左侧),藉此简单介绍一下HTML语法。

图 2-1 一个简单的HTML页面

源文件中在“<”和“>”之间的内容就叫“标记”,大多数标记是成对出现的,像第2行“”和第22行的“”,前者是开始标签,后者是结束标签(以“/”加上开始标签内出现的名称)。HTML页面文件应该以这个标记开始,表明这是一个HTML语言的文件。下面从第3行到第6行,“head”标签内都是页面文件的“头部”,主要是一些供浏览器参考的标记,如第4行的标签(该标签只有开始标签,没有结束标签)含义是该页面文件使用简体中文内码。第5行的“title”标签中间的内容“第一个HTML页面”则是要显示出来的内容,这段文字出现在浏览器的标题栏。 从第8行开始到第21行是“body”标签的“势力范围”,表示其中的内容要出现在浏览器的主要显示区域中。大家可对照源文件中的标签及在左侧浏览器中的实际显示效果看出不同标签的作用。 特别要提一下:HTML语法的注释写法如第10行的格式,可以有多行注释。另外对于没有规定的HTML标记,浏览器会简单地忽略其存在而不报错。如第15行的标签,就是HTML语言中没有被定义的,浏览器遇到这样的标签,不会显示任何错误,仅仅是将其忽略,标签中间的内容沿用前面的合法标签。

图 2-2是一个带表单(Form)的HTML文件及显示效果。

4

图 2-2 带Form的HTML页面

Form(表单)是HTML用于接收用户输入的控件集合,正是因为form的出现,HTML才能真正实现与用户的交互。

图 2-2出现了form中的一些基本控件,首先是第8行出现“form”标签,直到第20行结束标签为止,中间的内容就是一个表单。注意form标签带了一些参数,分别是:参数名称叫做“name”,它的值是“f1”,参数“method”,值为“post”,参数“action”,值为“f1.asp”。这些参数名称是有规定的,取值则任意,如参数“name”表示给这个表单起个名字,因为一个HTML页面中可以出现多个form,必要时需要用名字来区分。下面是form中的若干控件,相信大家在网页上已经多次见到了,但未必知道它们的写法。一般控件,包括文本输入框、密码输入框、单选按钮、提交按钮、重置按钮等,写法相似,都是“input”标签,但参数值不同,参数名称是“type”,取值分别为“text”、“password”、“radio”、“submit”和“reset”。本例中还出现了下拉列表框,写法如第15行,不再赘述。读者可进一步参考其他HTML语法资料。

2.2 CSS

HTML控制的页面显示,与传统图形用户界面(Graphic User Interface,GUI)程序相比,显得不够漂亮,于是出现了对HTML显示内容进行更有效控制的手段:层叠样式表(Cascading Style Sheet,CSS)。利用这种方法可以实现对HTML文件页面元素更精确、更优美的显示控制,在当前页面文件中使用广泛,成为页面设计人员控制页面显示的利器。图 2-3显示了一个CSS的例子,请读者自行参考。值得一提的是,微软曾提出过DHTML的概念,这并非是一个全新语言,只是HTML结合CSS进行页面显示控制,加上JavaScript客户端编程实现页面动态效果。

图 2-3 CSS示例

5

2.3 XML

HTML是一种标记语言,同样属于这个语言领域的还有近年来风头十足的“扩展标识语言”(eXtended Markup Language,XML)。其实HTML和XML都是“标准通用标识语言”(Standard Generialized Markup Language,SGML)的子集,而XML与HTML的最大区别是XML可以自定义标签,而HTML的标签是预先定义好的。

HTML发展至今,出现了很多不规范写法,而主流浏览器对这些错误写法采取很宽容的态度,也使得这种不规范愈演愈烈。W3C曾经作出努力,借助XML的严格语法规定来规范HTML写法,搞出了一个XHTML的语言,标签还是HTML的,但写法必须严格遵循XML的规范,包括标签必须有结束标签、标签之间不能交叉等等,但无奈HTML已经深入人心,肯使用XHTML的页面设计人员凤毛麟角,也就只好随它去了。

图 2-4是目前新兴的RSS服务的文件内容,采用的就是XML标记,请自行参考。

图 2-4 使用XML标签的RSS

6

3 JavaScript

3.1 概述

Javascript是当前网站开发客户端编程使用最多的语言,也是本课程主要介绍的语言。 Javascript属于脚本编程语言(Scripting Language),其主要特点是:

解释执行:与C/C++语言不同,使用脚本编程语言编写程序文件后无需编译,直接在解释器中逐句

执行,如果其中有错误,执行到该句时会终止报错。Basic语言就是解释型编程语言的典型代表。所有脚本语言都是解释执行的,用作网站开发时,解释器就在Web浏览器中。

弱类型: 语言本身没有明确的变量类型,使用变量前不强制声明。

字符处理:以上两个特点并非脚本语言独有的(比如Basic就具有上述两个特点而本身不是脚本语

言),而这个特点才是它区别其他语言的重要特征。脚本语言主要被设计用来进行大量字符处理,不能开发图形用户界面,没有控制图形显示的语句或函数。如果使用这种语言编程,只能编写基于命令行的程序。而这个特点正适合它们用于网站编程,图形显示的部分由HTML负责,而网页上与用户交互的数据都是以文本方式传输的,很适合脚本语言处理。

Javascript是典型的脚本语言,最初由Netscape公司设计,在该公司的浏览器产品Navigator上内置了Javascript的解释器,可以处理网页中内嵌的Javascript代码,实现很多动态内容。该语言也被包括微软IE浏览器在内的所有主流浏览器软件所支持,是进行客户端编程的首选语言。

3.2 示例:输入为空的验证

3.2.1 示例说明

网站页面与用户交互时经常需要输入文本,如用户名、密码、检索字符串等,应确保输入项不为空(未输入或输入全部空格);对于有实际内容的输入项,需截去两端的空格。该示例普遍用于有输入项的页面,对不良数据展开第一层拦截。 本例涉及以下Javascript语法: ? 变量定义

? 条件语句 循环语句 ? 自定义函数 ? 字符串处理 ? 内置对象

3.2.2 解决方案

首先编写包含两个输入项的一个页面文件,如清单 3-1所示。 1. ... ... 2.

3.

8.

清单 3-1 包含输入项的HTML文件

这个页面文件包含一个叫做“login”的form,其中包括一个文本输入框、一个密码输入框(与文本输入框大体相同,只是输入内容不显示)、提交按钮和重置按钮。按下提交按钮会提交这个表单,第3行的“onSubmit”表示表单提交时先执行等号后面的操作,在此为调用Javascript的自定义函数“check()”,根据它的返回值决定是否提交表单。这种写法很常见,主要目的就是在表单提交之前对用户的输入项进行检查。

下面就是在页面文件中加入Javascript代码了,应该加在哪里呢?如果不是必要,一般加在“head”部分,可以有以下两种写法:

1. 2. 这两种写法都可以,任选一种即可。

7

文件编写完成后可以用IE打开,在Windows XP及后续操作系统、IE 6.0及其以上版本,对于在本机打开含有客户端编码的HTML文件默认是不执行客户端代码的,如图 3-1所示,在工具栏下面出现一个提示,表明当前IE已经限制了客户端编码的执行。为测试本例,可在提示上单击鼠标左键,在弹出的如图 3-2所示的菜单上选择“允许阻止的内容”即可。

图 3-1 IE限制本机含客户端编码的HTML文件

图 3-2 允许IE运行客户端编码

下面先来看看表单提交时调用的Javascript函数,如清单 3-2。 1. function check() 2. { 3. var val = trimspace(document.login.username.value); 4. if(val == '') 5. { 6. window.alert(\用户名不可为空!\7. return false; 8. } 9. else 10. { 11. window.alert(\用户名:\12. return true; 13. } 14. }

清单 3-2 提交表单调用的函数

首先看看Javascript自定义函数的写法(第1行),由于Javascript是弱类型语言,所以即使函数有返回值,也不知具体返回哪种类型,所以返回类型一律不写。自定义函数不需声明,直接像这样写函数体就可以。“function”是关键字,后面的“check”是自定义函数的名称,后面要有括号,如果需要参数可在括号中写(同样,因为是弱类型,参数不写类型,只写形式参数的名称)。整个函数用“{}”括起来。

第3行的“var”是变量声明,也可不声明直接使用。后面的“document”是Javascript的内置对象,可以粗略地认为该对象指代HTML文档。由于“form”是文档的一个对象,可以用“document.login”(“login”是本例“form”的名称,见清单 3-1),在“login”表单中,所有控件都是这个表单的对象,包括输入用户名的文本框“username”,它又包括一个属性“value”,引用该文本框中的值,所以,“document.login.username.value”就是用户在叫做“username”的文本框中输入的值,将这个值作为参数调用另一个自定义函数“trimspace”,把该函数的返回值赋值给变量“val”。 第4行到13行是Javascript的一种条件判断语句的写法,“if”后面的括号包含一个判断式,其结果如果为“真”,或者叫“true”,则执行下面大括号中的内容,否则执行“else”下面的内容。注意第4行“val = = ''”的写法。Javascript规定,“=”表示赋值,两个等号(“= =”)表示是否“等于”,所以作条件判断时要用两个等号。在此判断变量“val”是否等于“空”,含义是该变量没有赋值,是一个“零长度”字符串。后面会讲到,“trimspace”函数会把用户输入的内容的前后空格都截去,所以变量“val”如果等于空,就意味着用户在文本框中要么什么都没有填,要么填了若干空格,这两种情况都是要禁止的。所以下面调用了Javascript的一个内置函数“window.alert”,首先说“window”也是Javascript的内置对象,比“document”级别还高,可以认为指代浏览器的显示界面。“alert”函数是该对象的一个方法,作用是弹出一个信息对话框,参数的内容就是对话框要显示的内容。弹出后“return false;”,退出函数,返回值为“false”。表单在接到这个返回值后该表单就不会提交。

8

如果变量“val”不等于“空”,则执行“else”下面的内容,这里把用户输入的信息与其他字符串进行了拼接,并弹出信息框,最后“return true;”,表示表单可以提交了。在本例中,并没有指定表单提交到的程序,则默认调用自身。

下面讨论截去空格的程序。这可以归结为对于给定字符串,将该串开始部分和结尾部分的若干空格截去,中间的空格要保留。如给定字符串“##ab#cd###”(这里以“#”代表一个空格),经处理后变为“ab#cd”。

对于这个问题,可以如下处理:编程从字符串左侧开始,判断左侧第一个字符是否为空格,“是”则删去这个空格,然后继续判断第二个字符,直到找到一个非空格的字符。然后从字符串右侧重复这一过程。清单 3-3给出了实现这种算法的一个参考程序。 1. function trimspace(str) 2. { 3. var b = true; 4. do 5. { 6. if(str.indexOf(' ') == -1) 7. b = false; 8. if(str.indexOf(' ') > 0 && str.lastIndexOf(' ') < str.length - 1) 9. b = false; 10. if(str.indexOf(' ') == 0) 11. str = str.substring(1, str.length); 12. if(str.lastIndexOf(' ') == str.length - 1) 13. str = str.substring(0, str.length - 1); 14. } 15. while(b); 16. 17. return str; 18. }

清单 3-3 截去空格的函数

第1行的自定义函数“trimspace”接收一个形式参数“str”。第4行到15行是Javascript的一种循环语句,基本含义是当“while”括号中的条件为“true”时继续循环,为“false”时退出循环。第3行定义了一个变量“b”,它的值为“true”,在循环中当字符串的前后空格都截去后将该变量赋值为“false”,执行到第15行时就会退出“while”循环了。 下面看几个Javascript常用的处理字符串的内置函数,包括在字符串中搜索指定子串的函数“indexOf”和“lastIndexOf”,以及取子串操作“substring”。第6行,“str.indexOf(' ')”表示在字符串“str”中从左到右搜索一个空格,找到后返回该字符第一次出现的位置,Javascript规定,字符位置从“0”开始计数,即第一个字符位置是“0”,第二个位置是“1”,以此类推。如果找不到,则返回“-1”。那么第6行的条件句就是说“如果字符串str里面一个空格都找不到,就把b赋值为false”。既然一个空格也没有,自然也就不用再截了,退出循环就是了。再看第10句,意思是“如果找到了空格,而且位置是0,也就是说第一个字符就是空格,就用第11句的取子串函数截去空格”。这个函数需要两个参数,第一个是截取子串的起始位置,此处为“1”,表示从第二个字符开始;第二个参数是子串的结束位置,但不包含该位置。就此处来讲,从第二个字符一直取到整个字符串的结尾,最终位置应该是整个字符串的长度“str.length”(字符串的属性)。下面的第12句出现的“lastIndexOf”与“indexOf”相似,只是前者是对字符串从右到左搜索,如果在最右侧找到空格,其返回值就等于“str.length - 1”,所以下面将最右侧的空格截去。截去后的字符串仍赋值给“str”。

现在应该能够理解第8句的含义了。中间出现的“&&”表示“逻辑与”操作,就是前后两个条件必须同时成立。这一句前面的条件表示找到了空格,该空格不是左侧第一个字符,后面的条件表示从右向左也找到了空格,且不是最右侧的字符,这就说明虽然字符串包含空格,但不在字符串的两端,所以不应该作任何处理。

图 3-3 输入若干空格

9

图 3-4 提示结果

图 3-5 输入项包括前后空格及合理字符

图 3-6 提示截去前后空格后的用户名

图 3-3到图 3-6显示了该示例的两种运行结果,一种是只输入空格,经截取后成为零字符而被提示;另一种是既有合理字符,又包含前后及中间空格,经处理后前后空格被截去。

3.3 示例:计时器

3.3.1 示例说明

有些网站需要用户登录使用,一般会有超时时间,在该时间段内没有任何操作则此次登录无效。本例在客户端浏览器的状态栏显示剩余时间,提醒用户注意超时。 本例涉及以下Javascript语法: ? 定时函数

? 数值型、对象型变量 ? 数值变量的运算、比较

3.3.2 解决方案

Javascript有两对内置函数与定时功能有关,一对是setTimeOut(expression, msec) / clearTimeOut(timeoutID),前者的第一个参数表示在指定时间内运行什么操作,通常是一个函数;第二个参数是定时间隔,以毫秒记。使用该函数设定计时器后,需要返回一个对象型变量,标志这个计时器。后者的功能是取消叫做timeoutID的计时器。这一对定时函数只能定时执行一次,即在指定时间后执行一次就告终止,想重复执行的话需重复设定。另一对是setInterval / clearInterval,设定时间间隔后会自动重复执行,一般需要用后面的函数来取消定时操作。本例使用前一对函数。 下面是本例的源文件。 1.

2.

An example about timer.

Pay attention to status bar.

清单 3-4 计时器

在第26行,“body onload”表示在浏览器载入“body”部分时运行“onload=”后面的函数,本例为自定义函数“showTime()”。代码的第3行到第5行定义了3个变量,本例将超时时间定为3分钟。网页载入时调用“showTime()”函数,首先将“cur_second”变量减1并赋值回自身(“- -”操作),如果秒已经减到0,则将分钟数自减1,第14行,如果分钟数也减到0以下,说明倒计时完成,在浏览器状态栏显示“Expired!”,这里用到了“window”对象的一个属性“status”,对它赋值就会显示在浏览器状态栏。然后取消计时器(第17行),退出函数。而在倒计时还没有完成前,先会执行第21行后面的程序,将自减过的分钟数和秒数合到一起,在状态栏显示剩余时间。第23行设定了计时器,第2个参数“1000”表示在1000毫秒(也就是1秒钟)后运行一次“showTime()”函数,并把该计时器赋值给对象变量“timerID”,以供后来的“clearTimeout”函数使用,取消该计时器。第18行的“return”表示从函数中退出。由于在1秒钟后执行一次后定时就会停止,所以需要在第23行重复设定定时函数,才能保证倒计时不断进行。如果使用setInterval函数,只需设置一次即可。另外,设置时间间隔不宜太短,否则函数执行时间不能忽略,计时不会准确。 以下两图显示运行结果,注意浏览器左下角的状态栏显示。

11

图 3-7 倒计时进行中

图 3-8 倒计时结束

3.4 示例:键盘事件响应

3.4.1 示例说明

网页中输入项之间的切换应使用键盘上的“制表符”(Tab键),但有些用户习惯于使用Windows桌面程序,喜欢以回车键来切换,而该键默认提交表单。本例演示在用户键入回车键后在输入项间切换。

本例涉及如下Javascript语法: ? 键盘事件响应 ? for循环

? form的element的属性、方法

3.4.2 解决方案

由于网页输入项中回车键默认用于提交表单,所以为赋予它新的功能,必须对其编程处理。本例源文件如下。

1.

2.

31.

42.

首先是第31行的特殊写法,响应键盘事件时必须按照这样来写,表示有键盘事件时调用“processKeyEvent”函数(虽然是函数,这里不能加括号)。在“body onload”的时候执行这一操作,相当于向浏览器声明:用户如果按了键盘,交给这个函数来处理。接下来就是要在这个函数中进行具体处理了。

注意第39行,如果要处理回车键,就不能写“提交”按钮,也就是不能出现“

本例中,没有给“form”一个名称,可以使用数组访问。一个网页文件可以有多个表单,构成一个Javascript内置数组,名称固定为“forms”,以中括号(“[]”)加数字表示为数组,从0开始计数。本例只有一个表单,可以用“document.forms[0]”来引用。“form”有一个内置属性“length”,表示表单中有多少控件。本例包括两个文本输入框、一个下拉列表框和两个按钮,共5个控件。

下面的基本思路是:先要判断用户是在哪个控件上按的回车,找到这个控件,然后把输入焦点放到该控件下面的控件上。第7行到第28行的“for”循环就实现了这一想法。第9行的“srcElement”就是按键发生的那个“控件元素”,如果它的“type”属性等于“button”,也就是在“Submit”按钮上按了回车,第11行的语句是从Javascript代码中提交表单的方法。后面的“break”跳出“for”循环。

如果这个“if”不能成立,则从第16行开始搜索到底是在哪个控件上按了回车。表单中控件的访问也可以用数组,写法为“elements[]”,与“forms”数组类似,也是从0开始计数,非常适合在循环语句中遍历所有控件。如果第16行的条件成立,就是找到了按键发生的控件,接着使用“focus()”把当前输入焦点置于下一个控件上,如果该控件是文本类型的输入控件,使用“select()”函数将之反选。

具体运行效果可运行该页面文件进行验证。

3.5 示例:复选框全选

3.5.1 示例说明

一些网站的页面使用复选框,用户可以选中多项进行一种操作。本例演示使用客户端编程对多个复选框进行快速选择。这里使用一个“全选”复选框,选中这个控件则选中上面所有复选框;当该控件处于未选中状态时,仅表示部分或全部复选框处于未选中状态。 本例涉及Javascript语法: ? 复选框选中事件的响应

? 表单中的元素以变量名方式访问

13

3.5.2 解决方案

选中“全选”同时选中所有复选框,再点击“全选”取消选中所有复选框,相对来说还是比较容易的。比较麻烦的是,随着用户在各个复选框中作选中、取消选中的操作,还要更新“全选”复选框的状态。以下是程序清单。 1.

2. 36.

37.

38.

45.

清单 3-5 复选框全选

第39行到第43行生成了几个复选框,注意前三个复选框的名称,这样起名非常适合在程序的循环中作处理。另外,“onclick”意思是“当点击到这个控件的时候,执行某些操作”,本例中,点击上面三个复选框,都调用同一个函数“cb()”,点击“全选”复选框时,调用“selectAll()”函数。 首先看看点击“全选”框后的操作。由于复选框可以有“选中”和“未选中”两种状态,所以在点击发生后,要确定点击后该复选框的状态是什么,才能相应决定对上面的3个复选框进行怎样的操作。第3行定义了一个变量,代表需要操作的复选框的数量(此处为3)。函数“selectAll”一开始就是判断“全选”复选框的状态,对复选框的引用就是表单名加复选框的名称,对于“全选”框是

14

“f.selAll”,它有一个属性“checked”,复选框选中时取值为“true”,否则为“false”。当第7行“if”语句的条件成立时,说明“全选”复选框处于选中状态,则对上面的所有复选框作循环,一个一个都选中。注意这里采用的方法,没有直接用名称引用复选框(如“f.cb0”),而是使用了“elements”数组,这次没有用数组下标,而是使用了名称,而名称是用变量表示的。这种引用方法比较多地应用在这样的场合。“else”后面就是“全选”复选框没有处于选中状态,则取消所有复选框的选中。 由于用户有可能单独点击上面的某些复选框,当点击了某复选框后,有可能使得原先是“全选”的情况变成了“不是全选”,所以需要相应调整“全选”复选框的状态。第19行到第34行的函数“cb()”给出了一种参考思路:如果“全选”复选框当前是选中状态,说明上面的所有3个复选框都是选中的,那么这时如果某一个复选框被点击,肯定是不被选中了,那么“全选”复选框自然就要“不选中”了。而如果“全选”框当前不是选中状态,说明上面的复选框或者都没被选中,或者有一部分没被选中,只能一个一个地看了。这里是这样处理的:遍历3个复选框,逐个查看其状态,只要有一个没有处于选中状态,就退出函数,因为至少有一个不是选中状态,所以“全选”框维持原来的“不选中”状态。只有遍历所有复选框,都是选中状态时,才需要把“全选”框也置为“选中”。第29行“if”参数中的“!”,表示对后面的表达式的结果取相反值,相当于写成“f.elements[\= = false”。

最后,重新审视函数“selectAll()”,是不是觉得有点罗嗦呢?想想看是不是可以精简一下呢?请参考本例源文件。

3.6 示例:弹出窗口

3.6.1 示例说明

访问网站时不断有窗口弹出来,可说是件极其烦人的事情,于是现在的浏览器甚至直接就不允许弹出窗口了。但在实际MIS系统中,弹出窗口还是有用武之地的。本例演示用户填写某表单后,弹出新窗口显示用户的输入内容,并要求用户确认。用户确认后该窗口关闭,从原窗口提交表单。 本例涉及Javascript语法: ? 弹出窗口的写法

? 用代码直接生成文档内容 ? 弹出窗口与原窗口的交互

3.6.2 解决方案

这个问题的复杂之处在于:新弹出的窗口要包含用户输入的内容,也就是是动态内容,无法事先确定的。另外,在弹出窗口确认后要关闭该窗口且回到原窗口并提交表单,也是个不大不小的挑战。请参考下面的源文件清单。 1.

2.

清单 3-7 联动菜单

第48行的“for”循环是Javascript比较独特的写法,“t1”是数组,“i”是循环变量,这种写法是用于遍历数组。还请注意,对于下拉列表框,获取用户选择项、定义新的列表框都有比较独特的写法,比表单中的一般控件要麻烦一些。另外,针对列表框的事件,本例只有当前面列表框选择项有变化时才需调整后面列表框内容,所以响应的是“onChange()”方法(第42、43行)。其他请参考源码中的注释。

19

4 ASP

4.1 概述

4.1.1 概述

Active Server Pages(ASP),是微软公司于1997年前后推出的一种Web服务器开发技术,采用脚本语言编程,以ISAPI进行解释执行。ASP本身是一种开发技术,不是编程语言。它主要采用两种脚本语言:VBScript和JScript。

由于是微软公司的产品,该技术只能应用在该公司自己的操作系统和Web服务器上(有第三方产品支持ASP在非微软平台和非微软Web服务器上运行,但均非官方版本)。

最适合使用ASP技术的软件平台,主要是微软Windows系列的服务器版本和Web服务器IIS。具体来说有如下版本:

Windows Server Family: ? Windows NT Server 4.0 ? Windows 2000 Server / Advanced Server ? Windows Server 2003 ? Windows Server 2008

而Web服务器是Internet Information Server(IIS),随上述操作系统免费提供。

4.1.2 安装配置

IIS的安装可通过Windows“添加/删除组件”进行,与ASP有关的服务是“万维网服务”。安装后可通过启动服务或管理工具启动、停止。 以下简述IIS服务器的相关配置。

图 4-1 IIS配置:网站

20

图 4-2 IIS配置:主目录

图 4-3 IIS配置:目录安全性

在“网站”属性页(图 4-1)中,可指定IP地址(多网卡服务器)、连接超时等设置。

21

在“主目录”页面(图 4-2)中,主要设定网站的根目录,而且需要设置权限,至少应设置“读取”。 在“目录安全性”页面(图 4-3)中,需设定访问用户。一般允许匿名访问的网站,应选中“匿名访问”,并使用Windows内置的用户名。

4.2 HTTP

4.2.1 概述

超文本传输协议,HyperText Transfer Protocol(HTTP),是万维网的相关协议,主要由World Wide Web Consortium(W3C)制订,当前协议版本是1.1,定义在RFC 2616中。 HTTP由客户端“请求”(Request)和服务器端“响应”(Response)的一来一往,完成网页的传输。为保证效率,Request和Response都由多行构成,并包括“头”(Header)和“身”(Body),可以一次携带多个参数。

4.2.2 Request / Response

当客户端浏览器软件向Web服务器索取某个网页文件时,该浏览器会构造一个Request发到服务器,以下是一个Request示例:

1. GET http://localhost/MyWeb/index.asp HTTP/1.0

2. Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash,

application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* 3. Accept-Language: zh-cn

4. Cookie: ASPSESSIONIDSSRABDA ... ...

5. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) 6. Host: localhost

7. Proxy-Connection: Keep-Alive

清单 4-1 HTTP Request

以上就是一个Request的“header”部分(无行号),第一行“GET”是一个命令字(HTTP 1.1共包括OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT等命令),表示“索取”后面的页面文件。以下各行是一些参数,表示了浏览器的一些特征。 服务器接收到上面的Request后,会给出一个Response,如下: 1. HTTP/1.1 200 OK

2. Server: Microsoft-IIS/5.1

3. Date: Mon, 24 Oct 2005 06:47:32 GMT 4. Connection: Keep-Alive 5. Content-Length: 596 6. Content-Type: text/html 7. Cache-control: private 8.

9.

10. 10.

11.

28.

清单 4-2 用户登录页面

清单 4-2给出用户登录页面,该页面含有两个表单,第一个供用户登录,第二个可以列出当前用户,并强制退出用户。两个表单由同一个程序处理,为分辨是哪个表单提交的数据,用了一个“hidden”类型的控件“act”,不同的表单,“act”的数值不同。 1. <%

2. Option Explicit

3. Response.Expires = 0 4.

5. Dim act

6. Dim user, pass, logtype 7. Dim tmp1, tmp2, n, str 8.

9. act = Trim(Request.Form(\10.

11. If act = \12. user = Trim(Request(\13. pass = Trim(Request(\14. logtype = Trim(Request(\15. 16. If user = \17. 18. tmp1 = \19. tmp2 = \20. n = InStr(tmp1, tmp2) 21. 22. If logtype = \23. If n > 0 then 24. Response.Write \该用户已登录!\25. Else 26. Application.Lock 27. If Application(\28. Application(\29. Else 30. Application(\31. End If 32. Application.Unlock 33. End If 34. Else 35. RemoveUser user 36. End If 37. End If 38.

39. If act = \40. user = Trim(Request(\41. If user = \42. 43. RemoveUser user 44. End If 45.

46. Sub RemoveUser(un) 47. tmp1 = \48. tmp2 = \49. n = InStr(tmp1, tmp2) 50. 51. If n = 0 Then Exit Sub 52. 53. Dim str1, str2

24

54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.

str1 = Left(tmp1, n - 1) str2 = Right(tmp1, Len(tmp1) - Len(str1) - Len(tmp2)) str = str1 & \ Application.Lock If Len(str) = 1 Then Application(\ Else Application(\ End If Application.Unlock End Sub

Response.Write Application(\%>

清单 4-3 处理用户登录的ASP文件

ASP有两个基本对象,“Response”是对浏览器的输出,“Request”则是读入信息。第9行就是接收表单变量“act”的值,第24行是对浏览器输出信息,使用“Response”的“write”方法。

第11行到37行主要处理用户登录,当前登录用户名保存在“Application(\”中,新登录用户在这个变量中查找子串,如果能找到则禁止登录,否则把用户名添加到变量中。注意,对“Application”的写操作,需要像第26行到第32行那样,先“Lock”,然后赋值,最后“Unlock”,因为该变量能被当前服务器的所有网页程序访问,“Lock”后其他程序就只能读取数据,不能修改了。 第46行到第65行演示了VBScript的自定义函数的写法,第43行则是对它的调用方法。 本例中多处涉及了VBScript针对字符串的操作,有拼接、查询、截取等操作,请自行对照。

25

5 项目示例

5.1 概述

软件公司开发的软件,基本分为产品和项目两类。产品主要是通用的软件,如操作系统、杀毒软件等,有比较普遍的需求,可以摆放到软件商店中销售。而项目则是客户定制的软件,包含只有该客户才需要的功能,只为该客户开发,不能销售给别的客户。这两类软件,其开发成本基本相同,但产品可以大量销售,不需要用一套软件收回成本,所以销售价格低。而项目只能卖给唯一的一位客户,必须收回成本甚至赢利,所以项目的销售价格比产品高得多。

这两类软件的开发过程是相同的。按照现代软件开发管理的理念,软件开发分为这样几个阶段:项目立项、需求分析、系统设计、编码测试、客户验收和维护。在各个阶段都需要有相应的文档(电子化或纸化),便于跟踪各个过程,实现科学管理。主要开发文档有:可行性分析报告、用户需求说明书、软件需求规格说明书、概要设计说明书、详细设计说明书、测试用例、测试记录等。而管理文档主要有:项目开发计划、测试计划、测试总结报告、项目进展报告等。

本章以一个虚拟项目,讲述一个小型MIS系统的各个开发过程,使读者可以了解到软件公司在实际运作中的主要阶段。

5.2 设计

假设用户要求开发一个“高校成绩管理系统”,是一个B/S结构的小型MIS系统。本节主要介绍项目组相关的设计阶段。这些阶段包括:需求分析、概要设计、详细设计、数据库设计、测试用例等。

5.2.1 需求分析

这个阶段主要是详细了解客户的需求,尽可能讲清所有细节,以便项目经理作出规划。一般需要项目组成员到客户那里,与相关人员详谈,然后由项目组作出需求分析报告,由客户确认。

“成绩管理系统”包括三个主要的功能:学生课程成绩管理、学生信息管理和课程信息管理。客户希望本系统有以下类型的用户,每种用户有相应的权限。包括: ? 超级管理员:注册管理员用户

? 管理员:注册学生、领导用户;维护学生基本信息;维护课程基本信息;查询成绩; ? 学生:选课;查询成绩; ? 领导:查询成绩;

5.2.2 概要设计

这个阶段由项目经理组织项目组成员讨论,制订系统的初步结构,包括使用什么服务器软硬件、哪种开发技术、系统大致分为多少功能模块、每个模块的大致功能如何等等。 本例的系统采用Windows操作系统,IIS作为Web服务器软件,使用ASP技术,数据库使用Access。系统分为以下模块:注册用户;课程基本信息管理;课程成绩管理、选课系统和成绩查询。

5.2.3 详细设计

本阶段是最重要的阶段,要进行非常详细的设计,对于B/S系统来说,应该规划出所有页面,每个页面的布局、实现的功能,如果可能的话,甚至包括需要开发哪些函数、函数的主要功能、出口、入口参数等等,都需在这一阶段完成。本例只进行了各页面的页面布局和主要功能的设计。 图 5-1为系统初始登录页面(文件名为default.asp),用户在此页面输入用户名、密码,提交到login.asp处理,该页面无用户界面,判断用户类型,如果是超级管理员,转到超级管理员的管理页面;如果是其他用户,转到主界面。

图 5-2为超级管理员使用的页面(admin.asp),用于管理员用户的注册、删除。注册时需同时提供密码。

26

图 5-1 登录页面

图 5-2 超级管理员页面

图 5-3是超级管理员之外的其他用户登录成功后看到的主界面(main.asp),上方的功能链接需根据不同的用户显示不同的内容。

图 5-4和图 5-5是管理员进行用户管理的界面(user.asp和user_manage.asp),在第一个页面中输入要管理的用户名,如果该用户已存在则显示用户信息,可修改或删除;若该用户不存在,则在后面的页面中注册该用户。

图 5-3 系统主界面

27

图 5-4 用户管理界面1

图 5-6和图 5-7是管理员进行课程管理的界面(course.asp和course_manage.asp)。与用户管理类似,先输入课程编号,如果该课程存在则修改(不允许删除),否则注册。

图 5-5 用户管理界面2

图 5-6 课程管理界面1

28

图 5-7 课程管理界面2

图 5-8 成绩管理界面1

图 5-8和图 5-9是管理员录入或修改学生成绩的页面(score.asp和score_manage.asp)。第一个页面中如果只输入课号,就是对选修该课程的所有学生录入成绩;如果同时输入了学号,则是修改该学生的成绩。

本系统的“成绩查询”功能,对于不同权限的用户有不同的显示,需要区别对待。用户选择该功能后,由文件list.asp进行处理,根据用户类型转到不同的显示页面。图 5-10的三个页面,第一个页面(list_xsh.asp)是学生用户看到的页面,显示该学生选修的所有课程的成绩、学分等信息;第二个页面(list_zhy.asp)是管理员查询某专业下所有学生的信息,每行显示一个学生的汇总信息;最后一个页面(list_hz.asp)是领导或管理员查看全校各专业的信息,每行显示一个专业的汇总情况。

图 5-9 成绩管理界面2

29

图 5-10 成绩显示

图 5-11 选课系统

图 5-11是学生选课页面(select.asp),可利用复选框同时选择多门课程。由于课程本身有选课截止时间和人数限制,并非所有课程都会显示在“可选课程列表”下。

30

5.2.4 数据库设计

MIS系统主要依赖数据库,所以数据库设计的好坏会直接影响到MIS系统的执行效率。数据库设计主要是设计数据表,包括表的结构、字段类型等,一般需要比较有经验的人员(如项目经理)完成。这里只给出设计后的结果。

本系统共建立3个数据表,数据字典如图 5-12。

数据表yhxx(用户信息) 字段名 yhm * yhmm yhlx zhy 描述 用户名 密码 类型 专业 类型 varchar varchar varchar varchar 长度 10 10 6 10 必填 是 是 是 否(学生用户必填) 数据表kch(课程) 字段名 xkkh * mch xf rq rsh 描述 选课课号 课程名称 学分 日期 人数 类型 char varchar int char int 数据表chj(成绩) 字段名 yhm * zhy xkkh * mch chj xf 描述 学号 专业 选课课号 课程名称 选课成绩 学分 类型 varchar varchar char varchar int int 图 5-12 数据字典 长度 10 10 3 20 必填 是 是 是 是 是 是 长度 3 20 10 必填 是 是 是 是 是 5.2.5 测试用例

为保证软件运行正确,必须进行详尽的测试。测试是一项专门的技术,正规软件公司应该有专门的测试部门,负责对各开发小组的软件产品或项目进行测试。项目组有责任编制测试用例,这些用例最好由客户提供,或至少由客户确认结果,以保证正确性。下面给出了几组测试用例,开发完成后需要系统能够正确得出这些结果。

用户信息 用户名 admin 类型 管理员 专业 31

用户名 xzh 类型 领导 专业 0201 0305 0426 0427 0243 学生 学生 学生 学生 学生 数学 数学 物理 化学 化学 0304 0315 0534 0503 课程信息 学生 学生 学生 学生 数学 物理 物理 化学 课号 001 002 003 010 030 名称 数学 物理 化学 哲学 二外 学分 2 2 2 3 1 学生成绩 日期 051110 051110 051110 051110 051110 人数 4 3 3 5 2 学号 课号 001 成绩 75 56 92 -1 成绩 85 0 68 92 78 成绩 73 67 82 -1 学分 2 2 学分 2 0 2 -1 学分 2 学号 课号 002 成绩 62 -1 72 82 成绩 65 69 80 55 学分 2 -1 3 1 学分 2 3 2 0 0201 002 003 030 0305 003 010 030 学号 课号 001 002 学号 0315 课号 001 010 0 2 3 1 学号 课号 001 002 0427 010 030 32

0304 003 010 030 0426 003 010 学号 课号 001 002 成绩 45 56 66 72 学分 0 0 3 1 0534 003 030 2 -1 学号 课号 002 成绩 63 -1 80 学分 2 -1 1 学号 课号 001 成绩 65 56 71 学分 2 0 3 0243 003 030 0503 002 010 数学专业成绩 学号 0201 0304 0305 学生总数 3 学号 0315 0426 0534 学生总数 3 学号 0427 0243 0503 学生总数 3 专业 数学 物理 化学 专业总数 3 学生数 3 3 3 学生总数 9 总课程数 3 5 3 平均分 74.3 64.6 72.0 总学分 4 8 6 总学分 18 总学分 5 2 6 总学分 13 总学分 4 3 5 总学分 12 平均分 70.3 69.5 65.1 总平均 68.3 总学分 18 13 12 总学分 43 总课程数 总平均 5 70.3 物理专业成绩 总课程数 2 2 3 平均分 67.0 67.5 74.0 总课程数 总平均 4 69.5 化学专业成绩 总课程数 4 2 3 平均分 59.8 71.5 64.0 总课程数 总平均 4 65.1 各专业汇总信息 总课程数 5 4 4 总课程数 5 5.3 开发 5.3.1 管理员维护

清单 5-1是系统的初始页面,第4行的“trim.js”包含常用的Javascript自定义函数(如“trimspace()”),

33

可以像这样包含到所有需要的文件中。代码第6行到第20行的函数进行了用户登录的客户端验证,不允许用户名或密码为空。页面提交到“login.asp”进行处理。 1.

2. 学分管理系统 3.

4. 22. 23.

24.

25.

26.

成绩管理系统


27. 32.

清单 5-1 系统开始页面

清单 5-2是“login.asp”的完整代码,第2行、第3行是获得提交的表单数据的方法,第5行,如果用户名或密码为空,转回到初始页面,这是客户端输入的服务器端验证,虽然进行了客户端验证,还是有办法绕过的,所以服务器端验证也是必不可少的。第7行到第13行,如果用户以超级管理员(sa)登录,需要验证其是否是从服务器本机登录的,这里用第8行的一个环境变量(Server Variable)获取客户机的IP,用户从本机登录,必须使用“localhost”域名访问系统,其IP地址才可能是“127.0.0.1”。 1. <%

2. un = Trim(Request.Form(\3. pw = Request.Form(\4.

5. If un = \6.

7. If un = \8. addr = Request.ServerVariables(\ 9. If pw <> \ 10. If addr <> \11. Session(\12. Response.Redirect(\13. End If 14. %>

15.