大家好,今天给大家介绍基于C#+asp.net+SQL server的考试管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦
文章目录:
项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:28720个字65页
包含内容:整套源码+完整毕业论文
提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。
引言
省略
1.1 课题的研究背景与意义
1.1.1 研究背景
省略
由上可知,开发一个基于B/S模式的计算机等级考试管理系统是非常必要的。
1.1.2 研究意义
省略
1.2 问题的定义与简介
基于B/S模式的计算机等级考试管理系统主要要解决的问题有三点:其一,为了方便学生的学习,其主要任务是要让学生可以最快的获得最新的考试信息以及考试相关的学习资料,同时为学生提供方便快捷的成绩查询及全院考试情况查询服务。其二,为了方便辅导班教师的教学,其主要任务是方便辅导班教师的办公,其中包括辅导机会的制定、辅导信息发布、上课时间地点发布等等。其三,为了提高管理员的工作效率方便管理员的办公,其主要任务是提供快捷方便的通过率统计页面以及功能齐全的后台管理页面。
1.3 课题调研
省略
1.4 可行性分析
省略
1.4.1 技术可行性
基于B/S模式的计算机等级考试管理系统,主要包括前端页面功能程序设计以及后台数据库的建立与维护两个方面。对于前者,应具备功能齐全、易于使用等特点,而对于后者则要求能建立一个有较强数据一致性、完整性和安全性的数据库。基于以上要求,本系统采用Microsoft Visual Studio .NET 2003 和SQL Server 2000分别作为前端和后台开发工具。
省略
1.4.2 经济可行性
省略
1.4.3 操作可行性
省略
1.4.4 法律可行性
省略
1.5 论文各章简介
第1章引言部分,引言主要叙述课题的研究背景和意义、问题的定义和内容简介、课题的调研和可行性分析。
第2章系统需求分析部分:系统需求分析主要讲述了业务流程分析过程、数据流分析图例、数据字典描述等内容。
第3章系统总体设计部分:系统总体设计主要讲述了系统总体结构设计方案、系统数据结构设计、系统开发与运行环境设计等内容。
第4章用户登入模块部分:用户登入模块部分主要讲述了用户登入模块的主要功能和界面设计、详细设计等内容。
第5章辅导班管理模块部分:辅导班管理模块主要讲述了辅导班管理模块的功能和其功能的实现过程,以及辅导班管理模块的界面设计。
第6章通过率统计模块部分:通过率统计模块主要讲述了通过率统计模块的功能、通过率统计模块的界面设计和功能的详细设计。
第7章信息发布模块部分:信息发布模块主要讲述了信息发布模块的功能、信息发布模块界面设计和详细设计。
第8章信息查询模块部分:信息查询模块部分主要讲述了信息查询模块的主要功能和查询的方式,以及信息查询模块的界面设计和功能的详细设计。
第9章用户手册部分:用户手册部分的内容主要包括:系统功能介绍;运行环境简介;系统运行与操作指南。
第10章系统评价部分:系统评价部分主要包括:系统特色与优点介绍;系统存在的不足与改进方案;毕业设计心得与收获。
最后还有总结、致谢、参考资料等内容的介绍。
2 系统需求分析
2.1 业务流分析
省略
基于B/S模式的计算机等级考试管理系统的业务流程:首先,系统对所有用户进行验证,若为未注册用户则转到注册页面要求用户注册,其中管理员由系统管理员添加、辅导班教师用户则由管理员在后台管理页添加、学生注册则采用学号激活注册法(保证用户为本校用户)。登入后,管理员和辅导班教师可以跳转到后台管理页进行网上办公,在此管理员可以对辅导班进行初期管理、对计算机等级考试通过率进行统计、发布各类信息、进行数据导入工作和对站内资源进行管理等操作。辅导班教师可以在此制定辅导计划、为辅导班制定上课时间地点、发布辅导班信息、发布上课时间、维护班级信息、查询薪金情况等操作。学生用户登入后跳转到主页等待其他操作,在本站学生可以查询自己的成绩和学校的整体考试情况、快速的了解最新的考试资讯、方便的和其他同学交流学习经验、下载站内资源,也可以在本站进行辅导班报名、辅导班信息查询等等操作。
图2.1系统业务流图
2.2 数据流分析
数据流程分析主要包括对信息的流动、传递、处理、存储等的分析。数据流程分析的目的就是要发现和解决数据流通中的问题。现有的数据流程分析多是通过分层的数据流程图(data flow diagram,简称DFD)来实现的。其具体的做法是:按业务流程图理出的业务流程顺序,将相应调查过程中所掌握的数据处理过程,绘制成一套完整的数据流程图。
通过对本系统的需求分析,系统的基本功能已经大体确定。
系统的顶级数据流图如图2-2(a)所示:
图2.2 系统顶级数据流图
系统I级数据流图如图2-2(b)所示:
图2.3 系统I级数据流图
信息发布系统数据流图如图2-2(c)所示:
图2.4 信息发布系统数据流图
辅导班管理系统数据流图如图2-2(d)所示:
图2.5 辅导班管理系统数据流图
2.3 数据字典
数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据流图和数据字典共同构成系统的逻辑模型。
2.3.1 数据流
(1)名字:辅导班报名
别名:在线报名
描述:学生用户在线参加辅导班报名,以方便辅导班的运营。
定义:报名信息=学号+院系+报名语种+是否有冲突+冲突内容
位置:辅导班报名管理
(2)名字:查询成绩及通过率
别名:无
描述:用户在线查询成绩和全院的通过率以及考试分析等等
定义:查询成绩及通过率=输入准考证查询成绩+选择查询通过率方式
位置:成绩/通过率查询
(3)名字:查询站内公告
别名:站内公告
描述:管理员发布的站内信息,以方便用户及时了解一些重要信息。
定义:站内公告=编号ID+标题+内容+摘自+作者+发布时间+信息类型
位置:新闻信息系统
(4)名字:查询考试资讯
别名:考试资讯
描述:由管理员发布的考试相关信息,以便让用户及时掌握考试动态、考试政策、考试时间、考试内容和考试时间等信息。
定义:考试资讯=编号ID+标题+内容+摘自+作者+发布时间+信息类型
位置:新闻信息表
(5)名字:查询技术文章
别名:技术文章
描述:由辅导班教师或者管理员发布或者摘抄的一些学术性文章,以便让学生可以重新把握学习方向、学习方法等等。
定义:技术文章=编号ID+标题+内容+摘自+作者+发表时间+信息类型
位置:新闻信息系统
(6)名字:发布学习经验
别名:学习经验交流
描述:由用户发布的学习方法和学习技巧等信息,以便其他用户借鉴学习。
定义:学习经验=编号ID+标题+内容+摘自+作者+发布时间+信息类型
位置:新闻信息系统
(7)名字:站内信息管理
别名:信息管理
描述:管理员对用户发布的信息以及新闻信息进行管理和维护更新。
定义:信息管理=删除信息+更新信息
位置:信息发布系统
(8)名字:通过率统计分析
别名:无
描述:管理员对年度计算机等级考试成绩库进行统计分析,以方便学生对该方面信息的需求和学校的决策需求。
定义:通过率统计分析=年份+统计类型+参加人数+通过人数+通过率
位置:通过率统计系统
(9)名字:辅导班管理
别名:无
描述:管理员对辅导班进行班级创建、报名管理、收费、分班、添加/删除辅导班教师等操作。
定义:辅导班管理=辅导班报名管理+辅导班收费管理+辅导班教师管理+辅导班班级管理
位置:管理员办公页
(10)名字:辅导班信息发布
别名:无
描述:由辅导班教师发布的辅导班相关信息,如上课时间、地点、辅导计划、课程安排、教师信息等等。
定义:辅导班信息=编号ID+标题+内容+作者+发布时间+信息类型
位置:新闻信息系统
(11)名字:上传资源
别名:无
描述:由辅导班教师或者管理员上传的一些考试相关的资料或者软件等资源。
定义:资源=编号ID+标题+文件名+文件路径+资源描述+大小+下载次数
位置:资源信息管理
(12)名字:发布通过率
别名:无
描述:管理员对成绩库统计分析完毕后,将统计结果和相关分析报告发布到网站上,以便用户及时查看。
定义:发布通过率=编号ID+标题+内容+作者+发布时间+信息类型
位置:新闻信息系统
(13)名字:管理员请求
别名:进入后台管理页
描述:管理员登入后可以停留在站内首页,也可以点击进入管理员办公页。
定义:管理员请求=登入系统+发送进入后台页请求
位置:验证系统
(14)名字:辅导班教师请求
别名:进入后台管理页
描述:辅导班教师登入后可以停留在站内首页,也可以点击进入辅导班教师办公页。
定义:辅导班教师请求=登入系统+发送进入后台页请求
位置:验证系统
(15)名字:提交评论
别名:发表评论
描述:用户查看考试资讯、技术文章、学习经验和下载资源都可以发表自己的评论。
定义:提交评论=信息编号+评论编号+评论标题+评论内容+作者+发表时间
位置:评论表
(16)名字:制定辅导计划
别名:无
描述:由辅导班教师提交的关于辅导班的辅导信息,包括制定课程表,辅导班上课时间地点调整等相关信息。
定义:辅导计划=课程表制定+辅导班相关信息
位置:辅导班管理
(17)名字:提交站内公告
别名:发布站内公告
描述:管理员将编辑好的站内公告提交给信息发布系统,系统将其进行存档。
定义:提交公告=编号ID+标题+内容+作者+发布时间+摘自+信息类型
位置:新闻信息系统
(18)名字:提交考试资讯
别名:发布考试资讯
描述:管理员将编辑好的考试咨询提交给信息发布系统,系统将其进行存档。
定义:提交考试资讯=编号ID+标题+内容+作者+发布时间+摘自+信息类型
位置:新闻信息系统
(19)名字:提交技术文章
别名:发表技术文章
描述:管理员和辅导班教师将编辑好的技术文章提交给信息发布系统,系统将
其进行存档。
定义:提交技术文章=编号ID+标题+内容+作者+考试时间+摘自+信息类型
位置:新闻信息系统
(20)名字:执行收费
别名:辅导班收费管理
描述:学生报名之后,到辅导班管理员处缴纳报名费,辅导班教师收费后执行后将对后台数据进行修改,将收费标志改为已收费。
定义:执行收费=已报名+收费+修改收费标记
位置:辅导班管理系统
辅导班收费管理
(21)名字:查看报名情况
别名:辅导班报名管理
描述:管理员在后台查询辅导班报名情况,主要是对上课时间冲突情况进行分
析定位,以此决定是否要对课程表进行修改。
定义:辅导班报名管理=查看报名+查看冲突情况+修改课程表
位置:辅导班管理系统
辅导班报名管理
(22)名字:报名结束删除未收费
别名:清理报名表
描述:管理员在辅导班报名结束后,对报名表进行清理,将报名表中未缴纳辅导费用的无效报名人员清除,以备将报名表进行备份。
定义:报名结束删除未收费=报名结束+查看未收费+删除所有未收费
位置:辅导班管理
辅导班报名管理
(23)名字:收费回执
别名:无
描述:学生在缴纳辅导费用之后,将获得由管理员签发的收费回执单,以防止系统错误带来的损失。
定义:收费回执=报名+缴纳费用
位置:辅导班管理
辅导班收费管理
(24)名字:更新收费标记
别名:无
描述:管理员对某个学生执行收费之后,系统将对报名表中学生的缴费标记设为已收费。
定义:更新收费标记=报名+管理员执行收费
位置:辅导班管理
辅导班收费管理
(25)名字:保存更新
别名:保存报名更新
描述:报名结束后,管理员对报名表进行更新,并将未收费学生从报名表中清除,以便管理员对报名数据进行存档。
定义:保存更新=学号+收费标记
位置:辅导班管理
辅导班报名管理
(26)名字:报名信息
别名:提取报名信息
描述:管理员在收费时,提取报名表中的报名数据,如果学生未报名,则管理员可以打开报名页为其报名,然后再执行收费。
定义:报名信息=学号+部门+姓名+是否冲突+冲突时间+缴费标记
位置:辅导班管理
辅导班收费管理
(27)名字:分班后将学生信息保存
别名:无
描述:管理员在分班完毕后,系统将自动将该学生信息添加到辅导班学生表。主要原因是,报名表每次报名都会进行备份然后清空,为了保证数据不丢失,本系统则考虑重新建立辅导班学生信息表。
定义:收费完将学生保存=学号+姓名+班级+部门
位置:辅导班管理
辅导班班级管理
(28)名字:分班
别名:辅导班分班管理
描述:在报名结束后,管理员将对报名学生进行统计分班,同时修改报名表中
分班标记为真。
定义:分班=分班+修改分班标记+添加到学生表
位置:辅导班管理
辅导班班级管理
(29)名字:创建/删除班级
别名:无
描述:辅导班管理员在分班之前,必须创建班级,并为该班级分配教师,选择语种等操作。也可以对班级进行修改和删除。
定义:班级=班号+班级名称+班级人数+班级教师ID+开始时间
位置:辅导班管理
辅导班班级管理
(30)名字:添加辅导班教师
别名:无
描述:管理员在创建班级之前,对辅导班教师进行添加。
定义:添加辅导班教师=教师代码+教师姓名+教师职称
位置:辅导班管理
辅导班教师管理
(31)名字:统计教师薪金
别名:无
描述:管理员在教师管理部分对教师的薪金进行统计。
定义:薪金统计=理论课时数理论课时单位薪金+上机课时数上机课时单位薪金+奖金
位置:辅导班管理
辅导班教师管理
(32)名字:查询教师信息
别名:无
描述:管理员可以对教师信息进行查询、更新、删除等操作。
定义:查询教师信息=教师代码+教师姓名+教师职称
位置:辅导班管理
辅导班教师管理
(33)名字:提交班级课程表
别名:无
描述:辅导班教师在报名期间对报名出现的冲突作分析之后进行课程表的安排,以便管理员后来的分班操作。尽量的减少冲突,让辅导工作更加顺利。
定义:班级课程表=班级编号+内容+理论课时间+理论课上课地点+上机课时间+ 上机课地点
位置:辅导班管理
辅导班班级管理
(34)名字:提交辅导计划
别名:无
描述:辅导班教师在开课之前将自己的辅导计划提交到管理员处,管理员给与指示,然后再发布到辅导班公告,以便学生对自己所在班级教师的辅导计划有所了解。
定义:辅导计划=信息编号+标题+内容+发布时间+作者
位置:辅导班管理
辅导班班级管理
(35)名字:更改个人信息
别名:无
描述:辅导班教师在登入系统后,可以对自己的个人信息进行更改、添加等操作。
定义:更改个人信息=教师代码+教师姓名+教师职称+昵称
位置:辅导班管理
辅导班教师管理
3 系统设计
3.1 系统总体结构
本课题提出的是基于B/S模式的信息平台,并在此基础上利用.NET和SQL Server 2000技术构建基于Web数据库的管理系统,意在构造一个集计算机等级考试成绩查询、考试信息发布、学习经验交流、辅导班网上报名、辅导班教师网上办公、通过率统计分析等子系统为一体的计算机等级考试管理系统。目的是为了方便辅导班教师的教学、方便学生的学习交流以及方便学校对计算机等级考试的管理和相关数据的分析。
本系统由九个子模块组成:用户登录模块、考生相关数据导入模块、辅导班报名管理模块、考试成绩库导入模块、通过率统计模块、信息发布模块、报表模块、信息查询模块和系统管理模块。
整个系统的结构框架图如下图所示:
图3.1 系统模块框架图
3.2 数据结构设计
3.2.1 数据概念结构设计——E-R模型
(1) 用户管理:
图3.4 站内信息系统E-R图
3.3 系统开发与运行环境确定
3.3.1 开发环境
本系统将采用Windows xp + IIS 5.1 + Microsoft Visual Studio .NET 2003 + SQL Server 2000为设计环境进行开发
省略
3.3.2 运行环境
(1)硬件环境:
服务器端:一台配置为128M内存,CPU为Intel Pentium III 800MHZ,硬盘容量为30G的微机.
服务端:586以上的微机
通信网络:Internet网
(2)软件环境:
服务器端:
使用语言:Asp.net(C#)
数据库:SQL SERVER 2000
Asp.net编译环境:ASP.NET Web Matrix
操作系统为:Windows XP
浏览器为Internet Explore6.0
客户端
浏览器为IE6.0以上版本,分辨率:800*600以上
操作系统使用Windows9X/2000/NT/XP
3.3.3 系统实现的若干关键技术
省略
4 用户登陆模块
4.1 用户登入模块简介
用户管理模块对使用本系统的用户进行用户名、密码、用户身份的验证,确保了系统的安全性。本模块具有四项功能:一、实现用户注册和登录。若是已注册的用户,系统根据用户身份让用户进入不同的界面进行具有权限的用户操作,若是新用户则登录本系统之前要先注册;二、用户注销,退出用户界面返回主页面;三、所有用户可以修改自己的注册信息,如密码、出生年月等基本资料。
4.2 用户登入模块详细设计
4.2.1 用户登入模块详界面设计
(1)首页登入界面:
图4.2办公通道等入界面
4.2.2 用户登入模块详具体实现
在用户登入模块中,所涉及的用户有三种,一是学生用户,二是管理员用户,三是辅导班教师用户。用户的类型不同,他所拥有的权限也就不同,比如说管理员后台办公页只有管理员能够登入,辅导班教师后台办公页也只有辅导班教师才能登入。
由于该模块功能比较简单,所遇到的问题比较少。其中,用户注册方式采用激活的形式,比如说学生注册时学要输入学号进行验证,如果验证失败说明该用户不是本校用户,以此保证用户都为本校用户。
次模块重要代码如下:
if(UserSelect2.SelectedValue=="admin")
{
SqlConnection cn= new SqlConnection(ConfigurationSettings.AppSettings["cn_SQL"]);
//验证用户信息
SqlCommand cm=new SqlCommand("select Admin_Id,PassWord from admin where Admin_Id='"+UserId.Text+"'and PassWord='"+PassWord.Text+"'",cn);
try
{
cn.Open();
SqlDataReader dr=cm.ExecuteReader();
//如果在用户表中找到该用户,则验证成功,否则失败。
if(dr.Read())
{
//验证成功则把用户名信息保存到Session值中。
Session["userName"]=UserId.Text;
Response.Redirect("../Admin/Main_Admin.htm");
}
else
{
MessageBox.Show("用户名/密码/身份错误!");
}
}
catch(SqlException e4)
{
//提示Sql语句异常。
MessageBox.Show(e4.Message.ToString());
}
finally
{
cn.Close();
}
5 辅导班管理模块
5.1 辅导班管理模块功能简介
辅导班管理模块分为三个部分:报名管理、收费管理、班级管理、教师管理。一、在报名管理中,学生在此实现网上报名,在报名时学生可以对辅导班提供的课程表与自己的现实情况进行对比,并将上课冲突时间填入报名信息表中。而管理员则可以对报名学生进行管理,同时根据学生填写的上课时间冲突信息进行分析,以进一步与辅导班教师一起确定最为合理的辅导班课程表。同时管理员在报名结束可以对报名表进行清理,将报名却未缴费的学生删除二、在收费管理中,学生报名后在报名结束之前到计算机系辅导班管理员处缴纳辅导费用,同时管理将给与收费回执。三、在班级管理中,管理员可以创建辅导班级,并根据学生的上课时间冲突情况和各班级课程表对已缴纳辅导费用的学生进行合理分班,尽量的减少冲突。当然管理员在此也可以对辅导班执行删除操作。四、教师管理,在此管理员可以对教师进行添加和删除,同时教师也可以在此对自己的个人信息进行更新。
辅导班管理模块功能图:
图5.1 辅导班管理模块功能图
5.2 辅导班管理模块详细设计
5.2.1 报名管理
(1)网上报名
界面如下图:
图5.2辅导班在线报名
学生在填写报名信息错误时会触发如下错误提示:
①在学生输入学号后,系统将自动在学生表中查找与此匹配的学号,如果查找失败,则给出错误提示。
②学生在提交时学号正确但忘了选择要辅导的语种,将提示错误。
③学生在其他信息填写成功后选择了由冲突时却忘了填写冲突内容时,将提示错误。
学生在全部填写正确后,报名信息将被写入数据库保存,同时系统提示报名成功并指示缴费地点:
图5.3辅导班报名指示地点消息框
该页重要部分代码如下(提交按钮代码):
private void Submit0_Click(object sender, System.EventArgs e)
{
if(Page.IsValid)
{
cn.Open();
//初始化参数
string xh;
string bmmc;
string Language_Type;
string impact;
string impactContent;
xh=TxBxh.Text;
bmmc=DDL4.SelectedValue;
Language_Type=DDL10.SelectedValue;
impact=impact1.SelectedValue;
impactContent=impactContent1.Text;
//判断是不是已经报过名了
SqlCommand cmxh=new SqlCommand("select * from signUp where xh='"+TxBxh.Text+"'",cn);
SqlDataReader dr=cmxh.ExecuteReader();
if(TxBxh.Text=="")
{
MessageBox.Show("请输入学号!");
}
else if(dr.Read())
{
//如果在报名表中读取该同学的信息,则提示他已经报过名了。
MessageBox.Show("您已经报过名了!^_^");
}
//对页面输入区进行判定
else if(DDL10.Items.FindByValue("0").Selected)
{
MessageBox.Show("请选择语种");
}
else if(impact1.SelectedValue=="yes"&&impactContent1.Text=="")
{
MessageBox.Show("请输入冲突原因!");
}
//判定输入合法,则插入到数据库
else
{
cn.Close();
try
{
cn.Open();
//提取学生的基本信息。
SqlCommand cm0=new SqlCommand("select xm,bj from xs,bj where xs.bh=bj.bh and xs.xh='"+TxBxh.Text+"'",cn);
SqlDataReader dr1=cm0.ExecuteReader();
if(dr1.Read())
{
//读取成功则把读取到的信息进行付值。
string xm=dr1["xm"].ToString();
string bj=dr1["bj"].ToString();
DateTime now= DateTime.Now;
string time=now.Date.ToString();
dr1.Close();
//将报名信息插入到报名表中。
SqlCommand cm=new SqlCommand("insert into signUp(xh,xm,bj,bmmc,Language_Type,impact,impactContent,charge,signUpTime,classFlag)values('"+xh+"','"+xm+"','"+bj+"','"+bmmc+"','"+Language_Type+"','"+impact+"','"+impactContent+"','未收费','"+time+"','0')",cn);
cm.ExecuteNonQuery(); //判定是否插入成功。
MessageBox.Show("恭喜您报名成功!您可以到计算机大楼交纳报名费!感谢您的支持!");
bool chack;
chack=true;
if(chack)
{
//报名成功则将页面数据请空。
TxBxh.Text="";
impactContent1.Text="";
DDL10.ClearSelection();
DDL10.Items.FindByValue("0").Selected = true;
impact1.ClearSelection();
impact1.Items.FindByValue("no").Selected=true;
}
}
else
{
//如果读取学生信息失败,则提示学号输入错误。
MessageBox.Show("您的学号输入有误~!");
}
}
catch(SqlException e2)
{
MessageBox.Show(e2.Message.ToString());
}
finally
{
cn.Close();
}
}
}
图5.4 辅导班报名管理图
在查询方式的选择上,可以选择查询全部、查询已收费、查询未收费,这样将使得管理员可以方便的把握报名情况和上课时间冲突情况。
该页重要部分代码如下所示(报名结束后删除未缴费者):
private void BtnSelect1_Click(object sender, System.EventArgs e)
{
//调用绑定DataGrid方法,实现查询绑定
stuInfoDataBind();
}
private void Button1_Click(object sender, System.EventArgs e) //删除报名结束还没有缴费者
{
try
{
cn.Open();
//执行删除操作
SqlCommand cm4=new SqlCommand("delete from signUp where charge='未收费'",cn);
cm4.ExecuteNonQuery();
MessageBox.Show("删除成功!");
}
catch(SqlException e5)
{
MessageBox.Show(e5.Message.ToString());
}
finally
{
cn.Close();
}
ShowStats(); //删除后重新邦定DataGrid的页数显示。
stuInfoDataBind();//删除后再次绑定DataGrid。
}
图5.5辅导班收费管理
在此管理员可以根据不同情况对前来缴费的学生执行收费,如果是单个学生前来缴费则选择个人收费,如果是以班级为单位的缴费形式则选择使用集体收费项。
该页重要部分代码如下(集体收费):
private void BtnAllCharge_Click(object sender, System.EventArgs e)
{
try
{
cn.Open();
//对选中的学生执行收费。
for(int i=0;i<stuInfo.Items.Count;i++)
{
//定义一个辅助的CheckBox用来保存DataGrid中选中的CheckBox。
CheckBox TempCB = (CheckBox)stuInfo.Items[i].FindControl("CB");
//定义一个辅助的Lable用来存储在页面代码中定义的用以记录学号的Lable
Label TempLab = (Label)stuInfo.Items[i].FindControl("Lab");
if (TempCB.Checked) //对DataGrid中每一行的CheckBox进行判断。
{
//如果是选中的则执行更新收费标记操作。
SqlCommand cm4 = new SqlCommand("update signUp set charge='已收费' where xh='"+ TempLab.Text+"'",cn);
cm4.ExecuteNonQuery();
}
}
MessageBox.Show("收费成功!");
stuInfo.DataBind();//重新邦定DataGrid。
}
catch(SqlException e5)
{
MessageBox.Show(e5.Message.ToString());
}
finally
{
cn.Close();
}
}
图5.7辅导班管理之分班系统
在此处管理员先创建班级,然后再对报名学生进行分班,在分班时管理员也可以查询课程表,然后根据课程表对有冲突学生进行最小冲突数分班。
该页部分重要代码如下(分班代码):
private void Button2_Click(object sender, System.EventArgs e)//分班代码部分。
{
if(DDLClass.SelectedValue=="0")//如果班级下拉列表没有被选择则提示用户。
{
MessageBox.Show("请选择班级!");
}
else
{
try
{
//定义两个int型的变量来存放班级人数和班级上限人数。
int stuLimit;
int stuNum;
cn.Open();
//从class表中提取人数上限值和班级现有人数值
SqlCommand cm7=new SqlCommand("select Stu_limit,Stu_number from class where Class_ID='"+DDLClass.SelectedValue.ToString()+"'",cn);
SqlDataReader dr=cm7.ExecuteReader();
if(dr.Read())//如果读取成功则执行分班。
{
//提取该班级设定的人数上限数据。
stuLimit=Int32.Parse(dr["Stu_limit"].ToString());
//提取该班级的现有人数数据。
stuNum=Int32.Parse(dr["Stu_number"].ToString());
dr.Close();
//用一个for循环执行分班
for(int i=0;i<stuInfo.Items.Count;i++)
{
//定义一个辅助的CheckBox用来保存DataGrid中选中的CheckBox。
CheckBox TempCB = (CheckBox)stuInfo.Items[i].FindControl("CB");
//定义一个辅助的Lable用来存储在页面代码中定义的用以记录学号的Lable
Label TempLab = (Label)stuInfo.Items[i].FindControl("Lab");
//看该班级人数是否达到上限
if(stuLimit>stuNum)
{
if (TempCB.Checked)
{
//将报名表中学生基本信息插入到辅导班学生表中
SqlCommand cm8= new SqlCommand("insert student(xh,xm,bmmc) select xh,xm,bmmc from signUP where xh='"+ TempLab.Text+"'",cn);
cm8.ExecuteNonQuery();
//对上面插入的辅导班学生信息进行初始密码设定,同时分配班级。
SqlCommand cm9=new SqlCommand
("update student set Stu_PassWord='000000', Class_ID='"+DDLClass.SelectedValue.ToString()+
"' where xh='"+ TempLab.Text+"'",cn);
cm9.ExecuteNonQuery();
//将报名表中分班标记设为1,即设为已分班标记
SqlCommand cm10=new SqlCommand("update signUp set classFlag='1' where xh='"+ TempLab.Text+"'",cn);
cm10.ExecuteNonQuery();
MessageBox.Show("学号:"+TempLab.Text+"成功加入"+DDLClass.SelectedValue.ToString());
//班级现有人数加1
stuNum=stuNum+1;
}
}
else
{
MessageBox.Show("该班级人数已达上限,无法加入!");
break;
}
}
//学生分班完毕后,对班级表的现有人数进行更新
SqlCommand cm11=new SqlCommand("update class set Stu_number='"+stuNum.ToString()+"'
where Class_ID='"+DDLClass.SelectedValue.ToString()+"'",cn);
cm11.ExecuteNonQuery();
MessageBox.Show("该班人数现为:"+stuNum.ToString());
stuInfo.DataBind();
}
else
{
MessageBox.Show("读取班级表数据失败!");
}
}
catch(SqlException e5)
{
MessageBox.Show(e5.Message.ToString());
}
finally
{
cn.Close();
}
图5.8教师管理
在此页面管理员只要知道教师的教师代号就可以对教师进行添加/删除,同时在此也可以对教师的辅导薪金进行统计计算。
该页部分重要代码如下(教师信息添加):
//添加教师信息
private void addTeacher_Click(object sender, System.EventArgs e)
{
try
{
if(teacherId.Text!="")
{
cn.Open();
//从教师表中提取教师信息。
SqlCommand cm1=new SqlCommand("select jsdm,jsmc,zc from jsdm where jsdm='"+teacherId.Text+"'",cn);
SqlDataReader dr1=cm1.ExecuteReader();
if(dr1.Read())
{
//如果提取成功则将数据负值给下列变量。
string jsdm=teacherId.Text;
string jsmc=dr1["jsmc"].ToString();
string zc=dr1["zc"].ToString();
dr1.Close();
//将提取到的数据插入到辅导班教师信息表。
SqlCommand cm2=new SqlCommand("insert into teacher (Teacher_ID,Teacher_PassWord,Teacher_NAME,Teacher_Position) values('"+jsdm+"','888888','"+jsmc+"','"+zc+"')",cn);
cm2.ExecuteNonQuery();
MessageBox.Show("教师信息插入成功!");
}
}
else
{
MessageBox.Show("教师代码输入有误!");
}
}
catch(SqlException e1)
{
MessageBox.Show(e1.Message.ToString());
}
finally
{
cn.Close();
}
6 通过率统计模块
6.1 通过率统计模块功能简介
此模块包括两个部分:一,通过率统计发布,在该部分管理员可以对计算机等级考试根据不同要求进行通过率统计分析,这种统计在以往都要花上很长的时间,而在此只需要管理员随意选择然后点击计算按钮就轻松将统计工作完成。但是此处存在一个问题,就是缺考人数和缺考率的统计,我认为这也是有必要统计的一部分,因为通过对以往数据的分析我发现每年全省的缺考人数都在1/3左右,而我们学校学生缺考率每年也都高达13%,这是一个不容忽视的问题。但是我在做该部分功能时却发现学校的数据库并没有这方面的数据标记,以致于无法用程序进行实现,如果在报名表中添加一项缺考标记,那此项方可统计。该问题还需学校以后对报名表进行修改后方能解决。
二,考试分析,管理员在对通过率统计完成后还可以对考试进行考试分析,也就是基于数据的统计从而发表自己的观点。在分析业管理员可以调出已统计好的数据,也可以将查出的通过率等数据与全省数据进行对比分析。同时,管理员通过对年份的选择,可以查询往年每次的考试数据,通过与往年数据的对比分析从而得出一些分析结果。总之,考试分析主要是为了让学生能够更好的把握考试方向,更轻松的应对考试局势的变化,同时,通过对考试的分析,学校也方便做一些新的决策。
6.2 通过率统计模块的详细设计
6.2.1 通过率统计模块界面设计
通过率统计界面的主要功能就是对考试成绩库进行统计,得出相应的统计结果,然后发布在查询模块中供用户查询。界面设计如下:
图6.1通过率统计
在计算方式中,管理员可以选择按系统计、按班级统计、按语种统计、辅导班整体统计,辅导班按班级统计、辅导班学生按实际所在班级统计(这一项主要是用于将辅导班通过率与各班级通过率进行比较,从而提高辅导班的声誉等等)同时,此处所提供的统计分类方式可能并不能完全满足需求,但是对于学校的整体考试分析却有着非常重要的帮助。当然,如果有别的需求的,以后的系统管理员还可以对其进行扩充,从而满足新的需求。
考试分析界面的主要功能是为管理员提供一个对考试进行分析的平台,其界面如下:
图6.2通过率分析
在选择了考试时间,统计方式之后,管理员可以对此统计结果进行分析评价,提交之后将被系统自动保存在数据表中,从而当学生察看通过率时,同样也可以看到管理员对此项统计结果作出的分析评论。
6.2.2 通过率统计模块功能具体实现
通过率统计功能设计较为繁琐,主要的难点在于对数据库的分析和操作,由于通过率统计部分统计项较多,此处我将就‘按系统计’进行说明分析。
在按系统计中,首先是对数据库数据进行分析,数据库与此相关的表有报名表、成绩表、学生表、班级表、系部代码表。由于数据项较为分散,所以我在后台数据库创建了三个视图,分别为depte_countSign(统计各系报名人数)、depte_pathNum(统计各系通过人数)、depte_path(利用外连接将depte_countSign和depte_pathNum放到一个视图里面)这个视图主要解决的可能会出现的问题:假如该系虽然有人报名但是一个都没有通过,如果只是用depte_countSign和 depte_pathNum两个视图的话,那在计算时则取不到该班级的通过人数,而利用外连接的话,就算是没有人通过,在试图中都会有此项的通过人数统计(为空值),这样通过率统计程序就能正常运行了。下面我将给出这三个视图的代码和后台按系统计代码段。
①视图depte_countSign的SQL语句:
CREATE VIEW dbo.depte_countsign
AS
SELECT COUNT(dbo.bmb.xh) AS countsign, dbo.xbdm.xbmc
FROM dbo.xs INNER JOIN
dbo.bmb ON dbo.xs.xh = dbo.bmb.xh INNER JOIN
dbo.bj ON dbo.xs.bh = dbo.bj.bh INNER JOIN
dbo.xbdm ON dbo.bj.xbdm = dbo.xbdm.xbdm
GROUP BY dbo.xbdm.xbmc
②视图depte_pathNum的SQL语句:
CREATE VIEW dbo.depte_pathNum
AS
SELECT COUNT(dbo.cj.Zkz) AS PathNum, dbo.xbdm.xbmc
FROM dbo.xs INNER JOIN
dbo.bmb ON dbo.xs.xh = dbo.bmb.xh INNER JOIN
dbo.bj ON dbo.xs.bh = dbo.bj.bh INNER JOIN
dbo.xbdm ON dbo.bj.xbdm = dbo.xbdm.xbdm INNER JOIN
dbo.cj ON dbo.bmb.ZKZ = dbo.cj.Zkz
GROUP BY dbo.xbdm.xbmc
③视图depte_path的SQL语句:
CREATE VIEW dbo.depte_path
AS
SELECT dbo.depte_countSign.xbmc, dbo.depte_countSign.countsign,
dbo.depte_pathNum.PathNum
FROM dbo.depte_countSign LEFT OUTER JOIN(外连接)
dbo.depte_pathNum ON dbo.depte_countSign.xbmc = dbo.depte_pathNum.xbmc
④按系统计代码段:
else if(select.SelectedValue.ToString()=="按系统计")//按系统计通过率。
{
try
{
cn.Open();
//先判断在通过统计表中是否已经有该项统计。
SqlCommand cm42=new SqlCommand("select * from pathStatistics where type='按系统计' and ExamTime='"+ExamTime.Text+"'",cn);
SqlDataReader dr4=cm42.ExecuteReader();
if(dr4.Read())
{
//读取成功则提示该项已经统计或者年份输入错误。
MessageBox.Show("该项已经统计,或者输入的年份有误!");
}
else //读取失败,则说明该项尚未统计。
{
dr4.Close();
//从数据库中提取按系计算所需的数据,数据在视图depte_path中
DataSet ds4=new DataSet();
SqlCommand cm4=new SqlCommand("select *from depte_path",cn);
SqlDataAdapter sda4=new SqlDataAdapter(cm4);
sda4.Fill(ds4,"depte_path");
// 定义一个DataTable用来存放提取出来的待统计的数据
DataTable DepPath=new DataTable();
DepPath=ds4.Tables["depte_path"];
//计算通过率部分
for(int i=0;i<DepPath.Rows.Count;i++)
{
//定义三个用于计算的变量,x用来存放报名人数,y用来存放通过人数,z用来存放通过率
float x,y,z;。
//定义两个用于存放报名人数和通过人数的变量。
int countSign,pathNum;
//获取该行的报名人数数据和通过人数数据
if(DepPath.Rows[i].ItemArray[2].ToString()=="")//如果通过人数列为空
{
pathNum=0;
y=0;
}
else//如果不存在通过人数为空现象,则直接负值。
{
pathNum=Int32.Parse(DepPath.Rows[i].ItemArray[2].ToString());
y=Int32.Parse(DepPath.Rows[i].ItemArray[2].ToString());
}
if(DepPath.Rows[i].ItemArray[1].ToString()=="")//如果报名人数列为空。
{
countSign=0;
x=0;
}
else//如果不存在人数为空的现象,则直接负值。
{
countSign=Int32.Parse(DepPath.Rows[i].ItemArray[1].ToString()); x=Int32.Parse(DepPath.Rows[i].ItemArray[1].ToString());
}
//获取该行数据的系部名称。
string dept=DepPath.Rows[i].ItemArray[0].ToString();
//计算通过率
if(x!=0)//如果通过人数不为0
{
z=(y/x)*100;
}
else//如果为0
{
z=0;
}
//将通过率数据转化成string类型
string PathCount=z.ToString()+"%";
//将计算出来的数据插入到通过率表中
SqlCommand cm41=new SqlCommand("insert into pathStatistics(type,content,countSign,pathNum,ExamTime,pathOdds)values('按系统计','"+dept.ToString()+"','"+countSign.ToString()+"','"+pathNum.ToString()+"','"+ExamTime.Text+"','"+PathCount.ToString()+"')",cn);
cm41.ExecuteNonQuery();
}
MessageBox.Show("统计成功!");
}
}
catch(SqlException e4)
{
MessageBox.Show(e4.Message.ToString());
}
finally
{
cn.Close();
}
BindPathInfo();
}
7 信息发布模块
7.1 信息发布模块功能简介
信息发布模块的主要功能就是给用户提供一个交流信息的平台,管理员可以在此发布考试公告、考试资讯、技术文章、通过率、考试分析、考试成绩等信息。学生则可以在此获得一些自己需要的信息,同时也可以发表一些自己认为比较有用的学习经验供他人参考以及对比人发表的一些文章提出自己的见解等等。而辅导班教师则可以用此系统发布一些辅导班相关的信息,比如说发布课程表、辅导计划、班级简介、技术文章、教学经验、上课时间地点更改通知等信息。此模块包括三个部分:信息发布系统、显示信息系统、评论系统。
7.2 信息发布模块的详细设计
7.2.1 信息发布模块界面设计
信息发布是一个页面比较丰富的系统模块,在此我分别用一个发布页面,一个显示页面,一个评论页面来对其进行说明分析。
(1)信息发布系统之考试资讯发布(管理员后台页):
图7.1考试资讯发布
信息提交后,系统将数据存储在信息表中,同时为每一条新闻信息都赋予一个自动产生的编号。在此提交的考试资讯信息将会直接显示在首页的考试资讯栏内。
(2)信息显示系统之考试资讯显示(首页):
图7.2考试资讯显示
在此,用户可以方便的对信息进行浏览,同时也可以发表评论。
(3)评论系统:
图7.4显示评论
该部分主要是为了加强用户与文章作者的交流,同时也让新闻系统真正的活跃起来。
7.2.2 信息发布模块具体实现
该部分主要的难点可能在于页面之间的传值问题了,其他的都只是一些针对数据库的操作。最开始我使用的是在HTML代码的超连接中传值的,虽然可以实现功能,只是这样的传值方式比较难以控制,同时在进行页面刷新时,特别是在新闻多了进行分页显示后,单击下一页就会提示从上个页面传来的值丢失的错误。后来直接采用的是利用SESSION进行页面数值的传递。
该部分所涉及的表有新闻信息表(news)和评论表(comment)。
该部分重要代码如下:
(1)新闻浏览:
public void Show_News()//新闻浏览
{
try
{
cn.Open();
DataSet ds = new DataSet();
string nid = Request.Params["id"];//获取上个页面传过来的新闻信息ID
int news_id = Int32.Parse(nid);
SqlCommand cmd = new SqlCommand("select * from news where id="+news_id+"",cn); //执行查询
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(ds,"new");
dr = ds.Tables["new"].Rows[0];//将提取到的数据负值给DataRow
Session["newsId"]=dr["id"].ToString();
}
(2)发表评论:
private void commentBtn_Click(object sender, System.EventArgs e)
{
if(titelTbox.Text=="")
{
MessageBox.Show("标题不能为空!");
}
else if(contentTbox.Text=="")
{
MessageBox.Show("内容不能为空");
}
else
{
try
{
cn.Open();
string nid1 = Request.Params["id"];
int news_id1 = Int32.Parse(nid1);
DateTime now=DateTime.Now;//获取系统时间。
string user_name=Session["userName"].ToString();//提取用户信息。
if(user_name=="")//如果该用户未登录,则发表的评论作者负值为‘游客’
{
user_name="游客";
}
SqlCommand cm1=new SqlCommand("insert into comment(id,comment_title,comment_auther,comment_time,comment_content) values('"+news_id1+"','"
+titelTbox.Text+"','"+user_name+"','"+now.ToString()+"','"+contentTbox.Text+"')",cn);
cm1.ExecuteNonQuery();
MessageBox.Show("评论已提交!谢谢您的参与!");
}
8 信息查询模块
8.1信息查询模块功能简介
信息查询模块是本系统的一个重要模块,该模块主要任务是要让用户可以方便的查询到他们最想要查询的信息,比如考试成绩、全院考试通过情况、通过、辅导班课程表、辅导班信息、教师信息、最新考试动态、考试资讯等等相关的信息。
本系统中所涉及的查询有多处,在首页可以对学生的考试成绩进行查询,进入查询专业还可以对全院的考试情况进行查询。在查询学生成绩时只需输入自己的准考证即可,如果学生忘记了或者丢失了准考证,可以在找回准考证处填写个人信息进行取回自己的准考证的操作。而学生在查询全院通过情况时,只需随意选择已统计发布的通过率情况,本系统在保证查询速度的基础上尽量的满足用户的查询需求。同时,通过率统计方面还可以进行扩充,管理员可以根据用户的查询需求对通过率统计模块进行扩充维护,使功能更加强大,使查询服务更高效。
8.2 信息查询模块的详细设计
8.2.1 信息查询模块界面设计
(1)首页成绩查询界面设计
图8.1首页成绩查询界面
在此,学生只可以对单个成绩进行查询,且查询结果只用MessageBox的形式给出提示。
(2)成绩/通过率查询界面设计
图8.2成绩/通过率查询专区
用户在该页面不仅可以查询自己的成绩,还可以查看由管理员统计的各项通过率情况,此页面的设计主要的要点是尽可能的方便用户的操作,在功能完善的基础上尽可能的满足用户对信息的需求。
8.2.2 信息发布模块具体实现
该部分所涉及的基本都是对数据库的操作,同时对页面的控制也比较多,比如说在查询成绩时把通过率查询显示板块屏蔽,还有对DataGrid的分页控制等等。这些东西虽然都是微小的细节,而在进行控制的时候却也比较繁琐。不过,为了让用户的操作更方便,为了让界面更简洁友好,这些的细节就显得非常重要了。由于这部分代码比较多,重复地方也非常那个之多,在此就只对部分代码进行解释了。
该部分重要代码如下(成绩查询和通过率查询):
//成绩查询
private void Button1_Click(object sender, System.EventArgs e)
{
pathCountSelectR.Visible=false;//将通过率显示部分屏蔽。
greadSelectR.Visible=true;
try
{
cn.Open();
SqlCommand cm2=new SqlCommand("select bmb.xh,bmb.ZKZ,bmb.Name,bmb.Xm,cj.Dz,cj.Cjj from bmb left outer join cj on bmb.Zkz=cj.Zkz where bmb.Zkz='"+ZkzBox.Text+"'",cn);//提取该生的成绩信息
SqlDataReader dr=cm2.ExecuteReader();
if(dr.Read())
{
dr.Close();
ZkzBox.Text="";
SqlDataAdapter sda2=new SqlDataAdapter(cm2);
DataSet ds2=new DataSet();
sda2.Fill(ds2,"cj");
DataView dv2=new DataView(ds2.Tables["cj"]);
DataTable dt=new DataTable();
dt=ds2.Tables["cj"];
if(dt.Rows[0].ItemArray[4].ToString()=="")//如果该生的成绩为空,则提示
{
greadSelectMess.Text="对不起,您没有通过!别灰心,下次加油哦!";
}
greadSelectG.DataSource=ds2.Tables["cj"].DefaultView;//邦定DataGrid
greadSelectG.DataBind();
}
else
{
MessageBox.Show("准考证号错误!");
}
}
catch(SqlException e2)
{
MessageBox.Show(e2.Message.ToString());
}
finally
{
cn.Close();
}
}
//通过率查询
private void collegeCount_Click(object sender, System.EventArgs e)//全院通过率查询
{
pathCountSelectR.Visible=true;
compareTC.Visible=false;
greadSelectR.Visible=false;
pathCountG.Visible=true;
classPath.Visible=false;
TD2.Visible=false;
string type="全院统计";
ShowStats();
BindPathGrid(type);//调用BindPathGrid()方法
}
//邦定通过率显示DataGrid
private void BindPathGrid(string type)
{
try
{
cn.Open();
SqlCommand cm1=new SqlCommand("select * from pathStatistics where type='"+type.ToString().Trim()+"'",cn);
SqlDataAdapter sda0=new SqlDataAdapter(cm1);
DataSet ds0=new DataSet();
sda0.Fill(ds0,"pathStatistics");
DataView dv0=new DataView(ds0.Tables["pathStatistics"]);
pathCountG.DataSource=ds0.Tables["pathStatistics"].DefaultView;
pathCountG.DataBind();
}
catch(SqlException e0)
{
MessageBox.Show(e0.Message.ToString());
}
finally
{
cn.Close();
}
}
结 论
省略
致 谢
省略
参 考 文 献
[1] 全国计算机等级考试官方网站:http://www.ncre.cn
[2] 吉根林,崔海源.ASP.NET程序设计教程.北京:电子工业出版社,2004.
[3] 李正希,胡方霞,陈发吉.ASP.NET案例开发.北京:中国水利水电出版社,2005.
[4] John Sharp,John Jagger.Visual C#.NET程序设计.北京:北京大学出版社,2002.
[5] 杨鲲鹏,孟凡琦,温才焱.ASP.NET+SQL SERVER动态网站开发.北京:电子工业出版社,2005.
[6] Chris Ullman,John Kauffman,杨浩译.ASP.NET 1.1入门经典-Visual C#.NET2003编程篇.北京:清华大学出版社,2004.
[7] 陈娴,刘志宝,李岱.ASP.NET项目开发实践(第2版).北京:中国铁道出版社,2005.
[8] 季久峰,专家门诊----ASP.NET开发答疑200问.北京:人民邮电出版社,2004.
[9] 刘斌,张军,ASP.NET+SQL SERVER动态网站开发案例精选.北京:清华大学出版社,2005。
[10] 位元文化,CSS/HTML网页设计.北京:中国铁道出版社,2002.
[11] 石志国,ASP.NET实用案例教程.北京:清华大学出版社,2003.
[12] 陈志伯,ASP.NET数据库应用程序开发教程.北京:人民邮电出版社,2005.
本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。
序号 | 毕业设计全套资源(点击下载) |
---|---|
本项目源码 | 基于C#+asp.net+SQL server的考试管理系统设计与实现(源码+文档)C#.net_BS_考试管理系统.zip |