第一章
系统概述
目前,各种等级考试和职业资格认证考试异常火热,人们为了取得各种证书而花费大量的时间去报名参加考试。每考一次都要报一次名,填写一大堆同样的表格,这样就浪费了报考者的很多时间和精力。同时,各种考试的主办单位也要花费大量的时间、人力、资金来管理报考者的资料和安排考试等工作。每一次考试都要重复做很多无用工作。虽然,有一些考试实行网上报名,但是其资料只是一个独立的节点,别人无法共享,从而浪费了很多资源。而我们设想的塞恩万博考试报名信息系统,就是为了改变这种局面,实现考试资料共享。为报考者和考试的主办单位提供方便快捷的服务。
1. 1
需求分析概要
各种等级考试和职业资格认证考试是人们能找到一份满意的工作所必需参加的,人们花费大量时间去参加考试无可厚非,而花费大量时间去填写几乎没有区别的各种资料表格就是一种严重的浪费。同时,各种考试的主办方花费大量的资源去管理报考者几乎相同的信息,而无法实现报考者信息共享,这对追求高效率的21世纪来说是不能容忍的。所以,我们觉得推出这样一个资源共享,方便快捷的信息平台对每一位报考者和考试的主办单位都是很有帮助的。这将给他们带来很多的方便和利益。
1. 2
现状调查
目前,各种等级考试和职业资格认证考试异常火热,人们为了取得各种证书而花费大量的时间去报名参加考试。每报考一次和一门试是都要报一次名,填写一大堆同样的表格,这样就浪费了报考者的很多时间和精力。
同时,各种考试的主办单位也要花费大量的时间、人力、资金来管理报考者的资料和安排考试等工作。每一次考试都要重复做很多无用工作。虽然,有一些考试实行网上报名,但是其资料只是一个独立的节点,各个考试的主办单位无法共享,从而浪费了很多社会的资源。
1. 3
系统改造工作人员概况
塞恩万博考试报名信息系统改造项目由以下六人具体实施: 王天为(组长)、常柱、霍腾跃、闫皓、郇珊珊、郭志民。我们对现有网上各种考试的报名系统和尚在手工管理的系统进行了详细调查的基础上,根据各个考试的主办方对信息要求的特点,进行了系统的分析和设计,提出了一系列一个全新的解决方案。本次项目,我们六人采用分工合作的方式完成。经过同意讨论,我们将数据库的设计,各个模块的改进分别交由个人处理,完成之后再统一汇总,进而实现系统的全面设计。先将本人主要工作说明如下:我参加了从系统分析到系统设计再到系统实施的一系列工作,在这期间,我主要参与了系统分析的集体讨论(流程图),数据库的设计和系统留言板(BBS)部分的程序设计和整个系统实施过程。
第二章
系统分析
系统分析主要是对现行各种报名信息系统进行充分的调查研究,细致了解现行各种报名信息系统的现状和业务流程,以及存在的主要问题,在此基础上提出新系统的逻辑模型。
2. 1
系统功能的需求
我们根据系统调查的结果,经过分析,塞恩万博报名信息系统力求方便使用、高效快捷,且具有很好的扩展性和维护性。其整个系统的构架可以适应于绝大多数的报名机构。其主要功能如下:
(1)考生用户:实现登录、注册、选择报名、取消报名、选择考场、交费、查询报考信息、查询考试信息。
(2).总管理员:
实现登录、修改管理员信息、发布公告、发布新闻,查看(包括删除)任意一考试项的考生信息、处理报名考试N(N的大小由管理员设定)天内未交费者、添加考试项目、编辑考试项目简介、编辑考试信息,由管理员查看用户的状态。管理员查看登录日志等。
(3).留言板(BBS)功能为考生相互之间交流提供空间。
2. 2
现行系统的业务流程和数据流程
2.2.1.现行系统的业务流程
由于本系统是根据不同现有的各种考试报名信息系统而设计的,所以其旧的现行的信息系统的业务流程,很不统一,这里只给出一个比较基本的手工报名的业务流程图,如下图(图(2—1))所示:
图(2-1):旧系统业务流程图
2.2.2.现行系统得数据流程
由于本系统是根据不同现有的各种考试报名信息系统而设计的,所以其旧的现行的信息系统的业务流程,很不统一,这里只给出一个比较基本的手工报名的数据流图,如下图(图(2—2))所示:
图(2-2):旧系统数据流图
2. 3
新系统的业务流程和数据流程
2.3.1.新系统的业务流程
新系统是对旧系统的基本功能的基础上,进行合理的调整和改革,使系统能为无数考生们提供更方便、更快捷、更人性化的报名环境和为考试的主办单位提供方便、快捷的管理环境。下面是由我完成的系统留言板(BBS)部分的业务流程图(图2—3)。
图(2-3)新系统业务流程图
2.3.2.新系统的数据流程图
根据新系统的业务流程图,经分析新系统的数据流程图(新增部分)如下所示:
图(2—4)新系统关联图
图(2-5)新系统顶层图
2
.
4
数据字典的编写
绘制数据流程图以后,只是对数据处理和彼此之间的联系进行了说明,为了进一步明确数据的详细内容和数据加工过程,应将数据流图的全部数据流及其组成部分的数据元素,数据存储和加工通过数据字典描述清楚,以便系统设计时使用。在系统分析中产生了大量的数据元素,限于篇幅,这里仅就数据流、数据存储,加工,数据元素和外部项的数据字典分别举例说明如下。
2.4.1.外部项举例
外部项
| |||||
系统名:塞恩万博报名信息系统 编号:W01
条目名:留言板 别名:
| |||||
输入数据流:用户基本信息
|
输出数据流:用户基本信息
| ||||
主要特征:本表主要是系统的用户信息存储,为系统的用户登录等。
| |||||
简要说明:本表主要是系统的用户信息存储,是系统的主要实体。
| |||||
修改记录:
|
编写
|
常柱
|
日期
|
2005/12/27
| |
审核
|
王天为
|
日期
|
2005/12/27
| ||
表2-1 外部项字典
2.4.2.数据流举例
数据流
| |||||
系统名:塞恩万博报名信息系统 编号:F3
条目名:留言板 别名:
| |||||
来源:帖子发布处理
|
去处:帖子浏览
| ||||
数据流结构:帖子编号 帖子题目 帖子内容 帖子发布时间 帖子发布者编号
| |||||
简要说明:用此记录每个帖子的基本信息,有一个帖子就有一条记录
| |||||
修改记录:
|
编写
|
常柱
|
日期
|
2005/12/27
| |
审核
|
王天为
|
日期
|
2005/12/27
| ||
表2-2 数据流字典
2.4.3.数据存储举例
数据存储字典
| ||||||
系统名:塞恩万博报名信息系统 编号:D2
条目名:留言板 别名:
| ||||||
存储组织:每个帖子一条记录
|
记录数:约500
|
主关键字:帖子编号
| ||||
记录组成:
项目 帖子编号 帖子题目 帖子内容 帖子发布时间 帖子发布者编号
近似长度 4 200 20000 4 4
| ||||||
简要说明:用此记录每个帖子的基本信息,有一个帖子就有一条记录
| ||||||
修改记录:
|
编写
|
常柱
|
日期
|
2005/12/27
| ||
审核
|
王天为
|
日期
|
2005/12/27
| |||
表2-3数据存储字典
2.4.4.数据元素举例
数据元素字典
| ||||
系统名:塞恩万博报名信息系统 编号:E01
条目名:留言板 别名:
| ||||
属于数据流:F3 存储处:D2 帖子信息表
| ||||
数据元素结构: 代码类型 取值范围
Int 0---99999
| ||||
简要说明:帖子编号是帖子的唯一识别符
| ||||
修改记录:
|
编写
|
常柱
|
日期
|
2005/12/27
|
审核
|
王天为
|
日期
|
2005/12/27
|
表2-4数据元素字典
2.4.5.加工举例
加工
| ||||
系统名:塞恩万博报名信息系统 编号:P3
条目名:留言板 别名:
| ||||
加工逻辑:1:判断用户是否登录;
2:用户已登录,发布帖子;
3:用户没有登录,转到登录页面。
| ||||
简要说明:本处理主要进行帖子发布
| ||||
修改记录:
|
编写
|
常柱
|
日期
|
2005/12/27
|
审核
|
王天为
|
日期
|
2005/12/27
|
表2-5 加工数据字典
第三章
系统设计
系统设计阶段在整个管理信息系统开发过程中起着十分重要的作用,他将系统分析阶段建立的新系统逻辑模型转化为系统的结构模型,并做好编程前的一切准备。如果说系统分析阶段是解决管理信息系统干什么的问题的话,那么系统设计阶段则是解决怎么干的问题。
3. 1系统设计的任务
系统设计的任务是:在系统分析提出的逻辑模型的基础上,科学合理地进行物理模型的设计。系统模型分为逻辑模型和物理模型。逻辑模型主要确定系统做什么,而物理模型则主要解决怎样做的问题,前者是系统分析的主要任务,后者是系统设计的主要任务。
3
.
2
数据库的设计
3.2.1 系统的实体---联系(E---R)图
数据库的建立,是整个信息系统设计前提和核心,是数据库设计的重中之重,必须首先结合实际和需求分析,认真做好。经综合分析,本系统E—R图如下所示:
图 3—1 各实体联系图
3.2.2.数据库表间关系图如下图所示:
图3—2 数据库表间关系图
3.2.3. 数据库表的设计与创建
塞恩万博报名信息系统根据以上E—R图综合分析,创建表的字段结构及说明如下(在此仅例出由我设计开发的留言板部分的表的字段结构及说明):
表名
|
User
|
|
|
用户信息表
| |
列名
|
数据类型
|
长度
|
允许空
|
注释
| |
UserID
|
int
|
|
pk自增
|
PKID
| |
Name
|
nvarchar
|
20
|
否
|
考生姓名
| |
Password
|
nvarchar
|
20
|
否
|
考生密码
| |
Sex
|
char
|
|
否
|
考生性别
| |
Birthday
|
DateTime
|
|
否
|
考生出生日期
| |
CardTypeID
|
int
|
|
否
|
(CardType外键)考生证件类型号
| |
CardNum
|
nvarchar
|
20
|
否
|
考生证件号码
| |
Telephone
|
nvarchar
|
20
|
是
|
考生固定联系电话
| |
Cellphone
|
nvarchar
|
20
|
是
|
考生手机
| |
Email
|
nvarchar
|
50
|
否
|
考生电子邮件
| |
Address
|
nvarchar
|
100
|
否
|
考生联系地址
| |
PostNum
|
nvarchar
|
6
|
否
|
考生联系地址的邮编
| |
| |||||
表名
|
Forum
|
|
|
BBS发布表
| |
列名
|
数据类型
|
长度
|
允许空
|
注释
| |
ForumID
|
int
|
|
否
|
PKID
| |
WriteID
|
int
|
|
否
|
FK用户ID
| |
ForumTitle
|
nvarchar
|
200
|
否
|
帖子主题
| |
ForumText
|
ntext
|
|
否
|
帖子内容
| |
IssueTime
|
datetime
|
|
否
|
发布时间
| |
| |||||
表名
|
RevertInfo
|
|
|
帖子回复表
| |
列名
|
数据类型
|
长度
|
允许空
|
注释
| |
RevertInfoID
|
int
|
|
否
|
PKID
| |
RevertInfoName
|
nvarchar
|
50
|
否
|
回复帖子名称
| |
RevertInfoText
|
ntext
|
|
否
|
回复帖子内容
| |
IssueTime
|
datetime
|
|
否
|
发布时间
| |
ForumID
|
int
|
|
否
|
FK
| |
WriteID
|
int
|
|
否
|
FK用户ID
| |
表3—1留言板数据表设计
3
.
3
.
界面设计
本人完成的是留言板模块,以下为本模块的主要界面如下所示:
图3-5 留言板主界面
图3-6 留言板回帖界面
图3-7 留言板发帖界面
3
.
4
系统安全性方面
留言板功能模块在系统的安全性方面,在数据库后台没有任何权限设置,只是在前台开发部分通过程序来进行严格的权限控制。具体说明如下:
系统的管理员可以查看所有的发布的帖子,并有权对不符合要求的帖子进行删除,修改操作。系统的登录用户可以发布、回复和修改自己发布的帖子。而未登录用户及游客可以查看帖子信息。
同时,为防止系统数据库受到黑客攻击,本系统采用分层开发,即将系统分为用户界面层、业务层和数据访问层。同时对可以字符串进行转化替代,防止SQL注入攻击。
第四章
系统实施
4.1.系统开发软件选择
4.1.1.系统开发工具的选择
系统开发程序设计主要使用微软的DOTNET2003(C#,ASP.NET)作为开发平台实现。后台数据库选择Microsoft公司开发的SQL Server,它是一个关系型数据库管理系统,是目前世界上最著名的关系数据库管理系统之一。SQL Server 2000提供了功能全面、操作简单的图形化SQL Server服务器管理界面---“SQL Server Enterprise Manager”窗口。SQL Server的网络结构提供了许多传统主机数据库所没有的先进功能。
4.1.2.硬件平台的选择
内容
|
机器配置
|
主机
|
奔腾4(1.7G)
|
内存
|
512MB
|
硬盘
|
40G
|
显示器
|
17纯平彩色显示器
|
操作系统
|
WindowsXP中文版
|
表4-1 硬件平台
4
.
2
留言板(
BBS
)模块代码设计
4.2.1.留言板(BBS)模块类设计,由于篇幅所限,此处只给出业务规则层中与留言板有关的类的主要代码:
namespace BLL
{
public class BBS
{
SP_Base mySp = new SP_Base();
DALResult result = new DALResult();
public BBS()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
//取得bbs最新的帖子100
public DataTable GetBBSNew()
{
mySp.ProcedureName="GetForum";
result =mySp.Call_SP();
DataTable dtNewForum = new DataTable();
dtNewForum = result.datatable;
//虚拟表
DataTable dtForum = new DataTable();
dtForum.Columns.Add(new DataColumn("ForumID", typeof(int)));
dtForum.Columns.Add(new DataColumn("ForumTitle", typeof(string)));
dtForum.Columns.Add(new DataColumn("WriteName",typeof(string)));
dtForum.Columns.Add(new DataColumn("IssueTime",typeof(string)));
dtForum.Columns.Add(new DataColumn("PostNum",typeof(string)));
for(int i = 0;i <dtNewForum.Rows.Count;i ++)
{
DataRow dr = dtForum.NewRow();
dr[0] = Convert.ToInt32( dtNewForum.Rows[i]["ForumID"].ToString());
if(dtNewForum.Rows[i]["ForumTitle"].ToString().Length >20)
{
dr[1] = dtNewForum.Rows[i]["ForumTitle"].ToString().Substring(0,20) + "...";
}
else
{
dr[1] = dtNewForum.Rows[i]["ForumTitle"].ToString();
}
dr[2] = dtNewForum.Rows[i]["WriteName"].ToString();
dr[3] = dtNewForum.Rows[i]["IssueTime"].ToString();
dr[4] = "人气指数:" + getRevertInfoCount(Convert.ToInt32(dtNewForum.Rows[i]["ForumID"].ToString()));
dtForum.Rows.Add(dr);
}
return dtForum;
}
//统计帖子回复次数
public int getRevertInfoCount(int ForumID)
{
mySp.ProcedureName = "GetRevertInfoCount";
result = mySp.Call_SP(ForumID);
int revertCount =Convert.ToInt32( result.datatable.Rows[0][0].ToString());
return revertCount;
}
//取得一个帖子的内容
public DataTable getForumOne(int ForumID)
{
mySp.ProcedureName = "GetForumOne";
result = mySp.Call_SP(ForumID);
DataTable dtForumOne = new DataTable();
dtForumOne = result.datatable;
return dtForumOne;
}
//取得一个帖子的所有回复
public DataTable getRevert(int ForumID)
{
mySp.ProcedureName = "GetForumOneRevertInfo";
result = mySp.Call_SP(ForumID);
DataTable dtForumRe = new DataTable();
dtForumRe = result.datatable;
DataTable newForumReAll = new DataTable();
newForumReAll.Columns.Add(new DataColumn("RevertInfoID", typeof(int)));
newForumReAll.Columns.Add(new DataColumn("RevertInfoName", typeof(string)));
newForumReAll.Columns.Add(new DataColumn("RevertInfoText",typeof(string)));
newForumReAll.Columns.Add(new DataColumn("IssueTime",typeof(string)));
newForumReAll.Columns.Add(new DataColumn("WriteName",typeof(string)));
for(int i = 0;i <dtForumRe.Rows.Count;i++)
{
DataRow dr = newForumReAll.NewRow();
dr[0] = Convert.ToInt32( dtForumRe.Rows[i]["RevertInfoID"].ToString());
dr[1] = dtForumRe.Rows[i]["RevertInfoName"].ToString();
dr[2] = GetOneReText(Convert.ToInt32( dtForumRe.Rows[i]["RevertInfoID"].ToString()));
dr[3] = dtForumRe.Rows[i]["IssueTime"].ToString();
dr[4] = dtForumRe.Rows[i]["WriteName"].ToString();
newForumReAll.Rows.Add(dr);
}
return newForumReAll;
}
//取得回复的内容
private string GetOneReText(int RevertInfoID)
{
mySp.ProcedureName = "GetRevertInfo";
result = mySp.Call_SP(RevertInfoID);
DataTable dtOneRe = new DataTable();
dtOneRe = result.datatable;
string strReText = dtOneRe.Rows[0][0].ToString();
return strReText;
}
//插入帖子的回复内容
public bool InsertRevert(string RevertInfoName,string RevertInfoText,string IssueTime,int ForumID,int WriteID)
{
mySp.ProcedureName = "InsertdRevertInfo";
result = mySp.Call_SP(RevertInfoName,RevertInfoText,IssueTime,ForumID,WriteID);
bool insertResultRe = result.IsSucceed;
return insertResultRe;
}
//插入帖子内容InsertForum
public bool InsertForum(int WriteID,string ForumTitle,string ForumText,string IssueTime)
{
mySp.ProcedureName = "InsertForum";
result = mySp.Call_SP(WriteID,ForumTitle,ForumText,IssueTime);
bool insertResultFo = result.IsSucceed;
return insertResultFo;
}
}
}
4.2.2.存储过程设计,在此只给出与留言板有关的7个存储过程的名称和其功能说明,具体如下:
储存过程名称
|
储存过程功能说明
|
GetForum
|
取得bbs最新的帖子100
|
GetRevertInfoCount
|
统计帖子回复次数
|
GetForumOne
|
取得一个帖子的内容
|
GetForumOneRevertInfo
|
取得一个帖子的所有回复
|
GetRevertInfo
|
取得回复的内容
|
InsertdRevertInfo
|
插入帖子的回复内容
|
InsertForum
|
插入帖子内容
|
4
.
4
在开发过程中遇到的技术问题及解决方法
在本模块的开发过程中,遇到了相当多的问题,经过查阅资料,向老师请教,和同学交流,学习相关例程解决掉了一些。由于时间有限,仍有一些问题有待于以后进一步解决。以下举例说明:
由于时间比较仓促,对于留言板论坛的帖子未能实现分类,是留言板论坛的帖子显得十分杂乱。同时,管理员对留言板论坛的管理部分未能实现。
第五章
系统开发总结
5
.
1
系统存在的主要缺陷与不足
由于时间仓促,本人能力有限,该系统仍有一些问题需要在以后的开发维护工作中继续完善。
(1) 留言板管理员功能需要增加完善
增加管理员对帖子进行管理,对不符合要求的违法的帖子进行删除和修改的操作功能。
(2) 留言板(BBS)分类的问题
未能实现留言板(BBS)帖子分类功能,增加此功能会使留言板(BBS)的功能更加完善,更加人性化,更符合考生的需求,使他们能够快速的进行交流。
5
.
2
心得与体会
认真分析是解决问题的关键,是我在完成这次系统改造任务后的最大体会。在以前的开发系统过程中,我对问题总是孤立来看,不详细分析,就急于下手,这样就遇到了很多意想不到的困难,甚至在编写代码的时候还在不断的修改数据库中的有关数据,这样大大的延缓了开发的进度。虽然我们这次开发的管理信息系统并不难,但也使我在开发管理信息系统的过程中我越来越认识到了前期准备与分析的重要性,其实最后界面的设计代码的开发并不是很难,但是一旦前期的分析出现了问题,那么一切都要从头开始。
本次系统的开发采取了分工合作的制度,团队精神十分重要。但在整个开发过程中发现这种精神还需要进一步提高。
总体上讲,本次开发塞恩万博考试报名信息系统是一个十分难得的机会,虽然结果与理想仍有一定差距,但是这是对我们几年学习水平的又一次检验和提高。在这次开发过程中,不仅仅是复习了C#、ASP.NET以及SQL Server开发工具,更重要的是在面对问题时解决问题的能力以及团对精神得到了极大的提高,学习到了许多书本上学习不到的知识。在这两周的时间里,我得到了任课教师黎枫、张健,和本组其他组员的大力支持与帮助,在此,我向他们表示衷心的感谢!
参
考
文
献
1. HTML标准教程 中国青年出版社
2. MSDN 开发精选 电子工业出版社发行部
3. Tbuan Thai, Hoang Q.Lam .NET框架精髓 中国电力出版社
4. Daniel Cazzulino C# Web应用程序入门 清华大学出版社
5 季久峰,李志 ASP.NET办公自动化系统开发实例导航 人民邮电大出版社
6. ASP.net—c#.net篇 清华大学出版社
7. HTML,CSS,DHTML,JAVA网页特效 清华大学出版社
8. Andy Wigley Stephen Wheelwright .NET Compact Framework 技术内幕 清华大学出版社
9. Herbert Schildt C#完全手册 电子工业出版社
10. Microsoft公司 开发Visio解决方案 北京大学出版社
11. 组件对象模型WEB开发的软件工程方法 同济大学出版社