ASP.NET基于BS的计算机等级考试系统的设计与实现

摘 要

随着计算机技术的发展及计算机的日益普及,基于B/S结构的考试系统与无纸化办公一样已成为大势所趋。论文详细论述了一个基于B/S结构的计算机等级考试系统的设计过程。软件采用ASP.NET 2005作开发平台,C#作编程语言,SQL Server 2005作数据库管理系统,实现了试题管理、试卷生成、在线考试、试卷评判、权限管理、在线报名及站内公告等功能。系统符合全国计算机等级考试的要求。

首先阐述了该系统的开发背景、意义;其次介绍了相关的开发工具及技术基础;接着对系统的需求进行了分析,并提出了具体的设计方案和数据库模型;然后展现了整个系统的具体实现,包括数据库的设计和连接,各功能模块的实现;最后对该软件进行了严格的测试。

关键词: B/S结构;计算机等级考试;考试系统

2.1 B/S结构

B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

2.2 开发工具简介

2.2.1 Visual C# 2005简介

Microsoft Visual C# 2005(读作 C sharp)是一种编程语言,它是为生成在 .NET Framework 上运行的多种应用程序而设计的。C# 简单、功能强大、类型安全,而且是面向对象的。C# 凭借它的许多创新,在保持 C 样式语言的表示形式和优美的同时,实现了应用程序的快速开发。

2.2.2 SQL Sever 2005简介

SQL Server 是一个全面的、集成的、端到端的数据解决方案,它为企业中的用户提供了一个安全、可靠和高效的平台用于企业数据管理和商业智能应用。SQL Server 2005 为IT专家和信息工作者带来了强大的、熟悉的工具,同时减少了在从移动设备到企业数据系统的多平台上创建、部署、管理及使用企业数据和分析应用程序的复杂度。 通过全面的功能集、和现有系统的集成性、以及对日常任务的自动化管理能力,SQL Server 2005 为不同规模的企业提供了一个完整的数据解决方案。SQL Server 数据平台包括如下工具:关系型数据库、复制服务、通知服务、集成服务、分析服务、报表服务、管理工具、开发工具。 SQL Server 2005 数据平台为不同规模的组织提供了如下好处:充分利用数据资产、提高生产力、减少IT复杂度、更低的总体拥有成本 (TCO)。

4.2 系统功能结构图

根据需求分析,在线考试系统的结构图如下:

图2 系统功能结构图

4.3 系统架构

本系统采用ASP.NET应用程序典型的三层架构模式,其结构如图所示

各层功能介绍:

数据访问层:系统最低层,提供数据库操作的接口和存储本系统所有数据;

业务逻辑层:处于页面展示层与数据访问层之间,与数据库直接关联,同时又为页面展示层服务。实现业务的具体逻辑,如考生报名、登录参考、试卷试题管理等;

页面展示层:系统最外层,将业务功能在浏览器上显示出来,用户通过界面对系统进行操作。

5.1 用户登录模块设计

5.1.1前台页面设计

管理员/阅卷人输入账号及密码,系统查询数据库,自动配对用户类型,进入相应的管理页面。如果出现错误,系统会弹出相应的提示信息。

5.1.2后台功能代码

单击登录按钮事件:

protected void btnOK_Click(object sender, EventArgs e)

{

string UserName = txtName.Text;

string UserPwd = Security.Encrypt(txtPwd.Text);

User user = new User();

user.LoadNameData(UserName);

if (user.Exist) //如果用户存在

{

if (user.UserPwd == UserPwd) //如果密码,转入留言列表页面

{

Session.Add("UserID", user.UserID);

Session.Add("UserIDCard", user.UserIDCard);

Session.Add("UserName", user.UserName);

if (user.UserType == 3)

{

Session["IsAdmin"] = "Admin";

Response.Redirect("Admin/AdminInfo.aspx");

}

else

{

Session["IsAdmin"] = "Teacher";

Response.Redirect("Teacher/Default.aspx");

}

}

else //如果密码错误,给出提示,光标停留在密码框中

{

Response.Write("<Script Language=JavaScript>alert(\"密码错误,请重新输入密码!\")</Script>");

txtPwd.Focus();

}

}

else //如果用户不存在

{

Response.Write("<Script Language=JavaScript>alert(\"对不起,用户不存在!\")</Script>");

}

}

5.2 后台管理页面设计

管理页面只允许具有管理员权限的人员访问,因此在每个管理页面都有相关的权限判断,以保证系统的安全使用。

if (Session["IsAdmin"] == null)

{

Response.Write("<Script Language=JavaScript>alert('管理员未登录,非法请求!');</Script>");

Response.Write("<Script Language=JavaScript>window.location.href='../AdminLogin.aspx';</Script>");

}

5.2.1人员管理页面设计

图6 人员管理

此页面用于管理所有用户,包括考生、阅卷人和管理员。通过用户类型下拉框选择相应类型的用户,在GridView中会显示出用户详细的信息。当考生报名成功后,前来交费时,管理员可以通过审核方式来确认考生的参考资格。管理员也可以删除一些无效用户。

审核事件代码:

foreach (string UserID in selectedUsers)

{

Hashtable ht = new Hashtable();

ht.Add("IsCheck", 1);

(new User()).Check(ht, UserID);

}

Response.Write("<Script Language=JavaScript>alert('审核考生成功!');</Script>");

Query();

删除事件代码:

foreach (string UserID in selectedUsers)

{

User.Delete(UserID);

}

Query();

5.2.2试题管理页面设计

图7 试题管理

此页面用于管理所有试题信息。通过考试科目下拉框选择相应的科目,在GridView中会显示出试题的详细信息,包括题干、备选答案和正确答案。管理员可以对试题进行编辑、删除操作。

操作实现代码:

protected void gvQuestion_RowCommand(object sender, GridViewCommandEventArgs e)

{

int index = Convert.ToInt32(e.CommandArgument); //待处理的行下标

int questionId = -1;

switch (e.CommandName)

{

//修改

case "Edit":

questionId = Convert.ToInt32(gvQuestion.Rows[index].Cells[0].Text);

Response.Redirect("QuestionAddEdit.aspx?id=" + questionId);

break;

//删除

case "Delete":

questionId = Convert.ToInt32(gvQuestion.Rows[index].Cells[0].Text);

Question question = new Question();

question.GetSingleQuestion(questionId);

question.Delete();

Response.Write("<Script Language=JavaScript>alert('删除成功!');</Script>");

gvBind();

break;

default:

break;

}

}

5.2.3公告管理页面设计

此页面用于管理网站公告信息。通过GridView显示出公告的详细信息,包括编号、标题和时间。管理员可以通过详细信息查看公告内容,也可以对公告进行编辑、删除操作。

GridView数据绑定:

private void InitData()

{

News news = new News();

DataSet ds = news.GetNews();

gvNewsList.DataSource = ds;

gvNewsList.DataBind();

}

操作代码:

protected void gvNewsList_RowCommand(object sender, GridViewCommandEventArgs e)

{

int index = Convert.ToInt32(e.CommandArgument); //待处理的行下标

int newsId = -1;

switch (e.CommandName)

{

//修改

case "Edit":

newsId = Convert.ToInt32(gvNewsList.Rows[index].Cells[0].Text);

Response.Redirect("NewsAddEdit.aspx?id=" + newsId);

break;

//删除

case "Delete":

newsId = Convert.ToInt32(gvNewsList.Rows[index].Cells[0].Text);

News news = new News();

news.GetSingleNews(newsId);

news.Delete();

Response.Write("<Script Language=JavaScript>alert('删除成功!');</Script>");

InitData();

break;

default:

break;

}

}

5.2.4密码管理页面设计

此页面用于管理员信息修改。当管理员名及原密码均正确时,可以对管理员的相关信息进行修改操作。否则将无法修改相关信息。

修改事件代码:

if ( UserOldPwd == user.UserPwd )

{

Hashtable ht = new Hashtable();

ht.Add("UserPwd", SqlStringConstructor.GetQuotedString(UserPwd));

ht.Add("UserIDCard", SqlStringConstructor.GetQuotedString(txtIDCard.Text));

user.Update(ht);

Response.Write("<Script Language=JavaScript>alert(\"更新数据成功,请重新登录!\")</Script>");

Session.Abandon();

Response.Write("<Script Language=JavaScript>window.location.href='../AdminLogin.aspx';</Script>");

}

else

{

Response.Write("<Script Language=JavaScript>alert(\"原密码错误!\")</Script>");

}

5.2.5试卷成绩信息管理页面设计

此页面用于管理考生考试信息。在GridView中显示出了所有考生的考试信息,包括考试科目、总成绩和是否通过阅卷人审核。阅卷人可以查看考试的详细信息,并进行进一步地操作,如图11所示。

单击审核事件:

foreach ( string ID in selectedIDs )

{

Hashtable ht = new Hashtable();

ht.Add("IsCheck", 1);

(new Score()).Check(ht, ID);

}

Response.Write("<Script Language=JavaScript>alert('审核试卷成功!');</Script>");

Query();

此页面用于显示考试的详细信息。阅卷人可以查看到考生考试的具体信息,包括考试时间、成绩以及每一道题的答案。阅卷人可以根据考生的答题情况,对考生分数进行相应的修改。

单击修正事件:

protected void btnModify_Click(object sender, EventArgs e)

{

if (txtModifyScore.Text != "")

{

Score score = new Score();

score.ID = Convert.ToInt32(Request.QueryString["id"]);

Hashtable ht = new Hashtable();

ht.Add("TotalScore", SqlStringConstructor.GetQuotedString(txtModifyScore.Text));

ht.Add("IsCheck", 1);

score.Update(ht);

Response.Write("<Script Language=JavaScript>试卷得分修改成功!</Script>");

}

else

{

Response.Write("<Script Language=JavaScript>alert('请输入实际得分!');</Script>");

}

}

相关推荐
容器( ु⁎ᴗ_ᴗ⁎)ु.。oO13 分钟前
MySQL事务
数据库·mysql
cyt涛2 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油2 小时前
01_SQLite
数据库·sqlite
liuxin334455663 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。3 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec3 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa4 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke4 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D4 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录4 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份