网站开发非常之旅——《asp.net 2.0+sql server 网络应用系统开...

50
网站开发非常之旅——《ASP.NET 2.0+SQL Server网络应用系统开 发案例精解》 清华大学出版社出版 购书网址:http://www.china-pub.com/computers/common/info.asp?id=32112 重要内容概览: 酒店管理系统 连锁中心配送系统 企业信息管理系统 鲜花预定系统 学生管理系统 学生选课系统 blog 在线考试系统 网上书店系统 读者对象: 有一定ASP.NET基础的学生 做毕业设计的学生 即将找工作,但是没有项目开发经验的人员

Upload: others

Post on 03-Jul-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

网站开发非常之旅——《ASP.NET 2.0+SQL Server网络应用系统开

发案例精解》

清华大学出版社出版

购书网址:http://www.china-pub.com/computers/common/info.asp?id=32112 重要内容概览: 酒店管理系统 连锁中心配送系统 企业信息管理系统 鲜花预定系统 学生管理系统 学生选课系统 blog 在线考试系统 网上书店系统 读者对象: 有一定ASP.NET基础的学生 做毕业设计的学生 即将找工作,但是没有项目开发经验的人员

Page 2: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

178

网络开发人员 网站建设与维护人员 相关专业学校培训用书

第1章 酒店管理系统 1.1 系统概述 1.1 系统概述

1.1.1 系统功能 1.1.2 系统预览 1.1.3 系统操作流程

1.2 系统设计架构 1.2.1 系统架构 1.2.2 系统功能模块

1.3 数据库的设计和实现 1.3.1 数据库需求分析 1.3.2 数据库概念结构设计 1.3.3 数据表设计 3.3.4 数据库的表间关系

1.4 公用模块 1.4.1 数据库连接编写 1.4.2 ST_PageBase类和ST_ModuleBase类 1.4.3 界面设计 1.4.4 登陆系统

1.5 房间类型管理 1.5.1 房间类型的管理界面搭建 1.5.2 房间类型的修改和删除。 1.5.3 房间类型的添加

1.6 房间信息管理 1.6.1 房间信息管理界面 1.6.2 房间信息的修改和删除 1.6.3 房间信息的添加

1.7 房间经营管理 1.7.1 房间使用界面的搭建 1.7.2 房间使用的信息查询

1.8 客户信息和经营状况信息的查询 1.8.1 客户信息查询 1.8.2 房间经营状况查询

1.9 关键技术剖析:配置文件解析 1.9.1 配置概述 1.9.2 Web.Config中的配置信息 1.9.3 自定义Web.Config文件配置节

Page 3: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

179

1.10 小结

第2章 连锁中心配送系统 2.1 系统概述

2.1.1 系统功能 2.1.2 系统预览 2.1.3 系统操作流程

2.2 系统设计架构 2.2.1 系统架构 2.2.2 系统功能模块

2.3 数据库的设计和实现 2.3.1 数据库需求分析 2.3.2 数据库概念结构设计 2.3.3 数据表设计 2.3.4 数据库的表间关系

2.4 公用模块编写 2.4.1 数据库连接编写 2.4.2 界面头尾设计 2.4.3 界面主体框架 2.4.4 登录系统

2.5 管理员:用户管理 2.5.1 用户信息的查看、修改和删除 2.5.2 用户信息的添加

2.6 管理员:其他模块管理 2.6.1 产品模块的管理 2.6.2 连锁店模块的管理 2.6.3 销售统计管理

2.7 连锁分店用户 2.7.1 分店用户管理信息查看 2.7.2 用户密码的修改 2.7.3 产品信息维护 2.7.4 连锁店信息查看 2.7.5 连锁店销售统计

2.8 关键技术剖析:ASP.NET之C#中的异常处理 2.8.1 基础知识 2.8.2 结构化异常处理 2.8.3 C#中常见异常类

2.9 小结

第3章 企业信息管理系统

Page 4: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

180

3.1 系统概述 3.1.1 系统功能 3.1.2 系统预览 3.1.3 系统操作流程

3.2 系统设计架构 1.2.1 系统架构 3.2.2 系统功能模块

3.3 数据库的设计和实现 3.3.1 数据库需求分析 3.3.2 数据库概念结构设计 3.3.3 数据表设计 3.3.4 数据库的表间关系

3.4 公用模块编写 3.4.1 数据库连接编写 3.4.2 数据层类 3.4.3 界面控件设计 3.4.4 登陆页面

3.5 管理员界面:新闻管理 3.5.1 新闻的添加 3.5.2 新闻的删除

3.6 管理员界面:产品管理 3.6.1 产品的添加 3.6.2 产品的更新和删除

3.7 管理员界面:用户管理 3.7.1 用户管理 3.7.2 用户信息的处理

3.8 管理员界面:订单管理 3.8.1 已处理订单的管理 3.8.2 未处理订单的管理

3.9 用户界面 3.9.1 界面预览 3.9.2 新闻列表 3.9.3 产品展示 3.9.4 订购信息 3.9.5 查看订单

3.10 技术剖析:浅析ADO.NET 3.10.1 ADO.NET概述 3.10.2 ADO.NET 结构 3.10.3 ADO.NET连接方式

3.11 小结

第4章 鲜花配送系统

Page 5: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

181

4.1 系统概述 4.1 系统概述

4.1.1 系统功能 4.1.2 系统预览 4.1.3 系统操作流程

4.2 系统设计架构 4.2.1 系统架构 4.2.2 系统功能模块

4.3 数据库的设计和实现 4.3.1 数据库需求分析 4.3.2 数据库概念结构设计 4.3.3 数据表设计 4.3.4 数据表之间的关系

4.4 公用模块编写 4.4.1 数据库连接编写 4.4.2 界面主体框架 4.4.3 登陆系统和退出系统

4.5 管理员界面:用户信息管理 4.5.1 用户信息框架 4.5.2 用户信息事件处理

4.6 管理员界面:鲜花管理 4.6.1 鲜花信息的查看、删除 4.6.2 鲜花的添加 4.6.3 ST_Flower类

4.7 管理员界面:定单管理和信息查找 4.7.1 定单信息的查看、处理 4.7.2 ST_User类 4.7.3 信息查找

4.8 一般用户界面 4.8.1 购物车 4.8.2 收藏栏 4.8.3 个人定单 4.8.4 查找

4.9 关键技术剖析:ADO.NET对象 4.9 小结

第5章 学生管理系统 5.1 系统概述

5.1.1 系统功能 5.1.2 系统预览 5.1.3 系统操作流程

Page 6: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

182

5.2 系统架构和模块分析 5.2.1 两层架构的模式 5.2.2 系统模块分析

5.3 数据库分析的设计与实现 5.3.1 数据库需求分析 5.3.2 数据库概念结构设计 5.3.3 数据库表的设计和创建 5.3.4 存储过程的创建 5.3.5 数据库的表间关系

5.4 公共模块编写 5.4.1 数据库公共模块 5.4.2 界面头尾控件设计 5.4.3 页面导航设计 5.4.4 界面主体框架

5.5 管理员用户:学生管理界面 5.5.1 学生信息的查看、修改和删除 5.5.2 学生信息的添加

5.6 管理员用户:班级管理界面 5.6.1 班级信息的管理

5.7 管理员用户:教师管理界面 5.7.1 教师信息的查看、修改和删除 5.7.2 管理员的添加与查看 5.7.3 密码修改页面

5.8 管理员用户:课程管理界面 5.8.1 课程信息的查看、修改和删除 5.8.2 课程信息的添加 5.8.3 授课的分配 5.8.4 必修课的添加 5.8.5 授课信息的显示 5.8.6 授课修改

5.9 管理员用户:学生选课管理界面 5.10 管理员用户:成绩管理界面

5.10.1 成绩的统计和查询 5.10.2 新成绩的录入

5.11 学生用户 5.11.1 查看个人信息 5.11.2 查看课程信息 5.11.3 选课 5.11.4 成绩查询 5.11.5 密码修改

5.12 关键技术剖析:ADO.NET操作SQL Server数据库 5.13 小结

Page 7: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

183

第6章 学生选课系统 6.1 系统概述

6.1.1 系统功能 6.1.2 系统预览 6.1.3 系统操作流程

6.2 系统设计架构 6.2.1 系统架构 6.2.2 系统功能模块

6.3 数据库的设计和实现 6.3.1 数据库需求分析 6.3.2 数据库概念结构设计 6.3.3 数据表设计 6.3.4 数据库的表间关系

6.4 公用模块编写 6.4.1 数据库连接编写 6.4.2 数据库操作组件 6.4.3 界面头尾设计 6.4.4 界面主体框架 6.4.5 登录系统和退出系统

6.5 管理员用户:院系管理 6.5.1 院系信息的查看和删除 6.5.2 院系信息的添加和修改

6.6 管理员用户:其他模块管理 6.6.1 专业模块的管理 6.6.2 教师模块的管理 6.6.3 课程模块的管理 6.6.4 学生模块的管理

6.7 教师用户 6.7.1 查看担任课程课表 6.7.2 查看担任课程的选课学生信息

6.8 学生用户 6.8.1 个人信息维护 6.8.2 选课 6.8.3 选课信息查看

6.9 关键技术剖析:ASP.NET基于Forms的身份验证 6.10小结

第7章 blog 7.1 系统概述

7.1.1 系统功能

Page 8: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

184

7.1.2 系统预览 7.1.3 系统操作流程

7.2 系统设计架构 7.2.1 系统架构 7.2.2 系统功能模块

7.3 数据库的设计和实现 7.3.1 数据库需求分析 7.3.2 数据库概念结构设计 7.3.3 数据表设计 7.3.4 数据表之间的关系如图7-14所示。

7.4 公用模块编写 7.4.1 数据库连接编写 7.4.2 界面头尾设计 7.4.3 界面主体框架 7.4.4 登录系统

7.5 管理员界面:类型管理 7.5.1 类型管理界面 7.5.2 类型的修改和删除 7.5.3 类型的添加

7.6 管理员界面:文章管理 7.6.1 文章信息管理界面 7.6.2 文章的修改和删除 7.6.3 添加文章 7.6.4 评论的删除

7.7 管理员界面:链接管理 7.7.1 链接管理界面 7.7.2 链接的删除 7.7.3 链接的添加

7.8 管理员界面:留言管理 7.8.1 留言管理界面 7.8.2 留言回复 7.8.3 留言删除

7.9 普通用户界面 7.9.1 博客列表 7.9.2 推荐文章 7.9.3 网友回应 7.9.4 友情链接 7.9.5 个人资料

7.10 关键技术剖析:ASP.NET中XML的应用 7.10.1 XML基础知识 7.10.2 C#操作XML

7.11 小结

Page 9: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

185

第8章 在线考试系统 8.1 系统概述

8.1.1 系统功能 8.1.2 系统预览 8.1.3 系统操作流程

8.2 系统设计架构 8.2.1 系统架构 8.2.2 系统功能模块

8.3 数据库的设计和实现 8.3.1 数据库需求分析 8.3.2 数据库概念结构设计 8.3.3 数据表设计 8.3.4 数据表之间的关系

8.4 公用模块编写 8.4.1 数据库连接编写 8.4.2 数据操作组件 8.4.3 公用界面设计 8.4.4 登录系统

8.5 管理员界面:科目管理 8.5.1 考试科目的查看和删除 8.5.2 考试科目的添加和修改

8.6 管理员界面:试题管理 8.6.1 试题的查看和删除 8.6.2 试题的添加和修改

8.7 考生界面 8.7.1 答题 8.7.2 密码修改及考生注册

8.8 关键技术剖析:ASP.NET状态管理 8.8.1 简介 8.8.2 客户端的状态管理 8.8.3 服务器端的状态管理

8.9 小结

第9章 网上书店系统 9.1 系统概述

9.1.1 系统功能 9.1.2 系统预览的容易 9.1.3 系统操作流程

9.2 系统设计架构 9.2.1 系统架构

Page 10: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

186

9.2.2 系统功能模块 9.3 数据库的设计和实现

9.3.1 数据库需求分析 9.3.2 数据库概念结构设计 9.3.3 数据表设计 9.3.4 数据库的表间关系

9.4 公用模块编写 9.4.1 数据库连接编写 9.4.2 数据库操作组件 9.4.3 界面头尾设计 9.4.4 登录系统 9.4.5 解决方案结构

9.5 管理员用户:订单管理 9.5.1 订单的展示 9.5.1 订单的发货和作废

9.6 管理员用户:图书管理 9.6.1 图书类别的显示 9.6.2 图书类别和图书信息的管理

9.7 用户界面 9.7.1 图书的显示 9.7.2 添到购物车 9.7.3 购物车信息 9.7.4 订单的生成 9.7.5 个人信息的修改 9.7.6 订单的查看

9.8 关键技术剖析:ASP. NET数据缓存 9.8.1 简介 9.8.2 页面级输出缓存 9.8.3 用户控件级输出缓存 9.8.4 缓存API: 使用Cache对象

9.9 小结

Page 11: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

187

鲜花预定系统

第 章

系统用户管理

鲜花管理

定单管理

系统信息查找

消费者用户管理

目前市场上鲜花销售的竞争非常激烈,大家竞争的目标是提供优质的服务,本章介绍

的系统就是为了方便消费者在网络上预定鲜花的功能,通过方便友好的服务界面,让消费

者能快速找到自己需要的信息,增加花店的销售业绩。

Page 12: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

188

4.1 系统概述

目前送花已经是一种时尚,过生日或是看朋友的时候大家都喜欢带一束鲜花,当某些

人无法按时会见朋友时,会委托花店为指定的某个地址的某位先生或小姐送一束鲜花,根

据鲜花的种类不同表达不同的意义。 由于鲜花市场需求很大,现在网络上鲜花在线预定系统也非常多,下面讲解使用

asp.net2.0的技术实现一套鲜花预定管理系统,该系统提供用户在该系统上预定鲜花和查询

鲜花信息等。鲜花预定系统给用户提供了方便的网络平台,用户可以在与花店没有任何实

际交往中通过网络预定到自己喜欢的各种鲜花,并且还可以发表一些帖子,对各种花进行

评论。预定时用户通过订单将自己需要的鲜花种类、数量、送货地址和付费方式表述清楚,

花店根据收到的订单信息向用户提供鲜花配送服务。

4.1.1 系统功能

本系统给在前台为普通用户提供预定和查询等系统使用功能,在后台为花店管理员提

供对系统平台的管理功能。在前台为用户提供的操作功能包括一下内容:自己的个人信息

管理(包括用户帐号、密码、真实姓名、电话和通讯地址等)、用户定单管理、购物车和

系统查找功能。此系统为管理员提供的功能如下:前台用户管理、鲜花信息管理、前台用

户的定单管理和信息查找。

4.1.2 系统预览

图4-1 是系统管理员正确登录后的主界面。从图中可以看出主界面中的操作模块包括:

用户管理、鲜花管理、定单管理、查找鲜花和退出选项。管理员可以进入这些模块对具体

功能进行管理。

图4-1 系统管理员登陆后的主界面

图4-2是前台用户登录后的主界面。从图中可以看出前台用户的功能模块包括:购

物车、收藏、我的定单、查找和退出等选项。用户登录后可以使用查看这些选项。

Page 13: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

189

图4-2 一般用户登陆后的主界面

4.1.3 系统操作流程

本系统首先展现给用户的是ST_Default.aspx页面,此页面主要由两个框架构成。核心

部分是ST_Main.aspx页面,通过该页面调用验证系统对用户类型进行判断。如果判断是管

理员,展现给用户的就是用户信息管理、鲜花管理、定单和查找页面;如果是一般用户,

展现给用户的就是购物车、收藏、个人定单和查找页面。同时在ST_Main.aspx页面中还提

供了用户注册的功能。

Page 14: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

190

图4-3 鲜花预定系统操作流程图

4.2 系统设计架构

本系统采用两层架构。页面通过Web展示层直接对数据库访问,不使用中间业务逻辑

以及与数据库连接的接口。数据库是系统的 底层,数据访问层建立在数据库之上,Web展示层通过数据访问层访问数据库。数据访问层一般封装数据库中的选择、添加、更新、

删除操作,同时还为Web展示层提供访问数据库的接口和函数。

4.2.1 系统架构

本系统采用ASP.NET应用程序 基本的两层架构模式,其结构如图4-4。

图4-4 两层架构模式图

各层功能介绍如下表 4-1。 表4-1 ASP。NET三层架构模式的各层功能

功能描述 Web展示层 系统 高层,向用户展示各种界面,用户通过界面对系统进行操作,并实现用户各种操

作信息的添加、修改和删除。与数据库直接关联,其数据访问模块封装了对数据库的所

有操作,包括数据的添加,修改,删除和查询。 数据库 数据库用来存储本系统所有数据。

4.2.2 系统功能模块

根据上面分析,可以画系统的功能模块图,本例从管理界面、学生界面、教师界面分

别对各功能模块加以描述。管理界面的系统功能模块如图4-5所示。

Page 15: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

191

图4-5 管理界面的系统功能模块图

一般用户(需要预定鲜花的用户)界面的功能模块如图4-6所示。

图4-6 一般用户界面的功能模块图

Page 16: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

192

4.3 数据库的设计和实现

4.3.1 数据库需求分析

用户的具体需求体现在各种信息的提供、保存、更新和查询,这就要求数据库能充分

满足各种数据的输入和输出。通过对上述系统功能的分析,针对鲜花预定系统的需求,总

结出如下的需求信息。 用户分管理员用户和一般用户(需要预定鲜花的用户)。 一种鲜花可以有多个评论。 一个用户可以发表多个评论。 一个用户可以有多个定单。 一个定单可以有多种鲜花,一种鲜花可以被多个定单定。

经过对上述系统功能的分析和需求总结,设计如下面所示的数据项。 用户信息包括:用户名、密码、邮箱。 鲜花信息包括:鲜花类型ID、鲜花名字、鲜花价格、鲜花数量、鲜花图片和鲜花

描述等。 评论信息包括:鲜花编号、用户姓名、用户E_mail、评论标题及评论内容等。 定单信息包括:用户ID、定单的时间、定单的状态。

4.3.2 数据库概念结构设计

由上面的数据项,可以设计出能够满足用户需求的各种实体,以及它们之间的关系,

为后面的逻辑结构设计打下基础。这些实体包含各种具体信息,通过相互之间的作用形成

数据的流动,这样就可以对本系统设计以下实体:用户信息实体、鲜花实体、评论信息实

体和定单信息实体。 实体之间关系的E-R图如图4-7 所示。

图4-7 实体间的关系E-R图

用户信息实体 E-R 图如图 4-8 所示。

Page 17: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

193

图4-8 用户信息实体E-R图

鲜花信息实体 E-R 图如图 4-9 所示。

图4-9 鲜花信息实体E-R图

评论信息实体 E-R 图如图 4-10 所示。

图4-10 评论信息实体E-R图

定单信息实体 E-R 图如图 4-11 所示。

图4-11 定单信息实体E-R图

4.3.3 数据表设计

根据上面的需求分析,鲜花预定系统数据库中各个表的设计结果如下面表格所示。每

个表格表示在数据库中的一个表。

Page 18: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

194

表4-2为用户表,记录用户的的登陆信息,包括管理员、一般用户的登陆帐号。本系统

管理员默认用户名和密码为admin和admin;教师和学生的的名称可以由管理员添加,默认

密码分别为wl和123456。 表4-2 ST_UserInfo 用户表

序号 列名 数据类型 长度 字段说明 1 ST_Id Int 4 定义用户唯一ID 2 ST_Name Varchar 30 记录用户名字 3 ST_Password Varchar 32 记录用户密码 4 ST_Mail Varchar 30 记录用户邮箱

表 4-3 为鲜花信息列表,记录鲜花的信息。 表4-3 ST_Flower 鲜花信息列表

序号 列名 数据类型 长度 字段说明 1 ST_Id Int 4 定义鲜花唯一ID号 2 ST_Type Int 4 记录鲜花的类型 3 ST_Name Varchar 50 记录鲜花的名字 4 ST_Price Decimal 9 记录鲜花的价格 5 ST_Discount Decimal 9 记录鲜花的数量 6 ST_Cover Image 16 记录鲜花的图片 7 ST_Description Text 16 记录鲜花的描述 8 ST_Hits Int 4 记录鲜花的单击率 9 ST_Sales Int 4 记录鲜花的折扣 10 ST_Status Bit 1 记录鲜花的状态

表 4-4 评论信息表,记录用户对鲜花的各种评论。 表4-4 ST_Comment 评论信息列表

序号 列名 数据类型 长度 字段说明

1 ST_Id Int 4 定义评论唯一ID号

2 ST_FlowerId Int 4 记录鲜花的编号

3 ST_UserName Varchar 50 记录评论发表者姓名

4 ST_Email Varchar 50 记录评论发表者邮箱

5 ST_Caption Varchar 100 记录评论标题

6 ST_Content Text 16 记录评论内容

7 ST_PublishDate Datetime 8 记录发表时间

表 4-5 为定单信息表,记录定单信息。 表4-5 ST_Orders 定单信息表

序号 列名 数据类型 长度 字段说明

1 ST_Id Int 4 定义定单唯一ID号

2 ST_UserId Int 4 记录用户编号

3 ST_OrderDate Datetime 8 记录定单时间

4 ST_Status Bit 1 记录定单状态

Page 19: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

195

表 4-6 为定单、鲜花关系表,记录定单、鲜花之间的关系。 表4-6 ST_OrderDetails 定单、鲜花关系表

序号 列名 数据类型 长度 字段说明

1 ST_Id Int 4 定义专业唯一ID号

2 ST_OrderId Int 4 记录定单编号

3 ST_FlowerId Int 4 记录鲜花编号

4 ST_Quantity Int 4 记录表单数量

表 4-7 为用户、鲜花关系表,记录用户、鲜花之间的关系。 表4-7 ST_TempStore 用户、鲜花关系表

序号 列名 数据类型 长度 字段说明

1 ST_FlowerId Iint 4 记录鲜花编号

2 ST_UserId Int 4 记录用户编号

表 4-8 鲜花类型表,记录鲜花类型的相关信息。 表4-8 ST_FlowerType 鲜花类型表

序号 列名 数据类型 长度 字段说明

1 ST_Id Int 4 记录的唯一ID

2 ST_Name Varchar 50 记录鲜花类型名

3 ST_Memo Varchar 200 记录鲜花备忘

4.3.4 数据表之间的关系

数据表之间的关系如图4-12所示

Page 20: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

196

图4-12 数据表之间的关系图

4.4 公用模块编写

4.4.1 数据库连接编写

为了方便应用程序移植和版本控制,可以在应用程序的配置文件(也就是Web.Config)中设置数据库连接信息。添加如下语句。

<configuration> <appSettings> <add key="strConnection" value="server=ms-e6f404039fa9; uid=sa;

pwd=sa;database=ST_FlowerPrearrange;Connection Reset=FALSE"/> <add key="Manager" value="admin"/> </appSettings> …… …… </configuration> 注意应当使uid和pwd与机器上SQL Server的登陆名和密码相对应。

4.4.2 界面主体框架

为了提高主要代码的重复使用性,提高主要代码性能,把用户界面分成两个部分。分

别为头部页面ST_Top.aspx和主页面ST_Main.aspx。而主页面ST_Main.aspx包含了

ST_Left.aspx页面,此页面主要调用系统的验证用户和注册功能。下面对这三个页面逐一解

释。

1、头部页面

Page 21: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

197

头部页面如图4-13所示。

图4-13 头部控件

(1)ST_Top.aspx界面的HTML主要代码如下。 <TABLE id="Table1" height="70" cellSpacing="0" cellPadding="0"

width="100%" border="0" bgColor="#f3e2a6"> <TR> <TD><FONT face="宋体"> <TABLE id="Table2" height="100%" cellSpacing="0" cellPadding="0"

width="100%" border="0"> <TR> <TD style="WIDTH: 276px"></TD> <TD align="right" width="460"> <TABLE id="Table3" style="WIDTH: 462px; HEIGHT: 50px"

height="50" cellSpacing="0" cellPadding="0" width="662" border="0"><TR> <TD align="center" height="50"></TD> <TD align="center" height="50"> <asp:HyperLink id="hl_Main" runat="server"

NavigateUrl="ST_Main.aspx" Target="ST_main"><img src="img/Home.gif" border="0"><br>首页&nbsp;</asp:HyperLink></TD>

<TD align="center" height="50"> <asp:HyperLink id="hl_Cart" runat="server"

NavigateUrl="ST_AddToCart.aspx" Target="ST_main"><img src="img/basket.gif" border="0"><br>购物车&nbsp;</asp:HyperLink></TD>

<TD align="center" height="50"> <asp:HyperLink id="hl_Temp" runat="server"

NavigateUrl="ST_AddToTempStore.aspx" Target="ST_main"><img src="img/predoc.gif" border="0"><br>收藏</asp:HyperLink><a href="ST_AddToTempStore.aspx" target="ST_main"></a></TD>

<TD align="center" height="50"> <asp:HyperLink id="hl_Accounts" runat="server"

Target="ST_main"></asp:HyperLink><a href="ManageUser.aspx" target="ST_main"></a></TD>

<TD align="center" height="50"> <asp:HyperLink id="hl_Flower" runat="server"

Target="ST_main"></asp:HyperLink> </TD> <TD align="center" height="50"> <asp:HyperLink id="hl_Orders" runat="server"

Target="ST_main"></asp:HyperLink></TD> <TD align="center" height="50"> <asp:HyperLink id="hl_UserOrder" runat="server"

Page 22: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

198

NavigateUrl="ST_ShowUserOrders.aspx" Target="ST_main"><img src="img/UserOrder.gif" border="0"><br>我的定单</asp:HyperLink></TD>

<TD align="center" height="50"> <asp:HyperLink id="hl_Search" runat="server"

NavigateUrl="ST_Search.aspx" Target="ST_main" Width="34px"><img src="img/searchico.gif" border="0"><br>查找</asp:HyperLink>

</TD> <TD align="center" height="50"> </TD> <TD align="center" height="50"> <asp:HyperLink id="hl_Exit" runat="server"

NavigateUrl="ST_Logout.aspx" Target="ST_main"><img src="Img/aqquit.gif" border="0"><br>退出</asp:HyperLink>

</TD></TR> </TABLE> </TD></TR> </TABLE></FONT> </TD> </TR> </TABLE> (2)后台事件处理页面ST_Top.aspx.cs,主要代码及其解释如下。 if(!object.Equals(Session["UserName"],null)) { if

(ST_GROUP.FlowerPrearrange.ST_User.ST_IsSupervisor(Session["UserName"].ToString()))

{ //链接到鲜花管理界面 hl_Flower.NavigateUrl = "ST_FlowerManage.aspx"; hl_Flower.Text = "<img src=img/forum.gif border=0><br>鲜花管理

&nbsp;"; hl_Flower.Visible =true; //链接到用户管理界面 hl_Accounts.NavigateUrl = "ST_ManageUser.aspx"; hl_Accounts.Text = "<img src=img/mans.gif border=0><br>用户管理"; hl_Accounts.Visible =true; hl_Orders.NavigateUrl = "ST_ManageOrder.aspx"; hl_Orders.Text = "<img src=img/UserOrder.gif border=0><br>定单"; hl_Orders.Visible =true; this.hl_Cart.Visible = false; this.hl_UserOrder.Visible = false; this.hl_Temp.Visible = false; } else { hl_Flower.Visible =false; hl_Accounts.Visible =false;

Page 23: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

199

hl_Orders.Visible =false; } }

2、 主页面

主页面ST_Main.aspx如图4-14所示。

图4-14 主页面

(1)此页面将在登陆系统这一节介绍。首先来看一下ST_Main.aspx界面的HTML主要

代码,其代码如下。 <TABLE id="Table1" height="100%" cellSpacing="0" cellPadding="0"

width="100%" border="0"> <TR> <TD vAlign="top" height="700"> <TABLE id="Table2" height="100%" cellSpacing="0" cellPadding="0"

width="100%" border="0"> <TR> <TD width="265"> <iframe id="iFrame1" style="BORDER-TOP-STYLE: none;

BORDER-RIGHT-STYLE: none; BORDER-BOTTOM-STYLE: none; BORDER-Left-STYLE: none" tabIndex="0" marginWidth="0" marginHeight="0" src="ST_Left.aspx" frameBorder="0" width="240" height="100%">

</iframe> </TD> <TD vAlign="top" height="255" style="width: 489px"> <TABLE id="Table3" height="100%" cellSpacing="0"

cellPadding="0" width="95%" border="0"> <TR> <TD vAlign="top"> <TABLE id="Table4" cellSpacing="0" cellPadding="0"

width="100%" border="0"> <TD>

Page 24: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

200

<TABLE id="Table6" cellSpacing="0" cellPadding="0" width="100%" border="0">

<TR> <TD noWrap width="1%"><IMG alt=""

src="img/point.gif"><STRONG><FONT color="#cd0104"> 新鲜花

</FONT></STRONG></TD> <TD background="img/titlemd2.gif"></TD></TR> </TABLE> <TR><TD> <!—DataGrid控件--> <asp:datagrid id="dg_NewFlower" runat="server"

BorderStyle="None" BorderWidth="0px" ShowHeader="False" AutoGenerateColumns="False" Width="100%">

<!—列--> <Columns> <!—链接列--> <asp:HyperLinkColumn Text="&lt;img

src=img/dir_pointer_g.gif border=0&gt;"> <HeaderStyle Width="1%"> </HeaderStyle> <ItemStyle HorizontalAlign="Center"> </ItemStyle> </asp:HyperLinkColumn> <asp:HyperLinkColumn

DataNavigateUrlField="ST_Id" DataNavigateUrlFormatString="ST_ShowFlowerByID.aspx?ST_flowerid={0}" DataTextField="ST_Name"></asp:HyperLinkColumn>

</Columns> </asp:datagrid></TD></TR> <TD> <TABLE id="Table7" cellSpacing="0" cellPadding="0"

width="100%" border="0"> <TR> <TD noWrap width="1%"><IMG alt=""

src="img/point.gif"><font color="#cd0104"><b>&nbsp;</b></font></TD> <TD background="img/titlemd2.gif">评论

</TD></TR> </TABLE> <TR> <TD> <!—DataGrid控件-->

<asp:datagrid id="dg_CommentFlower" runat="server" BorderStyle="None" BorderWidth="0px" ShowHeader="False" AutoGenerateColumns="False" Width="100%">

<Columns> <!—链接列--> <asp:HyperLinkColumn Text="&lt;img

src=img/dir_pointer_g.gif border=0&gt;"> <HeaderStyle Width="1%">

Page 25: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

201

</HeaderStyle> <ItemStyle HorizontalAlign="Center"> </ItemStyle> </asp:HyperLinkColumn> <asp:HyperLinkColumn

DataNavigateUrlField="ST_Flowerid" DataNavigateUrlFormatString="ST_ShowFlowerByID.aspx?ST_flowerid={0}" DataTextField="ST_CommentCaption"></asp:HyperLinkColumn>

</Columns> </asp:datagrid></TD> </TR> </TABLE> </TD> <TABLE id="Table5" cellSpacing="0" cellPadding="0"

width="100%" border="0"> <TR><TD> <TABLE id="Table8" cellSpacing="0"

cellPadding="0" width="100%" border="0"> <TR> <TD noWrap width="1%"><IMG alt=""

src="img/point.gif"><font color="#cd0104"><b>&nbsp;推荐鲜花</b></font></TD> <TD background="img/titlemd2.gif"></TD>

</TR> </TABLE> <TR> <TD vAlign="top"><asp:datalist

id="dl_HitFlower" runat="server" Width="100%"> <ItemTemplate> <FONT face="宋体"> <TABLE id="Table11" cellSpacing="0"

cellPadding="0" width="100%" border="0"> <TR><TD> <TABLE id="Table12" cellSpacing="0"

cellPadding="0" width="100%" border="0"> <TR> <TD vAlign=middle align=center ><a

href='ST_ShowFlowerByID.aspx?ST_Flowerid=<%# DataBinder.Eval(Container.DataItem,"ST_id")%>'><%# DataBinder.Eval(Container.DataItem,"ST_Image")%></a></TD>

<td width="10"></td> <TD> <TABLE id="Table13" cellSpacing="0"

cellPadding="0" width="100%" border="0"> <TR> <TD><a

href='ST_ShowFlowerByID.aspx?ST_flowerid=<%# DataBinder.Eval(Container.DataItem,"ST_id")%>'>

<b>

Page 26: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

202

<%# DataBinder.Eval(Container.DataItem,"ST_name")%>

</b></a></TD></TR> <TD><%#

DataBinder.Eval(Container.DataItem,"ST_descr")%></TD></TR> </TABLE></TD></TR> </TABLE> </td></tr> <TR> <TD background="img/bg11(1).gif"

height="1"></TD></TR> </TABLE></FONT> </ItemTemplate> <AlternatingItemTemplate> <FONT face="宋体"></FONT> </AlternatingItemTemplate> </asp:datalist></TD></TR> <TR> <TD vAlign="top" style="height: 18px"></TD> </TR></TABLE> </TD></TR></TABLE> </TD></TR></TABLE> <TR> <TD height="20"> <TABLE id="Table9" height="100%" cellSpacing="0"

cellPadding="0" width="100%" bgColor="#6666ff" border="0"> <TR> <TD align="center" height="15"></TD></TR> <TR> <TD align="center"><b><FONT color="#ffffff">版权所有

</FONT></b></TD> </TR> <TR> <TD align="center" height="30"><b><FONT

color="#ffffff"></FONT></b></TD> </TR> </TABLE> </TD></TR> <TR> <TD> </TD></TR> </TABLE > (2)后台页面ST_Main.aspx.cs。当页面加载的时候会运行Page_Load里边的代码,这

里调用了一个自己定义的方法ST_BindData(),这个方法主要负责从数据库中读取数据,并

绑定到控件dg_CommentFlower,以显示数据。主要代码及其解释如下。 protected void Page_Load(object sender, System.EventArgs e) {

Page 27: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

203

// 在此处放置用户代码以初始化页面 if(!Page.IsPostBack) { ST_BindData(); } } private void ST_BindData() { DataView ST_myDv; DataView ST_myDv1; System.Data.SqlClient.SqlDataReader ST_myDr; //调用ST_myFlower类的ST_GetNewFlower()方法,获取 新鲜花的信息 ST_myDv=ST_myFlower.ST_GetNewFlower(); //获取数据源DataView的对象 dg_NewFlower.DataSource=ST_myDv; //绑定数据到 dg_NewFlower.DataBind(); //调用ST_myFlower类的ST_GetFlowerByHits()方法,获得推荐的鲜花的信息 ST_myDr= ST_myFlower.ST_GetFlowerByHits(); dl_HitFlower.DataSource =ST_myDr; dl_HitFlower.DataBind (); //调用ST_myComment类的ST_GetCommentTop10()方法,获得排名前10的评论 ST_myDv1=ST_myComment.ST_GetCommentTop10(); dg_CommentFlower.DataSource =ST_myDv1; dg_CommentFlower.DataBind (); } (3)上面调用的方法ST_GetNewFlower() 、ST_GetFlowerByHits()、

ST_GetCommentTop10()来自于ST_Flower类,其主要代码如下。 ST_GetNewFlower()方法用来获取 新10种鲜花的信息。 public DataView ST_GetNewFlower() { String ST_strsql; DataSet ST_myDs; //创建获得 新10种鲜花信息的sql语句 ST_strsql="select top 10 ST_id,ST_name from ST_Flower order by ST_id

desc"; ST_myDs=ST_ExecuteSql4Ds(ST_strsql); //返回DataView对象 return ST_myDs.Tables[0].DefaultView ; } ST_GetFlowerByHits()方法返回一个SqlDataReader,可以通过SqlDataReader来遍历整个

数据集。 public SqlDataReader ST_GetFlowerByHits() { string ST_strsql; SqlDataReader ST_result; try

Page 28: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

204

{ //创建SqlConnection对象 SqlConnection ST_myCn=new SqlConnection(ST_strConn); //创建查询推荐前10的鲜花名字的sql语句 ST_strsql="select top 10

ST_id,ST_name,ST_descr='&nbsp;&nbsp;'+SUBSTRING(ST_description,0,100)+'......',ST_image=case when(not ST_Cover is null) then ' <img src=ST_ReadFlowerCover.aspx?id='+cast(ST_id as varchar(10))+' Border=1 width=70 height=100>' else ' <img src=img/pic.jpg border=1 width=70 height=100>' end from ST_Flower order by ST_hits DESC";

//创建SqlCommand对象 SqlCommand ST_myCm=new SqlCommand(ST_strsql,ST_myCn); //打开连接 ST_myCn.Open ();

ST_result=ST_myCm.ExecuteReader(CommandBehavior.CloseConnection); return ST_result; } catch(System.Data.SqlClient.SqlException er) { throw new Exception(er.Message); } } ST_GetCommentTop10()用来查询评论排名前10的评论标题。 public DataView ST_GetCommentTop10() { string ST_strsql; DataSet ST_myDs; //创建查询评论排名前10的评论标题的sql语句 ST_strsql="select top 10 ST_Flowerid,

ST_CommentCaption=ST_UserName+':'+SUBSTRING(ST_Caption,0,50) from ST_Comment ";

ST_myDs=ST_ExecuteSql4Ds(ST_strsql); return ST_myDs.Tables[0].DefaultView ; }

4.4.3 登陆系统和退出系统

1、登陆系统

整个登陆系统的关键在于ST_Left.aspx页面,此页面用了两个panel控件,用了一个三行

两列的表。在表里用了两个文本框,一个用于输入用户名,另一个用于输入密码。还用了

一个按钮和一个超链接。超链接用来链接注册页面,请读者参考光盘里的ST_Register.aspx页面。ST_Left.aspx页面还用两个DataGrid控件,分别用于显示鲜花类型和鲜花销售排名(前

10),希望读者能够自己参考ST_Left.aspx文件。本页面获得的信息通过ST_Left.aspx..cs调用的系统模块进行验证。用户名和密码都正确,就读取用户信息,登陆主页面。如果用户

密码错误则弹出错误警告。 (1)用户登陆页面ST_Left.aspx设计效果如图4-15 所示。

Page 29: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

205

图4-15 用户登陆页面

用户登陆页面HTML主要代码如下。 <TR> <TD style="height: 144px"><asp:panel id="Panel1" style="POSITION:

relative" runat="server"Height="128px" Width="229px"> <TABLE id="Table3" cellSpacing="0" cellPadding="0" width="204"

border="0"> <TR> <TD colSpan="3"> <asp:label id="lblInfo" runat="server" Width="163px"

ForeColor="Blue" Font-Size="X-Small"></asp:label></TD> </TR><TR> <TD style="height: 24px"> <asp:Label id="Label1" runat="server" Width="70px"

Font-Size="X-Small">帐户:</asp:Label></TD> <TD style="height: 24px"> <asp:textbox id="tb_Account" runat="server"

Width="135px"></asp:textbox></TD> <TD style="height: 24px"></TD> </TR> <TR> <TD> <asp:Label id="Label2" runat="server" Width="71px"

Font-Size="X-Small">密码:</asp:Label></TD> <TD> <asp:textbox id="tb_Password" runat="server" Width="133px"

TextMode="Password"></asp:textbox></TD> <TD></TD> </TR> <TR> <TD align="center" colSpan="3"> </TD></TR> <TR> <TD style="height: 18px"> <asp:HyperLink id="HyperLink1" runat="server"

Font-Size="X-Small" NavigateUrl="ST_Register.aspx" Target="ST_main">注册

</asp:HyperLink></TD> <TD style="height: 18px"> <asp:Button id="ib_Login" runat="server" Text="登陆"

onclick="ib_Login_Click"></asp:Button></TD>

Page 30: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

206

<TD style="height: 18px"></TD></TR> </TABLE> </asp:panel></TD></TR> <tr> <td height="10"><asp:panel id="Panel2" style="POSITION: relative"

runat="server"Height="148" Width="229px" Visible="False"> <TABLE id="Table4"cellSpacing="0" cellPadding="0" width="175"

border="0"> <TR> <TD style="WIDTH: 194px" align="center"> <asp:label id="lblInfo2" runat="server" Width="163px"

ForeColor="Blue"></asp:label></TD></TR> <TR> <TD style="WIDTH: 194px"> <asp:Label id="Label3" runat="server" Width="198px"> 近访问时

间:</asp:Label></TD> </TR> <TR> <TD style="WIDTH: 194px" align="Left">&nbsp; <asp:Label id="lblDate" runat="server" Width="147px"

Height="13px" ForeColor="#FF8080"></asp:Label></TD> </TR> <TR> <TD style="WIDTH: 194px; HEIGHT: 19px"> <asp:Label id="Label4" runat="server" Width="117px">访问次

数:</asp:Label> <asp:Label id="lblTimes" runat="server" Width="6px"

ForeColor="#FF8080"></asp:Label></TD> </TR> <TR> <TD style="WIDTH: 194px; HEIGHT: 19px"></TD> </TR> <TR> <TD style="WIDTH: 194px"> <asp:HyperLink id="HyperLink3" runat="server" Width="195px"

NavigateUrl="ST_UpdateUser.aspx" Target="ST_main">>>修改个人信息

</asp:HyperLink></TD> </TR> <TR> <TD style="WIDTH: 194px"> <asp:HyperLink id="HyperLink4" runat="server" Width="195px"

NavigateUrl="ST_ChangePassword.aspx"Target="ST_main">>>修改密码

</asp:HyperLink></TD> </TR> </TABLE> </asp:panel></td> </tr> (2)ST_Left.aspx.cs页面是用户验证模块的核心,包含了用户验证的主要功能,解释

Page 31: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

207

如下。 protected void ib_Login_Click(object sender, System.EventArgs e) { //创建ST_User类的对象 ST_GROUP.FlowerPrearrange.ST_User user = new

ST_GROUP.FlowerPrearrange.ST_User(); //获取用户名 ST_name = this.tb_Account.Text.Trim(); user.ST_Name = ST_name; //获取密码 user.ST_Password = this.tb_Password.Text.Trim(); //判断用户是否存在 if(user.ST_Login()) { //显示欢迎信息 this.lblInfo2.Text = "欢迎您,"+user.ST_Name; try { //获得用户信息 user.ST_GetUserInfo(); ST_id = user.ST_ID; Session["UserName"] = ST_name; Session["UserID"] = ST_id; if(Object.Equals(Request.Cookies["ShopFlowerLogin"],null)) { ST_CreateCookie(); //显示面板信息 ST_ShowInfo(); } else { ST_ShowInfo(); ST_UpdateCookie(); } Page.RegisterStartupScript("refresh","<script

language=javascript>parent.top.history.go(0);</script>"); } catch(Exception ex) { this.lblInfo.Text = "获取用户信息失败!" + ex.Message; } } else { this.lblInfo.Text = "登陆失败!"; } } private void ST_ShowInfo() {

Page 32: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

208

this.Panel1.Visible = false; this.Panel2.Visible = true; string time,times; //获取客户端时间 ST_GetVisitInfo(out time,out times); //显示 新访问日期 this.lblDate.Text = time.ToString(); //显示 新访问时间 this.lblTimes.Text = times.ToString(); } private void ST_GetVisitInfo(out string lastTime,out string times) { HttpCookie cookie = Request.Cookies["ShopFlowerLogin"]; int type = int.Parse(cookie.Values["Value"].ToString()); string FlowerShopCookie =

ST_Functions.ST_DecryptCookie(cookie.Values["ST_GROUP.FlowerPrearrange"].ToString(),type);

string [] ST_myCookie = new String[10]; ST_myCookie = FlowerShopCookie.Split('#'); //从客户端获取日期 lastTime = ST_myCookie[2]; //从客户端获取时间 times = ST_myCookie[3]; } (3)前面调用了ST_User类的方法ST_Login()和ST_GetUserInfo()方法,其中ST_Login()

方法用来用户输入的用户名和密码是否正确,即从数据库中查询有没有与用户输入的数据

相同的数据,有的话返回True,说明用户已存在。 public bool ST_Login() { //根据用户名、密码创建查询用户ID的sql语句 ST_strSQL = "Select ST_Id from ST_UserInfo Where ST_Name='" + this.ST_Name + "'" + " And ST_Password='" + ST_Functions.ST_Encrypt(this.ST_Password,1)

+"'"; try { ST_ExecuteSql4Value(ST_strSQL); return true; } catch { return false; } } ST_GetUserInfo()用来根据用户名创建查询用户信息。 public bool ST_GetUserInfo()

Page 33: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

209

{ //根据用户名创建查询用户信息的sql语句 ST_strSQL = "Select * from ST_UserInfo Where ST_Name='" + this.ST_Name + "'"; SqlConnection ST_myCn = new SqlConnection(ST_strConn); //打开连接 ST_myCn.Open(); SqlCommand ST_myCmd = new SqlCommand(ST_strSQL,ST_myCn); try { ST_myCmd.ExecuteNonQuery(); SqlDataReader reader = ST_myCmd.ExecuteReader(); if(reader.Read()) { //获取用户ID this.ST_ID = reader.GetInt32(0); //获取用户邮箱 this.ST_Mail = reader.GetString(3); return true; } else { return false; } } catch(System.Data.SqlClient.SqlException e) { throw new Exception(e.Message); } finally { ST_myCmd.Dispose(); ST_myCn.Close(); } } 上面调用了ST_Functions类的ST_Encrypt()方法,用来将用户的密码进行MD5加密。这

部分留给读者自己研究,代码在ST_Functions文件里。

2、注销登陆

注销用户登陆是由ST_Logout.aspx和ST_Logout.aspx.cs来实现的,由于界面没有任何元

素,所以这里只列出ST_Logout.aspx.cs的主要代码以及解释。 protected void Page_Load(object sender, System.EventArgs e) { //设置用户名为空 Session["UserName"] = null; //设置用户ID为空 Session["UserID"] = null; //定向到ST_Main.aspx页面

Page 34: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

210

Response.Redirect("ST_Main.aspx"); }

Page 35: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

211

学生管理系统

第 章

学生管理

班级管理

教师管理

课程管理

学生选课管理

成绩管理

对于学生信息管理是学校的各项工作中是比较复杂的工作内容之一,如果使用计算机

技术代替人工操作将大大提高学校的办公效率。本章将介绍一个学生管理系统的设计开

发,带领大家分析一些复杂的需求内容,然后进行系统设计将需求内容使用计算机技术实

现,让本系统协助学校管理者完成很多简单重复性的工作任务,提高学校办公效率。

Page 36: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

212

5.1 系统概述

学生管理是学校管理中必不可少的一部分,而基于B/S架构的学生管理系统是方便学校

管理实行电子办公的必要组成部分,电子办公提高老师工作效率。本系统实现学生信息的

统计分析和查询功能,对学校各项计划的实施提供了一定的参考和支持。本系统不仅减轻

了教师的工作压力,还为学生注册和选课等方面提供便利,在数据库安全性和系统维护方

面,也同样具有很大优势。 本章将讨论学生管理系统的几个必要组成部分,在本系统中,主要是对学生信息、班

级信息和课程信息等的管理。为老师提供一个方便、准确的服务,是一个标准的学生管理

系统模型。

5.1.1 系统功能

系统提供了两种权限。教师和系统管理员统一使用 高权限,享有系统所提供的所有

功能,如用户的添加、用户信息修改、用户密码修改、课程管理、成绩管理和班级管理等;

学生享有的权限包括个人信息的查询,选课,密码修改,个人成绩查询等。

5.1.2 系统预览

管理员登陆后,所看的界面如图5-1。左侧导航是管理员所能使用的功能,包括学生管

理、班级管理、教师管理、课程管理、学生选课管理和成绩管理。

图5-1 管理员登陆界面

学生用户登陆后,所看到的界面如图5-2。左侧导航显示出学生可以进行的操作,包括

个人信息管理、成绩查询、课程信息查询、选课浏览和密码修改等。

Page 37: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

213

图5-2 学生登陆界面

5.1.3 系统操作流程

用户进入系统首先打开起始页default.aspx,输入管理员用户名和密码即可登入管理界

面,管理界面的第一个页面是学生管理页面,在此页面中可以添加学生,或者修改现有数

据。通过导航,可以操作其他功能,其他页面中的操作基本上和ST_student.aspx相同。使用

学生身份登陆,将会看到图5-2所示的页面ST_query.aspx,可以查看学生本人信息,学生用户

的操作流程和管理员的流程一致,可以通过导航栏的链接操作系统所有功能。操作流程图

如图5-3所示。

Page 38: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

214

图5-3 系统操作流程图

5.2 系统架构和模块分析

5.2.1 两层架构的模式

本实例采用两层架构。这样Web展示层的每个页面可以直接对数据库进行访问,不用

过多实现的数据库连接和操作接口,开发和调试过程简单,但日后的维护相对繁琐。 数据库是系统的 底层,数据访问模块包含在Web展示层中,Web展示层通过数据访

问模块访问数据库。数据访问模块一般封装数据库的查询、添加、更新、删除等操作,同

Page 39: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

215

时还为Web展示层提供访问数据库的接口。

图5-4 两层架构模式图

各层功能介绍如表 5-1。 表5-1 ASP。NET两层架构模式的各层功能

功能描述 Web展示层 系统 高层,向用户展示各种界面,用户通过界面对系统进行操作,并实现用

户各种操作信息的添加、修改和删除。与数据库直接关联,其数据访问模块封

装了对数据库的所有操作,包括数据的添加,修改,删除和查询。 数据库 数据库用来存储本系统所有数据。

5.2.2 系统模块分析

本系统包括5个模块:用户管理模块、班级管理模块、课程管理模块、选课管理模块和

成绩管理模块。本系统主要讲解学生管理系统,其中班级管理模块和教师管理(用户管理

模块的教师管理部分)属于辅助性模块。而学生管理(用户管理模块的学生管理部分)、

课程管理、选课管理、成绩管理是与管理员(即教师)和学生相关的主要功能模块。 下面两图分别从管理员和学生用户的角度给出模块功能。

Page 40: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

216

图5-5 管理员功能模块图

图5-6 学生用户功能模块图

主要模块说明:

Page 41: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

217

用户管理模块:用户管理模块的功能是对用户属性和权限的管理,是系统的基础

模块,功能由图5-5中可见,在此不再赘述。由管理员添加的用户默认密码和用户

名称相同,修改密码只能由本人或者在数据库中修改完成。 课程管理模块:管理员具有对课程的增加、删除和修改权限。课程分为基础课、

专业课和选修课3种类型,课程管理模块制约选课模块,管理员在课程管理中添加

课程信息后,学生才能进行选课。分配课程主要是制定该科的任课教师和授课班

级(基础课才需要指定班级)。 选课管理模块:主要功能是删除和统计选课信息,既可对选修课程进行管理,也

可统计选修课人数,并根据学生选课时间决定 终选修此课的学生。 成绩管理模块:管理员可以录入和统计学生成绩,学生可以查询自己课程的名称、

学分、成绩。当学生成绩不及格的时候,将无法获得本课程的学分。

5.3 数据库分析的设计与实现

5.3.1 数据库需求分析

学生管理系统的要求就是要准确快捷的管理学生信息,学生隶属班级,班级又由教师

指导,学生需要有课程,成绩,学分,而这些又都要靠教师或者管理人员来完成添加,由

此总结出如下需求信息。 用户分为管理员用户、教师用户和学生用户。其中管理员和教师用户属于相同权

限等级的用户。 一个班级里面有多个学生,班级组成院系。 一个学生有多门课,一门课对应多个学生。 一位教师指导多个班级。 一位教师可以教授多门课程,一门课程可以有多个教师来教授。

经过对上述系统功能的分析和需求总结,设计如下面所示的数据项。 用户信息:用户ID、用户名、密码、权限。 班级信息:班级ID、名称、所属院系、班主任。 学生信息:学生ID、姓名、性别、民族、生日、入学时间、班级、籍贯和备注。 教师信息:教师ID、姓名、所属院系。 课程信息:课程ID、名称、学时、学分、类型及描述。

5.3.2 数据库概念结构设计

由上面的数据项,可以设计出能够满足用户需求的各种实体,以及它们之间的关系,

为后面的逻辑结构设计打下基础。这些实体包含各种具体信息,通过相互之间的作用形成

数据的流动。本系统设计以下实体:学生实体、教师实体、课程实体和班级实体。 实体关系如图5-7所示。

Page 42: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

218

图5-7 实体间关系E-R图

用户信息实体E-R图如图5-8所示。

图5-8 用户信息实体E-R图

学生信息实体E-R图如图5-9所示。

图5-9 学生信息实体E-R图

教师信息实体E-R图如图5-10所示。

图5-10 教师信息实体E-R图

Page 43: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

219

班级信息实体E-R图如图5-11所示。

图5-11 班级信息实体E-R图

课程信息实体E-R图如图5-12所示。

图5-12 课程信息实体E-R图

5.3.3 数据库表的设计和创建

根据以上分析和E-R图,系统数据库中各个表的设计结果如下面表格所示。每个表格表

示在数据库中的一个表。 用户表ST_users(表5-2):记录用户的用户名和密码,用户权限为1或0。1代表管理员

权限,0代表学生权限,在页面中显示为“管理员”和“学生用户”,具有管理员权限的用

户添加新的管理员时,默认密码与添加的用户名相同。之后用户可以自行修改密码。 表5-2 用户表ST_users

序号 列名 字段类型 长度 描述 1 ST_User_id Varchar 50 用户名,主键 2 ST_User_password Varchar 50 用户密码 3 ST_User_power Int 4 用户权限

表5-3学生表ST_student,记录学生信息,在此记录的信息会被学生详细的显示在学生

登录后的页面上。此信息学生自己不允许更改,只能由管理员更改。 表5-3 学生表ST_student

序号 列名 字段类型 长度 描述 1 ST_Student_id Varchar 50 自增主键 2 ST_Student_name Varchar 50 学生姓名 3 ST_Student_sex Char 10 性别 4 ST_Student_nation Char 10 民族 5 ST_Student_birthday Datetime 8 生日 6 ST_Student_time Datetime 8 入学时间 7 ST_Student_classid Varchar 50 班级,外键 8 ST_Student_home Varchar 50 籍贯

Page 44: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

220

9 ST_Student_else Varchar 50 备注 表5-4教师表,记录教师信息。

表5-4 教师表ST_teacher

序号 列名 字段类型 长度 描述 1 ST_Teacher_id Varchar 50 自增主键 2 ST_Teacher_name Varchar 50 教师姓名 3 ST_Teacher_college Varchar 50 教师所在学院

表5-5班级表,记录班级信息。 表5-5 班级表ST_class

序号 列名 字段类型 长度 描述 1 ST_Class_id Varchar 50 自增主键 2 ST_Class_department Varchar 50 班级所在系 3 ST_Class_college Varchar 50 班级所在学院 4 ST_Class_teacherid Varchar 50 班主任,外键 5 ST_Class_name Varchar 50 班级名称

表5-6课程表,记录课程信息。 表5-6 课程表ST_course

序号 列名 字段类型 长度 描述 1 ST_Course_id Varchar 50 自增主键 2 ST_Course_name Varchar 50 课程名称 3 ST_Course_period Int 4 学时 4 ST_Course_credit Int 4 学分 5 ST_Course_kind Int 4 课程类型 6 ST_Course_describe Varchar 50 描述

表5-7学生课表 ,该表和下面的表都是中间表,对应E-R图中的多对多关系,即一个学

生选多门课,一门课被多个学生选。 表5-7 学生课表 ST_student_course

序号 列名 字段类型 长度 描述 1 ST_ID Bigint 8 自增主键 2 ST_Student_id Varchar 50 学生id,外键 3 ST_Course_id Varchar 50 课程id,外键 4 ST_Student_grade Int 4 成绩 5 ST_Course_year Varchar 50 学期

表5-8教师课表,中间表实现多对多关系,即一位教师教多门课,一门课被多名教师教。 表5-8 教师课表 ST_teacher_course

序号 列名 字段类型 长度 描述 1 ST_ID Int 4 自增主键 2 ST_Teacher_id Varchar 50 教师id,外键 3 ST_Course_id Varchar 50 课程id,外键 4 ST_Class_id Varchar 50 班级id 5 ST_Course_year Varchar 50 学期

5.3.4 存储过程的创建

存储过程对于数据库表的信息选择、添加和更新带来了优化,可以加快操作数据库的

Page 45: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

221

速度和效率,ST学生管理系统使用了5个存储过程,读者可以在数据库中看到,这些分别

是: select_student_1 该过程用于学生信息的查询和学生浏览自己的信息,另外存储过

程可以方便的根据学号判断学生信息的有效性。 CREATE PROCEDURE [select_student_1] //存储过程参数,用来接收学生ID (@Student_id [Varchar](50)) AS //查询操作 select * from ST_student where ST_Student_id=@Student_id insert_class_1 该过程用于向ST_class表中添加班级信息,信息内容如下文本字段

所示,读者可以在上面的表中查阅各个字段的描述以明确其含义,当存储过程发

现已存在的主键时,会返回出错的信息。 CREATE PROCEDURE [insert_class_1] //参数 (@Class_id [varchar](50), @Class_department [varchar](50), @Class_college [varchar](50), @Class_teacherid [varchar](50), @Class_name [varchar](50)) //插入语句 AS INSERT INTO [ST_StuManager].[dbo].[ST_class] ( [ST_Class_id], [ST_Class_department], [ST_Class_college], [ST_Class_teacherid], [ST_Class_name]) VALUES ( @Class_id, @Class_department, @Class_college, @Class_teacherid, @Class_name) insert_course_1 该过程用于向ST_course表中添加新的课程,信息内容如下文本字

段所示,读者可以在上面的表中查阅各个字段的描述以明确其含义,当存储过程

发现已存在的主键时,会返回出错信息。 CREATE PROCEDURE [insert_course_1] //参数 (@Course_id [varchar](50), @Course_name [varchar](50), @Course_period [int], @Course_credit [int], @Course_kind [int], @Course_describe [varchar](50)) //插入语句

Page 46: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

222

AS INSERT INTO [ST_StuManager].[dbo].[ST_course] ( [ST_Course_id], [ST_Course_name], [ST_Course_period], [ST_Course_credit], [ST_Course_kind], [ST_Course_describe]) VALUES ( @Course_id, @Course_name, @Course_period, @Course_credit, @Course_kind, @Course_describe) insert_student_1该过程用于向ST_student表中添加新的学生信息,信息内容如下文

本字段所示,读者可以在上面的表中查阅各个字段的描述以明确其中的含义,当

存储过程发现已存在的主键时,会返回出错信息。 CREATE PROCEDURE [insert_student_1] //参数 (@Student_id [varchar](50), @Student_name [varchar](50), @Student_sex [char](10), @Student_nation [char](10), @Student_birthday [datetime], @Student_time [datetime], @Student_classid [varchar](50), @Student_home [varchar](50), @Student_else [varchar](50)) //插入语句 AS INSERT INTO [ST_StuManager].[dbo].[ST_student] ( [ST_Student_id], [ST_Student_name], [ST_Student_sex], [ST_Student_nation], [ST_Student_birthday], [ST_Student_time], [ST_Student_classid], [ST_Student_home], [ST_Student_else]) VALUES ( @Student_id, @Student_name, @Student_sex, @Student_nation, @Student_birthday, @Student_time, @Student_classid, @Student_home,

Page 47: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

223

@Student_else) insert_teacher_1该过程用于向ST_teacher表中添加新的教师信息,信息内容如下文

本字段所示,读者可以在上面的表中查阅各个字段的描述以明确其含义,当存储

过程发现已存在的主键时,会返回出错信息。 CREATE PROCEDURE [insert_teacher_1] //参数 (@Teacher_id [varchar](50), @Teacher_name [varchar](50), @Teacher_college [varchar](50)) //插入操作 AS INSERT INTO [ST_StuManager].[dbo].[ST_teacher] ( [ST_Teacher_id], [ST_Teacher_name], [ST_Teacher_college]) VALUES ( @Teacher_id, @Teacher_name, @Teacher_college)

5.3.5 数据库的表间关系

根据5.3.1的分析,表间关系如图5-13所示

Page 48: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

224

图5-13 数据库表间关系图

5.4 公共模块编写

5.4.1 数据库公共模块

为了使应用程序方便移植,为版本控制提供更好的支持,可以在应用程序配置文件(也就

是 Web.Config)中设置数据库的连接信息。添加如下语句。 <configuration> <appSettings> <!--设置数据库连接字符串配置--!> <add key="st_dbconn" value= " Data Source=(local); UID=sa; PWD=sa;

DATABASE=ST_StuManager"/> </appSettings> …… …… </configuration> 注意应当使UID和PWD与读者电脑上的SQL Server登陆名和密码相对应。 对于其使用方法将在代码部分给与详细的讲解。

Page 49: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

225

5.4.2 界面头尾控件设计

为了提高主要代码的重复使用性,提高主要代码性能,将用户界面部分的头和尾做成

两个用户控件,分别命名为ST_Bottom.ascx 和 ST_Header.ascx,由于只是载入相应的图片

和文字信息,没有任何逻辑判断,这里不多介绍,读者可以在网站目录的ST_Common目录

下找到这两个文件。

5.4.3 页面导航设计

为了保持左侧导航栏的一致性,读者可以看到同在ST_Common目录下还有

ST_navigate.ascx和ST_stunavigate.ascx两个控件,分别作为管理员登陆和学生登陆后的页面

导航,在VS.NET平台下,控件中方法的封装和.aspx没有区别。在退出时,执行了断开清除

session的操作,代码如下: private void st_lbtn_exit_Click(object sender, System.EventArgs e) { Session.Clear(); Response.Redirect("default.aspx"); } 其他应用同头尾控件的设计方法,不再赘述。

5.4.4 界面主体框架

网站所有的页面基本上保持了统一的风格,一共由四部分组成,界面顶端的logo,底

端的版权信息,左侧的导航栏,和右侧的页面功能。页面和页面之间,不同的区域基本上

只有导航栏右侧的区域,当然,管理员用户和学生用户所用的导航栏是不同的。 下面代码显示了各个页面基本相同的部分,即网站界面的主体框架。 <form id="ST_student" method="post" runat="server"> <!-加入头控件--> <uc1:st_header id="St_header1" runat="server"></uc1:st_header> <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="777"

align="center" border="1"> <TR> <TD vAlign= "top" width = "15%"> <!-加入导航控件--> <uc1:st_navigate id="St_navigate1" runat="server" > </uc1:st_navigate></TD> <TD vAlign="top" align="center"> ………… ………… </TD></TR> </TABLE> <!-加入尾控件--> <uc1:st_bottom id="St_bottom1" runat="server"></uc1:st_bottom> </form> 要使用自定义控件只需在aspx页面加入如下代码即可。 <%@ Register TagPrefix="uc1" TagName="st_navigate"

Src="ST_COMMAN/st_navigate.ascx" %> <%@ Register TagPrefix="uc1" TagName="st_bottom"

Page 50: 网站开发非常之旅——《ASP.NET 2.0+SQL Server 网络应用系统开 …read.pudn.com/downloads90/ebook/341718/ASPdotNETanlifenxi.pdf · 网站开发非常之旅——《ASP.NET

226

Src="ST_COMMAN/st_bottom.ascx" %> <%@ Register TagPrefix="uc1" TagName="st_header"

Src="ST_COMMAN/st_header.ascx" %> 其中三个关键字的具体含义如下 TagPrefix: 用户控件唯一的NameSpace名称。 TagName: 用户控件中唯一的名称。 Src: 用户控件的源文件,使用虚拟路径。