ASP.NET教务平台—学籍管理模块开发与设计

news2024/11/19 14:50:19

摘  要

教务平台之学籍管理模块是一个典型的教务信息管理系统(MIS),其开发主要包括后台数据库的建立和前端应用程序的开发两个方面。对于后台数据库要求实现数据的完整性、一致性和安全性;对于前台应用程序开发则要求模块功能完备、界面友好、易使用等特点。

教务平台之学籍管理模块是根据高校教务管理的实际需求,采用微软的.NET Framework2.0作为开发平台,使用SQL Server 2005来设计数据库,以ASP.NET和C#作为前台的开发语言,来完成学生学籍的管理。该设计是基于B/S模式的信息管理系统,主要实现用户管理、学生注册、学籍异动,学生花名册查看和打印等主要功能。同时为了保证后台代码和数据的保护性、密封性,使用了一个中间层分离开前台页面和后台数据的交互操作,使该系统层次清晰,便于开发,维护。通过该系统的应用,可以满足高校教务学籍管理工作的高效化、无纸化和网络化的需求,提高高校教务的工作质量与效率。

关键词教务信息管理;B/SASP.NETNET 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服务器。IISInternet信息服务(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));

     }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1620756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进程状态和优先级(进程第2篇)【Linux复习篇】

目录 一、进程状态 1、进程有什么状态&#xff1f; 2、 Linux下的进程状态有什么&#xff1f; 二、进程优先级 1、进程优先级是什么&#xff1f; 2、为什么要有优先级 3、怎么改进程优先级&#xff1f;要改吗&#xff1f; 4、操作系统如何根据优先级开展调度的&#xff…

Spring MVC和Spring Boot

上节已经提到过请求&#xff0c;这次梳理响应。 响应 响应基本上都要被Controller所托管&#xff0c;告诉Spring帮我们管理这个代码&#xff0c;我们在后面需要访问时&#xff0c;才可以进行访问&#xff0c;否则将会报错。并且其是由RestController分离出来的&#xff0c;Re…

【MCU】栈溢出问题

项目场景&#xff1a; 硬件&#xff1a;STM32F407&#xff0c;操作系统&#xff1a;rt_thread master分支 问题描述 问题栈溢出 id 499 ide 00 rtr 00 len 8 9 Function[rt_completion_wait] shall not be used in ISR (0) assertion failed at function:rt_completion_wait,…

MATLAB实现蚁群算法栅格路径优化

蚁群算法是一种模拟自然界中蚂蚁觅食行为的优化算法&#xff0c;常用于解决路径规划问题。在栅格路径优化中&#xff0c;蚁群算法可以帮助找到从起点到终点的最优路径。以下是蚁群算法栅格路径优化的基本流程步骤&#xff1a; 初始化参数&#xff1a; (1)设置蚂蚁数量&#xff…

【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)

牛客对应链接&#xff1a;数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 排序 模拟。 注意&#xff1a;值连续&#xff0c;位置可以不连续&#xff01;小心处理数字相同的情况。 二、代码 //值得学习的代码 class Solution { public:int MLS(vecto…

【数据库】Redis

文章目录 [toc]Redis终端操作进入Redis终端Redis服务测试切换仓库 String命令存储字符串普通存储设置存储过期时间批量存储 查询字符串查询单条批量查询 Key命令查询key查询所有根据key首字母查询判断key是否存在查询指定的key对应的value的类型 删除键值对 Hash命令存储hash查…

前端补充17(JS)

一、JS组成成分 JS的组成成分&#xff0c;由三部分组成 第一、ECMAScript&#xff1a;语法规则&#xff0c;如何定义变量&#xff0c;数据类型有哪些&#xff0c;如何转换数据类型&#xff0c;if判断 if-else while for for-in forEach do-while switch 数组 函数 对…

HTML表单(详解网页表单如何实现)

目录 一、表单介绍 1.概念 二、表单用法 1.HTML表单 2.HTML 表单 - 输入元素 2.1.文本域&#xff08;Text Fields&#xff09; 2.2.密码字段 2.3.单选按钮&#xff08;Radio Buttons&#xff09; 2.4.复选框&#xff08;Checkboxes&#xff09; 2.5.提交按钮(Submit)…

SAP 变更记录表查询使用逻辑简介

通常用户在遇到问题后&#xff0c;经常会问某个单据的变更记录&#xff0c;很多模块中在前台的操作界面中都根据对应的菜单栏中可以找到对应的变更记录&#xff0c;像销售订单、交货单、采购申请、采购订单都在菜单栏位中都可以查询到对应的修改记录&#xff0c;但是对于想批量…

“豪门”子刊!中科院2区SCI,收稿范围广,发文量超20000!无预警记录,极速录用见刊!

&#xff08;一&#xff09;期刊简介概况 【期刊类型】网络数据类SCIE 【出版社】SPRINGER出版社 【期刊概况】IF&#xff1a;4.0-5.0&#xff0c;JCR2区&#xff0c;中科院2区 【版面类型】正刊&#xff0c;仅10篇版面 【预警情况】2020-2024年无预警记录 【收录年份】2…

【项目】基于JDBC+MySQL的Java教务管理系统(附源码+论文说明)

摘要 随着信息技术的不断发展&#xff0c;教育管理也在向数字化、智能化方向迈进。Java作为一种广泛应用于企业级应用开发的编程语言&#xff0c;与数据库技术的结合更是为教务管理系统的开发提供了强大的支持。 本文将介绍基于JDBC&#xff08;Java Database Connectivity&a…

跨越未知,拥抱挑战——新征程

在浩瀚的IT领域里&#xff0c;每一位开发工程师都如同一位探险家&#xff0c;不断地探索、挑战和成长。作为一名新入职的Java开发工程师&#xff0c;我面临着全新的技术栈和业务领域&#xff0c;这是一次跨越未知的征程&#xff0c;也是一次自我提升的机会。 新入职 初入公司…

mac系统镜像源管理之nrm的安装与使用

之前有介绍过&#xff1a;pnpm安装和使用&#xff0c;nvm安装及使用&#xff0c;在前端开发中其实还有一个工具也会偶尔用到&#xff0c;那就是nrm&#xff0c;本文就详解介绍一下这个工具&#xff0c;非常的简单且好用&#xff5e; 文章目录 1、什么是nrm&#xff1f;2、安装3…

为什么说这些倒腾AI的方式会把自己“搞死”

在AI技术的浪潮下&#xff0c;许多基于大模型的产品涌现而出&#xff0c;但并非所有创新都能带来成功&#xff0c;有时大模型的出现还会放大AI创业公司的内部矛盾。这个时候&#xff0c;我们需要搭建与AI相配的底层思考框架。 为什么说这些倒腾AI的方式会把自己“搞死”© …

go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

实现日志收集服务的客户端 前言 从这篇文章开始我们就正式进入了日志收集系统的编写&#xff0c;后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧&#xff01; 需要实现的功能 我们要收集指定目录下的日志文件&#xff0c;将它们发…

Flink CDC详解

文章目录 Flink CDC一 CDC简介1.1 CDC定义1.2 CDC应用场景1.3 CDC实现机制1.4 开源CDC工具对比 二 Flink CDC简介2.1 Flink CDC介绍2.2 Flink CDC Connector(连接器)2.3 Flink CDC && Flink版本2.4 Flink CDC特点 三 Flink CDC发展3.1 发展历程3.2 背景Dynamic Table &…

Ubuntu镜像下载与安装2024.4版本(超适合新手)

前言&#xff1a; 在VMware中安装Ubuntu镜像&#xff0c;首先需要去下载镜像&#xff0c;但是由于服务器在国外&#xff0c;下载速度相对较慢&#xff0c;国内也有镜像&#xff0c;较推荐在国内镜像站下载&#xff0c;例如阿里镜像和清华镜像。 官网&#xff1a;Ubuntu系统下…

LLM 为什么需要 tokenizer?

文章目录 1. LLM 预训练目的1.1 什么是语言模型 2. Tokenizer一般处理流程&#xff08;了解&#xff09;3. 进行 Tokenizer 的原因3.1 one-hot 的问题3.2 词嵌入 1. LLM 预训练目的 我们必须知道一个预训练目的&#xff1a;LLM 的预训练是为了建立语言模型。 1.1 什么是语言模…

月入8k,21岁计算机专业男孩转行网优,天赋可以让人发光,努力也能!

今天的主人公是一位仅21岁的年轻小帅哥&#xff0c;大学学的是计算机专业&#xff0c;毕业后的工作是卖苦力&#xff0c;工作一段时间后毅然决然的选择了转行后台网优&#xff0c;让我们一起来看看这位21岁男孩转行背后的故事... 卖苦力&#xff0c;是没有前途的 今天的主人公…

(一)JVM实战——jvm的组成部分详解

前言 本节内容是关于java虚拟机JVM组成部分的介绍&#xff0c;通过其组成架构图了解JVM的主要组成部分。 正文 ClassFile&#xff1a;字节码文件 - javac&#xff1a;javac前端编译器将源代码编译成符合jvm规范的.class文件&#xff0c;即字节码文件 - class文件的结构组成&a…