第五章 系统详细设计与主要功能实现
本网站的设计主要是基于ASP.NET中ADO.NET技术进行数据库开发。建立以SQLServer为驱动,ccenter 为目标数据库的 ODBC 数据源,dsn=“www”;利用 OdbcConnection 对象实现数据连接;利用 OdbcCommand 对象实现数据库操作;利用 DataAdapter 和 DataSet 组合实现数据库返回结果表的本地操作;利用 DataReader 实现从数据库读取结果记录;利用GridView、Datalist 及 DetailView 等控件实现数据显示。另外出于对用户输入规范的考虑,应用 RequiredFieldValidator、CompareVAlidator、RegularExpressionValidator 及 RangeValidator等验证控件来约束输入条件。
5.1 网站主页设计
5.1.1 主页母板界面设计
主页设计分为头部、尾部以及中间的内容部分。其中头部是由一张图片和导航条构成,尾部是友情链接以及尾部信息,这两部分是用母版页来设计的。中间的内容页主要分为五个模块(动态图片、最新公告、规章制度、动态小喇叭、教学信息)。其中动态图片是用 div 加javascript 来实现图片幻灯片的效果的。最新公告、规章制度、教学信息部分是用的 Datalist控件绑定数据库,显示新闻公告。动态小喇叭中是采用了一个<marquee>标签,用来滚动对应文件中的信息[22].见图 5.1.
母版页为具有扩展名为。master 的 ASP.NET 文件,它具有可以包括静态文本、HTML 元素和服务器控件的预定义布局。母版页可以在同一站点的多个页面中共享使用同一内容。用户可以使用母版页建立一个通用的版面布局。最重要的是,它至少有一个 ContentPlaceHolder控件,该控件表明了在内容页上可以自定义内容的部分。本网站中所用到的母版页为topfoot.master 文件,母版页由特殊的@Master 指令识别,该指令替换了用于普通。aspx 页的@Page 的指令。代码如下:
5.1.2 新闻发布页模板设计
新闻发布包括最新公告、规章制度、教学信息三部分,这三个模块内容相似,所以采用模板化设计,将三个模块设计成几个模板页,用来显示新闻、发布新闻、删除新闻。通过使用这些模板页,来完成最新公告、规章制度、教学信息等相关页面的设计,以此来提高网站建设的效率,该页面访问数据库的流程图。
网站主页的新闻模板采用 table 布局,用 Datalist 控件绑定数据库,显示新闻标题以及新闻发表时间。每页显示 14 个记录。下面有“上一页”、“下一页”的链接,以及文本框用来输入直接想要到达的页码。并用一个数据验证控件来验证所输入的是合法的数字。左侧有一个img 控件,上面有个链接,点击它即可链接新闻显示的首页。模板页如图 5.3 所示。
主页的新闻的标题和发表时间,标题格式要统一,当超过 14 个字符的时候,显示前 14个字符,后面加上“…”;日期的格式采用 YYYY-MM-DD 的形式。实际页面效果如图 5.4 所示。
Datalist 控件没有自动分页功能。想实现分页,必须添加自定义代码。这部分通过实例化PagedDataSource 类,将该实例对象的数据源设置为网站的数据源,然后将该实例对象的AllowPaging 属性设置为 true,再设置一下 PageSize 的大小。最后,将 Datalist 的数据源设置为该实例对象,Datalist 执行数据绑定。这样就实现了分页功能[24].
5.1.3 机房状态
该功能可供任何身份的用户使用。点击机房状态链接进入表格显示页面,统计出当前三个机房自由上机和课程上机情况,若有课内上机,则给出上课班级信息。通过表格下面的下拉框选择机房,点击确定,即进入图形化显示界面,具体给出该机房各机位当前状态,各字母表示含义已在下方给出,点击图形注解下方的返回按钮即返回原表格界面。鼠标放置某图形上将自动给出该字母代表含义,若为课程上机,还将给出上课班级。这两个页面都以1分钟为间隔刷新,流程图见图5.5.
该功能建两个页面,一个显示cc_MachState表中各机房各上机类型的count(*)值,并且当有课程上机时,给出cc_BookMsg值,见图5.6.另一网页根据前一网页选择机房号,查询cc_MachState中该机房的当前所有机位状态。这里利用Datalist控件完成图形化显示,每个Item由两个label,一个显示机位,一个显示状态。从数据库中读取cc_MachSerial和cc_MachState两个字段,显示状态的字母在Datalist绑定数据源前动态地根据cc_MachState值设定,见图5.7.
5.1.4 课表查询
该模块是公共模块,不用验证身份就能查询。首次进入显示本周课表(星期、机房、上课时间等内容依次显示),通过下方的上/下一周按钮查询其它周的课表。课表查询流程图见图 5.8.
查询内容并不仅限于当天的课程名,还包括上课机房、上课时间、上课老师、上课人数、上课班级等信息。页面首次加载时,计算本周一的日期,并作为参数传递给存储过程。该存储过程从cc_ClassBook表中读取指定日期至6日后的所有预定记录。课表显示时,对返回结果的特殊行做个别调整再显示,如碰到某一日期无记录或者有多条记录的情况。界面见图5.9.
5.2 管理员与学生功能模块设计
5.2.1 更改密码
管理员:输入学生学号和新密码,确认后,若学号验证有效则给出操作成功提示,否则给出出错信息。管理员使用此功能不需要学生原密码,直接用新密码替换。
学生:操作此功能需输入原密码作为身份验证以防非法篡改。原密码经审核与身份相符时即可继续修改操作,完成后或给出成功信息,或给出错误提示。流程图见图 5.10 所示。
修改密码时进行输入验证:
(1) 非空验证(利用 RequiredFieldValidator);(2) 一致性验证(由于 CompareValidator 在输入空时失效,改用 RequiredFieldValidator 加后台判定 if(tb_newpsw==tb_confirmpsw));[25]根据输入学号在 cc_StudInfo 表中找到指定记录,执行 Update 语句更改密码。最后根据操作结果返回给用户相应提示。界面如图 5.11 所示。
5.2.2 学生信息查询
管理员:输入学生学号点击查询即可完成操作。这里管理员能比学生查到稍详细的账号信息,如建卡时间等。“是否锁定”是锁定位,新建帐号为锁定状态,加钱或班级解锁后清除。
学生:登录后,后台已记录了其账号,所以点击该功能的链接即可查询自己的信息,无需再输入学号。
根据输入学号或登录账号从表cc_StudInfo中查找相应记录并根据用户身份返回部分字段。对于管理员,当输入学号不存在时要给出错误提示。流程图见图5.12.
此功能分别供管理员和学生使用,学生使用界面如图5.13.
5.2.3 机器使用统计
根据输入的机房号、天数和机器台数,统计指定机房中最近使用时间最少的的一些机器的编号和上机总分钟数,结果按升序排序。时间范围限定在近半年内(6个月),否则统计时间会很长。此功能可以为机器维护提供参考依据。更精确的分析故障计算机的功能见下一章数据挖掘在的故障检测的应用。
接收用户输入数据,从cc_MachHistory表中查询,其中cc_MachSerial属于指定机房,cc_BeginTime在指定期限内的所有记录的sum(cc_TimeCount),并按升序排序,返回指定的top条记录与机器台数相同。与前面查询相同,这里也要进行非空验证,对其他非法输入用捕获异常方式显示。流程图见图5.14.
这个功能需要统计大量的数据,花费时间较多,可以调用数据库中存储过程来加速。经过实际测试,网页打开时间在 4 秒以内,达到了网站需求分析中性能的要求。该功能仅限于管理员查询,界面如图 5.15.
5.2.4 资金统计
管理员:根据输入日期和学号查询相应记录及统计数据。输入日期既可手动输入也可从弹出日历中选择。可勾选所要查询的字段,金额和操作时间为默认勾选项。查询后结果显示总金额及各条记录,一页可显示多条记录,多页显示时可跳转到指定页。
学生:系统将根据登录账号,查询该账号的充值历史记录(通过学校一卡通系统充值)中在指定日期内的记录,结果显示各条记录。日期选择既可从下拉框选择,也可从日历中选择。
资金历史纪录分别存储在cc_AddMoneyHistory和cc_TodayAddMoney表中,分别进行查询后需要进行union合并操作,对于管理员用户还需要一个查询语句查询这两个表中满足查询条件的sum(cc_AddedMoney)并相加。对学生,根据登录学号和输入日期从上述两个表中查询。
结果都按时间(cc_AddTime)降序排序。流程图见图5.16.该功能分管理员界面如图5.17,和学生用界面如图5.18.
5.2.5 上机历史记录
管理员:根据输入起止日期和学号查询满足条件的记录。日期可手动输入,也可点击日历输入。此处记录通常比较多,设一页最多显示50条,多页时可通过输入指定页进行跳转。
学生:登录后系统将自动记下登录账号,学生根据下拉框查询指定日期内的个人上机记录及其详细信息。该功能流程图如图5.19.
根据输入学号或学生登录的学号、输入日期和指定机房在 cc_MachHistory 表中查询记录。
对于学生模块中详细信息显示的实现,通过显示结果表 GridView 控件[25]中添加 ButtonField属性的列,设定 CommandName =Select,Text=“详细信息”,并定义 SelectedIndexChanging()事件,查询指定记录的详细信息。该功能管理员可以查询学生上机的历史记录,界面如图 5.20.
5.3 教师功能模块设计
5.3.1 查询学生出勤
进入该界面后,页面将自动从数据加载当前机房上课班级列表,教师可从列表中选择班级查询当前未在线的学生学号及姓名,用于查询学生考勤。
页面首次加载时,从 cc_ClassBook 表中查询 cc_BookDate 为当天记录的 cc_ClassId 值,并根据相关字符串操作函数以班级为单位分离该字段,并返回到 dropdownlist 中。在查询按钮的单击事件中,根据用户选择的班级,从 cc_StudInfo 表中查找 classid 满足查询条件而学号又不在 cc_MachState 表中满足 cc_BookMsg 包含该班级信息的记录里。从该班级全体学生名单中减去当前已上线学生名单,即缺席学生。该功能流程图如图 5.21.
该功能仅供教师上机课点名时使用,界面如图5.22所示。
5.3.2 其它功能
教师查询学生上机的历史记录和查询学生个人信息的功能模块与管理员功能模块基本相同,这里就省略了。
5.4 数据库异地备份
每天对数据库进行异地备份,在 SQLSERVER 数据库中建立一个备份数据库任务[26],该任务 7*24 小时一直工作,并且每天 1:00 调度运行一次,保存在本地硬盘中,然后通过 cuteftp工具远程同步文件夹到另一个地方的远程 FTP 服务器中,同步计划的周期是每天 2:00 调度一次。具体流程如图 5.23.对于关键数据的异地备份达到了国际标准 SHARE78 灾难恢复系统第 2 层次的要求。
5.5 本章小结
本章在系统设计的基础上进行了系统的详细设计,对主要模块设计了流程图,并给出了实际运行中的用户界面。最后对数据库的异地备份进行了详细设计,对于关键数据的异地备份达到了国际标准 SHARE78 灾难恢复系统第 2 层次的要求。