摘 要
教务平台之学籍管理模块是一个典型的教务信息管理系统(MIS),其开发主要包括后台数据库的建立和前端应用程序的开发两个方面。对于后台数据库要求实现数据的完整性、一致性和安全性;对于前台应用程序开发则要求模块功能完备、界面友好、易使用等特点。
教务平台之学籍管理模块是根据高校教务管理的实际需求,采用微软的.NET Framework2.0作为开发平台,使用SQL Server 2005来设计数据库,以ASP.NET和C#作为前台的开发语言,来完成学生学籍的管理。该设计是基于B/S模式的信息管理系统,主要实现用户管理、学生注册、学籍异动,学生花名册查看和打印等主要功能。同时为了保证后台代码和数据的保护性、密封性,使用了一个中间层分离开前台页面和后台数据的交互操作,使该系统层次清晰,便于开发,维护。通过该系统的应用,可以满足高校教务学籍管理工作的高效化、无纸化和网络化的需求,提高高校教务的工作质量与效率。
关键词:教务信息管理;B/S;ASP.NET;NET Framework2.0
2.2 系统实现环境与技术
“.NET代表一个集合,一个环境,一个可以作为平台支持下一代Internet的可编程结构。”即.NET=新平台+标准协议+统一开发工具。.NET Framework(框架结构)是.NET平台的基础,它是建设,开发以及运行WEB应用程序和WEB服务的环境,它包含了公共语言运行库(CLR)和.NET Framework类库—就像ADO.NET,ASP.NET和窗体 ——提供了标准的高级服务,能够使各样的计算机系统成为一体。同时.NET Framework提供了特色丰富的应用环境,精简的开发和简单的集成一些不同的开发语言,它所能直接支持的语言有C++, C#, Visual Basic, 和 JScript .NET和J#。
在这样的环境下,教务平台—学籍管理模块在.Net Framework 2.0下实现,采用SQL Server 2005作为数据提供者。系统开发中使用的集成开发环境是和.Net Framework 2.0配套的Visual Studio 2005,使用的语言是C#。
2.2.1 Visual Studio 2005介绍
Visual Studio 2005 是一系列高效的、智能的开发工具的统称,它拥有一个庞大的产品线,包括面向学生、爱好者、初学者的Express版,面向专家、Visual Basic 6的Standard版,面向顾问、企业开发人员的Professional版和面向架构师的Team System版本。在这些版本中,有些集成了开发软件常用到的东西,比如重构、单元测试、类设计器等等,以方便开发人员快速的设计各类软件。
2.2.2 SQL Server 2005介绍
SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能工具提供了企业级的数据管理。SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。SQL Server 2005 数据引擎是企业数据管理解决方案的核心。此外 SQL Server 2005 结合了分析、报表、集成和通知功能。
2.2.3 IIS介绍
Microsoft IIS 是允许在公共Intranet或Internet上发布信息的Web服务器。IIS是Internet信息服务(Internet Information Server)的缩写。它是一种Web服务,主要包括WWW服务器、FTP服务器等。它使得在Intranet(局域网)或Internet(因特网)上发布信息成了一件很容易的事。
2.2.4 ASP.NET介绍
ASP.NET 不仅仅是 Active Server Page (ASP) 的下一个版本,它还提供了一个统一的 Web 开发模型,其中包括开发人员生成企业级 Web 应用程序所需的各种服务。ASP.NET 的语法在很大程度上与 ASP 兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。可以通过在现有 ASP 应用程序中逐渐添加 ASP.NET 功能,随时增强 ASP 应用程序的功能。它是一个已编译的、基于 .NET 的环境,可以用任何与 .NET 兼容的语言创作应用程序,任何 ASP.NET 应用程序都可以使用整个 .NET Framework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。这不仅使得 Web 开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到 Web 页的 GUI 和完全集成的调试支持。当创建 ASP.NET 应用程序时,开发人员可以使用 Web 窗体或 XML Web services,或以他们认为合适的任何方式进行组合。每个功能都能得到同一结构的支持,使您能够使用身份验证方案,缓存经常使用的数据,或者对应用程序的配置进行自定义。
4.1 总模块设计
该模块是主管学籍工作人员的工作界面,可以对全校学生的信息进行录入、维护和查询;对学生的异动信息进行录入、维护和查询;还可提供学生异动情况查询,以及查看和打印学生相关信息的主要功能。用户登陆系统以后,根据相关的权限进行相关的操作。
图3 功能模块示意图
4.2 具体模块设计与开发
4.2.1 用户角色
用户权限在高校管理平台中是一个公共的模块,学籍管理模块根据实际需求需要,设定了系统管理员、教务处用户、班主任三个用户角色。系统管理员可以修改,查看该系统所有信息。班主任只能对自己所管辖的班级信息进行修改和查看。教务处用户在该模块主要是对学生学籍异动情况进行处理。
角色分配是通过系统管理模块实现的,根据模块需求,为每个用户增加了具体权限,然后通过登陆界面来实现。图4为系统管理员(admin)登陆界面,图5系统管理员进入主页面后的界面。他拥有对整个教务系统的管理权限。
图4 系统管理员登陆
图5 高校管理系统所有功能
登陆界面实现代码:
protected void btnLogin_Click(object sender, ImageClickEventArgs e)
{ //获取输入的用户名和密码;
string userName = NJJ.Common.PageValidate.InputText(txtUsername.Value.Trim(), 30);
string Password = NJJ.Common.PageValidate.InputText(txtPass.Value.Trim(), 30);
AccountsPrincipal newUser = AccountsPrincipal.ValidateLogin(userName, Password);
if (newUser == null) //登陆信息判断与验证;
{
this.lblMsg.Text = "登陆失败: " + userName;
}
else
{
User currentUser = new NJJ.Accounts.Bus.User(newUser);
Context.User = newUser;
if (((SiteIdentity)User.Identity).TestPassword(Password) == 0)
{
this.lblMsg.Text = "你的密码无效!";
}
else
{
FormsAuthentication.SetAuthCookie(userName, false);
NJJ.TreeAndLog.TreeAndLogManage log = new NJJ.TreeAndLog.TreeAndLogManage(); //系统日志管理,增加日志信息
log.AddLog(DateTime.Now.ToString(), "用户登陆", User.Identity.Name, "1",Request.UserHostAddress);
Session["UserInfo"] = currentUser;
Session["Style"] = currentUser.Style;
if (Session["returnPage"] != null)
{
string returnpage = Session["returnPage"].ToString();
Session["returnPage"] = null;
Response.Redirect(returnpage);
}
else
{
Response.Redirect("main.htm"); //进入系统的主界面
}
}
}
}
4.2.2 学生注册
学生注册功能实现流程图见图6
图6 学生注册流程
班主任身份登陆系统,点击进入自己所管辖的班级学生名单,根据年级或者班级进行注册,可以单独或者一个班级批量提交学生注册名单,然后查看每一个班级注册和未注册的学生名单。最终生成注册名单交教务处,教务处备案。
4.2.3 学籍异动
作为一个高校单位,学生的规模是很庞大的,当然就存在学生的调动情况。本功能实现了学生的休学、退学、转学和复学。查看学生异动的清单。用户选择教务处用户登陆,进入学生学籍异动界面,根据学生的学号和所在班级来处 理学生休学、退学、转学、复学等情况。学籍异动流程见上页图7
图7 学籍异动流程
图8 教务处用户登陆界面
图9 学生注册信息
教务处用户(zz)通过用户登陆进入学籍管理系统,可以进入学生学籍异动,见图11。此时学生注册页面的信息是不可的。
在学籍异动页面上,我们需要输入学籍异动的类型,即有休学、退学、转学和复学。输入学生的学号、学生所在的班级、学生异动的原因。对输入的学生学号、学生所在的班级、原因,我们对它做了检查。学号必须是10位。班级必须按照真确的格式进行录入。原因只能在给定的字符以内。如果以上其中任意一个检查出错,则提示出错,学籍异动不成功。
图10 学籍异动页面
如果录入数据格式正确,我们就会调用服务器上的方法,进行对数据库插入。数据如果插入正确,会提示操作成功的信息,如果出错,则报相应的错误信息给用户。
学籍异动的代码实现:
//学籍异动
public static string TransferStu(string StuID, string ClassID, string type, string Reason) //学籍异动函数;
{
string ShowMSG="";
string sql = string.Empty;
DataSet ds = new DataSet();
try
{
Database db = DatabaseFactory.CreateDatabase();
ds = db.ExecuteDataSet(CommandType.Text, string.Format(" select StuNO,ClassID from student where StuNo='{0}' and ClassID='{1}'", StuID, ClassID));
if (ds.Tables[0].Rows.Count > 0)
{
if (type == "1") //休学情况代码;
{
try
{
sql = "INSERT INTO [Xiuxue]([StuNo], [InOrOut], [Reason], [Classid],[time])VALUES('" + StuID.Trim() + "','0','" + Reason.Trim() + "','" + ClassID.Trim() + "',getdate())";
sql = sql + "UPDATE [Student] SET [State]= '休学' WHERE StuNo = '" + StuID.Trim() + "'"; //插入和修改数据库语句;
//Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery(CommandType.Text, sql); //处理那些修改数据但不返回行的 SQL 语句
ShowMSG = "学号为" + StuID + "的同学休学了";
}
catch (Exception ex)
{
ShowMSG = "学号为" + StuID + "的同学休学失败了";
throw ex;
}
}
if (type == "2") //复学情况代码;
{
try
{
sql = "INSERT INTO [Xiuxue]([StuNo], [InOrOut], [Reason], [Classid],[time])VALUES('" + StuID.Trim() + "','1','" + Reason.Trim() + "','" + ClassID.Trim() + "',getdate())";
sql = sql + "UPDATE [Student] SET [State]= '复学' WHERE StuNo = '" + StuID.Trim() + "'";
//Database db = DatabaseFactory.CreateDatabase();
db.ExecuteNonQuery(CommandType.Text, sql);
ShowMSG = "学号为" + StuID + "的同学复学了";
}
catch (Exception ex)
{
ShowMSG = "学号为" + StuID + "的同学复学失败了";
throw ex;
}
catch (Exception ex)
{
ShowMSG = "数据库连接异常";
throw ex;
}
}
return ShowMSG;
}
当学籍异动成功后,进入到查看所有学生异动清单的页面,查看异动信息,该页面就是从数据库读取数据,然后按照一定的页面格式,显示给用户。下边代码是学籍异动清单代码实现。
图11 学生学籍异动清单
/// ///学籍异动
public static DataSet MoveList()// 学籍异动清单函数;
{
string sql = string.Empty;
DataSet ds = new DataSet();
try
{ //查询学籍异信息;
Database db = DatabaseFactory.CreateDatabase();
sql = "Select A.*,B.Name from (select A.*,B.IDCardNo,B.Sex from ";
sql = sql + " (SELECT [StuNo], '退学' as state,[Reason], [Classid], [Time] as 'time' FROM [ExitSchool] UNION ";
sql = sql + " select [StuNo], state=Case InOrOut When 0 then '转出'When 1 then '转入'end,[Reason], [Classid], [Transfertime] as 'time' ";
sql = sql + " from TransferStu UNION ";
sql = sql + " Select StuNo,state=Case InOrOut When 0 then '休学'When 1 then '复学'end,Reason,Classid,time from xiuxue)A inner join ";
sql = sql + " (Select IDCardNo,stuno,Sex from Student)B on A.stuno = B.stuno)A inner join ";
sql = sql + " (Select ID,Name from Class)B on A.ClassID = B.ID ";
ds = db.ExecuteDataSet(CommandType.Text, string.Format(sql));
}
catch (Exception ex)
{
throw ex;
}
return ds;
}
4.2.4 学生花名册查看
根据用户自行选择需要关心的学生字段,查询出所有的班级,根据班级里查询出所有的学生相应的内容。
图12 功能实现说明
本功能实现,用了三个页面去处理相应的内容。首先进入学生花名册查看页面,在这里选择班级,然后选择显示配置,选中要显示的学生字段,保存字段,读取信息以及打印页面。
图13 学生花名册查看
学生花名册查看部分代码实现:
public class Test
{
/// <summary>
/// 根据表名获取该表内所有字段名
/// </summary>
/// <param name="TableName">需要获取字段的表名</param>
/// <returns></returns>
public static DataSet GetAllField(string TableName)
{
string sql = "select * from syscolumns where id=(select id from sysobjects where name='" + TableName + "')";
Database db = DatabaseFactory.CreateDatabase();
DataSet ds = null;
ds = db.ExecuteDataSet(CommandType.Text, sql);
return (ds);
}
/// <summary>
/// 根据班级id获取班上所有学生列表
/// </summary>
/// <param name="sql">需要执行的sql语句</param>
/// <returns></returns>
public static DataSet GetStuListByClassId(string sql)
{
Database db = DatabaseFactory.CreateDatabase();
return (db.ExecuteDataSet(CommandType.Text, sql));
}
/// <summary>
/// 根据教师id读取该教师所代班级信息
/// </summary>
/// <param name="TeacherId">教师id</param>
/// <returns></returns>
public static DataSet GetAllClassByTeacherId(string TeacherId)
{
string sql = "select * from Class where HeadTeacherID='" + TeacherId + "'";
Database db = DatabaseFactory.CreateDatabase();
return (db.ExecuteDataSet(CommandType.Text, sql));
}